Как изменить представление контрагента и добавить наименование в печатную форму Торг-12 в 1С

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

При доработке внешних печатных форм (ВПФ), таких как Торг-12, часто возникает необходимость изменить состав выводимых данных о грузополучателе, покупателе или поставщике. Например, помимо полного наименования, адреса и ИНН, требуется вывести рабочее наименование контрагента из справочника. Рассмотрим подробнее, почему стандартная подстановка параметров может не работать и как правильно передавать нужные поля в печатную форму.

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

Для формирования строковых представлений организаций и контрагентов в типовых конфигурациях 1С (например, 1С:Комплексная автоматизация 1.1 на обычных формах) используется модуль ФормированиеПечатныхФорм и его функция ОписаниеОрганизации.

Обычно заполнение параметра макета выглядит следующим образом:


ОбластьМакета.Параметры.ПредставлениеГрузополучателя = ФормированиеПечатныхФорм.ОписаниеОрганизации(
    СведенияОГрузополучателе, 
    "ПолноеНаименование,ИНН,ФактическийАдрес,Телефоны,НомерСчета,Банк,БИК,КоррСчет"
);

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

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


Функция ОписаниеОрганизации(СписокСведений, Знач Список = "", СПрефиксом = Истина) Экспорт
    Если ПустаяСтрока(Список) Тогда
        Список = "ПолноеНаименование,НаименованиеСокращенное,ИНН,Свидетельство,ЮридическийАдрес,Телефоны,НомерСчета,Банк,БИК,КоррСчет";
    КонецЕсли;

    Результат = "";
    СоответствиеПараметров = Новый Соответствие;
    СоответствиеПараметров.Вставить("ПолноеНаименование", " ");
    СоответствиеПараметров.Вставить("НаименованиеСокращенное", " ");
    СоответствиеПараметров.Вставить("ИНН", " ИНН ");
    СоответствиеПараметров.Вставить("КПП", " КПП ");
    СоответствиеПараметров.Вставить("ЮридическийАдрес", " ");
    СоответствиеПараметров.Вставить("ФактическийАдрес", " ");
    СоответствиеПараметров.Вставить("Телефоны", " тел.: ");
    СоответствиеПараметров.Вставить("НомерСчета", " р/с ");
    СоответствиеПараметров.Вставить("Банк", " в банке ");
    СоответствиеПараметров.Вставить("БИК", " БИК ");
    СоответствиеПараметров.Вставить("КоррСчет", " к/с ");
    СоответствиеПараметров.Вставить("КодПоОКПО", " Код по ОКПО ");

    Список = Список + ?(Прав(Список, 1) = ",", "", ",");
    ЧислоПараметров = СтрЧислоВхождений(Список, ",");

    Для Счетчик = 1 по ЧислоПараметров Цикл
        ПозЗапятой = Найти(Список, ",");
        Если ПозЗапятой > 0 Тогда
            ИмяПараметра = Лев(Список, ПозЗапятой - 1);
            Список = Сред(Список, ПозЗапятой + 1, СтрДлина(Список));
            Попытка
                СтрокаДополнения = "";
                СписокСведений.Свойство(ИмяПараметра, СтрокаДополнения);
                Если ПустаяСтрока(СтрокаДополнения) Тогда
                    Продолжить;
                КонецЕсли;
                Префикс = СоответствиеПараметров[ИмяПараметра];
                Если Не ПустаяСтрока(Результат) Тогда
                    Результат = Результат + ",";
                КонецЕсли;
                Результат = Результат + ?(СПрефиксом = Истина, Префикс, "") + СтрокаДополнения;
            Исключение
                Сообщить("Не удалось определить значение параметра организации: " + ИмяПараметра, СтатусСообщения.Внимание);
            КонецПопытки;
        КонецЕсли;
    КонецЦикла;

    Возврат СокрЛП(Результат);
КонецФункции

Функция считывает значение через метод СписокСведений.Свойство(ИмяПараметра, СтрокаДополнения). Это означает, что переданная структура СведенияОГрузополучателе должна содержать элемент с соответствующим именем ключа.

Где формируются данные о контрагенте

Структура СведенияОГрузополучателе создается функцией СведенияОЮрФизЛице. В этой функции наименование контрагента из справочника записывается в элемент структуры под ключом Представление, а полное наименование — в ключ ПолноеНаименование.

Поэтому указание ключей Наименование или СокращенноеНаименование не приносит результата — их просто нет в полученной структуре данных.

Решение проблемы: правильное подставление наименования

Чтобы вывести краткое рабочее наименование контрагента в макете Торг-12, необходимо использовать имя ключа Представление.

Рассмотрим пошагово порядок действий для корректной настройки вывода:

  1. Откроем модуль внешней печатной формы Торг-12.
  2. Найдем строку формирования представления грузополучателя (или другого участника сделки).
  3. Добавим ключ Представление в перечень запрашиваемых полей.

Итоговый код вызова функции принимает следующий вид:


ОбластьМакета.Параметры.ПредставлениеГрузополучателя = ФормированиеПечатныхФорм.ОписаниеОрганизации(
    СведенияОГрузополучателе, 
    "ПолноеНаименование,ИНН,Представление,ФактическийАдрес,Телефоны,НомерСчета,Банк,БИК,КоррСчет"
);

Как вывести произвольный реквизит (например, Комментарий)

Если требуется вывести реквизит, которого изначально нет в структуре СведенияОЮрФизЛице (например, поле Комментарий из справочника «Контрагенты»), сделать это можно двумя способами:

Способ 1. Явное добавление ключа в структуру перед вызовом ОписаниеОрганизации:


СведенияОГрузополучателе.Вставить("Комментарий", СсылкаНаКонтрагента.Комментарий);

ОбластьМакета.Параметры.ПредставлениеГрузополучателя = ФормированиеПечатныхФорм.ОписаниеОрганизации(
    СведенияОГрузополучателе, 
    "ПолноеНаименование,ИНН,Комментарий,ФактическийАдрес"
);

Способ 2. Прямая конкатенация строк в коде:


Представление = ФормированиеПечатныхФорм.ОписаниеОрганизации(
    СведенияОГрузополучателе, 
    "ПолноеНаименование,ИНН,ФактическийАдрес"
);

Если ЗначениеЗаполнено(СсылкаНаКонтрагента.Комментарий) Тогда
    Представление = Представление + ", " + СсылкаНаКонтрагента.Комментарий;
КонецЕсли;

ОбластьМакета.Параметры.ПредставлениеГрузополучателя = Представление;

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

← На главную