При ведении учета в нескольких конфигурациях 1С, например, при связке 1С:Управление нашей фирмой (УНФ) и 1С:Бухгалтерия предприятия 3.0 (БП), часто возникает проблема с передачей данных о скидках. Пользователи сталкиваются с ситуацией, когда в документе «Реализация (акт, накладная)» итоговая сумма верна, но в печатной форме ТОРГ-12 в 11-м столбце (цена за единицу) отображается базовая цена без учета скидки. Это вызывает недовольство бухгалтерии и контрагентов, так как нарушается логика расчета: «Цена * Количество = Сумма».
В данной статье мы разберем причины этой проблемы, проанализируем техническую сторону обмена данными и рассмотрим способы исправления ситуации через доработку правил конвертации.
Проанализируем ситуацию. В типовой конфигурации 1С:Бухгалтерия 3.0 механизм работы со скидками реализован иначе, чем в торговых конфигурациях. Если в документе реализации в БП не включен признак использования скидок, система просто не видит соответствующие поля в табличной части, даже если они заполнены технически.
Алгоритм формирования печатной формы ТОРГ-12 в МодулеМенеджера документа РеализацияТоваровУслуг часто использует расчетный метод. Цена для колонки 11 вычисляется как Сумма / Количество. Однако, если при обмене из УНФ данные попали в документ некорректно (например, сумма передана с учетом скидки, а цена осталась «старой»), или если в БП не установлен реквизит ВидСкидки, печатная форма может отображать данные не так, как ожидается.
Основная причина кроется в синхронизации данных через универсальный формат (EnterpriseData). Менеджер обмена при загрузке данных в Бухгалтерию может игнорировать поля скидок, если не прописаны соответствующие правила в модуле конвертации.
Выясним причину на уровне кода. При обмене между УНФ и БП используется объект МенеджерОбменаЧерезУниверсальныйФормат. Рассмотрим, как происходит загрузка документа ЗаказКлиента или РеализацияТоваровУслуг.
Для того чтобы 1С:Бухгалтерия «поняла», что в строках есть скидка, в документе должен быть заполнен реквизит ВидСкидки. Это перечисление, которое может принимать значения:
Если этот реквизит при загрузке остается в положении «Без скидок» (по умолчанию), то колонки ПроцентСкидкиНаценки и СуммаСкидкиНаценки в табличной части игнорируются интерфейсом и алгоритмами печати.
Рассмотрим подробнее процесс модификации правил обмена. Если вы столкнулись с тем, что информация о скидках теряется, необходимо внести изменения в процедуру обработки получения данных. Нам нужно заставить систему устанавливать ВидСкидки в значение Скидка на отдельные позиции при наличии данных о скидке в XML-файле обмена.
Проанализируем пример кода, который необходимо добавить в процедуру ДобавитьПКО_Документ_ЗаказКлиента_Получение (или аналогичную для Реализации) в модуле менеджера обмена:
// В обработчике ПКС (Правила конвертации свойств) табличной части
ДобавитьПКС(СвойстваТЧ, "ПроцентСкидкиНаценки", "", 1);
ДобавитьПКС(СвойстваТЧ, "СуммаСкидкиНаценки", "", 1);
// В структуре правил заполнения
ПравилаЗаполнения.Вставить("ПроцентСкидкиНаценки", "ПроцентСкидки");
ПравилаЗаполнения.Вставить("СуммаСкидкиНаценки", "СуммаСкидки");
Однако простого добавления полей недостаточно. Чтобы документ «ожил», нужно установить ВидСкидки. Проанализируем, как это сделать в логике EnterpriseData. В момент загрузки объекта (событие ПослеЗагрузкиОбъекта или внутри правил обработки данных) необходимо проверить: если хотя бы в одной строке табличной части Товары сумма скидки не равна нулю, то реквизиту ВидСкидки присваивается соответствующее значение перечисления.
Важный момент: если вы не хотите глубоко внедряться в код обмена, проверьте, включена ли в настройках БП функциональность «Скидки». Путь: Главное — Функциональность — Торговля — Продажи — Скидки. Без этой галочки колонки в документе не появятся вовсе.
Посмотрим на ситуацию с другой стороны. Если правка кода обмена кажется слишком трудоемкой, можно изменить логику передачи данных на стороне источника (УНФ).
В настройках синхронизации или через доработку правил выгрузки в УНФ можно настроить передачу цены уже за вычетом скидки. В этом случае в поле Цена в Бухгалтерию будет приходить итоговая цена реализации.
Преимущества такого подхода:
Рассмотрим опасения пользователей относительно «законности» изменения формы. Некоторые участники обсуждения утверждают, что ТОРГ-12 регламентирована законом и ее нельзя трогать. Это не совсем так.
С 1 января 2013 года формы первичных учетных документов, содержащиеся в альбомах унифицированных форм первичной учетной документации, не являются обязательными к применению (согласно Федеральному закону № 402-ФЗ «О бухгалтерском учете»). Организация имеет право разработать свою форму на базе ТОРГ-12, добавив или убрав колонки, при условии сохранения обязательных реквизитов первичного документа.
Тем не менее, большинство компаний предпочитают стандартный вид. Поэтому наиболее правильным решением с точки зрения методологии 1С является именно приведение реквизита Цена в соответствие с фактической ценой продажи (со скидкой).
Проанализировав все способы, составим пошаговый план действий для программиста:
ПроцентСкидки и СуммаСкидки в XML-пакете.ВидСкидки. Используйте установку значения Перечисления.ВидыСкидокНаценок.СкидкаНаОtdelnyePozitsii.Таким образом, проблема решается либо на этапе передачи данных (передаем цену с учетом скидки), либо на этапе приема (настраиваем БП на корректное восприятие скидок через реквизит ВидСкидки). Второй вариант более гибкий, так как сохраняет информацию о размере предоставленной скидки в базе данных Бухгалтерии для последующего анализа.