Как в отчете СКД вывести номер таможенной декларации или УПД в зависимости от условий

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

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

Анализ структуры данных в УТ 11.4

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

  1. Приобретение товаров и услуг: содержит поля НомерВходящегоДокумента и ДатаВходящегоДокумента. Именно эти данные зачастую подразумеваются под "номером УПД", если документ пришел в бумажном виде.
  2. Таможенная декларация на импорт: отдельный документ, который ссылается на поступление. В нем нас интересует поле НомерДекларации.

Важно помнить, что связь между этими объектами реализуется через Левое соединение. Если использовать внутреннее соединение, то при отсутствии таможенной декларации документ приобретения просто не попадет в отчет.

Решение 1: Использование конструкции ВЫБОР в запросе СКД

Самый производительный способ — реализовать логику на уровне языка запросов. Рассмотрим пример правильного написания условия. Основная ошибка начинающих разработчиков заключается в попытке сравнить ссылку на документ или поле номера с пустой строкой "". В 1С для ссылочных типов правильнее проверять на NULL или на пустую ссылку.

Проанализируем пример кода для набора данных:


ВЫБРАТЬ
    ПриобретениеТоваровУслуг.Ссылка КАК ДокументПоступления,
    ВЫБОР
        КОГДА ТаможеннаяДекларацияИмпорт.Ссылка ЕСТЬ NULL 
            ТОГДА ПриобретениеТоваровУслуг.НомерВходящегоДокумента + " от " + ФОРМАТ(ПриобретениеТоваровУслуг.ДатаВходящегоДокумента, "ДЛФ=D")
        ИНАЧЕ ТаможеннаяДекларацияИмпорт.Номер
    КОНЕЦ КАК НомерПриходногоДокумента
ИЗ
    Документ.ПриобретениеТоваровУслуг КАК ПриобретениеТоваровУслуг
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.ТаможеннаяДекларацияИмпорт КАК ТаможеннаяДекларацияИмпорт
        ПО ТаможеннаяДекларацияИмпорт.ДокументОснование = ПриобретениеТоваровУслуг.Ссылка

Важный нюанс: Обратите внимание на условие ЕСТЬ NULL. Оно сработает только в том случае, если в результате левого соединения запись в таблице таможенных деклараций не была найдена. Если же вы проверяете само строковое поле номера, используйте сравнение с пустой строкой, но помните о пробелах.

Решение 2: Вывод данных через вычисляемые поля и функции общего модуля

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

Шаг 1. Создадим функцию в общем модуле. Модуль должен иметь флаг "Сервер" и "Вызов сервера". Разберем пример функции, которая анализирует переданные значения:


Функция ВычислитьНомерДату(НомерГТД, НомерВходящий, ДатаВходящая) Экспорт
    // Проверяем, заполнена ли информация по таможне
    Если ЗначениеЗаполнено(НомерГТД) Тогда
        Возврат НомерГТД;
    КонецЕсли;
    
    // Если таможни нет, формируем строку из данных УПД
    Если ЗначениеЗаполнено(НомерВходящий) Тогда
        Возврат СокрЛП(НомерВходящий) + " от " + Формат(ДатаВходящая, "ДФ=dd.MM.yyyy");
    КонецЕсли;
    
    Возврат "Номер не указан";
КонецФункции

Шаг 2. В схеме компоновки данных переходим на закладку "Вычисляемые поля". Добавляем новое поле НомерДокументаДляОтчета и в колонке "Выражение" прописываем вызов нашей функции:

ИмяВашегоОбщегоМодуля.ВычислитьНомерДату(НомерДекларации, НомерВходящегоДокумента, ДатаВходящегоДокумента)

Типичные ошибки и способы их устранения

Рассмотрим ситуации, из-за которых отчет может выводить пустые значения или работать некорректно:

Профессиональный совет по оформлению номеров

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

ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(НомерДокумента)

Это позволит привести системный номер вида "УТ00-000123" к читаемому виду "123".

Подведем итог: для корректного вывода данных в отчете СКД важно правильно выбрать тип соединения таблиц (всегда ЛЕВОЕ от главного документа к подчиненному) и грамотно составить условие ВЫБОР. Использование функций общих модулей делает отчет более гибким в настройке и позволяет реализовать любую логику представления данных, недоступную в обычном языке запросов.

← На главную