Как вывести сумму НДС в форму списка платежных поручений в 1С:Бухгалтерия 3.0?

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

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

Почему нельзя просто добавить поле через «Изменить форму»?

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

Шаг 1: Добавление реквизита в объект

Первым делом нам необходимо создать место для хранения данных. Рассмотрим последовательность действий в конфигураторе:

  1. Найдем в дереве метаданных документ ПлатежноеПоручение (или СписаниеСРасчетногоСчета, в зависимости от задачи).
  2. В ветке Реквизиты добавим новый элемент с именем СуммаНДСДокумента.
  3. Установим тип данных — Число, длина 15, точность 2, неотрицательное.

Важный нюанс: Если вы не хотите снимать конфигурацию с поддержки, крайне рекомендуется выполнять эти действия в Расширении конфигурации. Это позволит сохранить возможность типового обновления программы.

Шаг 2: Программный расчет суммы НДС при записи

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

Разберем пример кода:


Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    // Суммируем итог по колонке СуммаНДС табличной части РасшифровкаПлатежа
    СуммаНДСДокумента = РасшифровкаПлатежа.Итог("СуммаНДС");
КонецПроцедуры

Однако, как выяснилось в ходе обсуждения на форуме, такой простой код может привести к ошибкам в документах по выплате зарплаты. В таких операциях НДС отсутствует, но из-за особенностей механизмов 1С там могут возникать ненужные значения. Проанализируем, как добавить проверку вида операции:


Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    // Проверяем, не является ли операция выплатой зарплаты или налогов
    Если ВидОперации = Перечисления.ВидыОперацийСписаниеДенежныхСредств.ПеречислениеЗарплаты 
        ИЛИ ВидОперации = Перечисления.ВидыОперацийСписаниеДенежныхСредств.ПеречислениеНалога Тогда
        СуммаНДСДокумента = 0;
    Иначе
        СуммаНДСДокумента = РасшифровкаПлатежа.Итог("СуммаНДС");
    КонецЕсли;
КонецПроцедуры

Шаг 3: Вывод реквизита в форму списка через Динамический список

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

Выполним следующие шаги:

  1. Откроем форму списка документа.
  2. Перейдем в свойства элемента Список и откроем настройку Настройка списка.
  3. В открывшемся окне редактирования запроса нам нужно добавить наше новое поле в текст SQL-подобного запроса.

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


ВЫБРАТЬ
    ДокументПлатежноеПоручение.Ссылка,
    ДокументПлатежноеПоручение.Дата,
    ДокументПлатежноеПоручение.Номер,
    ДокументПлатежноеПоручение.СуммаДокумента,
    // Добавляем наше поле
    ДокументПлатежноеПоручение.СуммаНДСДокумента КАК СуммаНДСДокумента,
    ДокументПлатежноеПоручение.Контрагент
ИЗ
    Документ.ПлатежноеПоручение КАК ДокументПлатежноеПоручение

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

Шаг 4: Обновление старых документов

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

Мы можем воспользоваться стандартной обработкой «Групповое изменение реквизитов». Выберите нужный тип документа, добавьте условие по периоду и в списке реквизитов найдите СуммаНДСДокумента. Если просто перезаписать документы (выполнив метод Записать()), сработает наш код в ПередЗаписью, и суммы актуализируются автоматически.

Дополнительные рекомендации

При работе с суммами НДС в платежных документах стоит учитывать следующие технические детали:

Таким образом, мы успешно решили задачу по выводу НДС в список, обеспечив корректность данных и высокую скорость работы интерфейса.

← На главную