Рассмотрим распространенную ситуацию в конфигурации 1С:Розница 3.0 (в том числе для других стран, например, Азербайджана), когда по умолчанию валютой учета и национальной валютой установлен рубль, а пользователю необходимо изменить её на местную валюту, например, азербайджанский манат. При попытке сделать это через меню функций для технического специалиста открывается пустая форма константы, и редактирование становится невозможным. Проанализируем причины такого поведения системы и разберем по шагам рабочие способы решения этой задачи.
Выясним причину, по которой платформа не дает интерактивно изменить значение. На это влияют два основных фактора:
Перед тем как мы приступим к изменению настроек, проанализируем важные системные ограничения. Менять национальную валюту или валюту учета безопасно только в абсолютно пустой информационной базе, до начала заведения документов и справочников с ценами.
Если в базе уже ведется активный учет, в регистрах накопления и бухгалтерии числовые суммы уже сохранены. При этом они хранятся в виде простых чисел без явной привязки к валюте в каждой строке — система всегда подразумевает, что это ВалютаУчета. Если вы принудительно поменяете константу в рабочей базе, все ранее проведенные рублевые операции и остатки программа мгновенно начнет воспринимать как манаты (или ту валюту, которую вы установите). Платформа не имеет встроенного безопасного механизма для массового автоматического пересчета накопленных итогов.
Разберем самый правильный пользовательский подход. Перед попытками изменить валюту необходимо явно сказать программе, что мы будем работать с валютами.
УчетВалютныхОпераций).После активации этой опции справочник валют станет доступен. Зайдите в него, добавьте и настройте нужную валюту (в нашем случае — манат). В некоторых релизах конфигурации этого шага достаточно, чтобы в формах первоначальных настроек появилась возможность выбрать базовую валюту.
Если интерфейсные способы недоступны, а форма по-прежнему пуста, решим задачу кодом. Для этого напишем внешнюю обработку или воспользуемся любой консолью выполнения кода 1С. Посмотрим на пример простого скрипта, который принудительно обновит значения:
// Находим нужную валюту в справочнике (убедитесь, что она предварительно создана)
СсылкаНаВалюту = Справочники.Валюты.НайтиПоКоду("944"); // Код AZN или другой вашей валюты
Если ЗначениеЗаполнено(СсылкаНаВалюту) Тогда
// Устанавливаем валюту учета
Константы.ВалютаУчета.Установить(СсылкаНаВалюту);
// Устанавливаем национальную валюту
Константы.НациональнаяВалюта.Установить(СсылкаНаВалюту);
Сообщить("Валюты успешно изменены!");
Иначе
Сообщить("Валюта не найдена в справочнике!");
КонецЕсли;
Этот код напрямую обращается к объекту Константы и записывает значение в обход отсутствующих графических форм, используя метод Установить().
Если вы не хотите писать код, воспользуйтесь стандартной обработкой Универсальный редактор реквизитов (или аналогичными инструментами разработчика для редактирования скрытых данных). Эти инструменты позволяют найти объект констант в структуре метаданных и напрямую присвоить реквизитам ВалютаУчета и НациональнаяВалюта ссылку на заранее созданный элемент справочника валют.
Как мы обсуждали ранее, менять базовые валюты в рабочей базе чревато крахом учета. Рассмотрим альтернативные пути выхода из ситуации:
Применяйте описанные методы осторожно и обязательно создавайте резервную копию базы данных перед любыми программными манипуляциями с константами платформы.