При настройке или ведении учета в программных продуктах на платформе «1С:Предприятие 8» (особенно в конфигурациях 1С:УНФ, 1С:ERP, 1С:КА или 1С:УТ) пользователи часто сталкиваются с необходимостью изменить базовую валюту учета. Типичный сценарий — переход со старого кода валюты 810 (RUR) на действующий международный стандарт 643 (RUB) или исправление ошибочно выбранной валюты при первоначальном заполнении базы.
Однако при попытке отключить или изменить валюту в настройках параметров учета система выдает жесткую ошибку: «В базе есть движения по "суммовым" регистрам накопления! Изменение валюты учета запрещено!». В этой статье мы подробно разберем, почему возникает эта блокировка, почему стандартные методы часто не работают и какими профессиональными способами можно решить эту задачу без потери данных.
---
Программа защищает базу данных от полной рассинхронизации. При проведении любого документа, содержащего стоимостные показатели (будь то поступление товаров, реализация, оплата или начисление зарплаты), система совершает две важные операции:
За хранение этих данных отвечают оборотные и остаточные регистры накопления, такие как ДвиженияДенежныхСредств, Взаиморасчеты, Запасы, Продажи и другие. В коде конфигурации (как правило, в форме настроек параметров учета) прописана специальная функция — например, ОтказИзменитьВалютаУчета(). Она делает запрос к базе данных, проверяя наличие записей в этих регистрах. Если обнаруживается хотя бы одна копейка или одна проведенная строка, интерфейс настройки намертво блокируется.
---
На форумах часто советуют сделать все документы в базе непроведенными, изменить валюту и провести их обратно. Рассмотрим, почему на практике этот способ вызывает массу проблем:
ОперацияБух (ручные операции) или специализированные корректировки регистров не имеют стандартного режима проведения — они делают записи в регистры напрямую при записи. Распроведение документов их не затронет.Взаиморасчеты или Запасы.Поэтому рассмотрим более надежные и профессиональные методы изменения валюты учета.
---
Очень часто проблема кроется в том, что в справочнике Валюты заведены два элемента: один с кодом 810, другой — с кодом 643. Если учет велся на одной валюте, а договоры начали оформлять на другой, правильнее всего объединить эти элементы. Для этого мы воспользуемся встроенным типовым механизмом «Поиск и замена дублей».
Разберем процесс по шагам:
Валюты.Система автоматически найдет все упоминания старой валюты в договорах, документах и регистрах накопления и заменит их на актуальный элемент справочника.
---
Этот способ подходит для администраторов баз данных и разработчиков. Если база небольшая и мы уверены в том, что пересчет валюты не нарушит финансовую отчетность, мы можем временно отключить программный запрет на изменение константы валюты учета.
Важно: Перед выполнением любых процедур в конфигураторе обязательно создайте резервную копию вашей базы данных (выгрузку .dt или копию файла 1Cv8.1CD)!
Выполним следующие шаги:
ОтказИзменитьВалютуУчета() или ЕстьДвиженияПоСуммовымРегистрам().Ложь (False), чтобы заставить программу думать, что база абсолютно чиста. Пример кода:
Функция ЕстьДвиженияПоСуммовымРегистрам() Экспорт
// ВРЕМЕННЫЙ ОБХОД БЛОКИРОВКИ ДЛЯ СМЕНЫ ВАЛЮТЫ
Возврат Ложь;
// Ниже идет оригинальный код проверки, который теперь выполняться не будет
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 ...";
...
КонецФункции
F7.Возврат Ложь; и снова обновим конфигурацию базы данных (F7).---
Этот метод считается наиболее профессиональным, так как он не требует снятия конфигурации с поддержки и позволяет обойтись без сложной процедуры полного распроведения базы. Суть метода заключается в использовании внешней обработки, которая временно очищает записи в целевых регистрах, позволяет изменить константу, а затем восстанавливает движения.
Проанализируем алгоритм работы такой обработки:
НаборЗаписей = РегистрыНакопления.Продажи.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ДокументСсылка);
НаборЗаписей.Записать(); // Записывает пустой набор, стирая движения в БД
---
Изменение валюты учета в уже работающей базе данных — это сложная техническая операция. Прежде чем приступать к радикальным мерам, попробуйте сначала выполнить поиск и слияние дублирующихся валют (Способ 1), так как очень часто проблема кроется именно в путанице между кодами 810 и 643. Если же этот метод не помог, воспользуйтесь Способом 2 или 3, обязательно предварительно сделав архивную копию базы данных.