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

Программист 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При настройке и редактировании выходных печатных форм документов и произвольных отчетов (файлы с расширением .gfd) в платформе 1С 6.0 можно столкнуться с ситуацией, когда исходные переменные содержат дробные числа с копейками, но любые арифметические операции над ними (сложение, умножение, деление) приводят к принудительному округлению результата до целого числа. Разберем механизм вычислений в генераторе форм документов 1С 6.0, выясним причину такого поведения и пошагово исправим формулы.

Анализ механизма работы формул в файлах .gfd

В генераторе форм платформы 1С 6.0 логика расчета и формат чисел определяются специальными директивами и контекстными операторами. Если отдельные показатели выводятся с копейками, а результат формулы обрезается, причина обычно кроется в глобальном переключении точности вычислений внутри самого бланка.

Рассмотрим основные факторы, влияющие на разрядность чисел:

  1. Контекстная директива точности !Е (или !е): задает количество знаков после запятой для всех последующих операций до тех пор, пока в тексте формул не встретится следующая аналогичная директива. Например, директива !е0 принудительно обрезает дробную часть до нуля знаков во всех дальнейших выражениях.
  2. Специфика вызова функции округления ОКР: встроенная функция принимает разрядность округления через обратный слэш \. Если вторым параметром указан ноль, число округляется до целого.
  3. Маска формата ячейки таблицы: шаблон вывода в разметке бланка определяет визуальное представление числа. Если маска не содержит позиций под копейки, число отобразится целым даже при наличии дробной части в переменной.
  4. Разрядность реквизитов и показателей: в свойствах пользовательских показателей типа ЗН или промежуточных граф задается точность, влияющая на сохранение копеек при присваивании значений.

Пошаговое исправление вычислений в бланке

Разберем типичный фрагмент формул из файла .gfd, где происходит потеря копеек:


!ПЗП1=окр(ПЗП*К80\0)  !ПЗП2=ПЗП+ПЗП1 !ПСоцСтр=ОКР(ПЗП2*К81/100\0)
!Е1
!ПЛН=СП{|2}.2   !ПК=ЗН7 
!е2 
!ПЦТ=?((""+СП{|2}.6="Д") ИЛИ (""+СП{|2}.6="д")\К82\?((""+СП{|2}.6="Б") ИЛИ (""+СП{|2}.6="б")\К83\К84))
!е0
!ПЛ=ОКР(ПОБЩ/100*ПЛН*ПК\0)  !ПСТ=ОКР(ПЦТ*ПЛ\0)

Проанализируем этот код. В строке перед расчетом показателей ПЛ и ПСТ установлена директива !е0, а сама функция ОКР явно вызывает округление до 0 знаков: ОКР(ПОБЩ/100*ПЛН*ПК\0). В такой связке вычисления неизбежно теряют копейки.

Для восстановления расчета с копейками выполним следующие действия:

  1. Изменим директиву точности: заменим управляющую команду !е0 на !е2 перед блоком вычислений. Это переключит контекст последующих математических операций на работу с двумя знаками после запятой.
  2. Скорректируем параметры функции ОКР: заменим второй параметр в функции округления с \0 на \2 (например, ОКР(ПЗП2*К81/100\2) и ОКР(ПОБЩ/100*ПЛН*ПК\2)).
  3. Проверим формат ячеек бланка: убедимся, что в шаблоне ячейки, куда выводится итоговый показатель, маска вывода предусматривает вывод дробной части (например, содержит формат вида ######.##).

Итоговый скорректированный код формул

Посмотрим на исправленный вариант формул, который сохраняет два знака после запятой во всех расчетах:


!ПЗП1=ОКР(ПЗП*К80\2)  !ПЗП2=ПЗП+ПЗП1 !ПСоцСтр=ОКР(ПЗП2*К81/100\2)
!Е2
!ПЛН=СП{|2}.2   !ПК=ЗН7 
!е2 
!ПЦТ=?((""+СП{|2}.6="Д") ИЛИ (""+СП{|2}.6="д")\К82\?((""+СП{|2}.6="Б") ИЛИ (""+СП{|2}.6="б")\К83\К84))
!е2
!ПЛ=ОКР(ПОБЩ/100*ПЛН*ПК\2)  !ПСТ=ОКР(ПЦТ*ПЛ\2)

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

← На главную