Как реализовать выделение строк цветом после печати документа в 1С

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет Промышленность, строительство и АПК
← На главную

В процессе работы с программами на базе 1С:Предприятие 8.3, такими как ERP, Управление торговлей или Комплексная автоматизация, пользователи часто сталкиваются с необходимостью визуального контроля бизнес-процессов. Типичный пример — необходимость выделить цветом те документы, которые уже были распечатаны и переданы в работу (например, наряды на производство или заказы на склад). Это позволяет мастеру или диспетчеру мгновенно видеть в списке «новые» поступления, требующие внимания.

Разберем подробно, почему этой функции нет в стандартных настройках и какими способами можно реализовать данную задачу.

Почему в 1С нет стандартного условия «Документ распечатан»?

Прежде чем переходить к реализации, проанализируем техническую сторону вопроса. В типовых конфигурациях 1С признак факта печати отсутствует по нескольким причинам:

  1. Отсутствие обратной связи от принтера: Система 1С может отследить момент нажатия кнопки «Печать» или формирование табличного документа, но она не знает, успешно ли принтер выдал бумагу. Если произошло замятие или закончился картридж, статус «Распечатан» в базе данных станет ложным.
  2. Множественность печатных форм: У одного документа (например, «Заказ клиента») может быть десяток печатных форм (Счет, ТОРГ-12, УПД, расходная накладная). Непонятно, печать какой именно формы должна изменять цвет строки в списке.
  3. Производительность: Постоянная запись признака печати в объект документа создает лишние блокировки и увеличивает объем данных (особенно при включенном версионировании).

Однако, для удобства пользователей задачу можно решить, отслеживая факт отправки на печать. Рассмотрим три основных способа реализации.

Способ 1: Использование вспомогательного регистра сведений (Рекомендуемый)

Это самый надежный и «чистый» с точки зрения архитектуры способ. Мы создадим отдельное место для хранения признака печати, чтобы не изменять сами документы и не перегружать их данными.

Шаг 1. Создание объекта метаданных

В конфигураторе создадим новый Регистр сведений СостояниеПечатиОбъектов:

Шаг 2. Программный перехват печати

В современных конфигурациях печать реализована через БСП (Библиотеку стандартных подсистем). Нам необходимо найти место, где формируется команда печати. Обычно это модуль менеджера документа или общий модуль УправлениеПечатью. Проанализируем ситуацию: нам нужно сделать запись в регистр в тот момент, когда пользователь нажал кнопку печати.

Пример кода для записи в регистр:


Процедура ЗафиксироватьПечать(СсылкаНаДокумент) Экспорт
    МенеджерЗаписи = РегистрыСведений.СостояниеПечатиОбъектов.СоздатьМенеджерЗаписи();
    МенеджерЗаписи.Объект = СсылкаНаДокумент;
    МенеджерЗаписи.Распечатан = Истина;
    МенеджерЗаписи.ДатаПечати = ТекущаяДата();
    МенеджерЗаписи.Записать();
КонецПроцедуры

Шаг 3. Изменение динамического списка

Чтобы условное оформление увидело наш признак, его нужно добавить в запрос динамического списка формы (например, формы списка Этапов производства):

  1. Откроем форму списка и выберем свойства динамического списка Список.
  2. Перейдем в настройку Произвольный запрос.
  3. Добавим ЛЕВОЕ СОЕДИНЕНИЕ основной таблицы документов с нашим регистром СостояниеПечатиОбъектов по полю Ссылка = Объект.
  4. Выберем поле Распечатан в список доступных полей запроса.

Шаг 4. Настройка условного оформления

Теперь, когда поле Распечатан доступно в списке, выполним стандартную настройку в режиме «1С:Предприятие»:

  1. Нажмем Ещё — Настроить список.
  2. Вкладка Условное оформление.
  3. Добавим новое правило: Цвет фона — светло-серый (или любой другой).
  4. Условие: Распечатан Равно Истина.

Способ 2: Использование Дополнительных реквизитов (Без изменения кода БД)

Если вы не хотите создавать новые объекты в конфигураторе, можно воспользоваться механизмом дополнительных реквизитов, который есть в ERP и УТ 11.

Порядок действий:

  1. В разделе Администрирование — Общие настройки создадим дополнительный реквизит для нужного типа документа (например, «Этап производства») с названием «Распечатан» (тип Булево).
  2. Программно (через расширение конфигурации) в модуле печати пропишем изменение этого доп. реквизита при выводе формы на экран.

Плюс этого метода в том, что поле автоматически появится в списке доступных для выбора в настройках Условного оформления без правки SQL-запроса динамического списка. Вы просто выбираете «Ссылка.ДополнительныйРеквизит.Распечатан» в качестве условия.

Важное замечание: Этот метод при каждой печати будет создавать новую версию документа в истории версионирования, что может быстро «раздуть» базу данных.

Способ 3: Изменение статуса документа (Бизнес-логика)

Рассмотрим ситуацию с точки зрения методологии 1С:ERP. Если мастер должен видеть, какие задачи выданы в работу, правильнее использовать штатное поле Статус.

Проанализируем процесс: когда наряд готов к выдаче, он переводится в статус «К выполнению». В этот момент он печатается. Можно настроить систему так, чтобы при проведении в определенном статусе документ автоматически раскрашивался. Это избавляет от необходимости «костыльного» отслеживания именно факта нажатия кнопки печати.

Настройка условного оформления по статусу:

  1. Зайдем в настройки списка.
  2. В условном оформлении выберем условие: Статус Равно К выполнению.
  3. Установим нужный цвет текста или фона.

Технические нюансы реализации через Расширения

Чтобы не снимать конфигурацию с поддержки, все программные изменения (запись в регистр или изменение реквизита) следует делать в расширении. Рекомендуется использовать механизм &После для процедур печати в модулях менеджеров объектов.

Например, в модуле менеджера может быть процедура Печать(...). Мы можем перехватить список печатаемых объектов:


&После("Печать")
Процедура Расш1_Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода)
    Для Каждого Ссылка Из МассивОбъектов Цикл
        // Здесь вызываем нашу процедуру записи в регистр
        ЗафиксироватьПечать(Ссылка);
    КонецЦикла;
КонецПроцедуры

Резюме

Мы выяснили, что прямой настройки «из коробки» для выделения распечатанных строк не существует, так как понятие «распечатан» субъективно для информационной системы. Однако, используя Регистр сведений и Динамический список, можно создать надежный механизм визуализации. Это значительно повышает удобство работы диспетчера производства или начальника склада, позволяя им моментально отделять новые задачи от тех, что уже ушли в работу.

Выбирайте способ с регистром сведений, если вам нужна высокая производительность, или способ со статусами, если вы хотите придерживаться типовой методологии 1С.

← На главную