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

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

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

В этой статье мы подробно разберем практический кейс: как в Универсальном отчете по регистру сведений СведенияТаможенныхДекларацийЭкспорт получить ссылку на подчиненный документ Счет-фактура выданный, а также настроить вывод его номера в красивом «печатном» формате — без внутренних префиксов базы данных и лидирующих нулей (например, преобразовать «00БП-0002811» в «2811»).

Постановка задачи и анализ взаимосвязи данных

Для начала проанализируем структуру хранения данных в системе. Регистр сведений СведенияТаможенныхДекларацийЭкспорт содержит сведения о таможенных декларациях и ссылается на документ отгрузки через измерение ДокументОтгрузки (обычно это документ Реализация (акты, накладные, УПД)).

Документ Счет-фактура выданный не связан напрямую с регистром таможенных деклараций. Однако он всегда содержит ссылку на документ отгрузки в качестве своего документа-основания. Схематично эту цепочку связи можно представить следующим образом:

[Регистр сведений] -> [Документ отгрузки (Реализация)] <- [Документ-основание] <- [Счет-фактура выданный]

Наша задача — настроить систему компоновки данных (СКД) Универсального отчета таким образом, чтобы она автоматически находила соответствующий счет-фактуру по документу отгрузки и выводила его очищенный номер.

Шаг 1. Изменение схемы компоновки данных в Универсальном отчете

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

Рассмотрим пошагово, как получить доступ к редактированию схемы:

  1. Запустите базу данных 1С:Бухгалтерия в режиме Толстого клиента.
  2. Откройте Универсальный отчет (раздел «Отчеты» — «Стандартные отчеты» — «Универсальный отчет»).
  3. Выберите тип объекта «Регистр сведений» и таблицу «СведенияТаможенныхДекларацийЭкспорт».
  4. В правом верхнем углу нажмите кнопку Еще и выберите пункт Редактировать схему. Перед вами откроется конструктор схемы компоновки данных.

После открытия конструктора мы можем напрямую изменять SQL-подобный запрос, который используется для формирования отчета.

Шаг 2. Настройка запроса СКД и связывание таблиц (избегаем проблемы N+1)

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

Важное архитектурное замечание: некоторые разработчики пытаются решить задачу программным вызовом функций вида УчетНДСПереопределяемый.НайтиПодчиненныйСчетФактуруВыданныйНаРеализацию(ДокументОтгрузки) прямо в вычисляемых полях. Делать так крайне не рекомендуется! Если в вашем отчете будет 10 000 строк, система выполнит 10 000 отдельных точечных запросов к базе данных (классическая проблема производительности N+1). Это приведет к колоссальным задержкам и зависанию системы.

Правильный и производительный способ — использовать ЛЕВОЕ СОЕДИНЕНИЕ в самом запросе схемы компоновки данных. Перейдем на вкладку «Наборы данных» и скорректируем текст запроса, добавив соединение с табличной частью документов-оснований счетов-фактур:


ВЫБРАТЬ
	ТаможенныйРегистр.Период КАК Период,
	ТаможенныйРегистр.Регистратор КАК Регистратор,
	ТаможенныйРегистр.ДокументОтгрузки КАК ДокументОтгрузки,
	// Получаем ссылку на подчиненный счет-фактуру
	ЕСТЬNULL(СчетФактураДокумент.Ссылка, ЗНАЧЕНИЕ(Документ.СчетФактураВыданный.ПустаяСсылка)) КАК СчетФактура,
	// Получаем исходный номер счета-фактуры для последующей обработки
	ЕСТЬNULL(СчетФактураДокумент.Номер, "") КАК НомерСФ
ИЗ
	РегистрСведений.СведенияТаможенныхДекларацийЭкспорт КАК ТаможенныйРегистр
	
	// Соединяем по табличной части документов-оснований счетов-фактур
	ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетФактураВыданный.ДокументыОснования КАК СФОснования
		ПО ТаможенныйРегистр.ДокументОтгрузки = СФОснования.ДокументОснования
		И НЕ СФОснования.Ссылка.ПометкаУдаления
		
	// Получаем реквизиты самого документа Счет-фактура выданный
	ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетФактураВыданный КАК СчетФактураДокумент
		ПО СФОснования.Ссылка = СчетФактураДокумент.Ссылка
		И НЕ СчетФактураДокумент.ПометкаУдаления

При таком подходе СУБД объединит все данные за один сетевой пакет, что обеспечит мгновенное формирование отчета даже на больших массивах информации.

Шаг 3. Очистка номера счета-фактуры от префиксов и лидирующих нулей

По умолчанию номера документов в 1С хранятся в полном формате, содержащем код информационной базы, префикс организации и череду лидирующих нулей (например, «00БП-0002811»). Бухгалтерам для работы и предоставления отчетности в налоговые органы требуется чистый номер — «2811».

Для решения этой задачи мы задействуем стандартные механизмы Библиотеки стандартных подсистем (БСП), интегрированной в 1С:Бухгалтерию 3.0.

Важное обновление БСП: в старых версиях конфигураций использовалась функция ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать(). В современных версиях 1С:Бухгалтерии 3.0 эта функция была переименована. Актуальный метод называется ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(). При попытке использовать старое имя функции на новой конфигурации система выдаст критическую ошибку выполнения.

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

Вариант А. Настройка через Выражение представления поля

Это самый лаконичный способ, при котором само поле СчетФактура в отчете останется полноценной ссылкой (по ней можно будет кликнуть и перейти в документ), но отображаться для пользователя оно будет в виде красивого номера.

Выполним следующие действия в конструкторе СКД:

  1. Перейдем на вкладку Наборы данных.
  2. Найдем в таблице полей поле СчетФактура (или добавленное нами строковое поле НомерСФ).
  3. В колонке Выражение представления пропишем вызов экспортной функции общего модуля:

ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(НомерСФ, Истина, Ложь)

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

Вариант Б. Создание Вычисляемого поля

Если вам требуется вывести очищенный номер в виде отдельной текстовой колонки, выполните следующие действия:

  1. Перейдите на вкладку Вычисляемые поля в конструкторе СКД.
  2. Добавьте новую строку со следующими параметрами:
    • Путь к данным: НомерСФПечать
    • Выражение: ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(НомерСФ, Истина, Ложь)
    • Заголовок: Номер СФ (печать)
  3. Перейдите на вкладку Настройки и добавьте поле НомерСФПечать в список выбранных полей отчета.

Важное различие между Вычисляемыми и Пользовательскими полями

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

Проанализируем, почему этот вариант не сработает. Платформа 1С жестко разграничивает безопасность выполнения кода:

Поэтому обращение к функциям общего модуля ПрефиксацияОбъектовКлиентСервер жизнеспособно только внутри разработческих вычисляемых полей или выражений представления набора данных.

Рекомендация по надежному внедрению: Внешний отчет вместо редактирования схемы

Хотя редактирование схемы Универсального отчета «на лету» через толстый клиент полностью решает текущую задачу, этот подход имеет один существенный недостаток. Все изменения схемы сохраняются в кэше настроек конкретного пользователя.

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

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

  1. В режиме Конфигуратора создайте новый внешний отчет и откройте его основную схему компоновки данных.
  2. Перенесите туда спроектированный нами запрос с левым соединением и настроенными вычисляемыми полями.
  3. Сохраните отчет на жесткий диск как файл с расширением .erf.
  4. Зарегистрируйте его в пользовательском режиме через справочник Дополнительные отчеты и обработки (раздел «Администрирование» — «Печатные формы, отчеты и обработки»).

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

← На главную