Как провести деноминацию белорусского рубля в 1С: подробное руководство, стратегии перехода и примеры кода

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

Деноминация национальной валюты Республики Беларусь, проведенная 1 июля 2016 года (в соотношении 10 000 : 1), поставила перед сообществом 1С-разработчиков и бухгалтеров уникальную по сложности задачу. Главная трудность заключалась в том, что реформа проводилась внутри финансового года, а не на его стыке. Это исключило классический сценарий простого закрытия года и начала работы в новой базе с чистого листа.

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

---

Методологическая основа деноминации

Прежде чем приступать к технической реализации, нам необходимо четко понимать требования законодательства. В соответствии с Постановлениями Минфина РБ и Нацбанка, ключевыми правилами перехода являются:

  1. Масштаб цен: Все стоимостные показатели уменьшаются в 10 000 раз. Соответственно, 10 000 старых белорусских рублей (BYR) становятся равны 1 новому рублю (BYN).
  2. Разрядность и копейки: Вводится дробная часть валюты — копейки. Все расчеты, регистры и отчетность должны поддерживать как минимум 2 знака после запятой.
  3. Округление активов и обязательств: Округление производится по общепринятым математическим правилам до ближайшего целого числа копеек. Если при расчете получается дробная часть меньше 0,5 копейки, она отбрасывается, если 0,5 копейки и более — округляется в большую сторону.
  4. Списание разниц: Разницы, возникающие в результате округления остатков по счетам учета, относятся на финансовые результаты деятельности организации (в дебет или кредит счета 90 «Доходы и расходы по текущей деятельности» или 91 «Прочие доходы и расходы»).

---

Стратегия 1. Физическая деноминация существующей базы данных (деление на 10 000)

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

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

Недостатки: высокая нагрузка на СУБД, риск нарушения логической целостности данных, потеря исторической точности при делении копеечных сумм.

Программный пересчет регистров накопления без перепроведения

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


// Пример обработки для конвертации ресурсов регистра накопления
Процедура ДеноминироватьРегистрНакопления(ИмяРегистра, МассивДокументов) Экспорт
    
    Для Каждого СсылкаНаДокумент Из МассивДокументов Цикл
        
        // Создаем набор записей по регистратору
        НаборЗаписей = РегистрыНакопления[ИмяРегистра].СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.Регистратор.Установить(СсылкаНаДокумент);
        НаборЗаписей.Прочитать();
        
        Если НаборЗаписей.Количество() > 0 Тогда
            
            // Начинаем модификацию записей
            Для Каждого Запись Из НаборЗаписей Цикл
                
                // Пересчитываем только стоимостные ресурсы (пример для регистра Продажи)
                Если ИмяРегистра = "Продажи" Тогда
                    Запись.Стоимость = ОкруглитьДоКопеек(Запись.Стоимость / 10000);
                    Запись.СуммаНДС  = ОкруглитьДоКопеек(Запись.СуммаНДС / 10000);
                ИначеЕсли ИмяРегистра = "ВзаиморасчетыСКонтрагентами" Тогда
                    Запись.Сумма     = ОкруглитьДоКопеек(Запись.Сумма / 10000);
                КонецЕсли;
                
            КонецЦикла;
            
            // Записываем набор без выполнения проверок при записи (оптимизация скорости)
            НаборЗаписей.ОбменДанными.Загрузка = Истина;
            НаборЗаписей.Записать(Истина);
            
        КонецЕсли;
        
    КонецЦикла;
    
КонецПроцедуры

Функция ОкруглитьДоКопеек(Значение)
    Возврат Окр(Значение, 2, РежимОкругления.Окр15как20);
КонецФункции

Важное примечание разработчикам: При делении больших объемов данных через встроенный язык 1С производительность может быть неудовлетворительной. Для оптимизации процесса на клиент-серверных базах данных можно использовать прямой пересчет через SQL-запросы, однако после этого обязательно необходимо выполнить полное пересоставление итогов по регистрам через конфигуратор или обработку УправлениеИтогами.

---

Стратегия 2. Гибридный подход с использованием дублирующих регистров

Для крупных и сильно кастомизированных баз данных интересным решением является идея создания временных "дублирующих" регистров. Рассмотрим ее по шагам:

  1. Перед началом перехода для наиболее тяжелых регистров (например, ПартииТоваровНаСкладах) в метаданных создаются их копии с суффиксом _Деноминация.
  2. В ночь на 1 июля 2016 года запускается обработка, которая считывает актуальные остатки по основному регистру, делит стоимостные показатели на 10 000, округляет их и записывает в новый регистр _Деноминация датой 30.06.2016 23:59:59.
  3. Затем на уровне конфигуратора основной регистр переименовывается в _ДоДеноминации, а новый регистр _Деноминация переименовывается в основной.
  4. В результате логика проведения документов не ломается — новые документы с 1 июля продолжают двигать регистр с привычным именем, но уже в новых ценах и с копейками.

Этот способ позволяет существенно сократить время простоя базы данных в "час Х", так как исторические движения не изменяются, а обрабатываются только текущие остатки.

---

Стратегия 3. Свертка информационной базы на 1 июля 2016 года

Свертка является наиболее чистым решением с точки зрения методологии учета. База делится на два периода: до 30 июня включительно (в старых ценах) и после 1 июля (в новых ценах).

Выясним особенности проведения свертки:

Свертка баз на платформе 1С 7.7

Для пользователей программ на платформе «1С:Предприятие 7.7» (например, «1С:Бухгалтерия 7.7») классическим решением является использование штатной обработки WRAP.ert. Разберем правильный алгоритм работы с ней:

  1. Сделайте архивную копию базы данных.
  2. В копии базы запустите обработку WRAP.ert.
  3. На первой вкладке выполните свертку базы с установкой признака «Помечать документы на удаление» на дату 30.06.2016.
  4. С помощью стандартной процедуры «Операции -> Удаление помеченных объектов» удалите все старые документы. Это критически важно, так как незадействованные субконто на некоторых счетах (например, на счете 45 «Товары отгруженные») могут выдать ошибку "Объект не найден", если удалить их некорректно.
  5. На второй вкладке обработки укажите коэффициент деноминации 10 000 и выполните пересчет сформированных остатков.

---

Методика округления себестоимости ТМЦ: борьба с погрешностями

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

Проанализируем классическую дилемму на примере:

На складе числится 10 000 штук гаек общей стоимостью 100 старых белорусских рублей (BYR).

Подход 1: Округление общей стоимости остатка товара
Если мы деноминируем общую сумму остатка: 100 рублей / 10 000 = 0,01 рубля (1 копейка).
После деноминации: остаток 10 000 шт., общая стоимость = 1 копейка. Цена за единицу при этом становится ничтожно малой (0,000001 рубля), что невозможно отразить в стандартных печатных формах.

Подход 2: Округление цены единицы товара
Цена за 1 гайку до деноминации: 100 руб. / 10 000 шт. = 0.01 руб. (1 копейка).
Если разделить цену единицы на 10 000, мы получим 0,000001 руб. При округлении до 2 знаков после запятой цена единицы становится равна 0 копеек. В результате мы полностью теряем стоимость актива при списании!

Если же цена единицы составляла, например, 85 рублей (при количестве 10 000 шт. и общей сумме 850 000 рублей):
85 руб. / 10 000 = 0,0085 руб. Округляем до копеек = 0,01 руб. (1 копейка).
Новая общая стоимость: 10 000 * 0,01 руб. = 100 рублей (или 1 000 000 старых рублей). Возникает необоснованная прибыль из-за округления в размере 150 000 старых рублей!

Решение проблемы "копеечных" ТМЦ

Для минимизации погрешностей и предотвращения искажения себестоимости можно использовать следующие приемы:

---

Технические настройки валют и обменных курсов

С 1 июля 2016 года Национальный банк Республики Беларусь изменил правила установления курсов некоторых иностранных валют. В частности, курс российского рубля (RUB) стал устанавливаться не за 1 рубль, а за 100 российских рублей. Точность установки курсов увеличилась до 4 знаков после запятой.

При настройке 1С необходимо выполнить следующие действия:

  1. Установите дату деноминации в константах информационной системы (в типовых решениях это 01.07.2016).
  2. Для валюты "Белорусский рубль" измените параметры прописи, добавив вывод копеек (например, "рубль", "рубля", "рублей", "копейка", "копейки", "копеек").
  3. Проверьте и скорректируйте кратность валют в справочнике Валюты. Для российского рубля установите кратность равной 100, а курс введите с точностью до 4 знаков после запятой.
  4. Проанализируйте нетиповой программный код на наличие жестко прописанных формул расчета курсов валют, где кратность игнорировалась или принималась равной 1. Перепишите такие участки с обязательным учетом реквизита Кратность:

// Корректный расчет суммы в валюте учета с учетом кратности
СуммаВВалютеУчета = ?(Кратность = 0, 0, (СуммаВВалюте * Курс) / Кратность);

---

Организация работы в переходный период

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

Чтобы организовать этот процесс безболезненно, придерживайтесь следующего плана:

  1. Разделение печатных форм: Документы, выписываемые с 1 июля, должны печататься исключительно в деноминированных рублях и копейках. Для розничной торговли настройте шаблоны ценников на одновременную печать двух цен (в старых и новых единицах), как того требовал указ президента.
  2. Двойной ввод документов: Если первичные документы за июнь поступают в июле, вносите их в базу в старых ценах. Программа должна автоматически делить эти суммы на 10 000 при формировании отчетности и проведении расчетов за июль.
  3. Выплата зарплаты: Начисление заработной платы за июнь производится в миллионах (по старой шкале), однако выплата, происходящая в июле, должна выполняться строго в новых деноминированных рублях и копейках. Проверьте, чтобы в расчетных листках сотрудников за июнь отражались обе суммы для прозрачности расчетов.

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

← На главную