1.3.1.107: fix удаления строк при схлопывании комиссии (#19).

Соответствие по ссылкам на строки ТЧ не срабатывало при Удалить(); пометка и удаление по индексам.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
mihailkudravcev
2026-08-31 14:28:37 +03:00
parent d3d65e03de
commit f419fe067c
2 changed files with 32 additions and 31 deletions
+1 -1
View File
@@ -62,7 +62,7 @@
<xr:Item xsi:type="xr:MDObjectRef">Role.РК_ОсновнаяРоль</xr:Item> <xr:Item xsi:type="xr:MDObjectRef">Role.РК_ОсновнаяРоль</xr:Item>
</DefaultRoles> </DefaultRoles>
<Vendor/> <Vendor/>
<Version>1.3.1.106</Version> <Version>1.3.1.107</Version>
<DefaultStyle/> <DefaultStyle/>
<DefaultLanguage>Language.Русский</DefaultLanguage> <DefaultLanguage>Language.Русский</DefaultLanguage>
<BriefInformation/> <BriefInformation/>
@@ -292,49 +292,51 @@
Возврат Результат; Возврат Результат;
КонецЕсли; КонецЕсли;
Удаляемые = Новый Соответствие; УдаляемыеИндексы = Новый Соответствие;
Группы = Новый Соответствие; Группы = Новый Соответствие;
Для Каждого СтрТ Из ВходящиеКомиссионныеТовары Цикл Для Инд = 0 По ВходящиеКомиссионныеТовары.Количество() - 1 Цикл
СтрТ = ВходящиеКомиссионныеТовары[Инд];
Ключ = КлючАналитикиКомиссионнойСтроки(СтрТ); Ключ = КлючАналитикиКомиссионнойСтроки(СтрТ);
СтрокиГруппы = Группы.Получить(Ключ); ИндексыГруппы = Группы.Получить(Ключ);
Если СтрокиГруппы = Неопределено Тогда Если ИндексыГруппы = Неопределено Тогда
СтрокиГруппы = Новый Массив; ИндексыГруппы = Новый Массив;
Группы.Вставить(Ключ, СтрокиГруппы); Группы.Вставить(Ключ, ИндексыГруппы);
КонецЕсли; КонецЕсли;
СтрокиГруппы.Добавить(СтрТ); ИндексыГруппы.Добавить(Инд);
КонецЦикла; КонецЦикла;
Для Каждого ЭлементГруппы Из Группы Цикл Для Каждого ЭлементГруппы Из Группы Цикл
СтрокиГруппы = ЭлементГруппы.Значение; ИндексыГруппы = ЭлементГруппы.Значение;
Помеченные = Новый Соответствие; Помеченные = Новый Соответствие;
Отрицательные = Новый Массив; Отрицательные = Новый Массив;
ПоложительныеССерией = Новый Массив; ПоложительныеССерией = Новый Массив;
Для Каждого СтрТ Из СтрокиГруппы Цикл Для Каждого Инд Из ИндексыГруппы Цикл
Если Помеченные.Получить(СтрТ) <> Неопределено Тогда Если Помеченные.Получить(Инд) <> Неопределено Тогда
Продолжить; Продолжить;
КонецЕсли; КонецЕсли;
СтрТ = ВходящиеКомиссионныеТовары[Инд];
Кол = СтрТ.Количество; Кол = СтрТ.Количество;
Если Кол < 0 И Не СерияЗаполненаВСтрокеКомиссии(СтрТ) Тогда Если Кол < 0 И Не СерияЗаполненаВСтрокеКомиссии(СтрТ) Тогда
Отрицательные.Добавить(СтрТ); Отрицательные.Добавить(Инд);
ИначеЕсли Кол > 0 И СерияЗаполненаВСтрокеКомиссии(СтрТ) Тогда ИначеЕсли Кол > 0 И СерияЗаполненаВСтрокеКомиссии(СтрТ) Тогда
ПоложительныеССерией.Добавить(СтрТ); ПоложительныеССерией.Добавить(Инд);
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
Для Каждого НегСтр Из Отрицательные Цикл Для Каждого ИндНег Из Отрицательные Цикл
Если Помеченные.Получить(НегСтр) <> Неопределено Тогда Если Помеченные.Получить(ИндНег) <> Неопределено Тогда
Продолжить; Продолжить;
КонецЕсли; КонецЕсли;
НужноеКол = -НегСтр.Количество; НужноеКол = -ВходящиеКомиссионныеТовары[ИндНег].Количество;
Для Каждого ПозСтр Из ПоложительныеССерией Цикл Для Каждого ИндПоз Из ПоложительныеССерией Цикл
Если Помеченные.Получить(ПозСтр) <> Неопределено Тогда Если Помеченные.Получить(ИндПоз) <> Неопределено Тогда
Продолжить; Продолжить;
КонецЕсли; КонецЕсли;
Если ПозСтр.Количество = НужноеКол Тогда Если ВходящиеКомиссионныеТовары[ИндПоз].Количество = НужноеКол Тогда
Помеченные.Вставить(НегСтр, Истина); Помеченные.Вставить(ИндНег, Истина);
Помеченные.Вставить(ПозСтр, Истина); Помеченные.Вставить(ИндПоз, Истина);
Результат.УдаленоПар = Результат.УдаленоПар + 1; Результат.УдаленоПар = Результат.УдаленоПар + 1;
Прервать; Прервать;
КонецЕсли; КонецЕсли;
@@ -343,35 +345,34 @@
Остаток = Новый Массив; Остаток = Новый Массив;
СуммаКол = 0; СуммаКол = 0;
Для Каждого СтрТ Из СтрокиГруппы Цикл Для Каждого Инд Из ИндексыГруппы Цикл
Если Помеченные.Получить(СтрТ) <> Неопределено Тогда Если Помеченные.Получить(Инд) <> Неопределено Тогда
Продолжить; Продолжить;
КонецЕсли; КонецЕсли;
Остаток.Добавить(СтрТ); Остаток.Добавить(Инд);
СуммаКол = СуммаКол + СтрТ.Количество; СуммаКол = СуммаКол + ВходящиеКомиссионныеТовары[Инд].Количество;
КонецЦикла; КонецЦикла;
Если Остаток.Количество() > 1 И ?(СуммаКол >= 0, СуммаКол, -СуммаКол) < 0.000001 Тогда Если Остаток.Количество() > 1 И ?(СуммаКол >= 0, СуммаКол, -СуммаКол) < 0.000001 Тогда
Для Каждого СтрТ Из Остаток Цикл Для Каждого Инд Из Остаток Цикл
Помеченные.Вставить(СтрТ, Истина); Помеченные.Вставить(Инд, Истина);
КонецЦикла; КонецЦикла;
Результат.УдаленоГруппNetZero = Результат.УдаленоГруппNetZero + 1; Результат.УдаленоГруппNetZero = Результат.УдаленоГруппNetZero + 1;
КонецЕсли; КонецЕсли;
Для Каждого ЭлементПометки Из Помеченные Цикл Для Каждого ЭлементПометки Из Помеченные Цикл
Удаляемые.Вставить(ЭлементПометки.Ключ, Истина); УдаляемыеИндексы.Вставить(ЭлементПометки.Ключ, Истина);
КонецЦикла; КонецЦикла;
КонецЦикла; КонецЦикла;
Для Инд = ВходящиеКомиссионныеТовары.Количество() - 1 По 0 Цикл Для Инд = ВходящиеКомиссионныеТовары.Количество() - 1 По 0 Цикл
СтрТ = ВходящиеКомиссионныеТовары[Инд]; Если УдаляемыеИндексы.Получить(Инд) <> Неопределено Тогда
Если Удаляемые.Получить(СтрТ) <> Неопределено Тогда
ВходящиеКомиссионныеТовары.Удалить(Инд); ВходящиеКомиссионныеТовары.Удалить(Инд);
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
Результат.УдаленоСтрок = Удаляемые.Количество();
Результат.СталоСтрок = ВходящиеКомиссионныеТовары.Количество(); Результат.СталоСтрок = ВходящиеКомиссионныеТовары.Количество();
Результат.УдаленоСтрок = Результат.БылоСтрок - Результат.СталоСтрок;
Возврат Результат; Возврат Результат;
КонецФункции КонецФункции