В практике ведения учета в государственных учреждениях часто возникает необходимость использования высокоточных цен. Это особенно актуально для организаций, работающих с тарифами на электроэнергию, газ, водоснабжение, а также в сфере гособоронзаказа или фармации, где цена за единицу продукции может иметь 5, 6 и более знаков после запятой. Типовое решение 1С:Бухгалтерия государственного учреждения 2.0 (БГУ 2.0) по умолчанию ограничивает разрядность цены двумя знаками после запятой, что соответствует стандартным правилам денежных расчетов.
Рассмотрим подробнее, почему возникает это ограничение, какими способами можно его обойти, и с какими техническими и методологическими сложностями придется столкнуться при реализации этой задачи.
Для начала проанализируем, почему простая настройка формы не решает проблему. В системе 1С разрядность любого числового поля определяется в Метаданных. Если в свойствах реквизита Цена установлено значение 15.2 (всего 15 знаков, из них 2 после запятой), то даже если вы визуально расширите поле на форме, платформа будет принудительно округлять вводимое значение до двух знаков при попытке записи или выполнения расчетов.
Многие разработчики надеются решить этот вопрос с помощью Механизма расширений. Однако здесь нас ждет серьезное ограничение: платформа 1С:Предприятие 8.3 не позволяет изменять точность и длину стандартных реквизитов, входящих в состав типовой конфигурации, через расширение. Поскольку изменение точности влияет на структуру таблиц в базе данных (SQL), такие правки допустимы только в основной конфигурации после снятия ее с поддержки (или включения возможности изменения).
Этот путь является самым прямым, но требует понимания последствий для дальнейшей поддержки системы. Рассмотрим алгоритм действий программиста для изменения разрядности:
СчетНаОплату. В его табличной части Услуги или Номенклатура выберем реквизит Цена.Точность с 2 на 5 (или необходимое количество знаков).ЦеныНоменклатуры).Цена в найденных регистрах.После внесения изменений потребуется обновить конфигурацию базы данных. Выясним причину, по которой этот метод считается рискованным: при каждом обновлении типовой конфигурации от 1С вам придется вручную объединять изменения, следя за тем, чтобы точность реквизитов не вернулась к стандартным значениям.
Проанализируем методику, которую часто рекомендуют опытные методологи 1С, чтобы избежать «снятия с замка» конфигурации. Если тариф за 1 кВт/ч составляет 0,12345 рубля, мы можем изменить подход к учету самой единицы измерения.
Разберем по шагам:
Единицы измерения создадим новую единицу, например, «1000 кВт/ч».123,45 рубля.Этот метод позволяет сохранить точность расчетов до пятого знака, не меняя структуру программы. Сумма документа при этом рассчитается абсолютно корректно, а в печатных формах будет фигурировать цена за укрупненную единицу, что не противоречит законодательству.
Рассмотрим ситуацию, которая неизбежно возникнет при использовании пятизначных цен в бухгалтерском учете. В российском учете Сумма всегда должна быть равна двум знакам после запятой (копейки). При умножении пятизначной цены на количество мы почти всегда будем получать дробную часть более двух знаков.
Посмотрим на пример:
Количество: 10,235
Цена: 10,12345
Математический итог: 103,61351075
В бухгалтерской проводке сумма будет округлена до 103,61. Если ваш контрагент попробует восстановить цену, разделив сумму на количество в своей системе, он получит 10,123107..., что создаст расхождения при сверке взаиморасчетов. Именно поэтому при использовании высокой разрядности в 1С:БГУ важно четко определить алгоритм округления суммы в программном коде документа.
Даже если мы успешно изменили разрядность в базе данных, нам предстоит столкнуться с проблемой вывода данных. Рассмотрим основные сложности:
ЧЦ=15; ЧДЦ=2. Это означает, что программа принудительно обрежет ваши 5 знаков до 2 при формировании печатной формы. Вам придется редактировать программный код в модулях менеджеров документов, отвечающих за печать — для этого подойдёт редактор макетов печатных форм без программирования.Если высокая точность нужна только для информации (например, чтобы видеть утвержденный государством тариф), но расчеты в документе можно оставить с округлением, проанализируем вариант использования Дополнительных реквизитов:
Счет на оплату добавим новый реквизит Тариф (высокая точность) с типом Число (15, 5).Цена, округленное до 2 знаков.Для автоматизации этого процесса можно написать небольшую Внешнюю обработку заполнения, которая будет брать значение из доп. реквизита, умножать на количество и записывать результат в стандартную сумму документа.
// Пример упрощенного алгоритма расчета суммы во внешней обработке
Процедура РассчитатьСуммуПоТочнойЦене(СтрокаТабличнойЧасти)
ТочнаяЦена = СтрокаТабличнойЧасти.ДополнительныеРеквизиты.Найти(СсылкаНаСвойство).Значение;
Если ТочнаяЦена <> 0 Тогда
МатематическаяСумма = ТочнаяЦена * СтрокаТабличнойЧасти.Количество;
// Округляем до копеек согласно правилам бухучета
СтрокаТабличнойЧасти.Сумма = Окр(МатематическаяСумма, 2, РежимОкругления.Окр15как20);
КонецЕсли;
КонецПроцедуры
Подводя итог, отметим, что изменение разрядности цены в 1С:БГУ 2.0 — это задача, имеющая больше методологических рисков, чем технических. Если учреждению критически важно использовать 5 знаков, мы рекомендуем следующий приоритет действий:
Проанализировав все аспекты, мы видим, что система 1С гибко позволяет решать подобные задачи, но требует взвешенного подхода к сохранению целостности бухгалтерского учета.