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