Цитата(igmig65 @ 08.09.11, 23:54) необходимо зарегистрироваться для просмотра ссылки
Судя из описанного, что понял: У вас в кнопке провести записано: #Записать Провести? Закрыть. Значит первой у вас вызывается процедура ПриЗаписи(), потом ОбработкаПроведения(). Получается вы при записи Авансового отчета прописываете ссылку на него в Доверенность, выбранную в этом Авансовом. И по том если сам авансовый непроводится, то в доверенности всеравно остается ссылка на него, хоть он и непровелся, так как вы уже записали АО.
Вот тут ошибка, вдруг вы в этом АО замените ссылку на другую доверенность, соответственно ПриЗаписи(), вы запишите уже в другую доверенность ссылку на этот АО. А в старой доверенности останется ссылка на это же АО, хотя он уже к ней никак непривязан.
Выход, нужно использовать ОбработкуПроведения() и ОбработкуУдаленияПроведения() для удаления ссылок на АО.
Если документ в 1С не проведен, и есть ошибки, которые не дают документу провестись, то документ хотя-бы сохраняется.
Если-же документ был проведен, и мы что-то в нем изменили, и возникли ошибки, из-за которых документ не проводится, то документ не сохраняется. Но процедура ПриЗаписи() отрабатывается. Наверное, стоит поменять местами вызовы #Записать Провести? в кнопке ОК.
Попробовал. Вывод: если ранее проведенный документ не перепровелся, то он и не сохраняется. В принципе это логично.
В моем случае не нужно привязываться к проведению. Мне важен сам факт, что документ был сохранен. И в случае успешного сохранения - выполнить свои действия.
Процедура ПриЗаписи(), получается, не подходит. Если-бы было что-то типа ПослеЗаписи(), или ПослеСохранения().
Т.е мне нужно отслеживать результат события не ДО его возникновения ( ПриЗаписи() ), а после его отработки. Как-бы это смоделировать в рамках 1с?
Эврика! Нашел! Значит делаем так:
В процедуре ПриОткрытии() комментируем вызов ПриЗаписиПерепроводить(1);
В процедуре ПриЗаписи() добавляем строки:
Процедура ПриЗаписи()
Автор = Пользователь;
глПроверкаДатыДок(Контекст,"Запись");
//! Ручное перепроведение
Если Проведен() = 1 Тогда
Если Провести() = 0 Тогда
СтатусВозврата(0);
Возврат;
КонецЕсли;
КонецЕсли;
//! Обновление реквизита Документы связанных Доверенностей
УчестьИзмененияДоверенности(Доверенность, 0);
Если СтатусВозврата() = 0 Тогда
Возврат;
КонецЕсли;
Если ПрежняяДоверенность <> Доверенность Тогда
УчестьИзмененияДоверенности(ПрежняяДоверенность, 1);
КонецЕсли;
Если СтатусВозврата() = 0 Тогда
Возврат;
КонецЕсли;
ПрежняяДоверенность = Доверенность;
//! Конец вставки
КонецПроцедуры