Как добавить колонку со статьей движения денежных средств в журнал платежей 1С:УТ 11

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

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

Проанализируем причину проблемы

Основная сложность заключается в структуре хранения данных. В документах денежных средств статья ДДС может находиться в двух разных местах:

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

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

Способ 1: Использование произвольного запроса с объединением полей

Для решения задачи нам потребуется изменить основную таблицу журнала на «Произвольный запрос». Рассмотрим, как объединить данные из разных типов документов в одну колонку. Нам необходимо в тексте запроса динамического списка прописать условия выбора статьи из разных источников.

Проанализируем пример кода, который позволяет собрать статью из разных документов, используя конструкцию ВЫБОР КОГДА. Допустим, мы делаем левое соединение с основными таблицами документов:


ВЫБОР
    КОГДА ТипЗначения(Журнал.Ссылка) = ТИП(Документ.РасходныйКассовыйОрдер)
        ТОГДА РасходныйКассовыйОрдер.СтатьяДвиженияДенежныхСредств
    КОГДА ТипЗначения(Журнал.Ссылка) = ТИП(Документ.ПоступлениеБезналичныхДенежныхСредств)
        ТОГДА ПоступлениеБезналичныхДенежныхСредств.СтатьяДДС
    ИНАЧЕ Журнал.Ссылка.СтатьяДвиженияДенежныхСредств
КОНЕЦ КАК СтатьяДДС

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

Способ 2: Получение статьи из табличной части (оптимальный запрос)

Чтобы корректно вывести статью, которая находится в табличной части, нам нужно использовать вложенный запрос с группировкой. Это позволит избежать дублирования строк в журнале, если в одном документе указано несколько статей ДДС.

Рассмотрим по шагам, как построить такой запрос в динамическом списке:

  1. Создаем вложенный запрос к табличным частям всех интересующих нас документов.
  2. Используем агрегатную функцию МАКСИМУМ или МИНИМУМ по полю СтатьяДвиженияДенежныхСредств.
  3. Соединяем этот запрос с основной таблицей журнала по полю Ссылка.

Пример реализации в тексте запроса:


ВЫБРАТЬ
    Журнал.Ссылка,
    Журнал.Дата,
    Журнал.Номер,
    ЕСТЬNULL(ТЧ_Статьи.СтатьяДДС, Журнал.Ссылка.СтатьяДвиженияДенежныхСредств) КАК СтатьяДДС
ИЗ
    ЖурналДокументов.Платежи КАК Журнал
ЛЕВОЕ СОЕДИНЕНИЕ (
    ВЫБРАТЬ
        Ссылка КАК Ссылка,
        МАКСИМУМ(СтатьяДвиженияДенежныхСредств) КАК СтатьяДДС
    ИЗ
        Документ.СписаниеБезналичныхДенежныхСредств.РасшифровкаПлатежа
    СГРУППИРОВАТЬ ПО Ссылка
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        Ссылка,
        МАКСИМУМ(СтатьяДвиженияДенежныхСредств)
    ИЗ
        Документ.ПоступлениеБезналичныхДенежныхСредств.РасшифровкаПлатежа
    СГРУППИРОВАТЬ ПО Ссылка
) КАК ТЧ_Статьи ПО Журнал.Ссылка = ТЧ_Статьи.Ссылка

Важный момент: Использование МАКСИМУМ гарантирует, что для одного документа в списке будет ровно одна строка, даже если бухгалтер указал пять разных статей в расшифровке.

Способ 3: Обращение к регистрам накопления (производительность)

Выясним причину, по которой запросы к табличным частям могут замедлять работу системы. Динамический список выполняет запрос при каждой прокрутке. Если база данных содержит сотни тысяч документов, множественные левые соединения с тяжелыми табличными частями могут вызвать «фризы» интерфейса.

Разберем более производительный вариант. В 1С:УТ 11 данные о движениях денежных средств всегда записываются в регистры: ДенежныеСредстваБезналичные или ДенежныеСредстваНаличные. В этих регистрах статья ДДС — это измерение или реквизит, и она там всегда одна (или разделена по движениям).

Посмотрим на пример запроса к регистру:


ВЫБРАТЬ
    Журнал.Ссылка,
    (ВЫБРАТЬ ПЕРВЫЕ 1 Рег.СтатьяДвиженияДенежныхСредств 
     ИЗ РегистрНакопления.ДенежныеСредстваБезналичные КАК Рег 
     ГДЕ Рег.Регистратор = Журнал.Ссылка) КАК СтатьяИзРегистра
ИЗ
    ЖурналДокументов.Платежи КАК Журнал

Этот метод работает быстрее, так как регистры накопления лучше индексированы для поиска по регистратору, чем табличные части документов.

Рекомендации по реализации в расширении

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

  1. Создайте новое расширение.
  2. Добавьте в расширение форму списка журнала платежей.
  3. В свойствах динамического списка Список установите флаг ПроизвольныйЗапрос.
  4. Нажмите «Открыть» рядом с текстом запроса и внесите правки, используя один из рассмотренных выше способов.
  5. Вытащите новое поле СтатьяДДС на форму в дерево элементов.

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

Заключение

Мы рассмотрели несколько подходов к выводу статьи ДДС в журнал платежей. Самый простой путь через ВЫБОР КОГДА удобен при небольшом количестве типов документов. Использование вложенных запросов к табличным частям через МАКСИМУМ решает проблему пустых полей в расшифровках. А обращение к регистрам накопления является наиболее профессиональным и оптимизированным решением для крупных информационных баз.

Выбирайте метод в зависимости от объемов вашей базы и требований к скорости работы интерфейса. Помните, что корректная настройка индексов и использование основной таблицы в динамическом списке — залог стабильной работы программы.

← На главную