При работе в конфигурации «Торговля и Склад 7.7» нередко возникает необходимость распечатать реестр контрагентов с нестандартными условиями отбора: включить в список несколько определенных папок и одновременно исключить некоторые вложенные группы. Стандартный универсальный отчет печати справочников (RefPrint) не всегда позволяет гибко настроить множественные условия по иерархии, а также не выводит специфические реквизиты вроде ИНН и юридического адреса без доработки. Рассмотрим подробно, почему возникают эти ограничения и какими способами можно решить задачу.
Проанализируем две ключевые технические особенности платформы 1С 7.7 и конфигурации «Торговля и Склад»:
Условие (Контрагент В СписокГрупп), платформа автоматически включает в выборку саму группу, все её подгруппы и элементы на любую глубину вложенности. Чтобы ограничить выборку конкретным родителем без его потомков, условие накладывается строго на реквизит Родитель: Условие (Контрагент.Родитель В СписокРодителей).Контрагенты. Они вынесены в подчиненные структуры через реквизит ЮрФизЛицо (справочники СведенияОЮрФизЛице, ЮрЛица, ФизЛица). Из-за этого универсальные отчеты выводят лишь базовые данные, требуя вызова специальных функций глобального модуля для получения контактной информации.Разберем вариант решения задачи без написания нового отчета с нуля. В составе типовых конфигураций присутствует инструмент подбора объектов, поддерживающий множественные фильтры (МФ).
Родитель. Для отбора конкретных папок добавим строки с типами условий «В списке» и «Не в списке».Рассмотрим создание собственной специализированной обработки. Для реализации точного отбора создадим на форме два списка значений типа СписокЗначений: СписокВключаемыхГрупп и СписокИсключаемыхГрупп.
При обходе справочника используем метод ПринадлежитЭлементу(), который проверяет вхождение элемента или группы в родительскую ветку с учетом всей глубины иерархии:
Перем Спр, Таб;
Спр = СоздатьОбъект("Справочник.Контрагенты");
Таб = СоздатьОбъект("Таблица");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
// Пропускаем группы, если требуется печатать только конечные элементы
Если Спр.ЭтоГруппа() = 1 Тогда
Продолжить;
КонецЕсли;
// Проверяем условие включения
ФлагВключения = 0;
Если СписокВключаемыхГрупп.РазмерСписка() = 0 Тогда
ФлагВключения = 1;
Иначе
Для Ном = 1 По СписокВключаемыхГрупп.РазмерСписка() Цикл
ТекГруппа = СписокВключаемыхГрупп.ПолучитьЗначение(Ном);
Если Спр.ПринадлежитЭлементу(ТекГруппа) = 1 Тогда
ФлагВключения = 1;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ФлагВключения = 0 Тогда
Продолжить;
КонецЕсли;
// Проверяем условие исключения
ФлагИсключения = 0;
Для Ном = 1 По СписокИсключаемыхГрупп.РазмерСписка() Цикл
ТекГруппа = СписокИсключаемыхГрупп.ПолучитьЗначение(Ном);
Если Спр.ПринадлежитЭлементу(ТекГруппа) = 1 Тогда
ФлагИсключения = 1;
Прервать;
КонецЕсли;
КонецЦикла;
Если ФлагИсключения = 1 Тогда
Продолжить;
КонецЕсли;
// Вывод строки в печатную форму
Таб.ВывестиСекцию("Строка");
КонецЦикла;
Выясним, как правильно выводить реквизиты юридического лица в печатную форму конфигурации «Торговля и Склад 7.7». Вместо прямого чтения реквизитов справочника вызовем экспортные функции глобального модуля конфигурации:
// Получение ИНН контрагента с учетом типа ЮрФизЛица
ИНН_КПП = глПолучитьРеквизитШапки(Спр.ТекущийЭлемент(), "ИНН");
// Получение юридического адреса контрагента
ЮрАдрес = глПолучитьАдрес(Спр.ТекущийЭлемент(), 1);
// Получение фактического адреса контрагента
ФактАдрес = глПолучитьАдрес(Спр.ТекущийЭлемент(), 2);
Использование функций глПолучитьРеквизитШапки() и глПолучитьАдрес() гарантирует корректное извлечение информации вне зависимости от того, является контрагент юридическим лицом, физическим лицом или индивидуальным предпринимателем.
Если перед выводом на печать список контрагентов необходимо отсортировать по иерархии, полному коду или наименованию, загрузим отобранные элементы в объект ТаблицаЗначений:
ТЗ = СоздатьОбъект("ТаблицаЗначений") и описываем колонки через НоваяКолонка().ТЗ.Сортировать("Наименование+") или ТЗ.Сортировать("Код+").ТаблицаЗначений и формируем итоговый макет Таблица.