Как записать цены в 1С:УНФ задним числом при переносе данных?

Программист 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой Управленческий учет IT и автоматизация бизнеса
← На главную

Перенос данных из устаревших систем, таких как 1С:Предприятие 7.7, в современные конфигурации вроде 1С:Управление нашей фирмой (УНФ) — это сложный процесс, требующий сохранения исторической правды. Одной из часто возникающих задач является необходимость загрузки цен номенклатуры за прошлые периоды («задним числом»). Это необходимо для корректного формирования аналитики, отчетов по динамике цен и оценки рентабельности прошлых периодов.

В этой статье мы подробно разберем, как реализовать запись цен в 1С:УНФ задним числом, проанализируем внутренние механизмы платформы и рассмотрим различные инструменты для решения этой задачи.

Понимание структуры хранения цен в 1С:УНФ

Прежде чем мы перейдем к практическим действиям, давайте разберем теорию. В 1С:УНФ, в отличие от многих старых конфигураций, цены не являются просто реквизитом справочника Номенклатура. Они хранятся в периодическом регистре сведений Цены номенклатуры.

Ключевыми характеристиками этого регистра являются:

  1. Периодичность: Регистр настроен на хранение данных с точностью до секунды. Это означает, что цена начинает действовать с той даты и времени, которые указаны в поле Период.
  2. Регистратор: В стандартном режиме работы записи в этот регистр вносятся документом Установка цен. Однако при переносе данных мы можем использовать и прямую запись.
  3. Измерения: Запись уникальна в разрезе Номенклатуры, Вида цены и (если используется) Характеристики номенклатуры.

Рассмотрим пошагово способы внесения данных в этот регистр за прошлые периоды.

Способ 1: Использование встроенного механизма загрузки

Рассмотрим наиболее простой и доступный пользователю способ, который упомянул автор темы на форуме. В современных версиях 1С:УНФ предусмотрен мощный инструмент загрузки данных из внешних табличных документов.

Алгоритм действий:

  1. Перейдем в раздел Продажи, далее выберем справочник Виды цен.
  2. Откроем нужный вид цены (например, «Оптовая» или «Закупочная»).
  3. В форме вида цены найдем механизм загрузки. Часто он доступен через кнопку Загрузить из внешнего источника или аналогичную в подменю.
  4. Подготовим файл в формате Excel или CSV. В файле должны быть колонки: Номенклатура, Цена и, что критически важно для нашей задачи, Дата (период).
  5. При сопоставлении колонок в мастере загрузки укажем, что колонка с датой соответствует периоду установки цены.
  6. Система предложит выбрать дату, на которую будут установлены цены. Если мы загружаем исторические данные за разные даты, важно, чтобы механизм сопоставления корректно считал дату из каждой строки файла.

Этот метод хорош тем, что он автоматически создает документы Установка цен на указанные даты, сохраняя прозрачность учета.

Способ 2: Программная запись с использованием режима загрузки

Если нам необходимо перенести огромный массив данных из 1С 7.7 программно, мы будем использовать встроенный язык 1С. Разберем ситуацию, когда нам нужно быстро записать данные в регистр, минуя тяжелые проверки бизнес-логики, которые могут замедлить процесс.

Для этого используется свойство ОбменДанными.Загрузка = Истина. Выясним, почему это важно. В нормальном режиме при записи объекта 1С выполняет множество проверок (заполненность реквизитов, права доступа, подписки на события). В режиме загрузки большинство этих проверок отключается, что идеально подходит для миграции данных.

Проанализируем пример кода для записи цены задним числом:


// Создаем набор записей регистра сведений
НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();

// Устанавливаем фильтр по периоду и номенклатуре, чтобы не затереть лишнее
// Либо просто создаем новую запись
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Период = ДатаИзПрошлого; // Например, '20201201000000'
НоваяЗапись.Номенклатура = СсылкаНаТовар;
НоваяЗапись.ВидЦены = СсылкаНаВидЦены;
НоваяЗапись.Цена = 1500;
НоваяЗапись.Валюта = СсылкаНаВалюту;

// Включаем режим загрузки для ускорения и обхода проверок
НаборЗаписей.ОбменДанными.Загрузка = Истина;

// Записываем данные
НаборЗаписей.Записать(Истина); // Параметр Истина означает замещение существующих записей по этому ключу

Важное примечание: При использовании этого метода данные попадают напрямую в регистр, минуя документ Установка цен. Это эффективно для скорости, но в списке документов вы эти цены не увидите — только в карточке номенклатуры и в отчетах по ценам.

Способ 3: Универсальная обработка «Загрузка данных из табличного документа»

Если штатный механизм загрузки в УНФ по каким-то причинам не подходит (например, сложная структура данных), воспользуемся классическим инструментом администратора — обработкой «Загрузка данных из табличного документа».

Разберем процесс работы с ней:

  1. Запустим обработку (она часто входит в состав подсистемы «Инструменты разработчика» или поставляется отдельно на диске ИТС).
  2. Выберем режим загрузки в Регистр сведений и укажем имя ЦеныНоменклатуры.
  3. Настроим соответствие полей. Обязательно укажем поле Период.
  4. В настройках загрузки можно установить флаг Использовать режим обмена данными, что аналогично программному ОбменДанными.Загрузка = Истина.
  5. Загрузим данные. Это позволит массово создать записи в регистре за любые даты прошлого периода.

Нюансы переноса архивных данных из 7.7

При переносе данных из «семерки» часто возникает спор о том, стоит ли переносить всю историю цен или достаточно актуальных остатков. Если бизнес требует возможности перепроведения документов за прошлые годы в новой базе, то перенос истории цен обязателен.

Проанализируем особенности 1С 7.7. В ней цены часто хранились как периодические реквизиты справочника. При выгрузке из 7.7 нам нужно:

Внимание: Запись цен задним числом не изменит автоматически суммы в уже существующих документах продажи или закупки. Цены в 1С подтягиваются в момент выбора номенклатуры в документ. Если вы сначала перенесли накладные, а потом цены, то суммы в накладных останутся прежними, пока вы не нажмете кнопку «Перезаполнить цены» в каждом документе.

Заключение

Запись цен в 1С:УНФ задним числом — это штатная процедура, которая может быть реализована как через пользовательский интерфейс, так и программными методами. Мы рекомендуем использовать документарный способ (через загрузку в форму вида цен), так как это сохраняет историю в виде документов Установка цен, что облегчает последующий аудит данных.

Рассмотренные нами методы позволяют корректно мигрировать с устаревших платформ, сохраняя преемственность данных и обеспечивая аналитическую службу предприятия всей необходимой информацией о ценовых колебаниях в прошлом.

← На главную