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