Почему внешняя печатная форма в 1С выводится в двух экземплярах?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Торговля и дистрибуция
← На главную

При формировании внешних и встроенных печатных форм в программе 1С разработчики и пользователи периодически сталкиваются с ситуацией, когда документ вместо одного экземпляра выводится сразу в двух или более копиях. При этом настройки печати на клиенте или параметры принтера показывают количество копий, равное единице. Выясним причину такого поведения и разберем по шагам, как локализовать и исправить данную ошибку.

Анализ возможных причин задвоения печатной формы

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

  1. Программная установка количества копий: в коде модуля формирования макета может быть явно переопределено свойство ТабличныйДокумент.КоличествоЭкземпляров.
  2. Настройки пакетов печати и общих форм: сохранение пользовательских настроек в общих формах печати документов (например, форма ПечатьДокументов в БСП) или настройка печати комплектов.
  3. Задвоение данных в запросе к базе: дублирование записей на этапе выборки данных шапки документа или реквизитов организации (контактной информации, сведений об ответственных лицах).

Если в одной и той же базе по одной организации печатная форма выводится корректно в одном экземпляре, а по другой — в двух экземплярах при одинаковых настройках принтера, проблема кроется исключительно в данных и алгоритме их выборки в коде модуля.

Разбор типовой ошибки выборки контактной информации

Рассмотрим подробнее, почему изменение адреса или телефона организации приводит к дублированию документа. В типовых конфигурациях (таких как «1С:Управление торговлей», «1С:ERP», «1С:Комплексная автоматизация») контактная информация хранится в табличной части справочника Организации либо в специализированных регистрах сведений с поддержкой версионирования и истории изменений.

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

Способы исправления в коде печатной формы

Разберем методы корректного получения контактной информации без риска задвоения строк запроса.

Способ 1. Использование типового программного интерфейса БСП

Вместо прямых соединений с табличными частями организации в основном запросе печатной формы рекомендуется получать актуальные адреса и телефоны через стандартные функции подсистемы управления контактной информацией:


// Получение актуального представления адреса на дату документа
ВидАдреса = Справочники.ВидыКонтактнойИнформации.ЮрАдресОрганизации;
ПредставлениеАдреса = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(
    Шапка.Организация, 
    ВидАдреса, 
    Шапка.Дата
);

Способ 2. Корректировка текста запроса и группировка данных

Если контактная информация выбирается непосредственно в теле пакетного запроса, необходимо выделить выборку адресов в отдельный временный подзапрос с обязательной группировкой по ссылке и виду, либо использовать ключевое слово ВЫБРАТЬ РАЗЛИЧНЫЕ:


ВЫБРАТЬ
    ОрганизацииКонтактнаяИнформация.Ссылка КАК Организация,
    МАКСИМУМ(ОрганизацииКонтактнаяИнформация.Представление) КАК АдресПредставление
ПОМЕСТИТЬ ВТ_АдресаОрганизаций
ИЗ
    Справочник.Организации.КонтактнаяИнформация КАК ОрганизацииКонтактнаяИнформация
ГДЕ
    ОрганизацииКонтактнаяИнформация.Ссылка В(&МассивОрганизаций)
    И ОрганизацииКонтактнаяИнформация.Вид = &ВидКонтактнойИнформации
    И ОрганизацииКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес)
СГРУППИРОВАТЬ ПО
    ОрганизацииКонтактнаяИнформация.Ссылка
;

Способ 3. Корректная работа со срезом последних при получении ответственных лиц

Аналогичные задвоения часто происходят при обращении к периодическим регистрам сведений, например, ОтветственныеЛицаОрганизаций или ФИОФизЛиц. При формировании виртуальной таблицы всегда передавайте дату документа в параметры среза, чтобы исключить выборку неактуальных записей:


ВЫБРАТЬ
    ОтветственныеЛица.Организация КАК Организация,
    ОтветственныеЛица.ФизическоеЛицо КАК Руководитель
ПОМЕСТИТЬ ВТ_Ответственные
ИЗ
    РегистрСведений.ОтветственныеЛицаОрганизаций.СрезПоследних(&Период, Организация В (&МассивОрганизаций)) КАК ОтветственныеЛица
;

Проверка и очистка данных в информационной базе

Если нет возможности оперативно изменить код внешней обработки, проверим данные организации непосредственно в режиме «1С:Предприятие»:

  1. Откроем карточку проблемной организации и перейдем в раздел контактной информации.
  2. Проверим наличие задвоенных полей с одинаковым типом и видом (например, два поля «Фактический адрес»).
  3. Удалим неактуальную или пустую дублирующую запись.
  4. Если дубли не отображаются на форме визуально, воспользуемся внешней консолью запросов для поиска скрытых дублирующих строк в табличной части Справочник.Организации.КонтактнаяИнформация.
← На главную