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

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

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

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

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

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