Выгрузка актуальных цен из исходной базы в целевую с применением отдельной обработки в целевой базе #18

Open
opened 2026-08-19 07:51:23 +00:00 by kma · 3 comments
Owner

Каноническая задача: rhana/crm3-migration#20 (проект миграции: ws-rhana + crm3-26.rhana). Перенос issue между репозиториями через MCP недоступен — задачи связаны.


В целевой базе crm3-26 в рамках расширения crm3-26.rhana необходимо реализовать загрузку актуальных на определенную дату цен продаж номенклатур из исходной базы crm3-old.

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

Также важно выгружать или проверять актуальность (обновлять) нормативно-справочную информацию (т.к. виды цен), связанную с ценами продаж.

Необходимо провести анализ уже реализованных на текущий момент алгоритмов, внести эту информацию в текущую задачу, предложить и реализовать решение в рамках обработки РК_ЗагрузкаЦен в crm3-26.rhana.

Провести дополнительный анализ конфигурации структуры данных в исходной и целевой базах. Выявить функциональные и структурные разрывы и возможные потери детализации информации.

**Каноническая задача:** https://git.p7net.ru/rhana/crm3-migration/issues/20 (проект миграции: `ws-rhana` + `crm3-26.rhana`). Перенос issue между репозиториями через MCP недоступен — задачи связаны. --- В целевой базе `crm3-26` в рамках расширения `crm3-26.rhana` необходимо реализовать загрузку актуальных на определенную дату цен продаж номенклатур из исходной базы `crm3-old`. Необходимо учесть, что в целевой базе посерийный учет у номенклатуры может отличаться или в принципе присутствовать в отличии от исходной базы. Также важно выгружать или проверять актуальность (обновлять) нормативно-справочную информацию (т.к. виды цен), связанную с ценами продаж. Необходимо провести анализ уже реализованных на текущий момент алгоритмов, внести эту информацию в текущую задачу, предложить и реализовать решение в рамках обработки `РК_ЗагрузкаЦен` в `crm3-26.rhana`. Провести дополнительный анализ конфигурации структуры данных в исходной и целевой базах. Выявить функциональные и структурные разрывы и возможные потери детализации информации.
Member

Анализ и реализация

Взято в работу. Ниже — что уже было, где разрывы моделей и что сделано в коде.

Что уже было (офлайн-пайплайн)

Живой обработки РК_ЗагрузкаЦен не было. Цены переносились пакетным BSL:

  1. Выгрузка среза из РегистрСведений.ЦеныНоменклатуры (docs/transfer/Код_выгрузки_цен_номенклатуры.bsl).
  2. Сопоставление номенклатуры и видов цен в Python (scripts/prepare_prices_transfer.py, scripts/run_prices_transfer.sh).
  3. Запись документами УстановкаЦенНоменклатуры в ТЧ Tовары2_5 (ЦО 2.5), СерияЦО пустая.

Шаблон живого API — РК_ЗагрузкаОстатков + ws-rhana Transfer API. Отдельного ценового HTTP-эндпоинта не было.

Структура: источник vs цель

Слой кrm3-dev (источник) кrm3-26 (цель)
Регистр цен ЦеныНоменклатуры: Номенклатура + Характеристика + ВидЦены ЦеныНоменклатуры25: + СерияЦО, ХарактеристикаЦО, УпаковкаЦО, СтавкаНДС
ЦО 2.5 нет включено (ИспользуетсяЦенообразование25)
Серии склада не влияют на регистр цен у вида номенклатуры могут быть ИспользоватьСерии и НастройкиКлючаЦенПоСерии
Виды цен справочник ВидыЦен то же + СтавкаНДС, Назначение, ТЧ валют
Документ ТЧ Товары ТЧ Товары + Товары2_5

ЦеныНоменклатуры25 в источнике нет. Посерийный складской учёт и ценообразование — разные контуры.

Потери детализации (не изобретать)

  • В источнике цена не хранится по сериям. В цели пишем общую цену с пустой СерияЦО — это соответствует источнику, а не размножению цены на все серии склада.
  • Если у вида номенклатуры в цели НастройкиКлючаЦенПоСерии не НеИспользовать, типовой поиск цены по серии может не увидеть общую цену. Обработка помечает такие строки колонкой «Разрыв детализации», но не дублирует цену на каждую СерияЦО.
  • ХарактеристикаЦО при ЦО 2.5 тоже пустая (как в старом BSL-пайплайне).
  • Реквизиты вида цен, есть только в цели (Назначение, вариант НДС по строкам), при создании нового элемента не копируются 1:1.

Что реализовано

ws-rhana 0.0.0.44 (нужно на исходной ИБ):

  • POST /hs/transfer/v1/prices/types — ВидыЦен.
  • POST /hs/transfer/v1/prices/slice — срез на дату, пагинация cursor / has_more, фильтры price_types, nomenclature, nomenclature_groups_recursive.

crm3-26.rhana 1.3.1.99 — обработка РК_ЗагрузкаЦен (подсистема «Обмен с внешней базой»):

  1. Загрузить виды цен → сопоставить по наименованию → при необходимости создать отсутствующие.
  2. Загрузить срез цен на дату (отмеченные виды цен или полный срез).
  3. Сопоставить номенклатуру (артикул → GUID → код → наименование), показать текущую цену цели и разрыв серий.
  4. Создать и провести УстановкаЦенНоменклатуры (до 500 строк на документ, по виду цены).

Как проверить

  1. git pull, загрузить ws-rhana 0.0.0.44 в исходную ИБ и опубликовать HTTP /hs/transfer.
  2. Загрузить crm3-26.rhana 1.3.1.99 в целевую ИБ.
  3. Открыть «Загрузка цен», указать рабочее подключение API, дату среза.
  4. Сначала виды цен (тест → запись недостающих), затем цены → сопоставление → тест создания документов → запись.

Офлайн scripts/run_prices_transfer.sh остаётся как запасной контур.

## Анализ и реализация Взято в работу. Ниже — что уже было, где разрывы моделей и что сделано в коде. ### Что уже было (офлайн-пайплайн) Живой обработки `РК_ЗагрузкаЦен` не было. Цены переносились пакетным BSL: 1. Выгрузка среза из `РегистрСведений.ЦеныНоменклатуры` (`docs/transfer/Код_выгрузки_цен_номенклатуры.bsl`). 2. Сопоставление номенклатуры и видов цен в Python (`scripts/prepare_prices_transfer.py`, `scripts/run_prices_transfer.sh`). 3. Запись документами `УстановкаЦенНоменклатуры` в ТЧ `Tовары2_5` (ЦО 2.5), **СерияЦО пустая**. Шаблон живого API — `РК_ЗагрузкаОстатков` + `ws-rhana` Transfer API. Отдельного `ценового` HTTP-эндпоинта не было. ### Структура: источник vs цель |Слой|кrm3-dev (источник)|кrm3-26 (цель)| |---|---|---| |Регистр цен|`ЦеныНоменклатуры`: Номенклатура + Характеристика + ВидЦены|`ЦеныНоменклатуры25`: + **СерияЦО**, **ХарактеристикаЦО**, УпаковкаЦО, СтавкаНДС| |ЦО 2.5|нет|включено (`ИспользуетсяЦенообразование25`)| |Серии склада|не влияют на регистр цен|у вида номенклатуры могут быть `ИспользоватьСерии` и `НастройкиКлючаЦенПоСерии`| |Виды цен|справочник `ВидыЦен`|то же + СтавкаНДС, Назначение, ТЧ валют| |Документ|ТЧ `Товары`|ТЧ `Товары` + **`Товары2_5`**| `ЦеныНоменклатуры25` в источнике **нет**. Посерийный складской учёт и ценообразование — **разные контуры**. ### Потери детализации (не изобретать) - В источнике цена **не хранится по сериям**. В цели пишем общую цену с **пустой СерияЦО** — это соответствует источнику, а не размножению цены на все серии склада. - Если у вида номенклатуры в цели `НастройкиКлючаЦенПоСерии` не `НеИспользовать`, типовой поиск цены по серии может **не увидеть** общую цену. Обработка **помечает** такие строки колонкой «Разрыв детализации», но не дублирует цену на каждую `СерияЦО`. - `ХарактеристикаЦО` при ЦО 2.5 тоже пустая (как в старом BSL-пайплайне). - Реквизиты вида цен, есть только в цели (Назначение, вариант НДС по строкам), при создании нового элемента не копируются 1:1. ### Что реализовано **ws-rhana 0.0.0.44** (нужно на исходной ИБ): - `POST /hs/transfer/v1/prices/types` — `ВидыЦен`. - `POST /hs/transfer/v1/prices/slice` — срез на дату, пагинация `cursor` / `has_more`, фильтры `price_types`, `nomenclature`, `nomenclature_groups_recursive`. **crm3-26.rhana 1.3.1.99** — обработка `РК_ЗагрузкаЦен` (подсистема «Обмен с внешней базой»): 1. Загрузить виды цен → сопоставить по наименованию → при необходимости создать отсутствующие. 2. Загрузить срез цен на дату (отмеченные виды цен или полный срез). 3. Сопоставить номенклатуру (артикул → GUID → код → наименование), показать текущую цену цели и разрыв серий. 4. Создать и провести `УстановкаЦенНоменклатуры` (до 500 строк на документ, по виду цены). ### Как проверить 1. `git pull`, загрузить **ws-rhana 0.0.0.44** в исходную ИБ и опубликовать HTTP `/hs/transfer`. 2. Загрузить **crm3-26.rhana 1.3.1.99** в целевую ИБ. 3. Открыть «Загрузка цен», указать рабочее подключение API, дату среза. 4. Сначала виды цен (тест → запись недостающих), затем цены → сопоставление → тест создания документов → запись. Офлайн `scripts/run_prices_transfer.sh` остаётся как запасной контур.
Member

Перенос issue между репозиториями через MCP недоступен. Каноническая задача (ws-rhana + crm3-26.rhana) создана в проекте миграции:

rhana/crm3-migration#20

Дальнейший статус и проверка — там. Эта задача остаётся как постановка в репозитории расширения цели.

Перенос issue между репозиториями через MCP недоступен. Каноническая задача (ws-rhana + crm3-26.rhana) создана в проекте миграции: https://git.p7net.ru/rhana/crm3-migration/issues/20 Дальнейший статус и проверка — там. Эта задача остаётся как постановка в репозитории расширения цели.
Member

Операционка среза цен 01.08.2026 ведётся в монорепо: rhana/crm3-migration#25 (эпик rhana/crm3-migration#22). Эту задачу закрыть вместе с #25.

Операционка среза цен **01.08.2026** ведётся в монорепо: https://git.p7net.ru/rhana/crm3-migration/issues/25 (эпик https://git.p7net.ru/rhana/crm3-migration/issues/22). Эту задачу закрыть вместе с #25.
Sign in to join this conversation.
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: 1c/crm3_26.rhana#18