В типовых конфигурациях 1С, таких как Управление торговлей 11, ERP или Комплексная автоматизация, журнал платежей объединяет в себе документы различных типов: ПоступлениеБезналичныхДенежныхСредств, СписаниеБезналичныхДенежныхСредств, ПриходныйКассовыйОрдер, РасходныйКассовыйОрдер и другие. Часто пользователям требуется видеть статью движения денежных средств (ДДС) непосредственно в списке. Однако стандартное добавление поля через «Изменить форму» часто приводит к тому, что колонка остается пустой. Разберем подробно, почему это происходит и как правильно решить задачу.
Основная сложность заключается в структуре хранения данных. В документах денежных средств статья ДДС может находиться в двух разных местах:
РасшифровкаПлатежа: это стандарт для операций оплаты поставщику, поступления от клиента и других хозяйственных операций, где один платеж может быть разбит по нескольким договорам или статьям.Когда мы просто пытаемся вытащить реквизит СтатьяДвиженияДенежныхСредств через точку от ссылки в динамическом списке, система обращается к реквизиту шапки. Если документ оформлен с использованием расшифровки (табличной части), реквизит шапки остается пустым, и в журнале мы видим пустое поле.
Для решения задачи нам потребуется изменить основную таблицу журнала на «Произвольный запрос». Рассмотрим, как объединить данные из разных типов документов в одну колонку. Нам необходимо в тексте запроса динамического списка прописать условия выбора статьи из разных источников.
Проанализируем пример кода, который позволяет собрать статью из разных документов, используя конструкцию ВЫБОР КОГДА. Допустим, мы делаем левое соединение с основными таблицами документов:
ВЫБОР
КОГДА ТипЗначения(Журнал.Ссылка) = ТИП(Документ.РасходныйКассовыйОрдер)
ТОГДА РасходныйКассовыйОрдер.СтатьяДвиженияДенежныхСредств
КОГДА ТипЗначения(Журнал.Ссылка) = ТИП(Документ.ПоступлениеБезналичныхДенежныхСредств)
ТОГДА ПоступлениеБезналичныхДенежныхСредств.СтатьяДДС
ИНАЧЕ Журнал.Ссылка.СтатьяДвиженияДенежныхСредств
КОНЕЦ КАК СтатьяДДС
Однако, как мы выяснили, статья чаще всего лежит в табличной части. Чтобы не «размножать» строки в журнале из-за нескольких строк в расшифровке платежа, нам нужно получить только одну (первую или максимальную) статью из ТЧ.
Чтобы корректно вывести статью, которая находится в табличной части, нам нужно использовать вложенный запрос с группировкой. Это позволит избежать дублирования строк в журнале, если в одном документе указано несколько статей ДДС.
Рассмотрим по шагам, как построить такой запрос в динамическом списке:
МАКСИМУМ или МИНИМУМ по полю СтатьяДвиженияДенежныхСредств.Ссылка.Пример реализации в тексте запроса:
ВЫБРАТЬ
Журнал.Ссылка,
Журнал.Дата,
Журнал.Номер,
ЕСТЬNULL(ТЧ_Статьи.СтатьяДДС, Журнал.Ссылка.СтатьяДвиженияДенежныхСредств) КАК СтатьяДДС
ИЗ
ЖурналДокументов.Платежи КАК Журнал
ЛЕВОЕ СОЕДИНЕНИЕ (
ВЫБРАТЬ
Ссылка КАК Ссылка,
МАКСИМУМ(СтатьяДвиженияДенежныхСредств) КАК СтатьяДДС
ИЗ
Документ.СписаниеБезналичныхДенежныхСредств.РасшифровкаПлатежа
СГРУППИРОВАТЬ ПО Ссылка
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
Ссылка,
МАКСИМУМ(СтатьяДвиженияДенежныхСредств)
ИЗ
Документ.ПоступлениеБезналичныхДенежныхСредств.РасшифровкаПлатежа
СГРУППИРОВАТЬ ПО Ссылка
) КАК ТЧ_Статьи ПО Журнал.Ссылка = ТЧ_Статьи.Ссылка
Важный момент: Использование МАКСИМУМ гарантирует, что для одного документа в списке будет ровно одна строка, даже если бухгалтер указал пять разных статей в расшифровке.
Выясним причину, по которой запросы к табличным частям могут замедлять работу системы. Динамический список выполняет запрос при каждой прокрутке. Если база данных содержит сотни тысяч документов, множественные левые соединения с тяжелыми табличными частями могут вызвать «фризы» интерфейса.
Разберем более производительный вариант. В 1С:УТ 11 данные о движениях денежных средств всегда записываются в регистры: ДенежныеСредстваБезналичные или ДенежныеСредстваНаличные. В этих регистрах статья ДДС — это измерение или реквизит, и она там всегда одна (или разделена по движениям).
Посмотрим на пример запроса к регистру:
ВЫБРАТЬ
Журнал.Ссылка,
(ВЫБРАТЬ ПЕРВЫЕ 1 Рег.СтатьяДвиженияДенежныхСредств
ИЗ РегистрНакопления.ДенежныеСредстваБезналичные КАК Рег
ГДЕ Рег.Регистратор = Журнал.Ссылка) КАК СтатьяИзРегистра
ИЗ
ЖурналДокументов.Платежи КАК Журнал
Этот метод работает быстрее, так как регистры накопления лучше индексированы для поиска по регистратору, чем табличные части документов.
Чтобы сохранить возможность беспрепятственного обновления конфигурации, настоятельно рекомендуем выполнять эти изменения через расширение. Проанализируем последовательность действий:
Список установите флаг ПроизвольныйЗапрос.СтатьяДДС на форму в дерево элементов.Проанализируем ситуацию с типами данных: Если вы используете ОБЪЕДИНИТЬ ВСЕ или сложные соединения, убедитесь, что поле в итоге имеет тип СправочникСсылка.СтатьиДвиженияДенежныхСредств. Это позволит пользователям использовать стандартный поиск и отбор по этой колонке.
Мы рассмотрели несколько подходов к выводу статьи ДДС в журнал платежей. Самый простой путь через ВЫБОР КОГДА удобен при небольшом количестве типов документов. Использование вложенных запросов к табличным частям через МАКСИМУМ решает проблему пустых полей в расшифровках. А обращение к регистрам накопления является наиболее профессиональным и оптимизированным решением для крупных информационных баз.
Выбирайте метод в зависимости от объемов вашей базы и требований к скорости работы интерфейса. Помните, что корректная настройка индексов и использование основной таблицы в динамическом списке — залог стабильной работы программы.