Изменение валюты управленческого учета в информационных системах, таких как 1С:Торговля и Склад 7.7 (ТиС), является частой, но достаточно сложной задачей. Некорректное выполнение этой процедуры может привести к значительным искажениям данных в отчетах, нарушению остатков и некорректному расчету себестоимости. Давайте разберем эту проблему и рассмотрим различные подходы к ее решению, а также связанные с ними риски.
Суть проблемы: Пользователи сталкиваются с необходимостью изменить валюту, в которой ведется управленческий учет, например, с USD на RUB, чтобы оперативные отчеты и аналитика формировались в привычной и нужной валюте. При этом возникает ряд вопросов: как изменить валюту в константах, как обновить валюту в типах цен, и что делать с историческими данными и уже проведенными документами.
Подготовка к изменению валюты управленческого учета
Прежде чем приступать к каким-либо изменениям, мы настоятельно рекомендуем выполнить следующие подготовительные шаги:
Создайте резервную копию базы данных: Это критически важный шаг. Перед началом любых манипуляций с валютой управленческого учета обязательно сделайте полную резервную копию вашей базы данных. Это позволит нам откатиться к исходному состоянию в случае возникновения непредвиденных проблем или ошибок.
Проведите эксперименты в тестовой базе: Все изменения, особенно связанные с программным кодом или массовым перепроведением документов, рекомендуется сначала выполнить в копии рабочей базы (тестовой). Это даст нам возможность убедиться в корректности результатов и отсутствии ошибок, прежде чем применять изменения к основной базе.
Оцените контекст и глубину проблемы: Выясните, велись ли в базе реальные валютные операции с отличными от единицы курсами. Если да, то простые решения могут не подойти. Подумайте, нужна ли вам полная историческая точность данных в старой валюте, или можно пожертвовать частью истории для упрощения перехода.
Метод 1: Комплексное изменение с программным подходом и перепроведением базы
Этот метод является наиболее надежным, но и самым трудоемким, если в базе много исторических данных и валютных операций. Он включает изменение константы валюты управленческого учета, обновление типов цен и обязательное перепроведение всех документов.
Шаг 1: Изменение валюты управленческого учета в константе
Валюта управленческого учета определяется специальной константой в конфигурации 1С. Мы можем изменить ее двумя способами:
Через интерфейс (Настройки параметров учета): В большинстве конфигураций 1С:Торговля и Склад 7.7 существуют "Настройки параметров учета", где можно найти и изменить эту константу. Найдите соответствующий пункт меню и выберите новую валюту.
Программно: Если доступ к интерфейсным настройкам затруднен или нам нужно автоматизировать процесс, мы можем изменить константу с помощью кода 1С. Например, для установки рубля как валюты управленческого учета, мы можем использовать следующий код в обработке или модуле:
Константа.УстановитьАтрибут("ВалютаУпр",глРубли);
Здесь глРубли предполагает, что у нас есть глобальная переменная или функция, которая возвращает ссылку на элемент справочника "Валюты" с российским рублем.
Шаг 2: Изменение валюты в типах цен
После изменения основной константы, мы должны убедиться, что все типы цен, которые использовались в старой валюте управленческого учета, обновлены на новую. Это особенно важно для закупочных и отпускных цен. Если цена закупочная была установлена в USD, а мы переходим на RUB, ее необходимо скорректировать.
Мы можем использовать программный подход для изменения валюты в справочнике "ТипыЦен":
// Создаем объект справочника "ТипыЦен"
Спр = СоздатьОбъект("Справочник.ТипыЦен");
// Находим нужный тип цен по наименованию.
// Например, "Закупочные" - это может быть один из типов цен.
// Параметры НайтиПоНаименованию: Наименование, ФлагПоиска (0 - с начала, 1 - везде), ФлагРегистра (1 - учитывать регистр)
Спр.НайтиПоНаименованию("Закупочные",0,1);
// Устанавливаем новую валюту.
// глРубли - это глобальная переменная или функция, возвращающая ссылку на нужную валюту.
Спр.Валюта = глРубли;
// Записываем изменения
Спр.Записать();
Мы должны повторить этот процесс для всех типов цен, которые необходимо изменить. Вместо поиска по наименованию, мы можем перебрать все элементы справочника ТипыЦен и проверять их текущую валюту, меняя ее при необходимости.
// Создаем объект справочника "Валюты"
СпрВалюты = СоздатьОбъект("Справочник.Валюты");
СпрВалюты.НайтиПоКоду("643"); // Находим рубль по коду (или по наименованию, если код неизвестен)
глРубли = СпрВалюты.ТекущийЭлемент(); // Получаем ссылку на элемент "Рубль"
// Создаем объект справочника "ТипыЦен"
СпрТипыЦен = СоздатьОбъект("Справочник.ТипыЦен");
// Начинаем перебор всех типов цен
СпрТипыЦен.ВыбратьЭлементы();
Пока СпрТипыЦен.ПолучитьЭлемент() = 1 Цикл
// Если текущая валюта типа цен - USD (или любая другая, которую мы хотим изменить)
// Предположим, что ссылка на USD у нас хранится в переменной глUSD
Если СпрТипыЦен.Валюта <> глРубли Тогда // Меняем на рубли, если это не рубли
СпрТипыЦен.Валюта = глРубли;
СпрТипыЦен.Записать();
Сообщить("Для типа цены " + СпрТипыЦен.Наименование + " изменена валюта на Рубли.");
КонецЕсли;
КонецЦикла;
Важный нюанс с курсом валюты и старыми ценами:
Если курс старой валюты управленческого учета (например, USD) отличался от единицы, то простое изменение типа валюты в справочнике ТипыЦен может быть недостаточным. Цены в регистре Цены (если он используется) могут быть записаны в старой валюте. В этом случае у нас есть несколько вариантов:
Пересчитать существующие цены: Для каждого элемента справочника Цены, привязанного к измененному типу цен, нам потребуется пересчитать значение цены по актуальному на тот момент курсу и записать новое значение в регистр. Это сложный процесс, требующий знания курсов валют на каждую дату формирования цен.
Удалить историю цен: Если исторические данные по ценам не критичны, мы можем просто удалить все элементы регистра Цены, относящиеся к измененным типам цен. Это крайняя мера, но она может значительно упростить переход.
Оставить как есть: Мы можем не трогать старые записи цен. Со временем, при проведении новых документов, сотрудники будут проставлять новые цены, и регистр Цены заполнится актуальными данными в новой валюте. Однако отчеты за прошлые периоды будут "косить" до тех пор, пока старые данные не будут перезаписаны или проигнорированы.
Шаг 3: Перепроведение всей базы документов
Это один из самых критичных шагов. После изменения валюты управленческого учета и типов цен, настоятельно рекомендуется перепровести всю базу документов. Это необходимо для того, чтобы движения по регистрам (например, ПартииНаличие, Продажи, Взаиморасчеты), которые формируются документами, были созданы уже в новой валюте управленческого учета. В противном случае:
Отчеты за прошлые периоды будут отображать неверные данные, поскольку часть движений будет в старой валюте, а часть — в новой.
Остатки по регистрам могут быть посчитаны неверно, а обороты будут отражаться в смешанных валютах.
Аналитические отчеты (например, анализ продаж, валовой прибыли, остатков товаров на складах) будут показывать абсолютно нереальные цифры и "сойдут с ума".
В конфигурациях, где ведется партионный учет, изменение валюты без перепроведения может привести к некорректному расчету себестоимости товаров.
Предупреждения о перепроведении:
Длительность процесса: Перепроведение большой базы может быть очень длительным процессом. Мы должны быть готовы к тому, что система будет занята в течение значительного времени.
Ошибки при перепроведении: Если документы вводились задним числом, или база пережила смену нескольких релизов конфигурации, или были какие-либо ошибки при вводе документов, то при массовом перепроведении могут возникнуть многочисленные ошибки. Мы должны быть готовы их анализировать и исправлять.
"Поехавшие" остатки: Если в процессе перепроведения возникнут ошибки, или если последовательность документов нарушена, то остатки могут "поехать" (стать некорректными).
Метод 2: "Элементарное" изменение существующей валюты (альтернативный, но спорный подход)
Некоторые пользователи предлагают "элементарный" способ решения, который, на первый взгляд, кажется простым, но имеет значительные риски, если в базе были реальные валютные операции с курсом, отличным от 1.
Суть метода (сообщение 11):
Изменяем параметры существующей валюты: Мы находим ту валюту, которая сейчас используется как управленческая (например, USD). Мы меняем ее код на 643 и название на "Рубли" (если необходимо, предварительно освобождаем код 643 у "настоящего" рубля, если он есть).
Очищаем историю курсов: Для этой измененной валюты мы заходим в ее историю курсов (кнопка "История") и очищаем ее полностью, нажимая "Удалить..." -> "очистить историю".
Устанавливаем новый курс и кратность: Мы устанавливаем новое значение Курса и Кратности равное 1 с самой ранней датой (например, 01.01.1980).
Обновляем значения по умолчанию: В значениях по умолчанию у пользователей мы ставим эту "новую" валюту.
Почему этот метод спорен и опасен (сообщение 12):
Искажение данных при реальных курсах: Этот метод подходит только в том случае, если валюта управленческого учета фактически всегда имела курс, равный единице, то есть все суммы в регистрах уже хранились в "условных рублях", а не в реальных долларах, пересчитанных по актуальному курсу. Если же в базе проводились реальные валютные операции, и курс валюты управленческого учета отличался от 1, то такой подход приведет к грубому искажению всех исторических данных. В регистрах будут лежать старые долларовые суммы, которые теперь будут трактоваться как рублевые, что является некорректным.
Путаница с валютой документа: Мы не должны путать валюту управленческого учета с валютой документа или договора. Валюта документа указывается непосредственно в документе и может отличаться от валюты управленческого учета. Изменение валюты управленческого учета не влияет на валюту документа (сообщение 8).
Поэтому мы не рекомендуем использовать этот метод, если в вашей базе когда-либо велись реальные валютные операции с отличными от единицы курсами.
Метод 3: Перенос данных в новую базу (крайняя мера)
В некоторых особо сложных случаях, когда история данных в старой валюте управленческого учета должна быть сохранена, а перепроведение всей базы с учетом всех нюансов оказывается слишком рискованным или трудоемким, мы можем рассмотреть вариант создания новой информационной базы.
Суть метода (сообщение 17):
Создаем новую информационную базу: Мы создаем совершенно новую базу данных с уже установленной корректной валютой управленческого учета.
Переносим остатки и документы: В эту новую базу мы переносим только необходимые остатки на определенную дату и, возможно, документы за требуемый период (например, текущий год).
Перепроводим документы в новой базе: Перенесенные документы, скорее всего, придется перепровести в новой базе, чтобы они сформировали движения в новой валюте.
Предупреждения:
Трудоемкость: Этот метод очень трудоемкий, так как требует тщательной выгрузки и загрузки данных, а также возможной их корректировки.
Проблемы совместимости: Если исходная база работала на одном релизе конфигурации, а новая устанавливается на более свежий, могут возникнуть проблемы с переносом и перепроведением документов из-за изменений в алгоритмах учета между релизами.
Общие рекомендации и выводы
Проблема изменения валюты управленческого учета является сложной и часто встречающейся, требующей комплексного подхода и тщательного планирования. Мы должны учитывать следующие моменты:
Влияние на отчеты: Изменение валюты управленческого учета напрямую влияет на корректность всех аналитических отчетов (например, анализ продаж, валовой прибыли, остатков товаров на складах), так как они формируются на основе данных регистров, где суммы хранятся в валюте управленческого учета. Если мы не перепроведем документы, то отчеты будут показывать абсолютно нереальные цифры.
Различие валюты документа и управленческого учета: Важно понимать, что валюта документа (например, USD в счете) не имеет прямого отношения к валюте управленческого учета. Документ может быть выписан в долларах, но его движения по управленческому учету будут формироваться в рублях по курсу на дату документа.
Искажение себестоимости: В конфигурациях, где ведется партионный учет, изменение валюты без перепроведения может привести к некорректному расчету себестоимости товаров.
Понимание логики конфигурации: Глубокое понимание логики работы конкретной конфигурации 1С и принципов формирования движений по регистрам поможет нам избежать ошибок при изменении валюты управленческого учета.
Осторожность с "элементарными" решениями: Мы должны быть крайне осторожны с методами, предлагающими простые решения без перепроведения, особенно если в базе велись реальные валютные операции с курсами, отличными от единицы. Такие подходы могут привести к серьезному искажению исторических данных.
В заключение, мы можем утверждать, что наиболее безопасным и корректным методом изменения валюты управленческого учета является программное изменение константы и типов цен с последующим обязательным и тщательным перепроведением всей базы документов. Однако, этот путь требует значительных временных затрат и внимательности к возможным ошибкам. Всегда начинайте с резервного копирования и тестирования в копии базы!