РК_ПроверкаСерий 1.3.1.101: пометка удаления в UI и фильтр поиска (#15)

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
mihailkudravcev
2026-08-21 13:38:32 +03:00
parent 71e56dcecd
commit e7aa007a21
7 changed files with 195 additions and 79 deletions
+8
View File
@@ -4,6 +4,14 @@
--- ---
## 1.3.1.101 (2026-08-21)
### РК_ПроверкаСерий — отображение пометки удаления дублей (#15)
- В `ФормаИзмененияМастерСерии` добавлена колонка **Пометка удаления**; в списке видны и помеченные серии.
- После объединения при включённой настройке пометки — оповещение и сообщение пользователю о числе помеченных дублей; комментарий в строке группы.
- В поиске дублей не учитываются серии с пометкой удаления и без остатков.
## 1.3.1.100 (2026-08-20) ## 1.3.1.100 (2026-08-20)
### РК_ПроверкаСерий — пометка дублей на удаление (#15) ### РК_ПроверкаСерий — пометка дублей на удаление (#15)
+1 -1
View File
@@ -1 +1 @@
1.3.1.100 1.3.1.101
+4 -4
View File
@@ -298,10 +298,10 @@
<Metadata name="DataProcessor.РК_ПроверкаСерий.TabularSection.ПроблемныеСерии.Attribute.НомерГруппы" id="f14e0034-0034-4000-8000-000000000034"/> <Metadata name="DataProcessor.РК_ПроверкаСерий.TabularSection.ПроблемныеСерии.Attribute.НомерГруппы" id="f14e0034-0034-4000-8000-000000000034"/>
<Metadata name="DataProcessor.РК_ПроверкаСерий.TabularSection.ПроблемныеСерии.Attribute.КоличествоВГруппе" id="f14e0035-0035-4000-8000-000000000035"/> <Metadata name="DataProcessor.РК_ПроверкаСерий.TabularSection.ПроблемныеСерии.Attribute.КоличествоВГруппе" id="f14e0035-0035-4000-8000-000000000035"/>
</Metadata> </Metadata>
<Metadata name="DataProcessor.РК_ПроверкаСерий.Form.Форма" id="f14e0001-0001-4000-8000-000000000001" configVersion="0717cd97a4a9d63560c7e131d1669d4a047a854d"/> <Metadata name="DataProcessor.РК_ПроверкаСерий.Form.Форма" id="f14e0001-0001-4000-8000-000000000001" configVersion="dbd63eda1cd1367f3439e8a0362ff22679cb5cab"/>
<Metadata name="DataProcessor.РК_ПроверкаСерий.Form.Форма.Form" id="f14e0001-0001-4000-8000-000000000001.0" configVersion="919e4b8b0b5a0e0791dd0ccb7274f27b9dd9f285"/> <Metadata name="DataProcessor.РК_ПроверкаСерий.Form.Форма.Form" id="f14e0001-0001-4000-8000-000000000001.0" configVersion="dbd63eda1cd1367f3439e8a0362ff22679cb5cab"/>
<Metadata name="DataProcessor.РК_ПроверкаСерий.Form.ФормаИзмененияМастерСерии" id="2ef7dbf8-ecdd-4f24-b896-a5a95e049d34" configVersion="6cca6a1c461aaf798ed1d6fa94cba6bb648697a6"/> <Metadata name="DataProcessor.РК_ПроверкаСерий.Form.ФормаИзмененияМастерСерии" id="2ef7dbf8-ecdd-4f24-b896-a5a95e049d34" configVersion="7aaaae663b4f536faba34cd50931e7a37b497d46"/>
<Metadata name="DataProcessor.РК_ПроверкаСерий.Form.ФормаИзмененияМастерСерии.Form" id="2ef7dbf8-ecdd-4f24-b896-a5a95e049d34.0" configVersion="5d61e4a1bc9153cb3e39744340027f254c8f5a7a"/> <Metadata name="DataProcessor.РК_ПроверкаСерий.Form.ФормаИзмененияМастерСерии.Form" id="2ef7dbf8-ecdd-4f24-b896-a5a95e049d34.0" configVersion="7aaaae663b4f536faba34cd50931e7a37b497d46"/>
<Metadata name="DefinedType.РаспоряжениеНаОтгрузку" id="afb3288b-968a-4b19-8b67-721e50974db4" configVersion="b4e7b9549112d57eb9da5a9947237f4f601039e7"/> <Metadata name="DefinedType.РаспоряжениеНаОтгрузку" id="afb3288b-968a-4b19-8b67-721e50974db4" configVersion="b4e7b9549112d57eb9da5a9947237f4f601039e7"/>
<Metadata name="Document.ЗаказКлиента" id="83c6bfba-2c6d-4fe7-a05b-1b54e8208966" configVersion="0f1941010a3f2e5c6ace2f57e4dab142a17f8f20"/> <Metadata name="Document.ЗаказКлиента" id="83c6bfba-2c6d-4fe7-a05b-1b54e8208966" configVersion="0f1941010a3f2e5c6ace2f57e4dab142a17f8f20"/>
<Metadata name="Document.РасходныйОрдерНаТовары" id="3d303157-526b-4725-8f94-4077b108b463" configVersion="43ce890f8166575f8e201b20e1bea4cf341f6e47"> <Metadata name="Document.РасходныйОрдерНаТовары" id="3d303157-526b-4725-8f94-4077b108b463" configVersion="43ce890f8166575f8e201b20e1bea4cf341f6e47">
+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.100</Version> <Version>1.3.1.101</Version>
<DefaultStyle/> <DefaultStyle/>
<DefaultLanguage>Language.Русский</DefaultLanguage> <DefaultLanguage>Language.Русский</DefaultLanguage>
<BriefInformation/> <BriefInformation/>
@@ -290,7 +290,19 @@
Формат(Результат.ОбъединеноГрупп, "ЧН=0; ЧГ=0"), Формат(Результат.ОбъединеноГрупп, "ЧН=0; ЧГ=0"),
Формат(Результат.Ошибок, "ЧН=0; ЧГ=0"), Формат(Результат.Ошибок, "ЧН=0; ЧГ=0"),
?(Объект.РежимТест, " (тест)", "")); ?(Объект.РежимТест, " (тест)", ""));
Если Результат.Свойство("ПомеченоНаУдаление") И Результат.ПомеченоНаУдаление > 0 Тогда
Текст = Текст + Символы.ПС + СтрШаблон("Помечено на удаление дублей: %1",
Формат(Результат.ПомеченоНаУдаление, "ЧН=0; ЧГ=0"));
ИначеЕсли Объект.ПомечатьДублиСерииНаУдаление И Объект.РежимТест И Результат.ОбъединеноСсылок > 0 Тогда
Текст = Текст + Символы.ПС + СтрШаблон("В боевом режиме было бы помечено на удаление: %1",
Формат(Результат.ОбъединеноСсылок, "ЧН=0; ЧГ=0"));
КонецЕсли;
ПоказатьОповещениеПользователя("Дубли серий", , Текст); ПоказатьОповещениеПользователя("Дубли серий", , Текст);
Если Результат.Свойство("ПомеченоНаУдаление") И Результат.ПомеченоНаУдаление > 0 Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(СтрШаблон(
"Дублирующие серии помечены на удаление: %1",
Формат(Результат.ПомеченоНаУдаление, "ЧН=0; ЧГ=0")));
КонецЕсли;
КонецПроцедуры КонецПроцедуры
@@ -1256,48 +1268,46 @@
Объект.ГруппыДублей.Очистить(); Объект.ГруппыДублей.Очистить();
ЗапросГруппы = Новый Запрос; Кандидаты = КандидатыСерийДляПоискаДублей();
ЗапросГруппы.Текст = Если Кандидаты.Количество() = 0 Тогда
"ВЫБРАТЬ Возврат 0;
| Сер.ВидНоменклатуры КАК ВидНоменклатуры, КонецЕсли;
| Сер.Номер КАК Номер,
| Сер.ГоденДо КАК ГоденДо, КлючиГрупп = Новый Соответствие;
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Сер.Ссылка) КАК КоличествоСерий Для Каждого СтрКандидат Из Кандидаты Цикл
|ИЗ Ключ = КлючГруппыДублей(СтрКандидат.ВидНоменклатуры, СтрКандидат.Номер, СтрКандидат.ГоденДо);
| Справочник.СерииНоменклатуры КАК Сер СерииКлюча = КлючиГрупп.Получить(Ключ);
|ГДЕ Если СерииКлюча = Неопределено Тогда
| НЕ Сер.ПометкаУдаления СерииКлюча = Новый Массив;
|СГРУППИРОВАТЬ ПО КлючиГрупп.Вставить(Ключ, СерииКлюча);
| Сер.ВидНоменклатуры, КонецЕсли;
| Сер.Номер, СерииКлюча.Добавить(СтрКандидат);
| Сер.ГоденДо КонецЦикла;
|ИМЕЮЩИЕ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Сер.Ссылка) > 1";
ВыбГруппы = ЗапросГруппы.Выполнить().Выбрать();
НомерГруппы = 0; НомерГруппы = 0;
Для Каждого КлючИСерии Из КлючиГрупп Цикл
Пока ВыбГруппы.Следующий() Цикл СтрокиКандидатов = КлючИСерии.Значение;
Если СтрокиКандидатов.Количество() < 2 Тогда
Мастер = НайтиСериюМастерГруппы(
ВыбГруппы.ВидНоменклатуры,
ВыбГруппы.Номер,
ВыбГруппы.ГоденДо);
Если Не ЗначениеЗаполнено(Мастер) Тогда
Продолжить; Продолжить;
КонецЕсли; КонецЕсли;
СерииГруппы = СерииГруппыДублей( Первая = СтрокиКандидатов[0];
ВыбГруппы.ВидНоменклатуры, СерииГруппы = Новый Массив;
ВыбГруппы.Номер, Для Каждого СтрКандидат Из СтрокиКандидатов Цикл
ВыбГруппы.ГоденДо); СерииГруппы.Добавить(СтрКандидат.Серия);
Если СерииГруппы.Количество() < 2 Тогда КонецЦикла;
Мастер = НайтиСериюМастерСредиСерий(СерииГруппы);
Если Не ЗначениеЗаполнено(Мастер) Тогда
Продолжить; Продолжить;
КонецЕсли; КонецЕсли;
Остатки = СведенияОстатковПоСериям(СерииГруппы).Остатки; Остатки = СведенияОстатковПоСериям(СерииГруппы).Остатки;
НомерГруппы = НомерГруппы + 1; НомерГруппы = НомерГруппы + 1;
ДобавитьСтрокуГруппыДублей(НомерГруппы, ВыбГруппы, Мастер, СерииГруппы, Остатки); ДанныеГруппы = Новый Структура("ВидНоменклатуры, Номер, ГоденДо",
Первая.ВидНоменклатуры, Первая.Номер, Первая.ГоденДо);
ДобавитьСтрокуГруппыДублей(НомерГруппы, ДанныеГруппы, Мастер, СерииГруппы, Остатки);
КонецЦикла; КонецЦикла;
@@ -1306,7 +1316,63 @@
КонецФункции КонецФункции
&НаСервере &НаСервере
Функция НайтиСериюМастерГруппы(Вид, Номер, ГоденДо) Функция КлючГруппыДублей(ВидНоменклатуры, Номер, ГоденДо)
ИдВида = "";
Если ЗначениеЗаполнено(ВидНоменклатуры) Тогда
ИдВида = XMLСтрока(ВидНоменклатуры.УникальныйИдентификатор());
КонецЕсли;
Возврат ИдВида + "|" + Номер + "|" + Формат(ГоденДо, "ДФ=yyyyMMdd; ДП=");
КонецФункции
&НаСервере
Функция КандидатыСерийДляПоискаДублей()
// Учитываем все серии; помеченные на удаление без остатков исключаем.
Результат = Новый Массив;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Сер.Ссылка КАК Серия,
| Сер.ВидНоменклатуры КАК ВидНоменклатуры,
| Сер.Номер КАК Номер,
| Сер.ГоденДо КАК ГоденДо,
| Сер.ПометкаУдаления КАК ПометкаУдаления
|ИЗ
| Справочник.СерииНоменклатуры КАК Сер";
Выборка = Запрос.Выполнить().Выбрать();
СерииВсе = Новый Массив;
СтрокиВсе = Новый Массив;
Пока Выборка.Следующий() Цикл
Стр = Новый Структура("Серия, ВидНоменклатуры, Номер, ГоденДо, ПометкаУдаления",
Выборка.Серия, Выборка.ВидНоменклатуры, Выборка.Номер, Выборка.ГоденДо, Выборка.ПометкаУдаления);
СтрокиВсе.Добавить(Стр);
СерииВсе.Добавить(Выборка.Серия);
КонецЦикла;
Остатки = СведенияОстатковПоСериям(СерииВсе).Остатки;
Для Каждого Стр Из СтрокиВсе Цикл
Остаток = ОстатокСерииИзСоответствия(Остатки, Стр.Серия);
Если Стр.ПометкаУдаления И Остаток <= 0.000001 Тогда
Продолжить;
КонецЕсли;
Результат.Добавить(Стр);
КонецЦикла;
Возврат Результат;
КонецФункции
&НаСервере
Функция НайтиСериюМастерСредиСерий(Серии)
Если Серии.Количество() = 0 Тогда
Возврат Справочники.СерииНоменклатуры.ПустаяСсылка();
КонецЕсли;
Запрос = Новый Запрос; Запрос = Новый Запрос;
Запрос.Текст = Запрос.Текст =
@@ -1317,24 +1383,27 @@
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ДвиженияСерийТоваров КАК Дв | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ДвиженияСерийТоваров КАК Дв
| ПО Дв.Серия = Сер.Ссылка | ПО Дв.Серия = Сер.Ссылка
|ГДЕ |ГДЕ
| Сер.ВидНоменклатуры = &Вид | Сер.Ссылка В (&Серии)
| И Сер.Номер = &Номер
| И Сер.ГоденДо = &ГоденДо
| И НЕ Сер.ПометкаУдаления
|СГРУППИРОВАТЬ ПО |СГРУППИРОВАТЬ ПО
| Сер.Ссылка | Сер.Ссылка
|УПОРЯДОЧИТЬ ПО |УПОРЯДОЧИТЬ ПО
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Дв.Регистратор) УБЫВ, | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Дв.Регистратор) УБЫВ,
| Сер.Ссылка"; | Сер.Ссылка";
Запрос.УстановитьПараметр("Вид", Вид); Запрос.УстановитьПараметр("Серии", Серии);
Запрос.УстановитьПараметр("Номер", Номер);
Запрос.УстановитьПараметр("ГоденДо", ГоденДо);
Выборка = Запрос.Выполнить().Выбрать(); Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда Если Выборка.Следующий() Тогда
Возврат Выборка.Ссылка; Возврат Выборка.Ссылка;
КонецЕсли; КонецЕсли;
Возврат Справочники.СерииНоменклатуры.ПустаяСсылка(); Возврат Серии[0];
КонецФункции
&НаСервере
Функция НайтиСериюМастерГруппы(Вид, Номер, ГоденДо)
СерииГруппы = СерииГруппыДублей(Вид, Номер, ГоденДо);
Возврат НайтиСериюМастерСредиСерий(СерииГруппы);
КонецФункции КонецФункции
@@ -1344,22 +1413,34 @@
Запрос = Новый Запрос; Запрос = Новый Запрос;
Запрос.Текст = Запрос.Текст =
"ВЫБРАТЬ "ВЫБРАТЬ
| Сер.Ссылка КАК Серия | Сер.Ссылка КАК Серия,
| Сер.ПометкаУдаления КАК ПометкаУдаления
|ИЗ |ИЗ
| Справочник.СерииНоменклатуры КАК Сер | Справочник.СерииНоменклатуры КАК Сер
|ГДЕ |ГДЕ
| Сер.ВидНоменклатуры = &Вид | Сер.ВидНоменклатуры = &Вид
| И Сер.Номер = &Номер | И Сер.Номер = &Номер
| И Сер.ГоденДо = &ГоденДо | И Сер.ГоденДо = &ГоденДо";
| И НЕ Сер.ПометкаУдаления";
Запрос.УстановитьПараметр("Вид", Вид); Запрос.УстановитьПараметр("Вид", Вид);
Запрос.УстановитьПараметр("Номер", Номер); Запрос.УстановитьПараметр("Номер", Номер);
Запрос.УстановитьПараметр("ГоденДо", ГоденДо); Запрос.УстановитьПараметр("ГоденДо", ГоденДо);
Результат = Новый Массив; Строки = Новый Массив;
СерииВсе = Новый Массив;
Выборка = Запрос.Выполнить().Выбрать(); Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл Пока Выборка.Следующий() Цикл
Результат.Добавить(Выборка.Серия); Строки.Добавить(Новый Структура("Серия, ПометкаУдаления", Выборка.Серия, Выборка.ПометкаУдаления));
СерииВсе.Добавить(Выборка.Серия);
КонецЦикла;
Остатки = СведенияОстатковПоСериям(СерииВсе).Остатки;
Результат = Новый Массив;
Для Каждого Стр Из Строки Цикл
Остаток = ОстатокСерииИзСоответствия(Остатки, Стр.Серия);
Если Стр.ПометкаУдаления И Остаток <= 0.000001 Тогда
Продолжить;
КонецЕсли;
Результат.Добавить(Стр.Серия);
КонецЦикла; КонецЦикла;
Возврат Результат; Возврат Результат;
@@ -1592,7 +1673,7 @@
&НаСервере &НаСервере
Функция ОбъединитьОтмеченныеГруппыНаСервере() Функция ОбъединитьОтмеченныеГруппыНаСервере()
Результат = Новый Структура("ОбъединеноСсылок, ОбъединеноГрупп, Ошибок", 0, 0, 0); Результат = Новый Структура("ОбъединеноСсылок, ОбъединеноГрупп, Ошибок, ПомеченоНаУдаление", 0, 0, 0, 0);
Для Каждого СтрГруппа Из Объект.ГруппыДублей Цикл Для Каждого СтрГруппа Из Объект.ГруппыДублей Цикл
@@ -1634,8 +1715,14 @@
КонецЕсли; КонецЕсли;
Иначе Иначе
ОбщегоНазначения.ЗаменитьСсылки(Заменяемые); ОбщегоНазначения.ЗаменитьСсылки(Заменяемые);
ПомеченоВГруппе = 0;
Если Объект.ПомечатьДублиСерииНаУдаление Тогда Если Объект.ПомечатьДублиСерииНаУдаление Тогда
ПометитьДублиСерииНаУдаление(Заменяемые); ПомеченоВГруппе = ПометитьДублиСерииНаУдаление(Заменяемые);
Результат.ПомеченоНаУдаление = Результат.ПомеченоНаУдаление + ПомеченоВГруппе;
Если ПомеченоВГруппе > 0 Тогда
СтрГруппа.Комментарий = "Дубли помечены на удаление: "
+ Формат(ПомеченоВГруппе, "ЧН=0; ЧГ=0");
КонецЕсли;
КонецЕсли; КонецЕсли;
СтрГруппа.Объединено = Истина; СтрГруппа.Объединено = Истина;
Результат.ОбъединеноСсылок = Результат.ОбъединеноСсылок + Заменяемые.Количество(); Результат.ОбъединеноСсылок = Результат.ОбъединеноСсылок + Заменяемые.Количество();
@@ -1653,8 +1740,9 @@
КонецФункции КонецФункции
&НаСервере &НаСервере
Процедура ПометитьДублиСерииНаУдаление(Заменяемые) Функция ПометитьДублиСерииНаУдаление(Заменяемые)
Помечено = 0;
Для Каждого КлючИЗначение Из Заменяемые Цикл Для Каждого КлючИЗначение Из Заменяемые Цикл
СерияДубль = КлючИЗначение.Ключ; СерияДубль = КлючИЗначение.Ключ;
Если Не ЗначениеЗаполнено(СерияДубль) Тогда Если Не ЗначениеЗаполнено(СерияДубль) Тогда
@@ -1665,8 +1753,10 @@
Продолжить; Продолжить;
КонецЕсли; КонецЕсли;
ОбСерии.УстановитьПометкуУдаления(Истина); ОбСерии.УстановитьПометкуУдаления(Истина);
Помечено = Помечено + 1;
КонецЦикла; КонецЦикла;
Возврат Помечено;
КонецПроцедуры КонецФункции
#КонецОбласти #КонецОбласти
@@ -85,6 +85,14 @@
<ContextMenu name="СерииГруппыЭтоМастерКонтекстноеМеню" id="22"/> <ContextMenu name="СерииГруппыЭтоМастерКонтекстноеМеню" id="22"/>
<ExtendedTooltip name="СерииГруппыЭтоМастерРасширеннаяПодсказка" id="23"/> <ExtendedTooltip name="СерииГруппыЭтоМастерРасширеннаяПодсказка" id="23"/>
</CheckBoxField> </CheckBoxField>
<CheckBoxField name="СерииГруппыПометкаУдаления" id="33">
<DataPath>СерииГруппы.ПометкаУдаления</DataPath>
<ReadOnly>true</ReadOnly>
<EditMode>EnterOnInput</EditMode>
<CheckBoxType>Auto</CheckBoxType>
<ContextMenu name="СерииГруппыПометкаУдаленияКонтекстноеМеню" id="34"/>
<ExtendedTooltip name="СерииГруппыПометкаУдаленияРасширеннаяПодсказка" id="35"/>
</CheckBoxField>
<InputField name="СерииГруппыСерия" id="24"> <InputField name="СерииГруппыСерия" id="24">
<DataPath>СерииГруппы.Серия</DataPath> <DataPath>СерииГруппы.Серия</DataPath>
<ReadOnly>true</ReadOnly> <ReadOnly>true</ReadOnly>
@@ -171,6 +179,17 @@
<v8:Type>v8:UUID</v8:Type> <v8:Type>v8:UUID</v8:Type>
</Type> </Type>
</Column> </Column>
<Column name="ПометкаУдаления" id="5">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Пометка удаления</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>xs:boolean</v8:Type>
</Type>
</Column>
</Columns> </Columns>
</Attribute> </Attribute>
<Attribute name="СерияМастер" id="2"> <Attribute name="СерияМастер" id="2">
@@ -19,13 +19,18 @@
&НаКлиенте &НаКлиенте
Процедура Выбрать(Команда) Процедура Выбрать(Команда)
ВыбраннаяСерия = ТекущаяВыбраннаяСерия(); ТекущиеДанные = Элементы.СерииГруппы.ТекущиеДанные;
Если Не ЗначениеЗаполнено(ВыбраннаяСерия) Тогда Если ТекущиеДанные = Неопределено Или Не ЗначениеЗаполнено(ТекущиеДанные.Серия) Тогда
ПоказатьПредупреждение(, "Выберите серию в таблице"); ПоказатьПредупреждение(, "Выберите серию в таблице");
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Закрыть(ВыбраннаяСерия); Если ТекущиеДанные.ПометкаУдаления И ТекущиеДанные.Остаток <= 0 Тогда
ПоказатьПредупреждение(, "Нельзя выбрать мастер-серией помеченную на удаление серию без остатка");
Возврат;
КонецЕсли;
Закрыть(ТекущиеДанные.Серия);
КонецПроцедуры КонецПроцедуры
@@ -37,10 +42,7 @@
Процедура СерииГруппыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) Процедура СерииГруппыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь; СтандартнаяОбработка = Ложь;
ВыбраннаяСерия = ТекущаяВыбраннаяСерия(); Выбрать(Неопределено);
Если ЗначениеЗаполнено(ВыбраннаяСерия) Тогда
Закрыть(ВыбраннаяСерия);
КонецЕсли;
КонецПроцедуры КонецПроцедуры
@@ -48,17 +50,6 @@
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
&НаКлиенте
Функция ТекущаяВыбраннаяСерия()
Если Элементы.СерииГруппы.ТекущиеДанные = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Возврат Элементы.СерииГруппы.ТекущиеДанные.Серия;
КонецФункции
&НаСервере &НаСервере
Процедура ЗаполнитьСерииГруппы(ВидНоменклатуры, Номер, ГоденДо) Процедура ЗаполнитьСерииГруппы(ВидНоменклатуры, Номер, ГоденДо)
@@ -67,35 +58,43 @@
Запрос = Новый Запрос; Запрос = Новый Запрос;
Запрос.Текст = Запрос.Текст =
"ВЫБРАТЬ "ВЫБРАТЬ
| Сер.Ссылка КАК Серия | Сер.Ссылка КАК Серия,
| Сер.ПометкаУдаления КАК ПометкаУдаления
|ИЗ |ИЗ
| Справочник.СерииНоменклатуры КАК Сер | Справочник.СерииНоменклатуры КАК Сер
|ГДЕ |ГДЕ
| Сер.ВидНоменклатуры = &Вид | Сер.ВидНоменклатуры = &Вид
| И Сер.Номер = &Номер | И Сер.Номер = &Номер
| И Сер.ГоденДо = &ГоденДо | И Сер.ГоденДо = &ГоденДо";
| И НЕ Сер.ПометкаУдаления";
Запрос.УстановитьПараметр("Вид", ВидНоменклатуры); Запрос.УстановитьПараметр("Вид", ВидНоменклатуры);
Запрос.УстановитьПараметр("Номер", Номер); Запрос.УстановитьПараметр("Номер", Номер);
Запрос.УстановитьПараметр("ГоденДо", ГоденДо); Запрос.УстановитьПараметр("ГоденДо", ГоденДо);
Серии = Новый Массив; Серии = Новый Массив;
Пометки = Новый Соответствие;
Выборка = Запрос.Выполнить().Выбрать(); Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл Пока Выборка.Следующий() Цикл
Серии.Добавить(Выборка.Серия); Серии.Добавить(Выборка.Серия);
Пометки.Вставить(Выборка.Серия, Выборка.ПометкаУдаления);
КонецЦикла; КонецЦикла;
Остатки = ОстаткиСерий(Серии); Остатки = ОстаткиСерий(Серии);
Для Каждого Серия Из Серии Цикл Для Каждого Серия Из Серии Цикл
Остаток = Остатки.Получить(Серия);
Если Остаток = Неопределено Тогда
Остаток = 0;
КонецЕсли;
ПометкаУдаления = (Пометки.Получить(Серия) = Истина);
// Помеченные без остатка не предлагаем как мастер, но показываем в списке.
НовСтр = СерииГруппы.Добавить(); НовСтр = СерииГруппы.Добавить();
НовСтр.Серия = Серия; НовСтр.Серия = Серия;
НовСтр.ЭтоМастер = (Серия = СерияМастер); НовСтр.ЭтоМастер = (Серия = СерияМастер);
НовСтр.ПометкаУдаления = ПометкаУдаления;
НовСтр.ИдентификаторСерии = Серия.УникальныйИдентификатор(); НовСтр.ИдентификаторСерии = Серия.УникальныйИдентификатор();
Остаток = Остатки.Получить(Серия); НовСтр.Остаток = Остаток;
НовСтр.Остаток = ?(Остаток = Неопределено, 0, Остаток);
КонецЦикла; КонецЦикла;
СерииГруппы.Сортировать("ЭтоМастер Убыв, Остаток Убыв, Серия"); СерииГруппы.Сортировать("ПометкаУдаления, ЭтоМастер Убыв, Остаток Убыв, Серия");
КонецПроцедуры КонецПроцедуры