Как автоматизировать замену месяца в содержании услуг документа Реализация товаров и услуг в 1С

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

В процессе работы бухгалтера в управляющих компаниях ЖКХ, ТСЖ и ЖСК часто возникает специфическая задача: дата документа реализации (акта) относится к текущему месяцу, а фактические услуги (например, по показаниям счетчиков) были оказаны в предыдущем. Типовой механизм 1С автоматически подставляет в поле Содержание месяц создания документа. Это приводит к необходимости ручной правки каждой строки в табличной части Услуги, что крайне трудозатратно при больших объемах документов.

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

Анализ проблемы и штатных механизмов конфигурации

Прежде чем приступать к разработке, давайте разберем, как 1С формирует текстовое описание услуги. Большинство современных конфигураций, включая «1С:Учет в управляющих компаниях ЖКХ» (разработки Рарус/ВДГБ), базируются на типовой «1С:Бухгалтерия предприятия 3.0». В этой конфигурации за формирование текста в колонке Содержание отвечает специализированная процедура РаботаСНоменклатуройБП.ОбновитьСодержаниеУслуг.

Система опирается на скрытые реквизиты табличной части Услуги: СодержаниеУслугиДатаНачала и СодержаниеУслугиДатаОкончания. Если эти поля заполнены, программный код 1С автоматически генерирует строку вида «Название услуги за [Период]». Наша задача сводится либо к прямой подмене текста в колонке Содержание, либо к правильному заполнению реквизитов периода.

Решение 1: Внешняя обработка для заполнения табличной части

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

Алгоритм работы обработки:

  1. Пользователь нажимает кнопку «Изменить период в услугах».
  2. Программа выводит диалоговое окно с выбором месяца (или простым вопросом «Установить предыдущий месяц?»).
  3. При подтверждении обработка перебирает строки табличной части Услуги.
  4. В каждой строке происходит замена названия месяца в строковом реквизите Содержание.

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


// Пример упрощенной замены месяца в строке содержания
Для Каждого СтрокаТЧ Из Объект.Услуги Цикл
    ТекущееСодержание = СтрокаТЧ.Содержание;
    // Находим название текущего месяца в строке и заменяем его
    // Например, если в акте от октября написано "Октябрь", меняем на "Сентябрь"
    СтрокаТЧ.Содержание = СтрЗаменить(ТекущееСодержание, НазваниеТекущегоМесяца, НазваниеНужногоМесяца);
КонецЦикла;

Однако простая замена текста через СтрЗаменить может быть ненадежной из-за падежей или сокращений. Поэтому правильнее использовать штатные методы.

Решение 2: Программное использование метода ОбновитьСодержаниеУслуг

Для того чтобы решение было «чистым» с точки зрения архитектуры 1С, рекомендуется не просто манипулировать строками, а управлять датами периода. Разберем этот метод подробнее.

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


// Пример заполнения дат периода и обновления содержания
Для Каждого СтрокаТЧ Из Объект.Услуги Цикл
    // Устанавливаем период — прошлый месяц от даты документа
    ДатаДок = Объект.Дата;
    СтрокаТЧ.СодержаниеУслугиДатаНачала = НачалоМесяца(ДобавитьМесяц(ДатаДок, -1));
    СтрокаТЧ.СодержаниеУслугиДатаОкончания = КонецМесяца(ДобавитьМесяц(ДатаДок, -1));
КонецЦикла;

// Вызываем типовой метод БП 3.0 (доступен в общем модуле)
РаботаСНоменклатуройБП.ОбновитьСодержаниеУслуг(Объект);

Этот способ гарантирует, что при печати документа или его выгрузке в электронный документооборот (ЭДО) данные о периоде будут корректными не только визуально, но и в структуре данных.

Решение 3: Расширение конфигурации для автоматизации

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

Рассмотрим шаги реализации в расширении:

  1. Создаем расширение и заимствуем форму документа «Реализация товаров и услуг».
  2. Добавляем обработчик события ПриИзменении для даты документа или создаем послесловие (&После) для процедуры заполнения услуг.
  3. В коде прописываем логику: если услуга относится к категории «Коммунальные услуги» (можно определить по группе номенклатуры или дополнительному реквизиту), то период оказания услуг устанавливается равным ДобавитьМесяц(Объект.Дата, -1).

Такой подход минимизирует человеческий фактор. Бухгалтеру вообще не нужно думать о смене месяца — система сделает это сама, основываясь на заданных правилах.

Решение 4: Дополнительный реквизит и групповое изменение

Проанализируем еще один вариант, предложенный участниками обсуждения. Если период должен быть единым для всего документа, можно пойти путем добавления Дополнительного реквизита к документу (через меню «Администрирование — Общие настройки»).

  1. Добавляем доп. реквизит «Период акта» с типом Дата (состав даты — Месяц и год).
  2. Используем универсальную обработку «Групповое изменение реквизитов» или небольшую внешнюю обработку, которая считывает значение из этого поля и транслирует его во все строки табличной части.

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

Важные нюансы и рекомендации

При реализации любого из выбранных методов стоит учитывать несколько критических моментов:

Резюме: Для разовых правок идеально подойдет внешняя обработка с использованием метода РаботаСНоменклатуройБП.ОбновитьСодержаниеУслуг. Для постоянной работы в автоматическом режиме лучше использовать расширение конфигурации, которое будет управлять датами периода в строках ТЧ в зависимости от даты документа.

← На главную