В практике торгового учета часто возникает ситуация, когда базовая единица измерения слишком велика для розничной или мелкооптовой продажи. Например, товар закупается в километрах, а продается в метрах. Если цена за 1 километр составляет 75 евро, то цена за 1 метр должна составлять 0,075 евро. Однако стандартные настройки большинства конфигураций 1С (УТ 11, ERP, КА, Бухгалтерия) ограничивают точность цены двумя знаками после запятой, округляя 0,075 до 0,08. Это приводит к существенным потерям при больших объемах реализации.
В данной статье мы разберем несколько способов решения этой проблемы: от «чистых» методов, не требующих программирования, до глубокой модификации конфигурации.
Прежде чем приступать к изменению программного кода, проанализируем штатные возможности системы. В 1С:Предприятие 8 реализован мощный механизм упаковок, который позволяет хранить остатки в одних единицах, а устанавливать цены — в других.
Рассмотрим по шагам, как это настроить:
Преимущество: Этот метод не требует снятия конфигурации с поддержки и гарантирует корректное обновление программы в будущем.
Проанализируем ситуацию, когда необходимо видеть цену именно с четырьмя знаками в интерфейсе, но менять конфигурацию нельзя. Для этого можно использовать механизм валют.
Выясним причину, почему это работает: расчеты в 1С всегда опираются на курс валюты. Мы можем создать в справочнике Валюты объект, назовем его, например, «Евро (милли)» или «EUR*100».
Если бизнес-процессы жестко требуют наличия 4 знаков в поле «Цена» во всех документах и регистрах, нам придется прибегнуть к модификации метаданных. В современных конфигурациях на базе 1С v8.3 (Управляемые формы) большинство денежных полей привязаны к Определяемым типам.
Разберем по шагам процесс изменения:
ОпределяемыеТипы.ДенежнаяСуммаНеотрицательная или специализированный тип Цена.Важно понимать, что изменение определяемого типа повлечет за собой изменение во всей базе данных. Это коснется:
ЦеныНоменклатуры).Внимание: Если ваша конфигурация находится на поддержке, крайне рекомендуется вносить эти изменения через Расширение конфигурации. Это позволит сохранить основную конфигурацию нетронутой и упростит процесс обновления.
Иногда изменение глобального типа данных нежелательно, так как это перегружает интерфейс лишними нулями там, где они не нужны. В этом случае мы можем изменить точность только для конкретных реквизитов.
Проанализируем пример кода для изменения точности программно при выводе в отчет или форму (хотя лучше менять именно в метаданных):
// Пример изменения квалификатора числа для реквизита программно
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("Число"));
КвалификаторыЧисла = Новый КвалификаторыЧисла(15, 4, ДопустимыйЗнак.Неотрицательный);
ОписаниеТиповЦена = Новый ОписаниеТипов(МассивТипов, , , КвалификаторыЧисла);
// Однако в метаданных это делается через визуальный редактор конфигуратора
Рассмотрим подробнее список объектов, которые необходимо проверить при ручном изменении разрядности:
ЧЦ=15; ЧДЦ=2. Его нужно будет изменить на ЧДЦ=4.Проанализируем ситуацию с точки зрения бухгалтерского и налогового учета. Несмотря на то, что учетная система 1С позволит вам хранить цену 0,0754, законодательство (например, правила оформления счетов-фактур) требует, чтобы итоговые суммы и НДС были округлены до 2 знаков (копеек/центов).
Основные проблемы, с которыми вы столкнетесь:
Выясним лучший вариант: для большинства компаний оптимальным решением является Способ 1 (Упаковки) или установка цены за 100/1000 единиц товара. Это позволяет сохранить точность расчета суммы без рискованного вмешательства в ядро системы.