Документ движения регистратор в 1с как выбрать

Обновлено: 01.07.2024

На примере конфигурации ERP (для прочих конфигураций решение будет аналогичным).

В статье показано, что без изменения программного кода не удастся сохранять прежние движения документов по регистрам, даже установив соответствующие свойства документов.

Постановка задачи:

· При перепроведении документа нам необходимо анализировать предыдущие записи этого же документа. Например, мы хотим проверять, были ли изменены значения ключевых реквизитов документа.

Как решаем задачу:

1. Необходимо добавить регистр сведений «КлючевыеРеквизитыЗаполненияДокументов»



1.1. В качестве регистратора указываем один из типовых документов – «ЗаказПоставщику».



2. В настройках документа:

2.1. режим удаления движений установлен как «Не удалять автоматически».



2.2. Свойство «Запись движений при проведении» документа установлено в «Записывать выбранные».



3. Создаем подписку для события «Обработка проведения» документа.





2. Решение проблемы – внесение правок в исходный программный код.

При проведении документа он формирует движения документов по регистру, как и было задумано.



Но при его перепроведении обработчик подписки выдает ПУСТОЙ результат запроса по нашему регистру сведений.



Вопрос: почему так происходит? Ведь в документе для движений указано «Не удалять автоматически» и «Записывать выбранные», а для нашего регистра мы еще не устанавливали признак «Записывать» в подписке.

Ответ нужно искать в типовых процедурах обработки проведения.

В процедуре ОбработкаПроведения() модуля документа «Заказ Поставщику» предыдущие записи нашего регистра сохраняются вплоть до выполнения процедуры «ПроведениеСерверУТ.ЗаписатьНаборыЗаписей(ЭтотОбъект);», внутри которой есть строка «Объект.Движения.Записать();», где они собственно и очищаются.



Т.е. в каком-то месте обработки проведения нашему регистру помимо нашей воли устанавливается признак «Записывать». В отладчике находим это место: «ПроведениеСерверУТ.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);».



Внутри процедуры «ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект)» находим место, где устанавливается этот признак и видим: для того чтобы наш регистр не помечался к записи, его необходимо поместить в массив «ИсключаемыеРегистры».



После добавления нашего регистра в массив, его набор записей не очищается, и его можно использовать в работе. Задача решена.



Итак, если вам не нужно очищать движения документов по регистру при проведении документа, то недостаточно просто для этого документа установить свойство «Удаление движений» = «Не удалять автоматически». Вам также потребуется в исходном программном коде добавить регистр в массив «ИсключаемыеРегистры» типовой процедуры «процедуры «ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект)».

Напомню, что пример рассматривался для конфигурации ERP. Для других конфигураций аналогичные места для внесения правок в типовые модули можно найти отладчиком.

Читайте также: