1.3.1.107: fix удаления строк при схлопывании комиссии (#19).
Соответствие по ссылкам на строки ТЧ не срабатывало при Удалить(); пометка и удаление по индексам. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -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 Цикл
|
||||||
СтрТ = ВходящиеКомиссионныеТовары[Инд];
|
Если УдаляемыеИндексы.Получить(Инд) <> Неопределено Тогда
|
||||||
Если Удаляемые.Получить(СтрТ) <> Неопределено Тогда
|
|
||||||
ВходящиеКомиссионныеТовары.Удалить(Инд);
|
ВходящиеКомиссионныеТовары.Удалить(Инд);
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
КонецЦикла;
|
КонецЦикла;
|
||||||
|
|
||||||
Результат.УдаленоСтрок = Удаляемые.Количество();
|
|
||||||
Результат.СталоСтрок = ВходящиеКомиссионныеТовары.Количество();
|
Результат.СталоСтрок = ВходящиеКомиссионныеТовары.Количество();
|
||||||
|
Результат.УдаленоСтрок = Результат.БылоСтрок - Результат.СталоСтрок;
|
||||||
Возврат Результат;
|
Возврат Результат;
|
||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|||||||
Reference in New Issue
Block a user