Как изменить назначение платежа в квитанции ПД-4 с QR-кодом в БГУ 2.0

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

При работе в 1С:Бухгалтерия государственного учреждения 2.0 (БГУ 2.0) часто возникает необходимость кастомизировать печатные формы под требования конкретного учреждения. Одной из самых популярных задач является изменение текста назначения платежа в квитанции ПД-4, особенно когда речь идет о родительской плате. Нам нужно не просто вывести статичный текст, а динамически подтянуть данные ребенка: ФИО, лицевой счет, месяц и данные договора, при этом корректно отформатировав строку.

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

Где настраивается шаблон назначения платежа

Прежде всего, выясним, где в программе хранятся эти настройки. В БГУ 2.0 для услуг (например, «Родительская плата») логика формирования текста квитанции часто привязана к справочнику Номенклатура. Рассмотрим алгоритм действий:

  1. Откроем справочник Номенклатура и выберем нужную услугу.
  2. Перейдем на вкладку Дополнительные сведения или найдем поле Шаблон текста назначения платежа (расположение может зависеть от версии релиза).
  3. В этом поле мы можем задать выражение, которое программа будет вычислять при формировании печатной формы или QR-кода.

Важно понимать: это поле не является местом для написания процедур на встроенном языке 1С (со словами Если, Тогда, Цикл). Это поле для выражений СКД. Попытка вставить туда программный код приведет к синтаксической ошибке.

Разбор типичных ошибок при написании шаблона

Проанализируем ситуацию, когда пользователь пытается применить функции встроенного языка. Например, конструкция:


"Родительская плата за " + Формат(Объект.Дата,"ДФ='MMMM yyyy'") + 
" по л/c: " + Пока Прав(ЛицевойСчет,1)="0" Цикл ...

Такой код работать не будет. В СКД нет оператора Цикл или многострочных условий в привычном виде. Здесь используются функции, доступные в языке выражений компоновки данных.

Решение задачи 1: Замена символа в начале строки

Если в вашей базе лицевые счета детей начинаются с префикса (например, "X00005253"), а банк требует передавать "000005253", нам нужно заменить первый символ. Рассмотрим, как это сделать с помощью оператора ВЫБОР и функции ПОДСТРОКА.

Проанализируем выражение для СКД:


ВЫБОР 
    КОГДА ПОДСТРОКА(Объект.Учащийся.Код, 1, 1) = "X" 
    ТОГДА "0" + ПОДСТРОКА(Объactor.Учащийся.Код, 2, 20) 
    ИНАЧЕ Объект.Учащийся.Код 
КОНЕЦ

В данном примере мы проверяем: если первый символ кода равен "X", мы заменяем его на "0" и приклеиваем остальную часть строки (начиная со второго символа). Число 20 здесь — это условная максимальная длина кода, которую мы хотим оставить.

Решение задачи 2: Удаление лишних пробелов

Часто в коде справочника Учащиеся или в строковых реквизитах присутствуют невидимые пробелы в конце, которые могут "разрывать" QR-код или просто некрасиво смотреться. Для очистки строки в СКД предусмотрена стандартная функция СОКРП() (сократить пробелы).

Посмотрим на пример совмещения функций:


СОКРП(ВЫБОР КОГДА ПОДСТРОКА(Объект.Учащийся.Код, 1, 1) = "X" ТОГДА "0" + ПОДСТРОКА(Объект.Учащийся.Код, 2, 25) ИНАЧЕ Объект.Учащийся.Код КОНЕЦ)

Сборка итогового шаблона назначения платежа

Теперь соберем все требования воедино: добавим текст «Родительская плата за», текущий месяц, ФИО ребенка и его исправленный лицевой счет. Нам понадобится функция Формат для даты и конкатенация строк.

Рассмотрим итоговое выражение, которое можно вставить в шаблон:


"Род. плата за " + Формат(Объект.Дата, "ДФ='MMMM yyyy'") + 
" за " + Объект.Учащийся.Наименование + 
", л/с: " + СОКРП(ВЫБОР КОГДА ПОДСТРОКА(Объект.Учащийся.Код, 1, 1) = "X" ТОГДА "0" + ПОДСТРОКА(Объект.Учащийся.Код, 2, 20) ИНАЧЕ Объект.Учащийся.Код КОНЕЦ) +
", дог: " + Объект.Договор.Номер + " от " + Формат(Объект.Договор.Дата, "ДЛФ=D")

Альтернативный вариант: Использование общего модуля

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

Если конфигурация находится на поддержке с возможностью изменения, мы можем создать в общем модуле (например, КастомныеФункцииСервер) экспортную функцию:


Функция ПреобразоватьЛицевойСчет(ИсходныйКод) Экспорт
    Результат = СтрЗаменить(ИсходныйКод, "X", "0");
    Результат = СокрЛП(Результат);
    Возврат Результат;
КонецФункции

После этого в шаблоне СКД можно будет вызвать эту функцию напрямую:

КастомныеФункцииСервер.ПреобразоватьЛицевойСчет(Объект.Учащийся.Код)

О чем стоит помнить при изменении квитанции

Разберем несколько важных нюансов, которые могут повлиять на работу бухгалтерии:

Таким образом, мы проанализировали ситуацию с изменением квитанции ПД-4 в БГУ 2.0 и выяснили, что ключ к успеху лежит в правильном использовании синтаксиса СКД внутри настроек номенклатуры. Используйте операторы ВЫБОР и функции работы со строками, чтобы автоматизировать заполнение данных и избежать ручных правок в документах.

← На главную