При разработке в типовых конфигурациях, таких как 1С:Бухгалтерия предприятия 2.0 (БП 2.0), программисты часто сталкиваются с тем, что простого создания объекта «Документ» в дереве метаданных недостаточно. Система имеет жесткую архитектуру и множество взаимосвязей, реализованных через общие модули и подписки на события. Одной из самых распространенных проблем является ошибка Поле объекта не обнаружено (ДатаДокументаСдвинутаВперед) при попытке проведения документа. В этой статье мы подробно разберем, как устранить эту ошибку и полностью интегрировать новый документ в типовой функционал.
Рассмотрим ситуацию: вы создали новый документ, настроили его движения по регистрам и прописали логику в процедуре ОбработкаПроведения. Однако при попытке проведения программа выдает ошибку, ссылаясь на ОбщийМодуль.ОбщегоНазначения. Проанализируем фрагмент кода, на котором происходит остановка:
УдалитьДвиженияРегистратора(ЭтотОбъект, Отказ, Ложь, ВыборочноОчищатьРегистры И НЕ ЭтотОбъект.ДополнительныеСвойства.ДатаДокументаСдвинутаВперед);
Проблема заключается в том, что в объекте ДополнительныеСвойства (который является структурой) отсутствует ключ с именем ДатаДокументаСдвинутаВперед. В типовой конфигурации БП 2.0 этот параметр используется для оптимизации очистки движений: если дата документа не сдвинута вперед, система может применять более быстрые алгоритмы удаления записей из регистров.
Для того чтобы система автоматически инициализировала необходимые свойства документа, мы должны включить наш новый документ в состав определенных подписок на события. Разберем по шагам, как это сделать:
ПередЗаписьюДокументаДляУдаленияДвижений.Что это дает? При записи документа будет вызываться обработчик этой подписки, который сравнивает текущую дату документа с датой, сохраненной в базе данных. По результатам сравнения в структуру ДополнительныеСвойства документа будет программно добавлен ключ ДатаДокументаСдвинутаВперед со значением Истина или Ложь. Это полностью снимет проблему ошибки в общем модуле.
Для корректной работы типовой функции РучнаяКорректировкаОбработкаПроведения, которую вы вызываете в начале модуля проведения, в документе крайне желательно наличие реквизита РучнаяКорректировка с типом Булево.
Выясним причину: если этот реквизит установлен в Истина, типовой механизм блокирует автоматическую очистку и перезапись движений. Это позволяет бухгалтеру вручную отредактировать проводки, и система не «затрет» их при повторном перепроведении документа. Рассмотрим, как это выглядит в коде модуля документа:
Процедура ОбработкаПроведения(Отказ, Режим)
// Вызов типового механизма проверки ручной корректировки
Если ОбщегоНазначения.РучнаяКорректировкаОбработкаПроведения(РучнаяКорректировка, Отказ, Заголовок, ЭтотОбъект) Тогда
Возврат;
КонецЕсли;
// Далее идет ваш алгоритм формирования движений...
КонецПроцедуры
После того как документ начал проводиться без ошибок, вы можете заметить, что в форме документа или в списке отсутствует кнопка «Дт/Кт», либо при ее нажатии ничего не происходит. В БП 2.0 за просмотр и ручную корректировку движений отвечает общая обработка КорректировкаДвижений.
Чтобы «подружить» ваш документ с этой обработкой, выполним следующие действия:
ДокументОбъект.Кроме того, проанализируем командный интерфейс. Чтобы кнопка появилась на панели, нужно убедиться, что документ включен в состав типов общей команды ПоказатьДвиженияДокумента (если она используется в вашей версии конфигурации). Также проверьте права доступа: у пользователя должны быть права на чтение тех регистров, по которым ваш документ делает движения, иначе форма проводок откроется пустой.
Чтобы ваш документ вел себя как «родной» для конфигурации 1С:Бухгалтерия 2.0, рекомендуем выполнить еще несколько важных настроек:
СвязанныеДокументы. Это позволит документу отображаться в дереве структуры подчиненности.ПартионныйУчет). Без этого документ не будет учитываться при восстановлении последовательности и групповом перепроведении.Таким образом, мы видим, что добавление документа в типовую конфигурацию — это комплексная задача. Использование подписок на события позволяет сохранить типовой код общих модулей в неприкосновенности (не снимая их с поддержки), что значительно облегчит дальнейшее обновление программы.