При работе в 1С:Бухгалтерия государственного учреждения 2.0 (БГУ 2.0) часто возникает необходимость кастомизировать печатные формы под требования конкретного учреждения. Одной из самых популярных задач является изменение текста назначения платежа в квитанции ПД-4, особенно когда речь идет о родительской плате. Нам нужно не просто вывести статичный текст, а динамически подтянуть данные ребенка: ФИО, лицевой счет, месяц и данные договора, при этом корректно отформатировав строку.
В этой статье мы разберем, как правильно настроить шаблон назначения платежа, почему обычный программный код 1С не работает в полях настройки и как использовать возможности Системы компоновки данных (СКД) для достижения результата.
Прежде всего, выясним, где в программе хранятся эти настройки. В БГУ 2.0 для услуг (например, «Родительская плата») логика формирования текста квитанции часто привязана к справочнику Номенклатура. Рассмотрим алгоритм действий:
Номенклатура и выберем нужную услугу.Важно понимать: это поле не является местом для написания процедур на встроенном языке 1С (со словами Если, Тогда, Цикл). Это поле для выражений СКД. Попытка вставить туда программный код приведет к синтаксической ошибке.
Проанализируем ситуацию, когда пользователь пытается применить функции встроенного языка. Например, конструкция:
"Родительская плата за " + Формат(Объект.Дата,"ДФ='MMMM yyyy'") +
" по л/c: " + Пока Прав(ЛицевойСчет,1)="0" Цикл ...
Такой код работать не будет. В СКД нет оператора Цикл или многострочных условий в привычном виде. Здесь используются функции, доступные в языке выражений компоновки данных.
Если в вашей базе лицевые счета детей начинаются с префикса (например, "X00005253"), а банк требует передавать "000005253", нам нужно заменить первый символ. Рассмотрим, как это сделать с помощью оператора ВЫБОР и функции ПОДСТРОКА.
Проанализируем выражение для СКД:
ВЫБОР
КОГДА ПОДСТРОКА(Объект.Учащийся.Код, 1, 1) = "X"
ТОГДА "0" + ПОДСТРОКА(Объactor.Учащийся.Код, 2, 20)
ИНАЧЕ Объект.Учащийся.Код
КОНЕЦ
В данном примере мы проверяем: если первый символ кода равен "X", мы заменяем его на "0" и приклеиваем остальную часть строки (начиная со второго символа). Число 20 здесь — это условная максимальная длина кода, которую мы хотим оставить.
Часто в коде справочника Учащиеся или в строковых реквизитах присутствуют невидимые пробелы в конце, которые могут "разрывать" QR-код или просто некрасиво смотреться. Для очистки строки в СКД предусмотрена стандартная функция СОКРП() (сократить пробелы).
Посмотрим на пример совмещения функций:
СОКРП(ВЫБОР КОГДА ПОДСТРОКА(Объект.Учащийся.Код, 1, 1) = "X" ТОГДА "0" + ПОДСТРОКА(Объект.Учащийся.Код, 2, 25) ИНАЧЕ Объект.Учащийся.Код КОНЕЦ)
Теперь соберем все требования воедино: добавим текст «Родительская плата за», текущий месяц, ФИО ребенка и его исправленный лицевой счет. Нам понадобится функция Формат для даты и конкатенация строк.
Рассмотрим итоговое выражение, которое можно вставить в шаблон:
"Род. плата за " + Формат(Объект.Дата, "ДФ='MMMM yyyy'") +
" за " + Объект.Учащийся.Наименование +
", л/с: " + СОКРП(ВЫБОР КОГДА ПОДСТРОКА(Объект.Учащийся.Код, 1, 1) = "X" ТОГДА "0" + ПОДСТРОКА(Объект.Учащийся.Код, 2, 20) ИНАЧЕ Объект.Учащийся.Код КОНЕЦ) +
", дог: " + Объект.Договор.Номер + " от " + Формат(Объект.Договор.Дата, "ДЛФ=D")
Если логика преобразования лицевого счета слишком сложная (например, нужно удалять нули в середине или менять несколько разных префиксов), выражения СКД превратятся в нечитаемые конструкции. В этом случае выясним, как можно упростить жизнь программисту.
Если конфигурация находится на поддержке с возможностью изменения, мы можем создать в общем модуле (например, КастомныеФункцииСервер) экспортную функцию:
Функция ПреобразоватьЛицевойСчет(ИсходныйКод) Экспорт
Результат = СтрЗаменить(ИсходныйКод, "X", "0");
Результат = СокрЛП(Результат);
Возврат Результат;
КонецФункции
После этого в шаблоне СКД можно будет вызвать эту функцию напрямую:
КастомныеФункцииСервер.ПреобразоватьЛицевойСчет(Объект.Учащийся.Код)
Разберем несколько важных нюансов, которые могут повлиять на работу бухгалтерии:
Таким образом, мы проанализировали ситуацию с изменением квитанции ПД-4 в БГУ 2.0 и выяснили, что ключ к успеху лежит в правильном использовании синтаксиса СКД внутри настроек номенклатуры. Используйте операторы ВЫБОР и функции работы со строками, чтобы автоматизировать заполнение данных и избежать ручных правок в документах.