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

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

Отмена проведения и удаление документа
Я
   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 или кнопку "Обновить" в браузере.