РК_ПроверкаСерий 1.3.1.98: доработка объединения дублей (#15)

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
mihailkudravcev
2026-08-20 10:10:42 +03:00
parent eef1bca569
commit d2aa3cd03e
8 changed files with 606 additions and 30 deletions
+15
View File
@@ -4,6 +4,21 @@
---
## 1.3.1.98 (2026-08-20)
### РК_ПроверкаСерий — доработка объединения дублей (#15)
- Исправлен ложный отказ «Отметьте группы для объединения»: перед проверкой завершается редактирование строки, колонка `Отметка` переведена в `EditMode=Directly`, уточнены сообщения (в т.ч. когда отмеченные группы уже объединены).
- При поиске дублей заполняется `ИдентификаторСерии` (UUID мастер-серии).
- Для таблицы `ГруппыДублей` добавлены сортировка по текущей колонке и открытие формы мастер-серии по событию `Выбор`.
- Команда **Выбрать другую мастер серию** (`Ctrl+C`) открывает `ФормаИзмененияМастерСерии` со списком серий группы; после выбора пересчитываются мастер, остатки и детали строки.
## 1.3.1.97 (2026-08-20)
### РК_ПроверкаСерий — заготовки UI объединения дублей (#15)
- Добавлены `ГруппыДублейДеталиОстатков1`, реквизит `ИдентификаторСерии`, пустая форма `ФормаИзмененияМастерСерии` (доработаны в 1.3.1.98).
## 1.3.1.96 (2026-08-20)
### РК_ПроверкаСерий — исправление события двойного клика (#17)
+1 -1
View File
@@ -1 +1 @@
1.3.1.97
1.3.1.98
+2 -2
View File
@@ -246,8 +246,8 @@
</Metadata>
<Metadata name="DataProcessor.РК_ПроверкаСерий.Form.Форма" id="f14e0001-0001-4000-8000-000000000001" configVersion="0717cd97a4a9d63560c7e131d1669d4a047a854d"/>
<Metadata name="DataProcessor.РК_ПроверкаСерий.Form.Форма.Form" id="f14e0001-0001-4000-8000-000000000001.0" configVersion="919e4b8b0b5a0e0791dd0ccb7274f27b9dd9f285"/>
<Metadata name="DataProcessor.РК_ПроверкаСерий.Form.ФормаИзмененияМастерСерии" id="2ef7dbf8-ecdd-4f24-b896-a5a95e049d34" configVersion="6aeef6f6c1ca58378b6d399a62fa041fc97cfe5a"/>
<Metadata name="DataProcessor.РК_ПроверкаСерий.Form.ФормаИзмененияМастерСерии.Form" id="2ef7dbf8-ecdd-4f24-b896-a5a95e049d34.0" configVersion="875ca479bc092da240d78de36bd851ee01a629ca"/>
<Metadata name="DataProcessor.РК_ПроверкаСерий.Form.ФормаИзмененияМастерСерии" id="2ef7dbf8-ecdd-4f24-b896-a5a95e049d34" configVersion="6cca6a1c461aaf798ed1d6fa94cba6bb648697a6"/>
<Metadata name="DataProcessor.РК_ПроверкаСерий.Form.ФормаИзмененияМастерСерии.Form" id="2ef7dbf8-ecdd-4f24-b896-a5a95e049d34.0" configVersion="5d61e4a1bc9153cb3e39744340027f254c8f5a7a"/>
<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="3d303157-526b-4725-8f94-4077b108b463" configVersion="43ce890f8166575f8e201b20e1bea4cf341f6e47">
+1 -1
View File
@@ -62,7 +62,7 @@
<xr:Item xsi:type="xr:MDObjectRef">Role.РК_ОсновнаяРоль</xr:Item>
</DefaultRoles>
<Vendor/>
<Version>1.3.1.97</Version>
<Version>1.3.1.98</Version>
<DefaultStyle/>
<DefaultLanguage>Language.Русский</DefaultLanguage>
<BriefInformation/>
@@ -337,6 +337,11 @@
<CommandName>Form.Command.СнятьОтметкуГруппыДублей</CommandName>
<ExtendedTooltip name="ГруппыДублейКонтекстноеМенюСнятьОтметкуРасширеннаяПодсказка" id="85"/>
</Button>
<Button name="ГруппыДублейКонтекстноеМенюВыбратьДругуюМастерСерию" id="208">
<Type>CommandBarButton</Type>
<CommandName>Form.Command.ВыбратьДругуюМастерСерию</CommandName>
<ExtendedTooltip name="ГруппыДублейКонтекстноеМенюВыбратьДругуюМастерСериюРасширеннаяПодсказка" id="209"/>
</Button>
</ChildItems>
</ContextMenu>
<AutoCommandBar name="ГруппыДублейКоманднаяПанель" id="86">
@@ -362,6 +367,16 @@
<CommandName>Form.Command.СнятьОтметкуГруппыДублей</CommandName>
<ExtendedTooltip name="ГруппыДублейСнятьОтметкуРасширеннаяПодсказка" id="94"/>
</Button>
<Button name="ГруппыДублейСортироватьПоКолонке" id="204">
<Type>CommandBarButton</Type>
<CommandName>Form.Command.СортироватьГруппыДублейПоКолонке</CommandName>
<ExtendedTooltip name="ГруппыДублейСортироватьПоКолонкеРасширеннаяПодсказка" id="205"/>
</Button>
<Button name="ГруппыДублейВыбратьДругуюМастерСерию" id="206">
<Type>CommandBarButton</Type>
<CommandName>Form.Command.ВыбратьДругуюМастерСерию</CommandName>
<ExtendedTooltip name="ГруппыДублейВыбратьДругуюМастерСериюРасширеннаяПодсказка" id="207"/>
</Button>
</ChildItems>
</AutoCommandBar>
<ExtendedTooltip name="ГруппыДублейРасширеннаяПодсказка" id="95"/>
@@ -389,10 +404,13 @@
<ContextMenu name="ГруппыДублейУправлениеПоискомКонтекстноеМеню" id="103"/>
<ExtendedTooltip name="ГруппыДублейУправлениеПоискомРасширеннаяПодсказка" id="104"/>
</SearchControlAddition>
<Events>
<Event name="Selection">ГруппыДублейВыбор</Event>
</Events>
<ChildItems>
<CheckBoxField name="ГруппыДублейОтметка" id="105">
<DataPath>Объект.ГруппыДублей.Отметка</DataPath>
<EditMode>EnterOnInput</EditMode>
<EditMode>Directly</EditMode>
<CheckBoxType>Auto</CheckBoxType>
<ContextMenu name="ГруппыДублейОтметкаКонтекстноеМеню" id="106"/>
<ExtendedTooltip name="ГруппыДублейОтметкаРасширеннаяПодсказка" id="107"/>
@@ -821,5 +839,44 @@
</Picture>
<Action>СнятьОтметкуГруппыДублей</Action>
</Command>
<Command name="СортироватьГруппыДублейПоКолонке" id="204">
<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>Сортировать таблицу групп дублей по текущей колонке</v8:content>
</v8:item>
</ToolTip>
<Picture>
<xr:Ref>StdPicture.SortListAsc</xr:Ref>
<xr:LoadTransparent>true</xr:LoadTransparent>
</Picture>
<Action>СортироватьГруппыДублейПоКолонке</Action>
</Command>
<Command name="ВыбратьДругуюМастерСерию" id="205">
<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>Выбрать другую мастер-серию из серии группы дублей текущей строки</v8:content>
</v8:item>
</ToolTip>
<Shortcut>Ctrl+C</Shortcut>
<Picture>
<xr:Ref>StdPicture.ChooseValue</xr:Ref>
<xr:LoadTransparent>true</xr:LoadTransparent>
</Picture>
<Action>ВыбратьДругуюМастерСерию</Action>
</Command>
</Commands>
</Form>
@@ -233,8 +233,19 @@
Возврат;
КонецЕсли;
Если Не ЕстьОтмеченныеГруппыДублей() Тогда
ПоказатьПредупреждение(, "Отметьте группы для объединения");
// Зафиксировать значение колонки «Отметка», если ячейка ещё в режиме редактирования.
Если Элементы.ГруппыДублей.ТекущиеДанные <> Неопределено Тогда
Элементы.ГруппыДублей.ЗакончитьРедактированиеСтроки(Ложь);
КонецЕсли;
СостояниеОтметок = СостояниеОтметокГруппДублей();
Если СостояниеОтметок.КОбъединению = 0 Тогда
Если СостояниеОтметок.ОтмеченоВсего > 0 Тогда
ПоказатьПредупреждение(,
"Отмеченные группы уже объединены. Снимите признак «Объединено» повторным поиском дублей или отметьте другие группы.");
Иначе
ПоказатьПредупреждение(, "Отметьте группы для объединения (колонка «Отметка»)");
КонецЕсли;
Возврат;
КонецЕсли;
@@ -293,6 +304,85 @@
УстановитьОтметкуВыделенныхСтрок("ГруппыДублей", Ложь);
КонецПроцедуры
&НаКлиенте
Процедура СортироватьГруппыДублейПоКолонке(Команда)
ТекущееПоле = Элементы.ГруппыДублей.ТекущийЭлемент;
Если ТекущееПоле = Неопределено Тогда
ПоказатьПредупреждение(, "Выберите колонку таблицы (щёлкните ячейку)");
Возврат;
КонецЕсли;
ИмяКолонки = ИмяКолонкиСортировкиГруппДублей(ТекущееПоле.Имя);
Если Не ЗначениеЗаполнено(ИмяКолонки) Тогда
ПоказатьПредупреждение(, "По этой колонке сортировка недоступна");
Возврат;
КонецЕсли;
СортироватьГруппыДублейНаСервере(ИмяКолонки + " Возр");
КонецПроцедуры
&НаКлиенте
Процедура ГруппыДублейВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ТекущаяСтрока = ТекущаяСтрокаГруппыДублей();
Если ТекущаяСтрока = Неопределено Тогда
Возврат;
КонецЕсли;
СтандартнаяОбработка = Ложь;
ОткрытьФормуСерии(ТекущаяСтрока.СерияМастер);
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьДругуюМастерСерию(Команда)
ТекущаяСтрока = ТекущаяСтрокаГруппыДублей();
Если ТекущаяСтрока = Неопределено Тогда
ПоказатьПредупреждение(, "Выберите строку группы дублей");
Возврат;
КонецЕсли;
Если ТекущаяСтрока.Объединено Тогда
ПоказатьПредупреждение(, "Группа уже объединена");
Возврат;
КонецЕсли;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("СерияМастер", ТекущаяСтрока.СерияМастер);
ПараметрыФормы.Вставить("ВидНоменклатуры", ТекущаяСтрока.ВидНоменклатуры);
ПараметрыФормы.Вставить("Номер", ТекущаяСтрока.Номер);
ПараметрыФормы.Вставить("ГоденДо", ТекущаяСтрока.ГоденДо);
Описание = Новый ОписаниеОповещения(
"ВыбратьДругуюМастерСериюЗавершение",
ЭтотОбъект,
ТекущаяСтрока.ПолучитьИдентификатор());
ОткрытьФорму(
"DataProcessor.РК_ПроверкаСерий.Form.ФормаИзмененияМастерСерии",
ПараметрыФормы,
ЭтотОбъект,
,
,
,
Описание,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьДругуюМастерСериюЗавершение(Результат, ИдентификаторСтроки) Экспорт
Если Результат = Неопределено Или Не ЗначениеЗаполнено(Результат) Тогда
Возврат;
КонецЕсли;
ПрименитьНовуюМастерСериюНаСервере(ИдентификаторСтроки, Результат);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -422,12 +512,60 @@
&НаКлиенте
Функция ЕстьОтмеченныеГруппыДублей()
Возврат СостояниеОтметокГруппДублей().КОбъединению > 0;
КонецФункции
&НаКлиенте
Функция СостояниеОтметокГруппДублей()
Результат = Новый Структура("ОтмеченоВсего, КОбъединению", 0, 0);
Для Каждого Стр Из Объект.ГруппыДублей Цикл
Если Стр.Отметка И Не Стр.Объединено Тогда
Возврат Истина;
Если Не Стр.Отметка Тогда
Продолжить;
КонецЕсли;
Результат.ОтмеченоВсего = Результат.ОтмеченоВсего + 1;
Если Не Стр.Объединено Тогда
Результат.КОбъединению = Результат.КОбъединению + 1;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
Возврат Результат;
КонецФункции
&НаКлиенте
Функция ТекущаяСтрокаГруппыДублей()
Если Элементы.ГруппыДублей.ТекущиеДанные = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Возврат Элементы.ГруппыДублей.ТекущиеДанные;
КонецФункции
&НаКлиенте
Функция ИмяКолонкиСортировкиГруппДублей(ИмяПоляФормы)
СоответствиеИмен = Новый Соответствие;
СоответствиеИмен.Вставить("ГруппыДублейОтметка", "Отметка");
СоответствиеИмен.Вставить("ГруппыДублейИдентификаторГруппы", "ИдентификаторГруппы");
СоответствиеИмен.Вставить("ГруппыДублейСерияМастер", "СерияМастер");
СоответствиеИмен.Вставить("ГруппыДублейПредупреждение", "Предупреждение");
СоответствиеИмен.Вставить("ГруппыДублейВидНоменклатуры", "ВидНоменклатуры");
СоответствиеИмен.Вставить("ГруппыДублейНомер", "Номер");
СоответствиеИмен.Вставить("ГруппыДублейГоденДо", "ГоденДо");
СоответствиеИмен.Вставить("ГруппыДублейДатаПроизводства", "ДатаПроизводства");
СоответствиеИмен.Вставить("ГруппыДублейКоличествоСерий", "КоличествоСерий");
СоответствиеИмен.Вставить("ГруппыДублейКоличествоЗамен", "КоличествоЗамен");
СоответствиеИмен.Вставить("ГруппыДублейОстатокМастер", "ОстатокМастер");
СоответствиеИмен.Вставить("ГруппыДублейОстатокДублей", "ОстатокДублей");
СоответствиеИмен.Вставить("ГруппыДублейСерийСОстатком", "СерийСОстатком");
СоответствиеИмен.Вставить("ГруппыДублейДеталиОстатков", "ДеталиОстатков");
СоответствиеИмен.Вставить("ГруппыДублейОбъединено", "Объединено");
СоответствиеИмен.Вставить("ГруппыДублейКомментарий", "Комментарий");
СоответствиеИмен.Вставить("ГруппыДублейИдентификаторСерии", "ИдентификаторСерии");
Возврат СоответствиеИмен.Получить(ИмяПоляФормы);
КонецФункции
@@ -1304,6 +1442,19 @@
&НаСервере
Процедура ДобавитьСтрокуГруппыДублей(НомерГруппы, ДанныеГруппы, Мастер, СерииГруппы, Остатки)
НовСтр = Объект.ГруппыДублей.Добавить();
НовСтр.ИдентификаторГруппы = НомерГруппы;
НовСтр.ВидНоменклатуры = ДанныеГруппы.ВидНоменклатуры;
НовСтр.Номер = ДанныеГруппы.Номер;
НовСтр.ГоденДо = ДанныеГруппы.ГоденДо;
НовСтр.Объединено = Ложь;
ЗаполнитьПоказателиГруппыДублей(НовСтр, Мастер, СерииГруппы, Остатки);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПоказателиГруппыДублей(СтрГруппа, Мастер, СерииГруппы, Остатки)
ОстатокМастер = ОстатокСерииИзСоответствия(Остатки, Мастер);
ОстатокДублей = 0;
СерийСОстатком = 0;
@@ -1331,21 +1482,57 @@
Предупреждение = "У дублей есть остатки → перенос на мастер";
КонецЕсли;
НовСтр = Объект.ГруппыДублей.Добавить();
НовСтр.Отметка = ПустаяСтрока(Предупреждение);
НовСтр.ИдентификаторГруппы = НомерГруппы;
НовСтр.ВидНоменклатуры = ДанныеГруппы.ВидНоменклатуры;
НовСтр.Номер = ДанныеГруппы.Номер;
НовСтр.ГоденДо = ДанныеГруппы.ГоденДо;
НовСтр.ДатаПроизводства = Мастер.ДатаПроизводства;
НовСтр.СерияМастер = Мастер;
НовСтр.КоличествоСерий = СерииГруппы.Количество();
НовСтр.КоличествоЗамен = КоличествоЗамен;
НовСтр.ОстатокМастер = ОстатокМастер;
НовСтр.ОстатокДублей = ОстатокДублей;
НовСтр.СерийСОстатком = СерийСОстатком;
НовСтр.Предупреждение = Предупреждение;
НовСтр.ДеталиОстатков = СтрСоединить(Детали, "; ");
СтрГруппа.ДатаПроизводства = Мастер.ДатаПроизводства;
СтрГруппа.СерияМастер = Мастер;
СтрГруппа.ИдентификаторСерии = Мастер.УникальныйИдентификатор();
СтрГруппа.КоличествоСерий = СерииГруппы.Количество();
СтрГруппа.КоличествоЗамен = КоличествоЗамен;
СтрГруппа.ОстатокМастер = ОстатокМастер;
СтрГруппа.ОстатокДублей = ОстатокДублей;
СтрГруппа.СерийСОстатком = СерийСОстатком;
СтрГруппа.Предупреждение = Предупреждение;
СтрГруппа.ДеталиОстатков = СтрСоединить(Детали, "; ");
Если Не СтрГруппа.Объединено Тогда
СтрГруппа.Отметка = ПустаяСтрока(Предупреждение);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПрименитьНовуюМастерСериюНаСервере(ИдентификаторСтроки, НоваяМастерСерия)
СтрГруппа = Объект.ГруппыДублей.НайтиПоИдентификатору(ИдентификаторСтроки);
Если СтрГруппа = Неопределено Тогда
Возврат;
КонецЕсли;
Если СтрГруппа.Объединено Тогда
Возврат;
КонецЕсли;
Если СтрГруппа.СерияМастер = НоваяМастерСерия Тогда
Возврат;
КонецЕсли;
СерииГруппы = СерииГруппыДублей(
СтрГруппа.ВидНоменклатуры,
СтрГруппа.Номер,
СтрГруппа.ГоденДо);
Если СерииГруппы.Найти(НоваяМастерСерия) = Неопределено Тогда
СтрГруппа.Комментарий = "Выбранная серия не входит в группу дублей";
Возврат;
КонецЕсли;
Остатки = СведенияОстатковПоСериям(СерииГруппы).Остатки;
ЗаполнитьПоказателиГруппыДублей(СтрГруппа, НоваяМастерСерия, СерииГруппы, Остатки);
СтрГруппа.Комментарий = "Мастер-серия изменена вручную";
КонецПроцедуры
&НаСервере
Процедура СортироватьГруппыДублейНаСервере(ВыражениеСортировки)
Объект.ГруппыДублей.Сортировать(ВыражениеСортировки);
КонецПроцедуры
@@ -6,13 +6,200 @@
<v8:content>Выбор мастер серии</v8:content>
</v8:item>
</Title>
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1"/>
<WindowOpeningMode>LockOwnerWindow</WindowOpeningMode>
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1">
<Autofill>false</Autofill>
<ChildItems>
<Button name="ФормаВыбрать" id="1">
<Type>CommandBarButton</Type>
<DefaultButton>true</DefaultButton>
<CommandName>Form.Command.Выбрать</CommandName>
<ExtendedTooltip name="ФормаВыбратьРасширеннаяПодсказка" id="2"/>
</Button>
<Button name="ФормаОтмена" id="3">
<Type>CommandBarButton</Type>
<CommandName>Form.StandardCommand.Cancel</CommandName>
<ExtendedTooltip name="ФормаОтменаРасширеннаяПодсказка" id="4"/>
</Button>
</ChildItems>
</AutoCommandBar>
<Events>
<Event name="OnCreateAtServer">ПриСозданииНаСервере</Event>
</Events>
<ChildItems>
<LabelDecoration name="НадписьПодсказка" id="5">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Выберите серию группы, которая станет мастер-серией</v8:content>
</v8:item>
</Title>
<ContextMenu name="НадписьПодсказкаКонтекстноеМеню" id="6"/>
<ExtendedTooltip name="НадписьПодсказкаРасширеннаяПодсказка" id="7"/>
</LabelDecoration>
<Table name="СерииГруппы" id="8">
<Representation>List</Representation>
<ChangeRowSet>false</ChangeRowSet>
<ChangeRowOrder>false</ChangeRowOrder>
<ChoiceMode>true</ChoiceMode>
<DataPath>СерииГруппы</DataPath>
<RowFilter xsi:nil="true"/>
<ContextMenu name="СерииГруппыКонтекстноеМеню" id="9"/>
<AutoCommandBar name="СерииГруппыКоманднаяПанель" id="10">
<Autofill>false</Autofill>
</AutoCommandBar>
<ExtendedTooltip name="СерииГруппыРасширеннаяПодсказка" id="11"/>
<SearchStringAddition name="СерииГруппыСтрокаПоиска" id="12">
<AdditionSource>
<Item>СерииГруппы</Item>
<Type>SearchStringRepresentation</Type>
</AdditionSource>
<ContextMenu name="СерииГруппыСтрокаПоискаКонтекстноеМеню" id="13"/>
<ExtendedTooltip name="СерииГруппыСтрокаПоискаРасширеннаяПодсказка" id="14"/>
</SearchStringAddition>
<ViewStatusAddition name="СерииГруппыСостояниеПросмотра" id="15">
<AdditionSource>
<Item>СерииГруппы</Item>
<Type>ViewStatusRepresentation</Type>
</AdditionSource>
<ContextMenu name="СерииГруппыСостояниеПросмотраКонтекстноеМеню" id="16"/>
<ExtendedTooltip name="СерииГруппыСостояниеПросмотраРасширеннаяПодсказка" id="17"/>
</ViewStatusAddition>
<SearchControlAddition name="СерииГруппыУправлениеПоиском" id="18">
<AdditionSource>
<Item>СерииГруппы</Item>
<Type>SearchControl</Type>
</AdditionSource>
<ContextMenu name="СерииГруппыУправлениеПоискомКонтекстноеМеню" id="19"/>
<ExtendedTooltip name="СерииГруппыУправлениеПоискомРасширеннаяПодсказка" id="20"/>
</SearchControlAddition>
<Events>
<Event name="Selection">СерииГруппыВыбор</Event>
</Events>
<ChildItems>
<CheckBoxField name="СерииГруппыЭтоМастер" id="21">
<DataPath>СерииГруппы.ЭтоМастер</DataPath>
<ReadOnly>true</ReadOnly>
<EditMode>EnterOnInput</EditMode>
<CheckBoxType>Auto</CheckBoxType>
<ContextMenu name="СерииГруппыЭтоМастерКонтекстноеМеню" id="22"/>
<ExtendedTooltip name="СерииГруппыЭтоМастерРасширеннаяПодсказка" id="23"/>
</CheckBoxField>
<InputField name="СерииГруппыСерия" id="24">
<DataPath>СерииГруппы.Серия</DataPath>
<ReadOnly>true</ReadOnly>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="СерииГруппыСерияКонтекстноеМеню" id="25"/>
<ExtendedTooltip name="СерииГруппыСерияРасширеннаяПодсказка" id="26"/>
</InputField>
<InputField name="СерииГруппыОстаток" id="27">
<DataPath>СерииГруппы.Остаток</DataPath>
<ReadOnly>true</ReadOnly>
<EditMode>EnterOnInput</EditMode>
<Width>10</Width>
<ContextMenu name="СерииГруппыОстатокКонтекстноеМеню" id="28"/>
<ExtendedTooltip name="СерииГруппыОстатокРасширеннаяПодсказка" id="29"/>
</InputField>
<LabelField name="СерииГруппыИдентификаторСерии" id="30">
<DataPath>СерииГруппы.ИдентификаторСерии</DataPath>
<ReadOnly>true</ReadOnly>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="СерииГруппыИдентификаторСерииКонтекстноеМеню" id="31"/>
<ExtendedTooltip name="СерииГруппыИдентификаторСерииРасширеннаяПодсказка" id="32"/>
</LabelField>
</ChildItems>
</Table>
</ChildItems>
<Attributes>
<Attribute name="Объект" id="1">
<Attribute name="СерииГруппы" id="1">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Серии группы</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>cfg:DataProcessorObject.РК_ПроверкаСерий</v8:Type>
<v8:Type>v8:ValueTable</v8:Type>
</Type>
<Columns>
<Column name="Серия" id="1">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Серия</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>cfg:CatalogRef.СерииНоменклатуры</v8:Type>
</Type>
</Column>
<Column name="Остаток" id="2">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Остаток</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>xs:decimal</v8:Type>
<v8:NumberQualifiers>
<v8:Digits>15</v8:Digits>
<v8:FractionDigits>3</v8:FractionDigits>
<v8:AllowedSign>Any</v8:AllowedSign>
</v8:NumberQualifiers>
</Type>
</Column>
<Column name="ЭтоМастер" id="3">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Мастер</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>xs:boolean</v8:Type>
</Type>
</Column>
<Column name="ИдентификаторСерии" id="4">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>UUID</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>v8:UUID</v8:Type>
</Type>
</Column>
</Columns>
</Attribute>
<Attribute name="СерияМастер" id="2">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Серия мастер</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>cfg:CatalogRef.СерииНоменклатуры</v8:Type>
</Type>
<MainAttribute>true</MainAttribute>
</Attribute>
</Attributes>
<Commands>
<Command name="Выбрать" id="1">
<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>Назначить выбранную серию мастер-серией группы</v8:content>
</v8:item>
</ToolTip>
<Action>Выбрать</Action>
</Command>
</Commands>
</Form>
@@ -0,0 +1,130 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
СерияМастер = Параметры.СерияМастер;
ВидНоменклатуры = Параметры.ВидНоменклатуры;
Номер = Параметры.Номер;
ГоденДо = Параметры.ГоденДо;
ЗаполнитьСерииГруппы(ВидНоменклатуры, Номер, ГоденДо);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Выбрать(Команда)
ВыбраннаяСерия = ТекущаяВыбраннаяСерия();
Если Не ЗначениеЗаполнено(ВыбраннаяСерия) Тогда
ПоказатьПредупреждение(, "Выберите серию в таблице");
Возврат;
КонецЕсли;
Закрыть(ВыбраннаяСерия);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыСерииГруппы
&НаКлиенте
Процедура СерииГруппыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ВыбраннаяСерия = ТекущаяВыбраннаяСерия();
Если ЗначениеЗаполнено(ВыбраннаяСерия) Тогда
Закрыть(ВыбраннаяСерия);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Функция ТекущаяВыбраннаяСерия()
Если Элементы.СерииГруппы.ТекущиеДанные = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Возврат Элементы.СерииГруппы.ТекущиеДанные.Серия;
КонецФункции
&НаСервере
Процедура ЗаполнитьСерииГруппы(ВидНоменклатуры, Номер, ГоденДо)
СерииГруппы.Очистить();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Сер.Ссылка КАК Серия
|ИЗ
| Справочник.СерииНоменклатуры КАК Сер
|ГДЕ
| Сер.ВидНоменклатуры = &Вид
| И Сер.Номер = &Номер
| И Сер.ГоденДо = &ГоденДо
| И НЕ Сер.ПометкаУдаления";
Запрос.УстановитьПараметр("Вид", ВидНоменклатуры);
Запрос.УстановитьПараметр("Номер", Номер);
Запрос.УстановитьПараметр("ГоденДо", ГоденДо);
Серии = Новый Массив;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Серии.Добавить(Выборка.Серия);
КонецЦикла;
Остатки = ОстаткиСерий(Серии);
Для Каждого Серия Из Серии Цикл
НовСтр = СерииГруппы.Добавить();
НовСтр.Серия = Серия;
НовСтр.ЭтоМастер = (Серия = СерияМастер);
НовСтр.ИдентификаторСерии = Серия.УникальныйИдентификатор();
Остаток = Остатки.Получить(Серия);
НовСтр.Остаток = ?(Остаток = Неопределено, 0, Остаток);
КонецЦикла;
СерииГруппы.Сортировать("ЭтоМастер Убыв, Остаток Убыв, Серия");
КонецПроцедуры
&НаСервере
Функция ОстаткиСерий(Серии)
Результат = Новый Соответствие;
Если Серии.Количество() = 0 Тогда
Возврат Результат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Ост.Серия КАК Серия,
| СУММА(Ост.ВНаличииОстаток) КАК Количество
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(, Серия В (&Серии)) КАК Ост
|СГРУППИРОВАТЬ ПО
| Ост.Серия";
Запрос.УстановитьПараметр("Серии", Серии);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Результат.Вставить(Выборка.Серия, Выборка.Количество);
КонецЦикла;
Возврат Результат;
КонецФункции
#КонецОбласти