Перенос данных в новую информационную базу «с чистого листа» — задача ответственная, особенно когда речь идет о ценообразовании. В конфигурации 1С:Управление торговлей 11.1 (УТ 11.1) работа с ценами завязана на справочнике номенклатуры, характеристиках и регистрах сведений. Если в вашей базе накопилось более миллиона записей в регистре ЦеныНоменклатуры, переносить всю историю не имеет смысла. Намного эффективнее создать актуальные документы Установка цен номенклатуры. Рассмотрим подробно, как это сделать оптимально.
Прежде чем приступать к переносу, проанализируем объем данных. Если у нас порядка 30 000 позиций номенклатуры с учетом характеристик и 13 видов цен, простая выгрузка регистра «как есть» приведет к переносу огромного количества лишней информации. Наша цель — получить срез последних значений на текущую дату и зафиксировать их в новой базе.
Существует три основных пути решения этой задачи:
Этот метод считается наиболее надежным для программиста, так как позволяет полностью контролировать процесс сопоставления объектов. Разберем алгоритм настройки правил обмена:
Вместо того чтобы выгружать записи регистра сведений напрямую, создадим Правило выгрузки данных (ПВД) с типом выборки «Произвольный запрос». Напишем запрос, который получает актуальные цены для каждой позиции номенклатуры и характеристики. Пример логики запроса:
ВЫБРАТЬ
ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика,
ЦеныНоменклатурыСрезПоследних.ВидЦены КАК ВидЦены,
ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
ЦеныНоменклатурыСрезПоследних.Валюта КАК Валюта
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаСреза, ) КАК ЦеныНоменклатурыСрезПоследних
После получения данных в обработчике ПередВыгрузкой или в самом ПВД нам необходимо программно сформировать структуру, которая будет соответствовать документу УстановкаЦенНоменклатуры. Выясним важный момент: система 1С:УТ 11.1 чувствительна к количеству строк. Если мы попытаемся «засунуть» все 30 000 позиций в один документ, мы столкнемся с проблемами производительности.
Практический совет: При выгрузке через КД 2.0 программно разбивайте данные на пакеты. Оптимальный объем — не более 5 000 – 10 000 строк на один документ. Это гарантирует, что база на PostgreSQL или даже на MS SQL не «упадет» по таймауту при проведении документа в новой базе.
Если вы не хотите тратить время на написание правил в КД 2.0, воспользуемся штатным функционалом документа Установка цен номенклатуры. Рассмотрим пошагово:
Установка цен номенклатуры.Проанализируем риски этого метода. Главная проблема здесь — сопоставление характеристик. Если в новой базе характеристики еще не созданы или их внутренние идентификаторы (GUID) отличаются, система может их не найти. Убедитесь, что сопоставление идет по текстовому представлению или артикулу, и что структура характеристик (индивидуальные или общие) в новой базе идентична старой.
Рассмотрим важные детали, о которых часто забывают при миграции цен:
1. Статус документа. В УТ 11.1 цены начинают действовать только тогда, когда документ Установка цен номенклатуры проведен в статусе Согласован. Если вы переносите документы программно, обязательно устанавливайте это значение в коде:
ОбъектДокумент.Статус = Перечисления.СтатусыУстановокЦенНоменклатуры.Согласован;
2. Расчетные и динамические цены. Выясним разницу: если вид цены в новой базе настроен как «Рассчитывать по формуле от других видов цен», то записывать в него фиксированное число через документ часто не имеет смысла. Правильнее перенести только «Базовые» цены (например, закупочные), а для расчетных цен в новой базе просто задать формулы. После этого нужно запустить обработку актуализации цен, чтобы система сама заполнила регистры на основании базовых значений.
3. Работа с характеристиками. Если номенклатура ведется в разрезе характеристик, количество записей в документе увеличивается кратно. Помните, что ограничение платформы на количество строк в табличной части (около 99 999) — это теоретический предел. На практике Установка цен выполняет сложные расчеты при проведении (проверку зависимых цен), поэтому при 30 000 позициях лучше создать несколько документов, разделенных по группам номенклатуры или видам цен.
Рассмотрим еще одну интересную стратегию для опытных администраторов. Если структура баз абсолютно идентична:
Установка цен. При этом используем команду «Заполнить по действующим ценам».В результате мы получаем чистый справочник номенклатуры и один (или несколько) документов с актуальными ценами, которые легко переносятся в целевую базу через стандартную выгрузку XML.
Для успешного переноса цен в УТ 11.1 мы рекомендуем использовать комбинированный подход: перенести базовые цены (закупочные) через КД 2.0 небольшими порциями по 5 000 строк, предварительно убедившись в синхронизации справочников номенклатуры и характеристик. Расчетные цены лучше настроить в новой базе заново по формулам — это обеспечит чистоту данных и корректную работу алгоритмов ценообразования в будущем.