РК_ЗагрузкаОstатков: свернуть комиссионные остатки (−/+ пары, net≈0) #19

Closed
opened 2026-08-31 08:18:46 +00:00 by cursor_ai · 11 comments
Member

РК_ЗагрузкаОстатков: команда «Свернуть комиссионные остатки»

Контекст: crm3-migration#24 comment-843, comment-655, comment-847.

Задача

Добавить на форму обработки команду Свернуть комиссионные остатки для предобработки ТЧ ВходящиеКомиссионныеТовары перед «Сопоставить».

Алгоритм

  1. Группировка по аналитике без серии (номенклатура, соглашение, партнёр, org, склад, характеристика, ГТД, назначение, вид запасов).
  2. Фаза 1: удалить пары «−qty без серии» + «+qty с серией» при равных |qty|.
  3. Фаза 2: удалить оставшиеся группы с net qty ≈ 0 (|sum| < 1e-6), если строк > 1.

Ожидаемый эффект (протокол 31.08)

  • 9 классических пар −/+
  • до 19 net≈0 групп
  • Σ qty комиссии после схлопывания ≈ 13880 (без изменения net остатка)

Реализация

  • ObjectModule.bsl: СвернутьКомиссионныеОstатки()
  • Forms/Форма: команда на главной панели и на вкладке комиссии

Критерий готовности

После «Заполнить входящие данные» → «Свернуть…» → «Сопоставить (тест)» число строк комиссии уменьшается, net qty по группам с net≠0 сохраняется.

## РК_ЗагрузкаОстатков: команда «Свернуть комиссионные остатки» **Контекст:** [crm3-migration#24](https://git.p7net.ru/rhana/crm3-migration/issues/24) comment-843, comment-655, comment-847. ### Задача Добавить на форму обработки команду **Свернуть комиссионные остатки** для предобработки ТЧ `ВходящиеКомиссионныеТовары` перед «Сопоставить». ### Алгоритм 1. Группировка по аналитике **без серии** (номенклатура, соглашение, партнёр, org, склад, характеристика, ГТД, назначение, вид запасов). 2. **Фаза 1:** удалить пары «−qty без серии» + «+qty с серией» при равных |qty|. 3. **Фаза 2:** удалить оставшиеся группы с net qty ≈ 0 (|sum| < 1e-6), если строк > 1. ### Ожидаемый эффект (протокол 31.08) - 9 классических пар −/+ - до 19 net≈0 групп - Σ qty комиссии после схлопывания ≈ 13880 (без изменения net остатка) ### Реализация - `ObjectModule.bsl`: `СвернутьКомиссионныеОstатки()` - `Forms/Форма`: команда на главной панели и на вкладке комиссии ### Критерий готовности После «Заполнить входящие данные» → «Свернуть…» → «Сопоставить (тест)» число строк комиссии уменьшается, net qty по группам с net≠0 сохраняется.
Owner

При загрузке версии 1.3.1.102 расширения crm3-26.rhana из файлов (в Конфигураторе) - выходят ошибки:

Исключение XDTO произошло при чтении файла- D:\projects\crm3-26\crm3-26.rhana\src\DataProcessors\РК_ЗагрузкаОстатков\Forms\Форма\Ext\Form.xml.
по причине:
Несоответствие свойства и элемента данных XDTO:
Свойство: 'Picture'
При загрузке версии **1.3.1.102** расширения `crm3-26.rhana` из файлов (в Конфигураторе) - выходят ошибки: ``` Исключение XDTO произошло при чтении файла- D:\projects\crm3-26\crm3-26.rhana\src\DataProcessors\РК_ЗагрузкаОстатков\Forms\Форма\Ext\Form.xml. по причине: Несоответствие свойства и элемента данных XDTO: Свойство: 'Picture' ```
Author
Member

Fix 1.3.1.103 — ошибка XDTO Picture

Причина: в команде «Свернуть комиссионные остатки» был указан StdPicture.CollapseTree — такого значения нет в схеме XDTO стандартных картинок 1С → конфигуратор падал при чтении Form.xml.

Исправление (aa93659): блок <Picture> удалён (как у «Заполнить справочники отбора» — команда без иконки).

Загрузка

  1. git pull → crm3-26.rhana версия 1.3.1.103
  2. Конфигуратор → расширение crm326RHANA → загрузить из crm3-26.rhana/src
  3. Обновить конфигурацию БД

После загрузки можно тестировать схлопывание по сценарию из #24 comment-849.

## Fix 1.3.1.103 — ошибка XDTO Picture Причина: в команде «Свернуть комиссионные остатки» был указан **`StdPicture.CollapseTree`** — такого значения нет в схеме XDTO стандартных картинок 1С → конфигуратор падал при чтении `Form.xml`. **Исправление** (`aa93659`): блок `<Picture>` удалён (как у «Заполнить справочники отбора» — команда без иконки). ### Загрузка 1. `git pull` → `crm3-26.rhana` версия **1.3.1.103** 2. Конфигуратор → расширение `crm326RHANA` → загрузить из `crm3-26.rhana/src` 3. Обновить конфигурацию БД После загрузки можно тестировать схлопывание по сценарию из [#24 comment-849](https://git.p7net.ru/rhana/crm3-migration/issues/24#issuecomment-849).
Owner

Теперь ошибка при открытии обработки Загрузка остатков:

Ошибка инициализации модуля: crm326RHANA Обработка.РК_ЗагрузкаОстатков.МодульОбъекта
по причине:
{crm326RHANA Обработка.РК_ЗагрузкаОстатков.МодульОбъекта(353,35)}: Процедура или функция с указанным именем не определена (Abs)
		Если Остаток.Количество() > 1 И <<?>>Abs(СуммаКол) < 0.000001 Тогда
[ОшибкаКомпиляцииВстроенногоЯзыка]
Теперь ошибка при открытии обработки **Загрузка остатков**: ``` Ошибка инициализации модуля: crm326RHANA Обработка.РК_ЗагрузкаОстатков.МодульОбъекта по причине: {crm326RHANA Обработка.РК_ЗагрузкаОстатков.МодульОбъекта(353,35)}: Процедура или функция с указанным именем не определена (Abs) Если Остаток.Количество() > 1 И <<?>>Abs(СуммаКол) < 0.000001 Тогда [ОшибкаКомпиляцииВстроенногоЯзыка] ```
Author
Member

Fix 1.3.1.104 — ошибка компиляции Abs

В BSL 1С нет глобальной функции Abs() → модуль объекта не компилировался при открытии обработки.

Исправление:

// было:
Abs(СуммаКол) < 0.000001
// стало:
?(СуммаКол >= 0, СуммаКол, -СуммаКол) < 0.000001

Загрузка

git pull → версия 1.3.1.104 → загрузить расширение из crm3-26.rhana/src → обновить конфигурацию БД.

## Fix 1.3.1.104 — ошибка компиляции `Abs` В BSL 1С **нет глобальной функции `Abs()`** → модуль объекта не компилировался при открытии обработки. **Исправление:** ```bsl // было: Abs(СуммаКол) < 0.000001 // стало: ?(СуммаКол >= 0, СуммаКол, -СуммаКол) < 0.000001 ``` ### Загрузка `git pull` → версия **1.3.1.104** → загрузить расширение из `crm3-26.rhana/src` → обновить конфигурацию БД.
Owner

Теперь в форме РК_ЗагрузкаОстатков (Форма) при выполнении команды ЗаполнитьСправочникиОтбора не заполняется ОтборГруппНоменклатур.

Теперь в форме `РК_ЗагрузкаОстатков` (`Форма`) при выполнении команды `ЗаполнитьСправочникиОтбора` не заполняется `ОтборГруппНоменклатур`.
Author
Member

Fix 1.3.1.105 — не заполнялся ОтборГруппНоменклатур

Причина: при добавлении кнопки «Свернуть комиссионные остатки» в Form.xml были использованы id 1518, 1519, 1521, которые уже заняты элементами таблицы ОтборГруппНоменклатур:

id было у «Свернуть» уже было у
1518 кнопка на панели Table ОтборГруппНоменклатур
1519 подсказка ContextMenu групп
1521 подсказка (вкладка комиссии) ExtendedTooltip групп

Дубли id в форме → дерево групп переставало работать после загрузки 1.3.1.102+.

Исправление (1530331): id кнопок «Свернуть» перенесены на 1566–1569.

Загрузка

git pull → 1.3.1.105 → загрузить расширение → обновить БД → «Заполнить справочники отбора».

## Fix 1.3.1.105 — не заполнялся `ОтборГруппНоменклатур` **Причина:** при добавлении кнопки «Свернуть комиссионные остатки» в `Form.xml` были использованы id **1518, 1519, 1521**, которые **уже заняты** элементами таблицы `ОтборГруппНоменклатур`: | id | было у «Свернуть» | уже было у | |----|-------------------|------------| | 1518 | кнопка на панели | `Table ОтборГруппНоменклатур` | | 1519 | подсказка | `ContextMenu` групп | | 1521 | подсказка (вкладка комиссии) | `ExtendedTooltip` групп | Дубли id в форме → дерево групп переставало работать после загрузки 1.3.1.102+. **Исправление** (`1530331`): id кнопок «Свернуть» перенесены на **1566–1569**. ### Загрузка `git pull` → **1.3.1.105** → загрузить расширение → обновить БД → «Заполнить справочники отбора».
Owner

В дополнение к #19 (comment) (еще на версии 1.3.1.104).

При выполнении Свернуть комиссионные остатки следующие строки не хлопнулись.

N	Вид номенклатуры	Вид номенклатуры (доп.)	Артикул	Код	Наименование	Характеристика	Количество	Кол. комиссии	Склад наименование	Серия	Номер серии	Ед. изм.	Стоимость (упр.)	Валюта упр.	ГТД
1	Товар с с.г. (пр. ТМЦ)		PLR-041047	ТБ-00000614	BB-крем плацентарный выравнивающий / PlaReceta BB Cream 50 мл		-2,000	-2,000				шт			
2	Товар с с.г. (пр. ТМЦ)		PLR-041047	ТБ-00000614	BB-крем плацентарный выравнивающий / PlaReceta BB Cream 50 мл		2,000	2,000		до 02.11.21		шт			10005030/190221/0065876

Скорей всего из различия в ГТД (пустая и заполненная). ГТД также как и серия в отрицательном остатке должна «закрываться» имеющейся ГТД в положительном остатке.

В дополнение к https://git.p7net.ru/1c/crm3_26.rhana/issues/19#issuecomment-864 (еще на версии 1.3.1.104). При выполнении **Свернуть комиссионные остатки** следующие строки не хлопнулись. ``` N Вид номенклатуры Вид номенклатуры (доп.) Артикул Код Наименование Характеристика Количество Кол. комиссии Склад наименование Серия Номер серии Ед. изм. Стоимость (упр.) Валюта упр. ГТД 1 Товар с с.г. (пр. ТМЦ) PLR-041047 ТБ-00000614 BB-крем плацентарный выравнивающий / PlaReceta BB Cream 50 мл -2,000 -2,000 шт 2 Товар с с.г. (пр. ТМЦ) PLR-041047 ТБ-00000614 BB-крем плацентарный выравнивающий / PlaReceta BB Cream 50 мл 2,000 2,000 до 02.11.21 шт 10005030/190221/0065876 ``` Скорей всего из различия в ГТД (пустая и заполненная). ГТД также как и серия в отрицательном остатке должна «закрываться» имеющейся ГТД в положительном остатке.
Author
Member

Fix 1.3.1.106 — пара PLR-041047 не схлопывалась (ГТД)

Подтверждаю comment-867: минус-строка без ГТД и плюс-строка с ГТД попадали в разные группы, т.к. ГТД входило в КлючАналитикиКомиссионнойСтроки.

Исправление (d3d65e0): ГТД исключено из ключа (аналогично серии — серия и так не в ключе, но для −/+ учитывается отдельно: − без серии, + с серией).

Пример PLR-041047 (−2 / +2, серия только в +) теперь должен схлопываться в одной группе.

Загрузка

git pull → 1.3.1.106 → расширение из crm3-26.rhana/src → обновить БД → повторить «Свернуть комиссионные остатки».

## Fix 1.3.1.106 — пара PLR-041047 не схлопывалась (ГТД) Подтверждаю [comment-867](https://git.p7net.ru/1c/crm3_26.rhana/issues/19#issuecomment-867): минус-строка без ГТД и плюс-строка с ГТД попадали в **разные группы**, т.к. `ГТД` входило в `КлючАналитикиКомиссионнойСтроки`. **Исправление** (`d3d65e0`): **ГТД исключено из ключа** (аналогично серии — серия и так не в ключе, но для −/+ учитывается отдельно: − без серии, + с серией). Пример PLR-041047 (−2 / +2, серия только в +) теперь должен схлопываться в одной группе. ### Загрузка `git pull` → **1.3.1.106** → расширение из `crm3-26.rhana/src` → обновить БД → повторить «Свернуть комиссионные остатки».
Owner

Провел тестирование свертки таблицы комиссионных товаров.

Проверь - все ок?

Провел тестирование свертки таблицы комиссионных товаров. * [2026-08-31_Комиссионные_до_свертывания.txt](/attachments/996b5c18-9e75-42e7-85dc-3505efb46ba2) * [2026-08-31_Комиссионные_после_свертывания.txt](/attachments/ccc8b00c-7c01-4d8e-b8cd-ad83783f970c) Проверь - все ок?
Author
Member

Проверка comment-873 — свёртка OK (1.3.1.108)

Сравнил вложения 2026-08-31_Комиссионные_до/после_свертывания.txt с алгоритмом из описания #19.

Показатель До После Ожидание
Строк 157 116 157 → ~116
Удалено — 41 ~41 (9 пар −/+ + net≈0 группы)
Σ количество 13 880 13 880 без изменения

Критерии

  • ✅ Классические пары −/+ схлопнуты (в т.ч. PLR-041047 −2/+2 — comment-867).
  • ✅ Групп с net qty ≈ 0 и >1 строки после свёртки нет.
  • ✅ Несхлопнутых пар «− без серии / + с серией» нет.
  • ✅ Мультимножество строк «после» совпадает с симуляцией алгоритма на «до».

Замечание (не блокер)

Осталась 1 строка с отрицательным количеством: «Баллы (ОЗОН)» −3 — без серии и без парной +qty с серией в группе; это реальный net-остаток, не артефакт Transfer API.

Дальше

Можно переходить к «Сопоставить (тест)» на свёрнутой таблице и закрывать #19. Следующий этап — crm3-migration#24 (партнёры/заглушки серий, повторное сопоставление, запись вводов).

## Проверка comment-873 — свёртка **OK** (1.3.1.108) Сравнил вложения `2026-08-31_Комиссионные_до/после_свертывания.txt` с алгоритмом из описания #19. | Показатель | До | После | Ожидание | |------------|---:|------:|----------| | Строк | **157** | **116** | 157 → ~116 | | Удалено | — | **41** | ~41 (9 пар −/+ + net≈0 группы) | | Σ количество | **13 880** | **13 880** | без изменения | ### Критерии - ✅ Классические пары −/+ схлопнуты (в т.ч. **PLR-041047** −2/+2 — comment-867). - ✅ Групп с net qty ≈ 0 и >1 строки после свёртки **нет**. - ✅ Несхлопнутых пар «− без серии / + с серией» **нет**. - ✅ Мультимножество строк «после» совпадает с симуляцией алгоритма на «до». ### Замечание (не блокер) Осталась **1** строка с отрицательным количеством: **«Баллы (ОЗОН)» −3** — без серии и без парной +qty с серией в группе; это реальный net-остаток, не артефакт Transfer API. ### Дальше Можно переходить к **«Сопоставить (тест)»** на свёрнутой таблице и закрывать #19. Следующий этап — crm3-migration#24 (партнёры/заглушки серий, повторное сопоставление, запись вводов).
Author
Member

Тест свёртки подтверждён (comment-873/874): 157→116 строк, Σ qty 13 880 без изменения, PLR-041047 и net≈0 группы схлопнуты.

Закрываю #19 — критерий готовности выполнен на 1.3.1.108.

Тест свёртки подтверждён (comment-873/874): 157→116 строк, Σ qty 13 880 без изменения, PLR-041047 и net≈0 группы схлопнуты. **Закрываю #19** — критерий готовности выполнен на **1.3.1.108**.
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#19