РК_ПроверкаСерий 1.3.1.101: пометка удаления в UI и фильтр поиска (#15)
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
+23
-24
@@ -19,13 +19,18 @@
|
|||||||
&НаКлиенте
|
&НаКлиенте
|
||||||
Процедура Выбрать(Команда)
|
Процедура Выбрать(Команда)
|
||||||
|
|
||||||
ВыбраннаяСерия = ТекущаяВыбраннаяСерия();
|
ТекущиеДанные = Элементы.СерииГруппы.ТекущиеДанные;
|
||||||
Если Не ЗначениеЗаполнено(ВыбраннаяСерия) Тогда
|
Если ТекущиеДанные = Неопределено Или Не ЗначениеЗаполнено(ТекущиеДанные.Серия) Тогда
|
||||||
ПоказатьПредупреждение(, "Выберите серию в таблице");
|
ПоказатьПредупреждение(, "Выберите серию в таблице");
|
||||||
Возврат;
|
Возврат;
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
Закрыть(ВыбраннаяСерия);
|
Если ТекущиеДанные.ПометкаУдаления И ТекущиеДанные.Остаток <= 0 Тогда
|
||||||
|
ПоказатьПредупреждение(, "Нельзя выбрать мастер-серией помеченную на удаление серию без остатка");
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Закрыть(ТекущиеДанные.Серия);
|
||||||
|
|
||||||
КонецПроцедуры
|
КонецПроцедуры
|
||||||
|
|
||||||
@@ -37,10 +42,7 @@
|
|||||||
Процедура СерииГруппыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
|
Процедура СерииГруппыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
|
||||||
|
|
||||||
СтандартнаяОбработка = Ложь;
|
СтандартнаяОбработка = Ложь;
|
||||||
ВыбраннаяСерия = ТекущаяВыбраннаяСерия();
|
Выбрать(Неопределено);
|
||||||
Если ЗначениеЗаполнено(ВыбраннаяСерия) Тогда
|
|
||||||
Закрыть(ВыбраннаяСерия);
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
КонецПроцедуры
|
КонецПроцедуры
|
||||||
|
|
||||||
@@ -48,17 +50,6 @@
|
|||||||
|
|
||||||
#Область СлужебныеПроцедурыИФункции
|
#Область СлужебныеПроцедурыИФункции
|
||||||
|
|
||||||
&НаКлиенте
|
|
||||||
Функция ТекущаяВыбраннаяСерия()
|
|
||||||
|
|
||||||
Если Элементы.СерииГруппы.ТекущиеДанные = Неопределено Тогда
|
|
||||||
Возврат Неопределено;
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
Возврат Элементы.СерииГруппы.ТекущиеДанные.Серия;
|
|
||||||
|
|
||||||
КонецФункции
|
|
||||||
|
|
||||||
&НаСервере
|
&НаСервере
|
||||||
Процедура ЗаполнитьСерииГруппы(ВидНоменклатуры, Номер, ГоденДо)
|
Процедура ЗаполнитьСерииГруппы(ВидНоменклатуры, Номер, ГоденДо)
|
||||||
|
|
||||||
@@ -67,35 +58,43 @@
|
|||||||
Запрос = Новый Запрос;
|
Запрос = Новый Запрос;
|
||||||
Запрос.Текст =
|
Запрос.Текст =
|
||||||
"ВЫБРАТЬ
|
"ВЫБРАТЬ
|
||||||
| Сер.Ссылка КАК Серия
|
| Сер.Ссылка КАК Серия,
|
||||||
|
| Сер.ПометкаУдаления КАК ПометкаУдаления
|
||||||
|ИЗ
|
|ИЗ
|
||||||
| Справочник.СерииНоменклатуры КАК Сер
|
| Справочник.СерииНоменклатуры КАК Сер
|
||||||
|ГДЕ
|
|ГДЕ
|
||||||
| Сер.ВидНоменклатуры = &Вид
|
| Сер.ВидНоменклатуры = &Вид
|
||||||
| И Сер.Номер = &Номер
|
| И Сер.Номер = &Номер
|
||||||
| И Сер.ГоденДо = &ГоденДо
|
| И Сер.ГоденДо = &ГоденДо";
|
||||||
| И НЕ Сер.ПометкаУдаления";
|
|
||||||
Запрос.УстановитьПараметр("Вид", ВидНоменклатуры);
|
Запрос.УстановитьПараметр("Вид", ВидНоменклатуры);
|
||||||
Запрос.УстановитьПараметр("Номер", Номер);
|
Запрос.УстановитьПараметр("Номер", Номер);
|
||||||
Запрос.УстановитьПараметр("ГоденДо", ГоденДо);
|
Запрос.УстановитьПараметр("ГоденДо", ГоденДо);
|
||||||
|
|
||||||
Серии = Новый Массив;
|
Серии = Новый Массив;
|
||||||
|
Пометки = Новый Соответствие;
|
||||||
Выборка = Запрос.Выполнить().Выбрать();
|
Выборка = Запрос.Выполнить().Выбрать();
|
||||||
Пока Выборка.Следующий() Цикл
|
Пока Выборка.Следующий() Цикл
|
||||||
Серии.Добавить(Выборка.Серия);
|
Серии.Добавить(Выборка.Серия);
|
||||||
|
Пометки.Вставить(Выборка.Серия, Выборка.ПометкаУдаления);
|
||||||
КонецЦикла;
|
КонецЦикла;
|
||||||
|
|
||||||
Остатки = ОстаткиСерий(Серии);
|
Остатки = ОстаткиСерий(Серии);
|
||||||
Для Каждого Серия Из Серии Цикл
|
Для Каждого Серия Из Серии Цикл
|
||||||
|
Остаток = Остатки.Получить(Серия);
|
||||||
|
Если Остаток = Неопределено Тогда
|
||||||
|
Остаток = 0;
|
||||||
|
КонецЕсли;
|
||||||
|
ПометкаУдаления = (Пометки.Получить(Серия) = Истина);
|
||||||
|
// Помеченные без остатка не предлагаем как мастер, но показываем в списке.
|
||||||
НовСтр = СерииГруппы.Добавить();
|
НовСтр = СерииГруппы.Добавить();
|
||||||
НовСтр.Серия = Серия;
|
НовСтр.Серия = Серия;
|
||||||
НовСтр.ЭтоМастер = (Серия = СерияМастер);
|
НовСтр.ЭтоМастер = (Серия = СерияМастер);
|
||||||
|
НовСтр.ПометкаУдаления = ПометкаУдаления;
|
||||||
НовСтр.ИдентификаторСерии = Серия.УникальныйИдентификатор();
|
НовСтр.ИдентификаторСерии = Серия.УникальныйИдентификатор();
|
||||||
Остаток = Остатки.Получить(Серия);
|
НовСтр.Остаток = Остаток;
|
||||||
НовСтр.Остаток = ?(Остаток = Неопределено, 0, Остаток);
|
|
||||||
КонецЦикла;
|
КонецЦикла;
|
||||||
|
|
||||||
СерииГруппы.Сортировать("ЭтоМастер Убыв, Остаток Убыв, Серия");
|
СерииГруппы.Сортировать("ПометкаУдаления, ЭтоМастер Убыв, Остаток Убыв, Серия");
|
||||||
|
|
||||||
КонецПроцедуры
|
КонецПроцедуры
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user