Как провести деноминацию и настроить точность сумм в 1С:Предприятии 7.7?

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

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

Причина потери копеек при программном пересчете сумм проводок

При попытке пересчитать суммы в операциях и проводках через встроенный язык разработчики часто сталкиваются с ситуацией, когда рассчитанное значение содержит копейки (например, 225.45), но после записи в журнал операций сумма превращается в целое число (225). Выясним причину такого поведения платформы 1С 7.7.

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

  1. Свойства плана счетов: В дереве метаданных Конфигуратора откроем ветку Бухгалтерский учет, перейдем в свойства используемого плана счетов и проверим параметр «Точность суммы» (или разрядность суммового учета). Если там установлено значение 0, платформа на уровне СУБД (в таблицах 1SENTRY и 1SBKTTL) будет автоматически округлять любую записанную сумму до целого числа. Для появления копеек необходимо установить точность, равную 2.
  2. Реквизиты документов и справочников: Все числовые реквизиты, хранящие стоимостные показатели, должны иметь длину не менее 15.2 (15 знаков всего, 2 знака после запятой).
  3. Переменные округления в программном коде: Убедимся, что при вызове функции Окр() передается корректное количество знаков дробной части.

Вариант 1. Программный пересчет всех операций и документов в рабочей базе

Если поставлена задача сохранить всю историю первичных документов и движений за текущий год, деноминируя их на лету, воспользуемся алгоритмом пакетного пересчета операций через объект Операция.

Рассмотрим пример кода для деноминации сумм ручных и документных проводок:


Опер = СоздатьОбъект("Операция");
КоэфДеноминации = 10000;
КолЗнаковДробнойЧасти = 2;
ЗначениеНоля = 0;

Опер.ВыбратьОперации(НачДата, КонДата);
Пока Опер.ПолучитьОперацию() = 1 Цикл
    Сообщить("Обработка документа: " + Опер.Документ);
    Опер.ВыбратьПроводки();
    Пока Опер.ПолучитьПроводку() = 1 Цикл
        СуммаПроводки = Окр(Опер.Сумма / КоэфДеноминации, КолЗнаковДробнойЧасти);
        Если СуммаПроводки <> 0 Тогда
            Опер.Сумма = СуммаПроводки;
        Иначе
            Опер.Сумма = ЗначениеНоля;
        КонецЕсли;
    КонецЦикла;
    
    // Пересчитываем сумму операции на основе суммы проводок
    Опер.СуммаОперации = Окр(Опер.СуммаОперации / КоэфДеноминации, КолЗнаковДробнойЧасти);
    Опер.Записать();
КонецЦикла;

При использовании этого метода важно учитывать специфику архитектуры 1С 7.7:

  1. Пакетная обработка и транзакции: Массовая запись документов на больших базах в формате DBF или SQL без группировки транзакций выполняется крайне медленно. Рекомендуется оборачивать цикл обработки в транзакции порциями по 500–1000 записей через НачатьТранзакцию() и ЗафиксироватьТранзакцию().
  2. Периодические реквизиты: Цены, ставки и тарифы, хранящиеся как периодические реквизиты, нельзя делить прямой перезаписью текущих данных, иначе исказится история прошлых периодов. Новое значение необходимо устанавливать срезкой на дату деноминации.
  3. Точность мелких цен: Для дешевой номенклатуры и материалов (метизы, сырье, упаковка) точности в 2 знака после деления на 10 000 недостаточно, так как цена превратится в 0.00. Для таких реквизитов в метаданных задают точность 15.4 либо переходят на укрупненные единицы измерения.

Вариант 2. Свертка базы на дату деноминации с помощью обработки WRAP

Для типовых и близких к ним бухгалтерских конфигураций стандартным решением является свертка базы с последующим вводом деноминированных остатков. В типовой поставке 1С 7.7 для этого предназначена специализированная обработка wrap.ert.

Разберем пошаговый порядок работы с обработкой:

  1. Обязательно создадим полную резервную копию базы данных (каталога ИБ). Копия останется доступной в режиме только для чтения для формирования отчетов за периоды до деноминации.
  2. В Конфигураторе расширим разрядность плана счетов и реквизитов метаданных, добавив 2 знака дробной части.
  3. Запустим обработку wrap.ert. В форме обработки укажем:
    • Дату свертки / деноминации (момент фиксации остатков);
    • Коэффициент деноминации (например, 10000);
    • Вспомогательный счет (традиционно используется счет 00 или 000);
    • Список счетов-исключений, если на них ведется исключительно количественный учет без денежного выражения.
  4. Нажмем кнопку выполнения. Обработка создаст документы ввода начальных остатков с деноминированными суммами и пометит на удаление документы свернутого периода.
  5. Выполним удаление помеченных объектов, после чего запустим режим Администрирование → Тестирование и исправление ИБ с включенным флагом «Упаковка таблиц информационной базы» для сжатия физических файлов базы данных.

Вариант 3. Перенос справочников и остатков в чистую конфигурацию

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

  1. Создаем пустую информационную базу на основе обновленной конфигурации с уже расширенной разрядностью реквизитов и настроенным планом счетов.
  2. Внешней обработкой выгружаем из старой базы нормативно-справочную информацию (справочники, константы).
  3. Деноминируем числовые реквизиты справочников (цены, оклады, нормы).
  4. Формируем и переносим остатки по счетам на дату деноминации, деля входящие суммы на установленный коэффициент.
  5. Неизбежные копеечные погрешности округления при деноминации сальдо списываем корректирующей проводкой на счет прочих доходов и расходов (счет 90 или 91).

Ревизия макетов печатных форм и глобальных модулей

После корректировки метаданных и пересчета данных необходимо проверить код конфигурации:

  1. В макетах печатных форм (таблицах) найдем ячейки с суммами и заменим жестко заданный шаблон форматирования Ч015.0 на формат с копейками Ч015.2.
  2. В глобальном модуле проверим работу функций формирования суммы прописью (например, глСуммаПрописью и СтрПрописьВалюты), убедившись, что они корректно подставляют наименование разменной монеты (копеек) и дробную часть числа.
← На главную