Как автоматически подставлять месяц оказания услуги в печатную форму акта в 1С?

Программист 1С v8.3 (Обычные формы) Управленческий учет Сфера услуг, туризм и социальный сектор
← На главную

Многие пользователи 1С сталкиваются с необходимостью ежемесячно дописывать период оказания услуг (например, «за август 2024 г.») в наименование работ при печати актов. Ручное редактирование каждого документа отнимает много времени и чревато ошибками. Давайте разберем, как автоматизировать этот процесс, сделав работу комфортной и исключив человеческий фактор.

Решение 1: Использование внешней печатной формы (ВПФ)

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

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


// Пример формирования строки с месяцем в процедуре печати
МесяцОказанияУслуги = Формат(СсылкаНаОбъект.Дата, "ДФ='ММММ гггг'");
НаименованиеДляПечати = Строка(Выборка.Номенклатура.Наименование) + " за " + МесяцОказанияУслуги + " г.";

Такой подход позволяет динамически формировать текст «за Октябрь 2024 г.» сразу при нажатии кнопки «Печать», при этом в базе данных само наименование услуги останется прежним.

Решение 2: Доработка макета через шаблоны

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

Вы можете добавить в макет выражение, например:

за [Формат(ДатаДок, "ДФ='ММММ гггг'")]

Важно помнить: этот метод работает корректно только тогда, когда ячейка в макете помечена именно как Шаблон. Если вы выберете «Выражение» или «Текст», конструкция может отобразиться буквально, а не как вычисленное значение даты.

Решение 3: Группировка услуг и условное оформление

Интересный способ предложили коллеги по цеху: создать в справочнике Номенклатура группу «Периодические услуги». В коде печатной формы прописывается условие, которое проверяет, входит ли услуга в эту группу. Если входит — автоматически добавляется месяц из даты документа. Рассмотрим пример реализации такой логики:


// Проверка принадлежности к группе и автодобавление периода
Если Номенклатура.Родитель.Наименование = "Периодические" Тогда
    НаименованиеПечати = Наименование + " за " + Формат(ДатаДок, "Д ММММГГГГ");
Иначе
    НаименованиеПечати = Наименование;
КонецЕсли;

Это решение удобно тем, что оно универсально: для разовых работ месяц подставляться не будет, а для абонентской платы — появится сам собой.

Решение 4: Использование поля «Примечание»

Для пользователей, которые предпочитают минимум доработок, подойдет вариант с использованием стандартного поля Примечание (или комментария). Вы вписываете в документ нужный текст (например, «за сентябрь»), а программист настраивает печатную форму так, чтобы она просто считывала это поле и выводила его рядом с наименованием товара. Это сохраняет историю периодов и дает вам полную свободу в формулировках.

Рекомендации по реализации

  1. Не меняйте конфигурацию напрямую. Всегда отдавайте предпочтение внешним печатным формам. Это сохранит целостность системы.
  2. Автоматизируйте создание документов. Если у вас сотни контрагентов, рассмотрите использование обработок по групповому созданию документов, которые могут автоматически копировать услуги из прошлого периода и подставлять новые даты.
  3. Следите за падежами. При автоматическом формировании строк с месяцами (например, «за август», «за сентябрь») стандартные функции могут выдавать «август», «сентябрь». Для идеального отображения программисту, возможно, потребуется написать небольшую функцию склонения названий месяцев.

Используя эти методы, вы сэкономите часы рутинного труда и исключите ошибки при ручном заполнении актов. Выберите наиболее подходящий вариант и смело ставьте задачу вашему специалисту по 1С!

← На главную