Как увеличить разрядность курса валют в ОСВ и Карточке счета в 1С 7.7?

Программист 1С v7.7 1C:Бухгалтерия Бухгалтерский учет
← На главную

Часто при ведении бухгалтерского учета в программе 1С:Предприятие 7.7 (в частности, в редакции 4.5) возникает ситуация, когда при формировании Оборотно-сальдовой ведомости (ОСВ) или Карточки счета курс валюты отображается с обрезанной точностью. Например, вместо шести знаков после запятой выводится только четыре (курс 0.043698 превращается в 0.0436). Проанализируем эту ситуацию и разберем по шагам все возможные пути решения проблемы.

Изменение свойств реквизита в Конфигураторе

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

  1. Откройте базу данных в режиме Конфигуратора.
  2. Перейдите к дереву метаданных и найдите справочник Валюты.
  3. Внутри справочника найдите периодический реквизит Курс.
  4. Откройте его свойства и увеличьте точность дробной части. Например, измените длину поля с 10 до 14 символов, а точность (разрядность) — с 4 до 6 или 8 знаков.
  5. Сохраните изменения в структуре базы данных.

Теперь сама база данных позволяет записывать в справочник значения с нужным количеством знаков. Однако после этого вы можете заметить, что в отчетах все равно выводится лишь 4 знака. Рассмотрим подробнее, как настроить вывод.

Форматирование данных в макетах отчетов

В 1С 7.7 за визуальное представление данных в печатных формах отвечают макеты таблиц (MXL-файлы) и функции форматирования в программном коде. Если курс в справочнике исправлен, а в отчетах (ОСВ, Карточка счета) знаки всё равно обрезаются, значит, происходит программная обрезка формата.

Разберем по шагам, как скорректировать формат вывода в макете:

  1. В Конфигураторе откройте нужный отчет (например, Карточку счета).
  2. Перейдите на вкладку формы и откройте макет печатной таблицы.
  3. Найдите ячейку в строке операции, где выводится текст с курсом (согласно обсуждениям, это обычно выводится не в "подвале", а в строке операции по счету).
  4. Зайдите в свойства ячейки (правой кнопкой мыши -> Свойства) и обратите внимание на Форматную строку.
  5. Если там указан формат Ч15.4 (что означает число из 15 символов с 4 знаками после запятой), исправьте его на Ч15.6.

Также обратите внимание на глобальные процедуры форматирования. Во многих типовых конфигурациях вызывается процедура УстановитьФорматСумм() или используется встроенная функция Формат(). Если в модуле отчета строка собирается с помощью конкатенации, система приводит число к строке по своим внутренним правилам:


// Пример того, как строка может формироваться в коде
ТекстВалюты = "В валюте : " + Опер.Валюта + ", курс " + Опер.Курс;

Для сохранения всех знаков после запятой принудительно оберните переменную курса в функцию формата:


ТекстВалюты = "В валюте : " + Опер.Валюта + ", курс " + Формат(Опер.Курс, "Ч15.6");

Если реальный курс по операции не берется напрямую из реквизита, а вычисляется на лету, его также можно рассчитать и отформатировать:


ТекКурс = Опер.Сумма / Опер.ВалСумма;
ТекстВалюты = "В валюте : " + Опер.Валюта + ", курс " + Формат(ТекКурс, "Ч15.6");

Риски ручного изменения конфигурации

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

Штатное альтернативное решение: использование "Кратности"

Чтобы избежать вмешательства в код и макеты 1С, рассмотрим типовой механизм, который специально придуман для работы с мелкими курсами валют. Этот механизм позволяет обойти ограничение в 4 знака после запятой без изменения конфигурации.

В справочнике валют существует реквизит Кратность. Посмотрим на пример:

Допустим, вам нужно ввести курс 0,043698 руб. за 1 единицу валюты. Поскольку в типовой программе в поле курса помещается только 0,0436, вы теряете точность. Вместо этого установите кратность валюты равной 100 или 10000.

  1. Откройте справочник Валюты в режиме Предприятия.
  2. В колонке или поле ввода Кратность установите значение 10000.
  3. В поле Курс запишите значение 436,9800.

Что произойдет дальше? При проведении любых документов программа автоматически разделит ваш курс (436,98) на кратность (10000), получая для математических расчетов идеальное значение 0,043698. Это полностью устранит потерю точности на микро-долях копеек, и вам не придется переписывать код печатных форм или снимать базу с поддержки!

← На главную