Вход | Регистрация
 

Отмена проведения и удаление документа

Отмена проведения и удаление документа
Я
   UDav5
 
03.08.20 - 13:38
Подскажите пожалуйста хочу удалить программно документ у которого необходимо предварительно отменить проведение
Делаю так.

Док = Выборка.ПолучитьОбъект();
Док.Записать(РежимЗаписиДокумента.ОтменаПроведения);

Дальше пытаюсь удалить документ
Док.Удалить();

Выскакивает сообщение об ошибке :
Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных (возможно, запись была изменена или удалена)!
   Mankubus
 
1 - 03.08.20 - 13:40
Док = Выборка.ПолучитьОбъект();
Док.Записать(РежимЗаписиДокумента.ОтменаПроведения);

Док = Выборка.ПолучитьОбъект();
Док.Удалить();
   spiller26
 
2 - 03.08.20 - 13:42
(0) Вы его получается получили-изменили состояние, а второй раз пытаетесь удалить, но он помнит состояния до изменения, т.е. переполучить нужно.
   John83
 
3 - 03.08.20 - 13:44
(1) (2) а я неоднократно делал, как (0) и проблем таких не было
   UDav5
 
4 - 03.08.20 - 13:53
Сделал только что вариант (1) . Почему то получилось только с если я запомнил в переменную номер потом его нашел по номеру и удалил. Либо второй вариант

Док.Ссылка.ПолучитьОбъект().Удалить();    Только вот не совсем понял почему получилось только с ссылкой ???? Не судите строго. Только начал осваивать 1С.
   Kigo_Kigo
 
5 - 03.08.20 - 13:59
Ну вообще то, для того чтобы удалить док, его не обязательно сначала распроводить, можно сразу удалять
   UDav5
 
6 - 03.08.20 - 14:09
Kigo_Kigo. Спасибо за ответ. Так тоже делал. Но в ДЗ к обучалке было задание, с начало снять с проведения чтобы ушло движение в регистре сведений, а потом удалить. Вот и пошел по длинному пути. Наткнулся на грабли из-за незнания вопроса в полном объеме.
   RomanYS
 
7 - 03.08.20 - 14:11
(5) Только не в режиме ОбменДанными.Загрузка = Истина. В этом режиме останутся битые ссылки: в подчиненных РС и движения останутся. Про остальные ссылки при удалении без проверки вообще не говорю
   Ns33
 
8 - 03.08.20 - 14:21
Код из (0) должен нормально работать. Тут где-то ещё в процессе проведения с этим доком делается ПолучитьОбъект() и Записать().
   RomanYS
 
9 - 03.08.20 - 14:26
(8) +1
Может отложенная запись какая регламентным заданием.
   UDav5
 
10 - 03.08.20 - 14:32
(8) и (9) Конфигурация полностью самописаная. Провожу я этот документ в ручную , а потом запускаю обработку которая проходит по документам в цикле и проверяет, если документ проведенный то снимает проведение и удаляет. Ни каких заданий нет.
   RomanYS
 
11 - 03.08.20 - 14:34
(10) весь код покажи
   UDav5
 
12 - 03.08.20 - 14:36
&НаСервереБезКонтекста
Процедура УдалитьНаСервере()
    СозданиеВалютыДаНет = ПолучитьЗначениеКонстанты();
    Если СозданиеВалютыДаНет = Истина Тогда
        Выборка = Документы.УстановкаКурсаВалют.Выбрать();
        Пока Выборка.Следующий() Цикл
            ФлагУдаленияДокумента = Ложь;
            Для каждого ТекСтрока Из Выборка.Курсы Цикл
                Если ТекСтрока.Валюта.Предопределенный = Ложь Тогда
                        ФлагУдаленияДокумента = Истина;
                        Прервать;
                КонецЕсли;
            КонецЦикла;
                Если ФлагУдаленияДокумента = Истина Тогда
                    Если Выборка.Проведен = Истина Тогда
                        Док = Выборка.ПолучитьОбъект();
                        Док.Записать(РежимЗаписиДокумента.ОтменаПроведения);
                        Док.Удалить();
                        //Док.Ссылка.ПолучитьОбъект().Удалить();

                        
                        //НомерДокумента = Док.Номер;

                        //ДокУдаления = Документы.УстановкаКурсаВалют.НайтиПоНомеру(НомерДокумента);

                        //ДокУдаления.ПолучитьОбъект().Удалить();

                        //Выборка.ПолучитьОбъект().Удалить();

                    Иначе
                        Выборка.ПолучитьОбъект().Удалить();
                    КонецЕсли;
                        
                КонецЕсли;
            КонецЦикла;
            СпрВал = Справочники.Валюты.Выбрать();
        Пока СпрВал.Следующий() Цикл
            Если СпрВал.Предопределенный = Ложь Тогда
                СпрВал.ПолучитьОбъект().Удалить();    
            КонецЕсли;
            
        КонецЦикла;
        
        
            
КонецЕсли;
    
    
КонецПроцедуры
   Ns33
 
13 - 03.08.20 - 14:55
Поставь точку останова в ПередЗаписью() документа, и посмотри сколько раз она зайдет туда. Должно 2 раза - один раз твой, второй - тот что вызывает изменение извне.
   UDav5
 
14 - 03.08.20 - 15:46
Спасибо большое всем !!! Разобрался !!! (13) В процедуру ПередЗаписью()  заходит один раз.
   RomanYS
 
15 - 03.08.20 - 16:37
(14) Ну расскажи. Отмена проведения перезаписывала документ?

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.