В процессе работы с программами на базе 1С:Предприятие 8.3, такими как ERP, Управление торговлей или Комплексная автоматизация, пользователи часто сталкиваются с необходимостью визуального контроля бизнес-процессов. Типичный пример — необходимость выделить цветом те документы, которые уже были распечатаны и переданы в работу (например, наряды на производство или заказы на склад). Это позволяет мастеру или диспетчеру мгновенно видеть в списке «новые» поступления, требующие внимания.
Разберем подробно, почему этой функции нет в стандартных настройках и какими способами можно реализовать данную задачу.
Прежде чем переходить к реализации, проанализируем техническую сторону вопроса. В типовых конфигурациях 1С признак факта печати отсутствует по нескольким причинам:
Однако, для удобства пользователей задачу можно решить, отслеживая факт отправки на печать. Рассмотрим три основных способа реализации.
Это самый надежный и «чистый» с точки зрения архитектуры способ. Мы создадим отдельное место для хранения признака печати, чтобы не изменять сами документы и не перегружать их данными.
Шаг 1. Создание объекта метаданных
В конфигураторе создадим новый Регистр сведений СостояниеПечатиОбъектов:
Объект (Тип: ЛюбаяСсылка).ДатаПечати (Тип: Дата), Распечатан (Тип: Булево).Шаг 2. Программный перехват печати
В современных конфигурациях печать реализована через БСП (Библиотеку стандартных подсистем). Нам необходимо найти место, где формируется команда печати. Обычно это модуль менеджера документа или общий модуль УправлениеПечатью. Проанализируем ситуацию: нам нужно сделать запись в регистр в тот момент, когда пользователь нажал кнопку печати.
Пример кода для записи в регистр:
Процедура ЗафиксироватьПечать(СсылкаНаДокумент) Экспорт
МенеджерЗаписи = РегистрыСведений.СостояниеПечатиОбъектов.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Объект = СсылкаНаДокумент;
МенеджерЗаписи.Распечатан = Истина;
МенеджерЗаписи.ДатаПечати = ТекущаяДата();
МенеджерЗаписи.Записать();
КонецПроцедуры
Шаг 3. Изменение динамического списка
Чтобы условное оформление увидело наш признак, его нужно добавить в запрос динамического списка формы (например, формы списка Этапов производства):
Список.ЛЕВОЕ СОЕДИНЕНИЕ основной таблицы документов с нашим регистром СостояниеПечатиОбъектов по полю Ссылка = Объект.Распечатан в список доступных полей запроса.Шаг 4. Настройка условного оформления
Теперь, когда поле Распечатан доступно в списке, выполним стандартную настройку в режиме «1С:Предприятие»:
Распечатан Равно Истина.Если вы не хотите создавать новые объекты в конфигураторе, можно воспользоваться механизмом дополнительных реквизитов, который есть в ERP и УТ 11.
Порядок действий:
Плюс этого метода в том, что поле автоматически появится в списке доступных для выбора в настройках Условного оформления без правки SQL-запроса динамического списка. Вы просто выбираете «Ссылка.ДополнительныйРеквизит.Распечатан» в качестве условия.
Важное замечание: Этот метод при каждой печати будет создавать новую версию документа в истории версионирования, что может быстро «раздуть» базу данных.
Рассмотрим ситуацию с точки зрения методологии 1С:ERP. Если мастер должен видеть, какие задачи выданы в работу, правильнее использовать штатное поле Статус.
Проанализируем процесс: когда наряд готов к выдаче, он переводится в статус «К выполнению». В этот момент он печатается. Можно настроить систему так, чтобы при проведении в определенном статусе документ автоматически раскрашивался. Это избавляет от необходимости «костыльного» отслеживания именно факта нажатия кнопки печати.
Настройка условного оформления по статусу:
Статус Равно К выполнению.Чтобы не снимать конфигурацию с поддержки, все программные изменения (запись в регистр или изменение реквизита) следует делать в расширении. Рекомендуется использовать механизм &После для процедур печати в модулях менеджеров объектов.
Например, в модуле менеджера может быть процедура Печать(...). Мы можем перехватить список печатаемых объектов:
&После("Печать")
Процедура Расш1_Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода)
Для Каждого Ссылка Из МассивОбъектов Цикл
// Здесь вызываем нашу процедуру записи в регистр
ЗафиксироватьПечать(Ссылка);
КонецЦикла;
КонецПроцедуры
Мы выяснили, что прямой настройки «из коробки» для выделения распечатанных строк не существует, так как понятие «распечатан» субъективно для информационной системы. Однако, используя Регистр сведений и Динамический список, можно создать надежный механизм визуализации. Это значительно повышает удобство работы диспетчера производства или начальника склада, позволяя им моментально отделять новые задачи от тех, что уже ушли в работу.
Выбирайте способ с регистром сведений, если вам нужна высокая производительность, или способ со статусами, если вы хотите придерживаться типовой методологии 1С.