Как подключить механизм «Статусы проверки документов» к произвольному документу в 1С:ERP

от автора

Как подключить механизм «Статусы проверки документов» к документу «Пересчёт товаров», не затрагивая другие объекты и, по возможности, не снимая объекты с поддержки.

Статья написана на примере конфигурации ERP УХ 3.2.11.5. Логика шагов применима к другим документам и близким версиям конфигурации.

В 1С:ERP УХ реализован стандартный механизм проверки документов — небольшая кнопка-«галочка» на форме, позволяющая фиксировать статус проверки документа. 
По умолчанию этот механизм подключён только к отдельным документам конфигурации, например к «Оприходованию излишков товаров».

Задача: подключить тот же механизм к документу «Пересчёт товаров», не затрагивая другие объекты и, по возможности, не снимая объекты с поддержки.

Статья написана на примере конфигурации ERP УХ 3.2.11.5. Логика шагов применима к другим документам и близким версиям конфигурации.

Как выглядит результат

После подключения механизма на форме документа «Пересчёт товаров» должна появиться кнопка установки статуса проверки – аналогично тому, как это реализовано в «Оприходовании излишков товаров».

Рис. 1 – форма документа с кнопкой статуса проверки

Рис. 1 – форма документа с кнопкой статуса проверки

Реализация:

Шаг 1. Добавить документ в регистр «СтатусыПроверкиДокументов»

Механизм хранит данные о статусах в одноимённом регистре сведений. Первое, что нужно сделать – расширить список документов, с которыми этот регистр умеет работать.

Вариант А – снять объект с поддержки и добавить напрямую в конфигурации:

Открываем регистр «СтатусыПроверкиДокументов», снимаем с поддержки и добавляем «Пересчёт товаров» в состав документов регистра.

Рис. 2 – список документов регистра до добавления

Рис. 2 – список документов регистра до добавления
Рис. 3 – список документов регистра после добавления

Рис. 3 – список документов регистра после добавления

Вариант Б – через расширение (рекомендуется):

Если важно сохранить объект на поддержке, тот же результат достигается через расширение конфигурации. Добавляем регистр в расширение и вносим изменения там.

Рис. 3.1 – обработчик ПриЧтенииНаСервере в расширении

Рис. 3.1 – обработчик ПриЧтенииНаСервере в расширении

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

Дополнительная проверка: убедитесь, что новый документ не попал в процедуру «ИсключаемыеТипыДляПроверки» общего модуля «ПроверкаДокументовСервер». Если там есть явное исключение – уберите его.

Шаг 2. Добавить обработчики на форму документа

Кнопка для существующих документов не появляется, потому что форма не вызывает нужные процедуры механизма проверки при открытии. Нужно добавить два обработчика:

ПриЧтенииНаСервере

В расширении добавляем обработчики на форму документа. При чтении на сервере добавляем «СобытияФорм.ПриЧтенииНаСервере» которая в свою очередь вызывает внутри нужную нам «ПроверкаДокументовСервер.ПриЧтенииФормыНаСервере». 

Рис.4 – обработчик ПриЧтенииНаСервере в расширении

Рис.4 – обработчик ПриЧтенииНаСервере в расширении

ПриСозданииНаСервере

Так же проверяем наличие вызова процедуры «СобытияФорм.ПриСозданииНаСервере» на нашей форме, но для данного документа вызов этой процедуры уже предусмотрен.

Почему это работает именно так:
При отладке видно, что кнопка появляется именно в процедуре «ПроверкаДокументовСервер.ПриСозданииФормыНаСервере», а процедура «ПроверкаДокументовСервер.ПриЧтенииФормыНаСервере» по сути пропускается.

Но она отрабатывает в момент перечитывания данных документа. Т.к. там проверка завязана на реквизиты формы, которые создаются программно именно в момент добавления кнопок механизма. 

Кроме того, в процедуре общего модуля «ПроверкаДокументовСервер.НаФормуДокументаДобавляетсяКомандаПроверки» есть проверка для существующего документа на наличие записей по регистру с статусами документа.

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

Шаг 3. Проверить обработку оповещений на форме

Нажатие кнопки изменения статуса работает через механизм оповещений.

Необходимо убедиться, что на форме есть вызов – «СобытияФормКлиент.ОбработкаОповещения» на форме документа и убедиться отладкой, что при нажатии кнопки изменения статуса документа мы попадаем в процедуру «ПроверкаДокументовКлиент. ОбработкаОповещения». 

Рис. 5 – обработчик ОбработкаОповещения на форме

Рис. 5 – обработчик ОбработкаОповещения на форме

Важно: если в отладке вы видите, что вызывается процедура «ПроверкаДокументовКлиент. ОбработкаОповещения», но при этом нажатие кнопки изменения статуса не отрабатывает должным образом — так же сравните Уникальный идентификатор формы, которая попадает в обработчик оповещения этого модуля. 

У меня было так, что обработчик вызывался из формы другого документа. А в моем документе на самом деле не было вызова данный процедуры.

Шаг 4. Доработка подписок документа

  • ПроверкаДокументовПередЗаписьюДокумента

  • ПроверкаДокументовОбработкаУдаленияПроведенияДокумента

  • ПроверкаДокументовОбработкаПроведенияДокумента

Все три подписки перечислены в общем модуле ПроверкаДокументовСервер и завязаны на определяемый тип ПроверяемыйДокументРеглУчета. Нужно добавить «Пересчёт товаров» в этот тип.

Вариант А — снять с поддержки и добавить напрямую:

Рис. 6 – определяемый тип до изменений

Рис. 6 – определяемый тип до изменений
Рис. 7 – определяемый тип с добавленным документом

Рис. 7 – определяемый тип с добавленным документом

Вариант Б – через расширение:

Рис. 7-1 – добавление через расширение

Рис. 7-1 – добавление через расширение

Итог и важный нюанс

После всех четырёх шагов механизм подключён и работает корректно.

Ожидаемое поведение, которое не является ошибкой: если документ записан, но не проведён – кнопка на форме не появляется – это типовое поведение, так и должно быть. 

Краткая шпаргалка по шагам

Шаг

Что делаем

Где

1

Добавляем документ в состав регистра СтатусыПроверкиДокументов 

Конфигуратор или расширение

2

Добавляем обработчики «ПриЧтенииНаСервере» «ПриСозданииНаСервере» на форму

На форме в расширении 

3

Проверяем вызов ОбработкаОповещения на форме

На форме в расширении

4

Расширяем определяемый тип ПроверяемыйДокументРеглУчета

Конфигуратор или расширение

Богдан К.

Разработчик 1С в ООО КРОН

ссылка на оригинал статьи https://habr.com/ru/articles/1067028/