Перенос данных из устаревших систем, таких как 1С:Предприятие 7.7, в современные конфигурации вроде 1С:Управление нашей фирмой (УНФ) — это сложный процесс, требующий сохранения исторической правды. Одной из часто возникающих задач является необходимость загрузки цен номенклатуры за прошлые периоды («задним числом»). Это необходимо для корректного формирования аналитики, отчетов по динамике цен и оценки рентабельности прошлых периодов.
В этой статье мы подробно разберем, как реализовать запись цен в 1С:УНФ задним числом, проанализируем внутренние механизмы платформы и рассмотрим различные инструменты для решения этой задачи.
Прежде чем мы перейдем к практическим действиям, давайте разберем теорию. В 1С:УНФ, в отличие от многих старых конфигураций, цены не являются просто реквизитом справочника Номенклатура. Они хранятся в периодическом регистре сведений Цены номенклатуры.
Ключевыми характеристиками этого регистра являются:
Период.Установка цен. Однако при переносе данных мы можем использовать и прямую запись.Номенклатуры, Вида цены и (если используется) Характеристики номенклатуры.Рассмотрим пошагово способы внесения данных в этот регистр за прошлые периоды.
Рассмотрим наиболее простой и доступный пользователю способ, который упомянул автор темы на форуме. В современных версиях 1С:УНФ предусмотрен мощный инструмент загрузки данных из внешних табличных документов.
Алгоритм действий:
Номенклатура, Цена и, что критически важно для нашей задачи, Дата (период).Этот метод хорош тем, что он автоматически создает документы Установка цен на указанные даты, сохраняя прозрачность учета.
Если нам необходимо перенести огромный массив данных из 1С 7.7 программно, мы будем использовать встроенный язык 1С. Разберем ситуацию, когда нам нужно быстро записать данные в регистр, минуя тяжелые проверки бизнес-логики, которые могут замедлить процесс.
Для этого используется свойство ОбменДанными.Загрузка = Истина. Выясним, почему это важно. В нормальном режиме при записи объекта 1С выполняет множество проверок (заполненность реквизитов, права доступа, подписки на события). В режиме загрузки большинство этих проверок отключается, что идеально подходит для миграции данных.
Проанализируем пример кода для записи цены задним числом:
// Создаем набор записей регистра сведений
НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
// Устанавливаем фильтр по периоду и номенклатуре, чтобы не затереть лишнее
// Либо просто создаем новую запись
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Период = ДатаИзПрошлого; // Например, '20201201000000'
НоваяЗапись.Номенклатура = СсылкаНаТовар;
НоваяЗапись.ВидЦены = СсылкаНаВидЦены;
НоваяЗапись.Цена = 1500;
НоваяЗапись.Валюта = СсылкаНаВалюту;
// Включаем режим загрузки для ускорения и обхода проверок
НаборЗаписей.ОбменДанными.Загрузка = Истина;
// Записываем данные
НаборЗаписей.Записать(Истина); // Параметр Истина означает замещение существующих записей по этому ключу
Важное примечание: При использовании этого метода данные попадают напрямую в регистр, минуя документ Установка цен. Это эффективно для скорости, но в списке документов вы эти цены не увидите — только в карточке номенклатуры и в отчетах по ценам.
Если штатный механизм загрузки в УНФ по каким-то причинам не подходит (например, сложная структура данных), воспользуемся классическим инструментом администратора — обработкой «Загрузка данных из табличного документа».
Разберем процесс работы с ней:
ЦеныНоменклатуры.Период.ОбменДанными.Загрузка = Истина.При переносе данных из «семерки» часто возникает спор о том, стоит ли переносить всю историю цен или достаточно актуальных остатков. Если бизнес требует возможности перепроведения документов за прошлые годы в новой базе, то перенос истории цен обязателен.
Проанализируем особенности 1С 7.7. В ней цены часто хранились как периодические реквизиты справочника. При выгрузке из 7.7 нам нужно:
Виды цен (например, «Базовая из 7.7»).Цены номенклатуры на каждую дату изменения из старой базы.Внимание: Запись цен задним числом не изменит автоматически суммы в уже существующих документах продажи или закупки. Цены в 1С подтягиваются в момент выбора номенклатуры в документ. Если вы сначала перенесли накладные, а потом цены, то суммы в накладных останутся прежними, пока вы не нажмете кнопку «Перезаполнить цены» в каждом документе.
Запись цен в 1С:УНФ задним числом — это штатная процедура, которая может быть реализована как через пользовательский интерфейс, так и программными методами. Мы рекомендуем использовать документарный способ (через загрузку в форму вида цен), так как это сохраняет историю в виде документов Установка цен, что облегчает последующий аудит данных.
Рассмотренные нами методы позволяют корректно мигрировать с устаревших платформ, сохраняя преемственность данных и обеспечивая аналитическую службу предприятия всей необходимой информацией о ценовых колебаниях в прошлом.