. Доработка ERP 2 для отражения акциза при реализации подакцизных товаров (табачной продукции)
Доработка ERP 2 для отражения акциза при реализации подакцизных товаров (табачной продукции)

Доработка ERP 2 для отражения акциза при реализации подакцизных товаров (табачной продукции)

Опираясь на опыт реализации учета акцизов в УПП, решили реализовывать как можно меньшим изменением кода конфигурации.

При продаже подакцизных товаров рассчитывать и накапливать суммы акцизов, отражая их печатных формах СЧЕТ-ФАКТУРА и ТОРГ-12(особая форма). В дальнейшем собирать эти сведения для заполнения Налоговой декларации по акцизам на табачные изделия.

План решения:

В документе РеализацияТоваровУслуг добавить колонку «Акциз» в таблице "Товары", проработать ее заполнение. Сформировать проводку по акцизу. Изменить печатные формы.

1. Создание и вывод столбца "Акциз" в закладке «Товары» на форме документа.

Снимаем с поддержки только корень документа «РеализацияТоваровУслуг»

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

Снимаем с поддержки общий модуль «МодификацияКонфигурацииПереопределяемый». В нем в процедуру «ПриСозданииНаСервере» добавляем код вызова нашей процедуры для модернизации формы документа:

Создаем общий модуль «ИТ_РаботаСДиалогами» с флагами «Сервер», «ВызовСервера». Добавляем в него процедуру:

2. Расчет и заполнение поля «Акциз» при работе на форме документа с табличной частью «Товары».

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

Приступаем к форме документа «РеализацияТоваровУслуг». Нужно выявить события, которые вызываются при изменении в табличной части «Товары», а вернее ее реквизитов: «Номенклатура», «Характеристика», «Количество упаковок», «Единица упаковки». Разбор полетов показал, что 1С нам приготовила всего два переопределяемых обработчика событий, это «НоменклатураПриИзмененииПереопределяемый» и «ХарактеристикаПриИзмененииПереопределяемый». К сожалению я не нашел никаких переопределяемых процедур для перехвата события при изменений упаковки или количества упаковок (если я неправ, поправите меня в комментариях). Значит придется снимать с поддержки форму документа и вставлять вызов функции пересчета акциза в каждое из четырех событий формы:

Теперь пропишем функции, которую мы вызываем из формы документа, для расчета акциза. Для этого в глобальном модуле создаем «ИТ_АкцизКлиент». В свойствах модуля ставим флаг «Клиент (управляемое приложение)». Создаем процедуру:

Дополнительные функции «ПолучитьТвердуюСтавкуДляСигарет», «ПолучитьАдвалорнуюСтавкуДляСигарет», «ПолучитьМинимальнуюСтавкуДляСигарет», «СведенияОПодакцизнойНоменклатуре» и «ВытащитьМРЦИзХарактеристикиНоменклатуры» описывать в этой статье не буду. По их названию и так понятно что они делают.

3. Формирование дополнительной проводки Дт 90.04 Кт 68.03 в документе РеализацияТоваровУслуг на сумму акциза.

Все проводки в ЕРП2 формируются при помощи запроса.

Любой документ в ЕРП, генерирующий проводки, в модуле менеджера содержит экспортную функцию «ТекстОтраженияВРеглУчете()» . Эта функция всегда возвращает текст запроса, который при выполнении должен вернуть таблицу проводок.

Формат запроса можно подглядеть вот здесь: РеглУчетВыборкиСерверПовтИсп .ТекстИнициализации()

Более того, формируя запрос для проводок, можно обращаться к разным данным во временных таблицах. Они формируются в РеглУчетВыборкиСерверПовтИсп.ЗапросДанных(). Если быть честным, то именно эта процедура вызывается при проведении документа, а уже она собирает все необходимые данные для отражения проводок в виде запроса. (Советую посмотреть ее содержимое).

Возвращаемся к нашей функции «ТекстОтраженияВРеглУчете()» в менеджере документа «РеализацияТоваровУслуг». Добавляем строку:

В общий модуль «ИТ_АкцизСервер» добавляем функцию формирования текста запроса для нашей проводки.

Все, проводка готова.

4. Дорабатываем печатную форму С/Ф.

Такие печатные формы как Счет-Фактура или Торг-12 вынесены в отдельную обработку «ПечатьОбщихФорм». Для ее доработки снимаем ее корень с поддержки.

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

и меняем участок кода на:

И тут есть небольшая проблема. В качестве передаваемой переменной «СтрокаТовары» передается не строка из табличной части «Товары», а строка результата запроса с выборкой из табличной части «ВидыЗапасов».

Сначала я хотел вклиниться в этот запрос, формирующий список строк, но этот запрос использовался во многих местах и количество вмешательств в конфигурацию было слишком велико. Решил эту проблему путем преобразования строки «ВидыЗапасов» в строку «Товары» в своей процедуре. Уверен, что так делать не правильно, но нашу задачу это решило. Итак, добавляем в наш общий модуль «ИТ_АкцизСервер» функцию:

Аналогичным способом меняет ТОРГ-12., правда в унифицированной форме акциза нет, пришлось дорисовывать в отдельный макет.

📎📎📎📎📎📎📎📎📎📎