В процессе работы бухгалтера в управляющих компаниях ЖКХ, ТСЖ и ЖСК часто возникает специфическая задача: дата документа реализации (акта) относится к текущему месяцу, а фактические услуги (например, по показаниям счетчиков) были оказаны в предыдущем. Типовой механизм 1С автоматически подставляет в поле Содержание месяц создания документа. Это приводит к необходимости ручной правки каждой строки в табличной части Услуги, что крайне трудозатратно при больших объемах документов.
В этой статье мы подробно разберем, как автоматизировать процесс изменения периода в описании услуг, проанализируем технические нюансы программной реализации и рассмотрим альтернативные подходы, чтобы облегчить работу пользователя.
Прежде чем приступать к разработке, давайте разберем, как 1С формирует текстовое описание услуги. Большинство современных конфигураций, включая «1С:Учет в управляющих компаниях ЖКХ» (разработки Рарус/ВДГБ), базируются на типовой «1С:Бухгалтерия предприятия 3.0». В этой конфигурации за формирование текста в колонке Содержание отвечает специализированная процедура РаботаСНоменклатуройБП.ОбновитьСодержаниеУслуг.
Система опирается на скрытые реквизиты табличной части Услуги: СодержаниеУслугиДатаНачала и СодержаниеУслугиДатаОкончания. Если эти поля заполнены, программный код 1С автоматически генерирует строку вида «Название услуги за [Период]». Наша задача сводится либо к прямой подмене текста в колонке Содержание, либо к правильному заполнению реквизитов периода.
Рассмотрим наиболее гибкий вариант, который не требует снятия конфигурации с поддержки — создание дополнительной обработки заполнения. Мы добавим команду в документ «Реализация товаров и услуг», которая будет предлагать пользователю выбрать нужный месяц и пересчитывать содержание всех строк.
Алгоритм работы обработки:
Услуги.Содержание.Пример программного кода для замены месяца в строке:
// Пример упрощенной замены месяца в строке содержания
Для Каждого СтрокаТЧ Из Объект.Услуги Цикл
ТекущееСодержание = СтрокаТЧ.Содержание;
// Находим название текущего месяца в строке и заменяем его
// Например, если в акте от октября написано "Октябрь", меняем на "Сентябрь"
СтрокаТЧ.Содержание = СтрЗаменить(ТекущееСодержание, НазваниеТекущегоМесяца, НазваниеНужногоМесяца);
КонецЦикла;
Однако простая замена текста через СтрЗаменить может быть ненадежной из-за падежей или сокращений. Поэтому правильнее использовать штатные методы.
Для того чтобы решение было «чистым» с точки зрения архитектуры 1С, рекомендуется не просто манипулировать строками, а управлять датами периода. Разберем этот метод подробнее.
Проанализируем ситуацию: если мы программно заполним даты начала и окончания периода в табличной части, а затем вызовем типовую процедуру обновления, 1С сама сформирует корректный текст согласно настройкам учетной политики.
// Пример заполнения дат периода и обновления содержания
Для Каждого СтрокаТЧ Из Объект.Услуги Цикл
// Устанавливаем период — прошлый месяц от даты документа
ДатаДок = Объект.Дата;
СтрокаТЧ.СодержаниеУслугиДатаНачала = НачалоМесяца(ДобавитьМесяц(ДатаДок, -1));
СтрокаТЧ.СодержаниеУслугиДатаОкончания = КонецМесяца(ДобавитьМесяц(ДатаДок, -1));
КонецЦикла;
// Вызываем типовой метод БП 3.0 (доступен в общем модуле)
РаботаСНоменклатуройБП.ОбновитьСодержаниеУслуг(Объект);
Этот способ гарантирует, что при печати документа или его выгрузке в электронный документооборот (ЭДО) данные о периоде будут корректными не только визуально, но и в структуре данных.
Если бухгалтер хочет исключить лишние нажатия кнопок, мы можем использовать механизм расширений. Это позволит автоматически подставлять нужный месяц в момент добавления услуги в документ или при изменении даты документа.
Рассмотрим шаги реализации в расширении:
ПриИзменении для даты документа или создаем послесловие (&После) для процедуры заполнения услуг.ДобавитьМесяц(Объект.Дата, -1).Такой подход минимизирует человеческий фактор. Бухгалтеру вообще не нужно думать о смене месяца — система сделает это сама, основываясь на заданных правилах.
Проанализируем еще один вариант, предложенный участниками обсуждения. Если период должен быть единым для всего документа, можно пойти путем добавления Дополнительного реквизита к документу (через меню «Администрирование — Общие настройки»).
Это удобно, когда нужно массово обработать уже созданные документы за месяц. Мы отбираем все реализации за октябрь и одной кнопкой меняем во всех содержание на «Сентябрь».
При реализации любого из выбранных методов стоит учитывать несколько критических моментов:
СтандартныйПериод или список выбора из 12 месяцев. Это сделает интерфейс понятным и привычным.Резюме: Для разовых правок идеально подойдет внешняя обработка с использованием метода РаботаСНоменклатуройБП.ОбновитьСодержаниеУслуг. Для постоянной работы в автоматическом режиме лучше использовать расширение конфигурации, которое будет управлять датами периода в строках ТЧ в зависимости от даты документа.