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