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

Рис. 3.13 Раздел “Задолженность” для счета на оплату
Закладка Макет (область Задолженность)
Заголовок раздела «Закладка Макет (область Задолженность)»В предыдущей главе мы завершили разработку печатной формы, добавили команду печати и заблокировали форму для изменений. Таким образом, сейчас для доработки формы нам надо принять решение: либо форму разблокировать (команда печати у пользователей пропадет), либо создать образ для разработки.
Поскольку данная форма активно используется, отключать возможность ее печати не рекомендуется. Поэтому мы создадим новый образ для разработки. Для этого открываем существующий макет, в заголовке видим предупреждение о том, что форма заблокирована, нажимаем “создать образ для разработки”.
В новой форме макета, переходим на закладку “Макет” и выполняем доработку согласно рисунку 3.14

Рис. 3.14 Настройка закладки “Макет” для области “Задолженность”
Текст шаблона области:
По состоянию на [ДатаОстатков] за контрагентом имеется задолженность в сумме [СуммаЗадолженности] руб., просим погасить указанную задолженность в срок до [КонецМесяца].После доработки обновим список областей, активизируем строку области “Задолженность” и если все выполнено правильно, вы должны увидеть следующее:

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

Рис. 3.16 Результат добавления запроса “Задолженность”
Установим флажок “Это общий запрос”. Строка запроса должна стать обычным цветом, а текст ошибки пропасть.
Давайте немного подробнее посмотрим на текст запроса. Данный запрос состоит из 3-х частей:
- запрос списка уникальных контрагентов из счетов, для которых формируются печатные формы. Результат запроса помещается во временную таблицу
ВТ_Контрагенты(инструкцияПОМЕСТИТЬ ВТ_Контрагенты); - запрос остатков задолженности по контрагентам для субконто
&Контрагент, счетов указанных в параметре&СписокСчетов, а также по списку контрагентов изВТ_Контрагенты; - уничтожение таблицы
ВТ_Контрагенты. Данная операция выполняется для оптимизации хранения данных в процессе выполнения печатной формы.
Далее необходимо выполнить настройку параметров запроса (&Контрагент, &СписокСчетов):
- параметр
&Контрагент- выберем тип “Виды субконто хозрасчетные”
- в списке субконто выберем “Контрагенты”
- параметр
&СписокСчетов(программа автоматически определила что требуется указать список счетов, в табличной части мы видим установленную галочку в соответствующей колонке):- выберем счета 60.01, 60.02, 62.01, 62.02, 76.05, 76.06

Рис. 3.17 Значения списка параметра &СписокСчетов
Закладка Наборы
Заголовок раздела «Закладка Наборы»Далее нам необходимо добавить набор данных “Задолженность”. Самый простой способ сделать это, нажать кнопку “Обновить” над табличной частью “Наборы”. При этом программа автоматически добавит соответствующий набор и обновит поля в нем.
Данную операцию можно выполнить и вручную:
- нажать кнопку Добавить (в табличной части Наборы)
- Имя: Задолженность
- Вид набора: Многострочная коллекция
- Источник: Задолженность (запрос)
- нажать кнопку “Обновить” > “Из запроса” над табличной частью “Поля набора”
В результате, данные закладки “Наборы” будут выглядеть следующим образом:

Рис. 3.18 Настройка закладки “наборы”
Закладка Соединения
Заголовок раздела «Закладка Соединения»Если мы попытаемся настроить соответствие параметров областей макета и доступных полей наборов, то увидим, что нам доступны только поля с итогами по набору “Задолженность”. То есть, вся задолженность, всех контрагентов. Что, по условиям задачи, нам явно не подходит.
Для того, чтобы в момент печати каждой формы, получить задолженность именно контрагента из шапки документа, необходимо выполнить соединение наборов Шапка и Задолженность. Для этого необходимо перейти на закладку “Соединения” и настроить их следующим образом:
- нажать “Добавить” > “Связь наборов”, в новой строке указать значения:
- Левая сторона: Шапка
- Правая сторона: Задолженность
- Имя соединения: Задолженность
- Вид набора: Первая строка
- нажать “Добавить” > “Связь полей”
- Левая сторона: Контрагент
- Правая сторона: Контрагент
Таким образом, мы создали следующую инструкцию:
- для каждого набора “Шапка”
- найди в наборе “Задолженность” строки где Шапка.Контрагент = Задолженность.Контрагент
- найденную Первую строку добавь в виде группы “Задолженность” в доступные поля набора “Шапка”
При этом, в дереве доступных полей мы увидим, что появилась группа “Задолженность” внутри которой есть поля из набора “Задолженность”

Рис. 3.19 Пример группы “Задолженность” в полях набора “Шапка”
Закладка Макет (параметры области)
Заголовок раздела «Закладка Макет (параметры области)»После настройки соединения, можно перейти к настройке сопоставления параметров области “Задолженность” и доступных полей. Сходу понятно, что можно сопоставить параметр “СуммаЗадолженности” с полем “НаборыДанных.Шапка.Задолженность.СуммаОстаток”. Для этого двойным кликом по колонке “Значение” в строке “СуммаЗадолженности” переходим в дерево выбора доступных полей и находим нужное поле “Шапка” > “Задолженность” > “СуммаОстаток”. Не забываем настроить форматирование.
Однако, для остальных параметров, нам потребуется написать алгоритм. Они достаточно простые:
- параметр “ДатаОстатков”:
Результат = Формат(ТекущаяДата(), "ДЛФ=DD"); - параметр “КонецМесяца”:
Результат = Формат(КонецМесяца(ТекущаяДата()), "ДЛФ=DD");
Теперь мы можем протестировать нашу печатную форму.
Закладка События
Заголовок раздела «Закладка События»Остался один не охваченный вопрос. Как сделать так, чтобы если задолженность отсутствует, данная область вовсе не выходила на печать? Тут нам помогут события, генерируемые конструктором в процессе работы. Перейдем на закладку “События” и активизируем строку алгоритма “ПередВыводомОбласти”.
Если прочитать описание, мы узнаем что: данное событие вызывается непосредственно перед тем, как область будет выведена в печатную форму. Также мы можем отказаться от вывода области. То что нужно!
Перейдем в расширенный редактор и выполним следующие действия:
- активизируем кнопку для отображения доступных полей (
) - в доступных полях найдем поле “Шапка” > “Задолженность” > “СуммаОстаток” и двойным кликом добавим его в текст алгоритма;
- допишем проверку, если
ИмяОбласти = "Задолженность" И СуммаОстаток <= 0, то отказываемся от вывода области
Полный текст алгоритма, выглядит следующим образом:
СуммаОстаток = НаборыДанных.Шапка.Задолженность.СуммаОстаток;
Если ИмяОбласти = "Задолженность" И СуммаОстаток <= 0 Тогда Отказ = Истина;КонецЕсли;Записываем алгоритм и проверяем работу макета. Если все выполнено верно, то в случае наличия задолженности, область будет видна. А если задолженности нет, то область не появится в печатной форме.
Теперь мы можем закрыть образ и перенести изменения в основной макет. Для этого в тексте предупреждения (в шапке макета) нажимаем “Закрыть образ” и соглашаемся в окне заданного вопроса с переносом всех наработок в основной макет. Нам больше не требуется делать блокироку основного макета и настраивать команды, поскольку основной макет будет заменен на доработанны. И при нажатии команды печать, пользователь увидит новую печатную форму с задолженности.