Как настроить точность цены до 4 знаков после запятой в 1С

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

В практике торгового учета часто возникает ситуация, когда базовая единица измерения слишком велика для розничной или мелкооптовой продажи. Например, товар закупается в километрах, а продается в метрах. Если цена за 1 километр составляет 75 евро, то цена за 1 метр должна составлять 0,075 евро. Однако стандартные настройки большинства конфигураций 1С (УТ 11, ERP, КА, Бухгалтерия) ограничивают точность цены двумя знаками после запятой, округляя 0,075 до 0,08. Это приводит к существенным потерям при больших объемах реализации.

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

Способ 1. Использование упаковок и единиц измерения (Рекомендуемый)

Прежде чем приступать к изменению программного кода, проанализируем штатные возможности системы. В 1С:Предприятие 8 реализован мощный механизм упаковок, который позволяет хранить остатки в одних единицах, а устанавливать цены — в других.

Рассмотрим по шагам, как это настроить:

  1. Выбор базовой единицы: Установим базовую единицу хранения остатков — метр.
  2. Создание упаковки: Создадим упаковку «Километр» с коэффициентом 1000 по отношению к метру.
  3. Установка цены: Вместо того чтобы пытаться втиснуть 0,075 евро в карточку метра, мы устанавливаем цену 75 евро за единицу «Километр».
  4. Оформление документов: При подборе товара в документ реализации мы указываем количество в метрах. Система автоматически пересчитает сумму, исходя из цены за километр, сохраняя точность промежуточных вычислений.

Преимущество: Этот метод не требует снятия конфигурации с поддержки и гарантирует корректное обновление программы в будущем.

Способ 2. Использование виртуальной валюты с множителем

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

Выясним причину, почему это работает: расчеты в 1С всегда опираются на курс валюты. Мы можем создать в справочнике Валюты объект, назовем его, например, «Евро (милли)» или «EUR*100».

  1. Установим курс этой валюты таким образом, чтобы 100 единиц «Евро (милли)» равнялись 1 обычному Евро.
  2. В документах установки цен укажем цену в этой виртуальной валюте. Например, цена 7.50 в «EUR*100» будет фактически означать 0,075 обычного евро.
  3. При формировании печатных форм система будет использовать кросс-курс, что позволит избежать потерь на округлении в промежуточных расчетах.

Способ 3. Изменение разрядности через Определяемые типы

Если бизнес-процессы жестко требуют наличия 4 знаков в поле «Цена» во всех документах и регистрах, нам придется прибегнуть к модификации метаданных. В современных конфигурациях на базе 1С v8.3 (Управляемые формы) большинство денежных полей привязаны к Определяемым типам.

Разберем по шагам процесс изменения:

  1. Откроем конфигуратор и найдем узел ОпределяемыеТипы.
  2. Найдем типы, отвечающие за хранение цен. Обычно это ДенежнаяСуммаНеотрицательная или специализированный тип Цена.
  3. В свойствах типа изменим параметр «Квалификатор числа». Установим точность равной 4 вместо 2.

Важно понимать, что изменение определяемого типа повлечет за собой изменение во всей базе данных. Это коснется:

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

Способ 4. Программная корректировка точности в конкретных объектах

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

Проанализируем пример кода для изменения точности программно при выводе в отчет или форму (хотя лучше менять именно в метаданных):


// Пример изменения квалификатора числа для реквизита программно
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("Число"));
КвалификаторыЧисла = Новый КвалификаторыЧисла(15, 4, ДопустимыйЗнак.Неотрицательный);
ОписаниеТиповЦена = Новый ОписаниеТипов(МассивТипов, , , КвалификаторыЧисла);

// Однако в метаданных это делается через визуальный редактор конфигуратора

Рассмотрим подробнее список объектов, которые необходимо проверить при ручном изменении разрядности:

  1. Документ «Установка цен номенклатуры»: ТЧ «Товары», реквизит «Цена».
  2. Регистр сведений «Цены номенклатуры»: Ресурс «Цена».
  3. Документы закупки и продажи: Реквизиты «Цена» в табличных частях.
  4. Обработки печати: Часто в макетах печатных форм жестко задан формат ЧЦ=15; ЧДЦ=2. Его нужно будет изменить на ЧДЦ=4.

Риски и важные замечания

Проанализируем ситуацию с точки зрения бухгалтерского и налогового учета. Несмотря на то, что учетная система 1С позволит вам хранить цену 0,0754, законодательство (например, правила оформления счетов-фактур) требует, чтобы итоговые суммы и НДС были округлены до 2 знаков (копеек/центов).

Основные проблемы, с которыми вы столкнетесь:

Выясним лучший вариант: для большинства компаний оптимальным решением является Способ 1 (Упаковки) или установка цены за 100/1000 единиц товара. Это позволяет сохранить точность расчета суммы без рискованного вмешательства в ядро системы.

← На главную