РК_ЗагрузкаОстатков 1.3.1.102: свернуть комиссионные остатки (#19).
Команда на форме: пары −/+ без/с серией и группы net≈0 перед сопоставлением. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -4,6 +4,14 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 1.3.1.102 (2026-08-31)
|
||||||
|
|
||||||
|
### РК_ЗагрузкаОстатков — свернуть комиссионные остатки (#19, crm3-migration#24)
|
||||||
|
|
||||||
|
- Команда **«Свернуть комиссионные остатки»** на форме и на вкладке комиссии.
|
||||||
|
- Алгоритм: пары «−qty без серии / +qty с серией» при равных |qty|; затем группы с net qty ≈ 0.
|
||||||
|
- Экспорт `СвернутьКомиссионныеОстатки()` в ObjectModule.
|
||||||
|
|
||||||
## 1.3.1.101 (2026-08-21)
|
## 1.3.1.101 (2026-08-21)
|
||||||
|
|
||||||
### РК_ПроверкаСерий — отображение пометки удаления дублей (#15)
|
### РК_ПроверкаСерий — отображение пометки удаления дублей (#15)
|
||||||
|
|||||||
@@ -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.101</Version>
|
<Version>1.3.1.102</Version>
|
||||||
<DefaultStyle/>
|
<DefaultStyle/>
|
||||||
<DefaultLanguage>Language.Русский</DefaultLanguage>
|
<DefaultLanguage>Language.Русский</DefaultLanguage>
|
||||||
<BriefInformation/>
|
<BriefInformation/>
|
||||||
|
|||||||
@@ -271,6 +271,110 @@
|
|||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
|
// Схлопывает строки ТЧ ВходящиеКомиссионныеТовары:
|
||||||
|
// 1) отрицательная без серии + положительная с серией (|qty| равны) — обе удаляются;
|
||||||
|
// 2) оставшиеся группы с net qty ≈ 0 — все строки группы удаляются.
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Структура - БылоСтрок, СталоСтрок, УдаленоСтрок, УдаленоПар, УдаленоГруппNetZero
|
||||||
|
//
|
||||||
|
Функция СвернутьКомиссионныеОстатки() Экспорт
|
||||||
|
|
||||||
|
Результат = Новый Структура;
|
||||||
|
Результат.Вставить("БылоСтрок", ВходящиеКомиссионныеТовары.Количество());
|
||||||
|
Результат.Вставить("СталоСтрок", 0);
|
||||||
|
Результат.Вставить("УдаленоСтрок", 0);
|
||||||
|
Результат.Вставить("УдаленоПар", 0);
|
||||||
|
Результат.Вставить("УдаленоГруппNetZero", 0);
|
||||||
|
|
||||||
|
Если Результат.БылоСтрок = 0 Тогда
|
||||||
|
Возврат Результат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Удаляемые = Новый Соответствие;
|
||||||
|
|
||||||
|
Группы = Новый Соответствие;
|
||||||
|
Для Каждого СтрТ Из ВходящиеКомиссионныеТовары Цикл
|
||||||
|
Ключ = КлючАналитикиКомиссионнойСтроки(СтрТ);
|
||||||
|
СтрокиГруппы = Группы.Получить(Ключ);
|
||||||
|
Если СтрокиГруппы = Неопределено Тогда
|
||||||
|
СтрокиГруппы = Новый Массив;
|
||||||
|
Группы.Вставить(Ключ, СтрокиГруппы);
|
||||||
|
КонецЕсли;
|
||||||
|
СтрокиГруппы.Добавить(СтрТ);
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Для Каждого ЭлементГруппы Из Группы Цикл
|
||||||
|
СтрокиГруппы = ЭлементГруппы.Значение;
|
||||||
|
Помеченные = Новый Соответствие;
|
||||||
|
|
||||||
|
Отрицательные = Новый Массив;
|
||||||
|
ПоложительныеССерией = Новый Массив;
|
||||||
|
Для Каждого СтрТ Из СтрокиГруппы Цикл
|
||||||
|
Если Помеченные.Получить(СтрТ) <> Неопределено Тогда
|
||||||
|
Продолжить;
|
||||||
|
КонецЕсли;
|
||||||
|
Кол = СтрТ.Количество;
|
||||||
|
Если Кол < 0 И Не СерияЗаполненаВСтрокеКомиссии(СтрТ) Тогда
|
||||||
|
Отрицательные.Добавить(СтрТ);
|
||||||
|
ИначеЕсли Кол > 0 И СерияЗаполненаВСтрокеКомиссии(СтрТ) Тогда
|
||||||
|
ПоложительныеССерией.Добавить(СтрТ);
|
||||||
|
КонецЕсли;
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Для Каждого НегСтр Из Отрицательные Цикл
|
||||||
|
Если Помеченные.Получить(НегСтр) <> Неопределено Тогда
|
||||||
|
Продолжить;
|
||||||
|
КонецЕсли;
|
||||||
|
НужноеКол = -НегСтр.Количество;
|
||||||
|
Для Каждого ПозСтр Из ПоложительныеССерией Цикл
|
||||||
|
Если Помеченные.Получить(ПозСтр) <> Неопределено Тогда
|
||||||
|
Продолжить;
|
||||||
|
КонецЕсли;
|
||||||
|
Если ПозСтр.Количество = НужноеКол Тогда
|
||||||
|
Помеченные.Вставить(НегСтр, Истина);
|
||||||
|
Помеченные.Вставить(ПозСтр, Истина);
|
||||||
|
Результат.УдаленоПар = Результат.УдаленоПар + 1;
|
||||||
|
Прервать;
|
||||||
|
КонецЕсли;
|
||||||
|
КонецЦикла;
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Остаток = Новый Массив;
|
||||||
|
СуммаКол = 0;
|
||||||
|
Для Каждого СтрТ Из СтрокиГруппы Цикл
|
||||||
|
Если Помеченные.Получить(СтрТ) <> Неопределено Тогда
|
||||||
|
Продолжить;
|
||||||
|
КонецЕсли;
|
||||||
|
Остаток.Добавить(СтрТ);
|
||||||
|
СуммаКол = СуммаКол + СтрТ.Количество;
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Если Остаток.Количество() > 1 И Abs(СуммаКол) < 0.000001 Тогда
|
||||||
|
Для Каждого СтрТ Из Остаток Цикл
|
||||||
|
Помеченные.Вставить(СтрТ, Истина);
|
||||||
|
КонецЦикла;
|
||||||
|
Результат.УдаленоГруппNetZero = Результат.УдаленоГруппNetZero + 1;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Для Каждого ЭлементПометки Из Помеченные Цикл
|
||||||
|
Удаляемые.Вставить(ЭлементПометки.Ключ, Истина);
|
||||||
|
КонецЦикла;
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Для Инд = ВходящиеКомиссионныеТовары.Количество() - 1 По 0 Цикл
|
||||||
|
СтрТ = ВходящиеКомиссионныеТовары[Инд];
|
||||||
|
Если Удаляемые.Получить(СтрТ) <> Неопределено Тогда
|
||||||
|
ВходящиеКомиссионныеТовары.Удалить(Инд);
|
||||||
|
КонецЕсли;
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Результат.УдаленоСтрок = Удаляемые.Количество();
|
||||||
|
Результат.СталоСтрок = ВходящиеКомиссионныеТовары.Количество();
|
||||||
|
Возврат Результат;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
// Создание документов ВводОстатковТоваров по сопоставленным строкам.
|
// Создание документов ВводОстатковТоваров по сопоставленным строкам.
|
||||||
// Собственные — 1 документ на склад; комиссия 2.5 — 1 документ на соглашение+партнёра (без склада).
|
// Собственные — 1 документ на склад; комиссия 2.5 — 1 документ на соглашение+партнёра (без склада).
|
||||||
// Количество в документе — финансовое (rh_), если не 0, иначе складское.
|
// Количество в документе — финансовое (rh_), если не 0, иначе складское.
|
||||||
@@ -1177,6 +1281,38 @@
|
|||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
|
Функция КлючАналитикиКомиссионнойСтроки(СтрТ)
|
||||||
|
|
||||||
|
Возврат Строка(СтрТ.НоменклатураИдентификатор) + "|"
|
||||||
|
+ СокрЛП(СтрТ.НоменклатураКод) + "|"
|
||||||
|
+ СокрЛП(СтрТ.Артикул) + "|"
|
||||||
|
+ Строка(СтрТ.СоглашениеИдентификатор) + "|"
|
||||||
|
+ СокрЛП(СтрТ.СоглашениеНаименование) + "|"
|
||||||
|
+ Строка(СтрТ.ПартнерИдентификатор) + "|"
|
||||||
|
+ СокрЛП(СтрТ.ПартнерНаименование) + "|"
|
||||||
|
+ Строка(СтрТ.КонтрагентИдентификатор) + "|"
|
||||||
|
+ СокрЛП(СтрТ.КонтрагентНаименование) + "|"
|
||||||
|
+ Строка(СтрТ.ОрганизацияИдентификатор) + "|"
|
||||||
|
+ Строка(СтрТ.СкладИдентификатор) + "|"
|
||||||
|
+ Строка(СтрТ.ХарактеристикаИдентификатор) + "|"
|
||||||
|
+ СокрЛП(СтрТ.ГТД) + "|"
|
||||||
|
+ СокрЛП(СтрТ.Назначение) + "|"
|
||||||
|
+ СокрЛП(СтрТ.ВидЗапасов);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция СерияЗаполненаВСтрокеКомиссии(СтрТ)
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(СтрТ.СерияИдентификатор) Тогда
|
||||||
|
Возврат Истина;
|
||||||
|
КонецЕсли;
|
||||||
|
Если Не ПустаяСтрока(СокрЛП(СтрТ.Серия)) Тогда
|
||||||
|
Возврат Истина;
|
||||||
|
КонецЕсли;
|
||||||
|
Возврат Не ПустаяСтрока(СокрЛП(СтрТ.СерияНомер));
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
Функция БулевоИзЗначения(Значение)
|
Функция БулевоИзЗначения(Значение)
|
||||||
|
|
||||||
Если ТипЗнч(Значение) = Тип("Булево") Тогда
|
Если ТипЗнч(Значение) = Тип("Булево") Тогда
|
||||||
|
|||||||
@@ -21,6 +21,11 @@
|
|||||||
<CommandName>Form.Command.СопоставитьДанные</CommandName>
|
<CommandName>Form.Command.СопоставитьДанные</CommandName>
|
||||||
<ExtendedTooltip name="ФормаСопоставитьДанныеРасширеннаяПодсказка" id="116"/>
|
<ExtendedTooltip name="ФормаСопоставитьДанныеРасширеннаяПодсказка" id="116"/>
|
||||||
</Button>
|
</Button>
|
||||||
|
<Button name="ФормаСвернутьКомиссионныеОстатки" id="1518">
|
||||||
|
<Type>CommandBarButton</Type>
|
||||||
|
<CommandName>Form.Command.СвернутьКомиссионныеОстатки</CommandName>
|
||||||
|
<ExtendedTooltip name="ФормаСвернутьКомиссионныеОстаткиРасширеннаяПодсказка" id="1519"/>
|
||||||
|
</Button>
|
||||||
<Button name="ФормаСоздатьДокументы" id="123">
|
<Button name="ФормаСоздатьДокументы" id="123">
|
||||||
<Type>CommandBarButton</Type>
|
<Type>CommandBarButton</Type>
|
||||||
<CommandName>Form.Command.СоздатьДокументы</CommandName>
|
<CommandName>Form.Command.СоздатьДокументы</CommandName>
|
||||||
@@ -724,6 +729,11 @@
|
|||||||
<BackColor>web:HoneyDew</BackColor>
|
<BackColor>web:HoneyDew</BackColor>
|
||||||
<ExtendedTooltip name="ВходящиеКомиссионныеТоварыЗагрузитьОстаткиРасширеннаяПодсказка" id="1162"/>
|
<ExtendedTooltip name="ВходящиеКомиссионныеТоварыЗагрузитьОстаткиРасширеннаяПодсказка" id="1162"/>
|
||||||
</Button>
|
</Button>
|
||||||
|
<Button name="ВходящиеКомиссионныеТоварыСвернуть" id="1520">
|
||||||
|
<Type>CommandBarButton</Type>
|
||||||
|
<CommandName>Form.Command.СвернутьКомиссионныеОстатки</CommandName>
|
||||||
|
<ExtendedTooltip name="ВходящиеКомиссионныеТоварыСвернутьРасширеннаяПодсказка" id="1521"/>
|
||||||
|
</Button>
|
||||||
</ChildItems>
|
</ChildItems>
|
||||||
</AutoCommandBar>
|
</AutoCommandBar>
|
||||||
<ExtendedTooltip name="ВходящиеКомиссионныеТоварыРасширеннаяПодсказка" id="1008"/>
|
<ExtendedTooltip name="ВходящиеКомиссионныеТоварыРасширеннаяПодсказка" id="1008"/>
|
||||||
@@ -1359,6 +1369,25 @@
|
|||||||
</Picture>
|
</Picture>
|
||||||
<Action>СопоставитьДанные</Action>
|
<Action>СопоставитьДанные</Action>
|
||||||
</Command>
|
</Command>
|
||||||
|
<Command name="СвернутьКомиссионныеОстатки" id="12">
|
||||||
|
<Title>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Свернуть комиссионные остатки</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Title>
|
||||||
|
<ToolTip>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Удалить взаимопогашающие строки комиссии (− без серии / + с серией) и группы с net qty ≈ 0</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</ToolTip>
|
||||||
|
<Picture>
|
||||||
|
<xr:Ref>StdPicture.CollapseTree</xr:Ref>
|
||||||
|
<xr:LoadTransparent>true</xr:LoadTransparent>
|
||||||
|
</Picture>
|
||||||
|
<Action>СвернутьКомиссионныеОстатки</Action>
|
||||||
|
</Command>
|
||||||
<Command name="СоздатьДокументы" id="4">
|
<Command name="СоздатьДокументы" id="4">
|
||||||
<Title>
|
<Title>
|
||||||
<v8:item>
|
<v8:item>
|
||||||
|
|||||||
@@ -179,6 +179,30 @@
|
|||||||
|
|
||||||
КонецПроцедуры
|
КонецПроцедуры
|
||||||
|
|
||||||
|
&НаКлиенте
|
||||||
|
Процедура СвернутьКомиссионныеОстатки(Команда)
|
||||||
|
|
||||||
|
Если Объект.ВходящиеКомиссионныеТовары.Количество() = 0 Тогда
|
||||||
|
ПоказатьПредупреждение(, "Нет строк во входящих комиссионных товарах");
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Попытка
|
||||||
|
Рез = СвернутьКомиссионныеОстаткиНаСервере();
|
||||||
|
Исключение
|
||||||
|
ПоказатьПредупреждение(, КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||||||
|
Возврат;
|
||||||
|
КонецПопытки;
|
||||||
|
|
||||||
|
ПоказатьОповещениеПользователя("Свернуть комиссионные остатки", ,
|
||||||
|
"Было: " + Формат(Рез.БылоСтрок, "ЧН=0; ЧГ=0")
|
||||||
|
+ "; удалено: " + Формат(Рез.УдаленоСтрок, "ЧН=0; ЧГ=0")
|
||||||
|
+ " (пар −/+: " + Формат(Рез.УдаленоПар, "ЧН=0; ЧГ=0")
|
||||||
|
+ ", net≈0: " + Формат(Рез.УдаленоГруппNetZero, "ЧН=0; ЧГ=0") + ")"
|
||||||
|
+ "; осталось: " + Формат(Рез.СталоСтрок, "ЧН=0; ЧГ=0"));
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
&НаКлиенте
|
&НаКлиенте
|
||||||
Процедура СоздатьДокументы(Команда)
|
Процедура СоздатьДокументы(Команда)
|
||||||
|
|
||||||
@@ -475,6 +499,16 @@
|
|||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
|
&НаСервере
|
||||||
|
Функция СвернутьКомиссионныеОстаткиНаСервере()
|
||||||
|
|
||||||
|
ОбъектОбработки = РеквизитФормыВЗначение("Объект");
|
||||||
|
Результат = ОбъектОбработки.СвернутьКомиссионныеОстатки();
|
||||||
|
ЗначениеВРеквизитФормы(ОбъектОбработки, "Объект");
|
||||||
|
Возврат Результат;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
&НаСервере
|
&НаСервере
|
||||||
Функция СоздатьДокументыНаСервере(РежимТест)
|
Функция СоздатьДокументыНаСервере(РежимТест)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user