Перейти к содержимому

Задолженность в счете

На предыдущем примере была создана печатная форма для счета на оплату покупателю. По сути, мы воссоздали типовую печатную форму, которая уже существует в программе. В данной главе мы доработаем счет, задействуя дополнительные возможности конструктора, не затронутые в предыдущей главе.

И так, нам необходимо доработать счет следующим образом: в подвале, после подписей, необходимо вывести информацию о дебиторской задолженности контрагента. При этом, если задолженность кредиторская (или отсутствует) данный раздел не должен выводиться вовсе. Образец внешнего вида раздела с задолженностью представлен на картинке 3.13.

Раздел “Задолженность” для счета на оплату

В предыдущей главе мы завершили разработку печатной формы, добавили команду печати и заблокировали форму для изменений. Таким образом, сейчас для доработки формы нам надо принять решение: либо форму разблокировать (команда печати у пользователей пропадет), либо создать образ для разработки.

Поскольку данная форма активно используется, отключать возможность ее печати не рекомендуется. Поэтому мы создадим новый образ для разработки. Для этого открываем существующий макет, в заголовке видим предупреждение о том, что форма заблокирована, нажимаем “создать образ для разработки”.

В новой форме макета, переходим на закладку “Макет” и выполняем доработку согласно рисунку 3.14

Настройка закладки “Макет” для области “Задолженность”

Текст шаблона области:

По состоянию на [ДатаОстатков] за контрагентом имеется задолженность в сумме [СуммаЗадолженности] руб., просим погасить указанную задолженность в срок до [КонецМесяца].

После доработки обновим список областей, активизируем строку области “Задолженность” и если все выполнено правильно, вы должны увидеть следующее:

Область “Задолженность” и ее параметры

Для получения данных о задолженности, необходимо добавить новый запрос для сбора данных из регистров бухгалтерии. Для этого необходимо:

  • создать новый запрос
    • Имя: Задолженность
    • Тип результата: Таблица значений
    • Текст запроса
ВЫБРАТЬ РАЗЛИЧНЫЕ
Т.Контрагент КАК Контрагент
ПОМЕСТИТЬ ВТ_Контрагенты
ИЗ
Документ.СчетНаОплатуПокупателю КАК Т
ГДЕ
Т.Ссылка В(&МассивОбъектов)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВЫРАЗИТЬ(ХозрасчетныйОстатки.Субконто1 КАК Справочник.Контрагенты) КАК Контрагент,
ХозрасчетныйОстатки.СуммаОстаток КАК СуммаОстаток
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(
,
Счет В (&СписокСчетов),
&Контрагент,
Субконто1 В
(ВЫБРАТЬ
Т.Контрагент
ИЗ
ВТ_Контрагенты КАК Т)) КАК ХозрасчетныйОстатки
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВТ_Контрагенты

Обратите внимание, строка с запросом подсвечена красным цветом (есть ошибки), а под полем для ввода текста запроса указана ошибка На найдено поле данных ""Ссылка"" (см. рис. 3.16)

Результат добавления запроса “Задолженность”

Установим флажок “Это общий запрос”. Строка запроса должна стать обычным цветом, а текст ошибки пропасть.

Давайте немного подробнее посмотрим на текст запроса. Данный запрос состоит из 3-х частей:

  • запрос списка уникальных контрагентов из счетов, для которых формируются печатные формы. Результат запроса помещается во временную таблицу ВТ_Контрагенты (инструкция ПОМЕСТИТЬ ВТ_Контрагенты);
  • запрос остатков задолженности по контрагентам для субконто &Контрагент, счетов указанных в параметре &СписокСчетов, а также по списку контрагентов из ВТ_Контрагенты;
  • уничтожение таблицы ВТ_Контрагенты. Данная операция выполняется для оптимизации хранения данных в процессе выполнения печатной формы.

Далее необходимо выполнить настройку параметров запроса (&Контрагент, &СписокСчетов):

  • параметр &Контрагент
    • выберем тип “Виды субконто хозрасчетные”
    • в списке субконто выберем “Контрагенты”
  • параметр &СписокСчетов (программа автоматически определила что требуется указать список счетов, в табличной части мы видим установленную галочку в соответствующей колонке):
    • выберем счета 60.01, 60.02, 62.01, 62.02, 76.05, 76.06

Значения списка параметра &СписокСчетов

Далее нам необходим набор данных “Задолженность”. Скорее всего, добавлять его не придётся: при переходе с закладки “Запросы” программа сама создаёт набор по новому запросу и заполняет поля в нём. Если набора на закладке нет, нажмите кнопку “Обновить” над табличной частью “Наборы” — программа добавит соответствующий набор и обновит поля в нем.

В результате, данные закладки “Наборы” будут выглядеть следующим образом:

Настройка закладки “наборы”

Если мы попытаемся настроить соответствие параметров областей макета и доступных полей наборов, то увидим, что нам доступны только поля с итогами по набору “Задолженность”. То есть, вся задолженность, всех контрагентов. Что, по условиям задачи, нам явно не подходит.

Для того, чтобы в момент печати каждой формы, получить задолженность именно контрагента из шапки документа, необходимо выполнить соединение наборов Шапка и Задолженность. Для этого необходимо перейти на закладку “Соединения” и настроить их следующим образом:

  • нажать “Добавить” > “Связь наборов”, в новой строке указать значения:
    • Левая сторона: Шапка
    • Правая сторона: Задолженность
    • Имя соединения: Задолженность
    • Вид набора: Первая строка
  • нажать “Добавить” > “Связь полей”
    • Левая сторона: Контрагент
    • Правая сторона: Контрагент

Таким образом, мы создали следующую инструкцию:

  • для каждого набора “Шапка”
  • найди в наборе “Задолженность” строки где Шапка.Контрагент = Задолженность.Контрагент
  • найденную Первую строку добавь в виде группы “Задолженность” в доступные поля набора “Шапка”

При этом, в дереве доступных полей мы увидим, что появилась группа “Задолженность” внутри которой есть поля из набора “Задолженность”

Пример группы “Задолженность” в полях набора “Шапка”

После настройки соединения, можно перейти к настройке сопоставления параметров области “Задолженность” и доступных полей. Сходу понятно, что можно сопоставить параметр “СуммаЗадолженности” с полем “НаборыДанных.Шапка.Задолженность.СуммаОстаток.Сумма”. Для этого двойным кликом по колонке “Значение” в строке “СуммаЗадолженности” переходим в дерево выбора доступных полей и находим нужное поле “Шапка” > “Задолженность” > “СуммаОстаток” > “Сумма”. Не забываем настроить форматирование.

Последний сегмент пути — имя агрегата по числовой колонке вложенного набора. Макеты, сделанные до версии 2026.2.11, писали путь без него (…Задолженность.СуммаОстаток); при загрузке такие пути приводятся к новой форме автоматически.

Однако, для остальных параметров, нам потребуется написать алгоритм. Они достаточно простые:

  • параметр “ДатаОстатков”: Результат = Формат(ТекущаяДата(), "ДЛФ=DD");
  • параметр “КонецМесяца”: Результат = Формат(КонецМесяца(ТекущаяДата()), "ДЛФ=DD");

Теперь мы можем протестировать нашу печатную форму.

Остался один не охваченный вопрос: как сделать так, чтобы при отсутствии задолженности область вовсе не выходила на печать? Начиная с версии 2026.2.11 программировать для этого ничего не нужно — у каждой области макета есть собственные правила вывода.

Вернёмся на закладку “Макет” и в таблице областей активизируем строку “Задолженность”. Двойной клик по первой колонке таблицы (пиктограмма , подсказка “Есть правила вывода области”) открывает форму “Правила вывода областей”. Добавим в ней одно правило:

ИспользованиеЛевое значениеВид сравненияЗначение
✓НаборыДанных.Шапка.Задолженность.СуммаОстаток.СуммаБольше0

Левое значение выбирается из того же дерева доступных полей, что и значения параметров области: “Шапка” > “Задолженность” > “СуммаОстаток” > “Сумма”. Нажимаем “Записать и закрыть” — пиктограмма в первой колонке становится заполненной, это признак того, что у области есть правила.

Одного правила достаточно: остаток по счетам расчётов положителен, когда задолженность дебиторская, поэтому и кредиторская задолженность (остаток меньше нуля), и её отсутствие (ноль) условию не удовлетворяют — область пропускается.

Теперь можно проверить работу макета. Если все выполнено верно, то в случае наличия задолженности область будет видна. А если задолженности нет, то область не появится в печатной форме.

Та же задача решается и обработчиком события — так её решали до появления правил вывода. Способ остаётся нужным, когда условие не сводится к сравнению поля набора со значением: например, оно опирается на поле свойств, нумератора или произвольного алгоритма либо требует логики “ИЛИ” (правила вывода объединяются только по “И”). Разберём его на том же примере.

Тут нам помогут события, генерируемые конструктором в процессе работы. Перейдем на закладку “События” и активизируем строку алгоритма “ПередВыводомОбласти”.

Если прочитать описание, мы узнаем что: данное событие вызывается непосредственно перед тем, как область будет выведена в печатную форму. Также мы можем отказаться от вывода области. То что нужно!

Перейдем в расширенный редактор и выполним следующие действия:

  • активизируем кнопку для отображения доступных полей ()
  • в доступных полях найдем поле “Шапка” > “Задолженность” > “СуммаОстаток” > “Сумма” и двойным кликом добавим его в текст алгоритма;
  • допишем проверку, если ИмяОбласти = "Задолженность" И СуммаОстаток <= 0, то отказываемся от вывода области

Полный текст алгоритма, выглядит следующим образом:

СуммаОстаток = НаборыДанных.Шапка.Задолженность.СуммаОстаток.Сумма;
Если ИмяОбласти = "Задолженность" И СуммаОстаток <= 0 Тогда
Отказ = Истина;
КонецЕсли;

Записываем алгоритм и проверяем работу макета — результат тот же, что и с правилом вывода.

Теперь мы можем закрыть образ и перенести изменения в основной макет. Для этого в тексте предупреждения (в шапке макета) нажимаем “Закрыть образ” и соглашаемся в окне заданного вопроса с переносом всех наработок в основной макет. Нам больше не требуется делать блокировку основного макета и настраивать команды, поскольку основной макет будет заменен на доработанный. И при нажатии команды печать, пользователь увидит новую печатную форму с задолженностью.