Смена валюты управленческого учета в уже работающей базе «1С:Управление торговлей 10.3» — задача нетривиальная. Система штатно блокирует возможность изменения этой настройки, если в базе создан хотя бы один документ или есть записи в регистрах. Это обусловлено тем, что во всех регистрах накопления, отвечающих за денежный учет (продажи, закупки, взаиморасчеты, партии), суммы хранятся одновременно в двух валютах: валюте взаиморасчетов/документа и валюте управленческого учета (ресурс СуммаУпр). Если просто поменять валюту в настройках, старые суммы останутся в прежних числах, но система будет считать, что это уже новая валюта, что приведет к катастрофическому искажению отчетов.
В данной статье мы разберем несколько способов решения этой задачи: от «быстрых» манипуляций со справочниками до глубокой технической корректировки данных.
Проанализируем ситуацию: в типовом решении блокировка поля выбора валюты управленческого учета реализована на уровне кода формы «Настройка параметров учета». Программа проверяет наличие записей в определенных регистрах или наличие документов. Рассмотрим, как система хранит эти данные. Основная сложность заключается не в том, чтобы «разблокировать» кнопку, а в том, что все предыдущие движения по регистрам содержат ресурс СуммаУпр, рассчитанный по курсу старой валюты (например, USD).
Если мы сменим валюту с USD на RUB, то документ на 100 долларов, который раньше имел 100 единиц в ресурсе СуммаУпр, так и останется со значением 100, но теперь отчеты будут интерпретировать это как 100 рублей. Это главная причина, по которой 1С запрещает простое редактирование настройки.
Если вы осознаете последствия и планируете перепроводить документы или корректировать регистры вручную, можно принудительно установить значение валюты. Рассмотрим пример кода, который можно запустить через внешнюю обработку или консоль кода:
// Устанавливаем валюту управленческого учета программно
ВалютаСсылка = Справочники.Валюты.НайтиПоКоду("643"); // Код рубля
Если Не ВалютаСсылка.Пустая() Тогда
Константы.ВалютаУправленческогоУчета.Установить(ВалютаСсылка);
Сообщить("Валюта управленческого учета успешно изменена на " + ВалютаСсылка);
Иначе
Сообщить("Валюта с указанным кодом не найдена!");
КонецЕсли;
Важно: После выполнения этого кода настройка в интерфейсе изменится, но данные в регистрах останутся прежними. Чтобы отчеты стали корректными, потребуется полное перепроведение всех документов с начала ведения учета. В файловом варианте базы это может занять длительное время и потребовать исправления старых ошибок в документах.
Проанализируем метод, предложенный специалистами на форумах: использование стандартной обработки «Поиск и замена дублирующих элементов справочника». Этот способ считается «грязным», но иногда он является единственным быстрым решением.
Алгоритм действий следующий:
Валюты новый элемент, называем его «Рубли_Старые» (если рублей еще нет) или используем существующий элемент «руб.».Проанализируем последствия: обработка найдет все ссылки на старый «доллар» во всех документах, константах и регистрах и заменит их ссылкой на «рубль». Внимание: этот метод корректно сработает только в том случае, если курс доллара в вашей базе всегда был равен 1 (то есть вы фактически вели учет в рублях, но под именем доллара). Если же курсы различались, вы получите те же неверные суммы в ресурсах СуммаУпр, о которых говорилось выше. Обработка просто меняет ссылку на объект, но не пересчитывает числовые значения в таблицах базы данных.
Если база работает на MS SQL Server, можно рассмотреть вариант прямого обновления таблиц. Этот метод требует высокой квалификации и понимания структуры таблиц 1С. Выясним последовательность действий:
UPDATE для всех таблиц регистров накопления (_AccumReg...), где есть ресурс СуммаУпр.СуммаУпр = СуммаВзаиморасчетов * Курс (или иная логика в зависимости от задачи).Для файловой базы, как в рассматриваемом случае, этот метод неприменим напрямую, однако существуют инструменты для прямого редактирования файлов .1CD, хотя это крайне рискованно.
Разберем наиболее правильный и безопасный с точки зрения методологии 1С способ. Если документов за прошлые годы слишком много и перепроводить их невозможно, оптимальным решением будет свертка базы.
Проанализируем этапы этого процесса:
Этот метод позволяет начать учет «с чистого листа» в правильной валюте, сохранив при этом историческую базу для просмотра старых отчетов в долларах.
Посмотрим на ситуацию, если в вашей конфигурации включен расширенный аналитический учет затрат (РАУЗ). В этом случае данные о себестоимости и остатках хранятся в регистре УчетЗатрат (или УчетЗатратРегламентированный). Изменение валюты управленческого учета здесь критично, так как расчет себестоимости завязан на эти показатели. При смене валюты «на лету» без пересчета этого регистра, последующее проведение регламентного документа «Регламентная операция» (по расчету себестоимости) выдаст ошибки или некорректные копейки, которые будут тянуться годами.
Рассмотрим рекомендации для пользователей РАУЗ:
Подводя итог, можно сказать: изменить валюту управленческого учета без перепроведения документов технически можно, но это всегда сопряжено с искажением исторических данных. Если ваша цель — чтобы отчеты за будущие периоды были в рублях, а старые данные вас не интересуют, используйте программную смену константы и начинайте работать. Если же вам важна достоверность всей истории учета — выбирайте свертку базы.
Перед любыми манипуляциями обязательно делайте архивную копию базы данных. Проверяйте результат в отчетах «Ведомость по денежным средствам» и «Продажи» сразу после внесения изменений.