Документ движения регистратор в 1с как выбрать
На примере конфигурации ERP (для прочих конфигураций решение будет аналогичным).
В статье показано, что без изменения программного кода не удастся сохранять прежние движения документов по регистрам, даже установив соответствующие свойства документов.
Постановка задачи:
· При перепроведении документа нам необходимо анализировать предыдущие записи этого же документа. Например, мы хотим проверять, были ли изменены значения ключевых реквизитов документа.
Как решаем задачу:
1. Необходимо добавить регистр сведений «КлючевыеРеквизитыЗаполненияДокументов»
1.1. В качестве регистратора указываем один из типовых документов – «ЗаказПоставщику».
2. В настройках документа:
2.1. режим удаления движений установлен как «Не удалять автоматически».
2.2. Свойство «Запись движений при проведении» документа установлено в «Записывать выбранные».
3. Создаем подписку для события «Обработка проведения» документа.
2. Решение проблемы – внесение правок в исходный программный код.
При проведении документа он формирует движения документов по регистру, как и было задумано.
Но при его перепроведении обработчик подписки выдает ПУСТОЙ результат запроса по нашему регистру сведений.
Вопрос: почему так происходит? Ведь в документе для движений указано «Не удалять автоматически» и «Записывать выбранные», а для нашего регистра мы еще не устанавливали признак «Записывать» в подписке.
Ответ нужно искать в типовых процедурах обработки проведения.
В процедуре ОбработкаПроведения() модуля документа «Заказ Поставщику» предыдущие записи нашего регистра сохраняются вплоть до выполнения процедуры «ПроведениеСерверУТ.ЗаписатьНаборыЗаписей(ЭтотОбъект);», внутри которой есть строка «Объект.Движения.Записать();», где они собственно и очищаются.
Т.е. в каком-то месте обработки проведения нашему регистру помимо нашей воли устанавливается признак «Записывать». В отладчике находим это место: «ПроведениеСерверУТ.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);».
Внутри процедуры «ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект)» находим место, где устанавливается этот признак и видим: для того чтобы наш регистр не помечался к записи, его необходимо поместить в массив «ИсключаемыеРегистры».
После добавления нашего регистра в массив, его набор записей не очищается, и его можно использовать в работе. Задача решена.
Итак, если вам не нужно очищать движения документов по регистру при проведении документа, то недостаточно просто для этого документа установить свойство «Удаление движений» = «Не удалять автоматически». Вам также потребуется в исходном программном коде добавить регистр в массив «ИсключаемыеРегистры» типовой процедуры «процедуры «ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект)».
Напомню, что пример рассматривался для конфигурации ERP. Для других конфигураций аналогичные места для внесения правок в типовые модули можно найти отладчиком.
Читайте также: