РК_ПроверкаСерий 1.3.1.71: объединение дублей с учётом остатков (#15).

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
mihailkudravcev
2026-08-17 11:05:03 +03:00
parent 890cf22274
commit ed9a0e9b1b
7 changed files with 1312 additions and 23 deletions
+9
View File
@@ -4,6 +4,15 @@
--- ---
## 1.3.1.71 (2026-08-17)
### РК_ПроверкаСерий — объединение дублей с учётом остатков (#15)
- Вкладка **Объединение дублей**: поиск групп (вид + номер + срок + дата производства).
- Остатки из `ДвиженияСерийТоваров.Остатки`; предупреждение при остатках у нескольких серий или у дублей.
- Группы без остатков отмечаются автоматически; с остатками — только вручную + подтверждение перед записью.
- Режим тест; объединение через `ОбщегоНазначения.ЗаменитьСсылки`.
## 1.3.1.70 (2026-08-17) ## 1.3.1.70 (2026-08-17)
### РК_ПроверкаСерий — проверка и исправление серий (#14) ### РК_ПроверкаСерий — проверка и исправление серий (#14)
+1 -1
View File
@@ -1 +1 @@
1.3.1.70 1.3.1.71
+17
View File
@@ -216,6 +216,23 @@
<Metadata name="DataProcessor.РК_ПроверкаСерий.TabularSection.ПроблемныеСерии.Attribute.ПредложенноеНаименование" id="f14e001a-001a-4000-8000-00000000001a"/> <Metadata name="DataProcessor.РК_ПроверкаСерий.TabularSection.ПроблемныеСерии.Attribute.ПредложенноеНаименование" id="f14e001a-001a-4000-8000-00000000001a"/>
<Metadata name="DataProcessor.РК_ПроверкаСерий.TabularSection.ПроблемныеСерии.Attribute.Исправлено" id="f14e001b-001b-4000-8000-00000000001b"/> <Metadata name="DataProcessor.РК_ПроверкаСерий.TabularSection.ПроблемныеСерии.Attribute.Исправлено" id="f14e001b-001b-4000-8000-00000000001b"/>
<Metadata name="DataProcessor.РК_ПроверкаСерий.TabularSection.ПроблемныеСерии.Attribute.Комментарий" id="f14e001c-001c-4000-8000-00000000001c"/> <Metadata name="DataProcessor.РК_ПроверкаСерий.TabularSection.ПроблемныеСерии.Attribute.Комментарий" id="f14e001c-001c-4000-8000-00000000001c"/>
<Metadata name="DataProcessor.РК_ПроверкаСерий.TabularSection.ГруппыДублей" id="f14e0020-0020-4000-8000-000000000020"/>
<Metadata name="DataProcessor.РК_ПроверкаСерий.TabularSection.ГруппыДублей.Attribute.Отметка" id="f14e0021-0021-4000-8000-000000000021"/>
<Metadata name="DataProcessor.РК_ПроверкаСерий.TabularSection.ГруппыДублей.Attribute.ИдентификаторГруппы" id="f14e0022-0022-4000-8000-000000000022"/>
<Metadata name="DataProcessor.РК_ПроверкаСерий.TabularSection.ГруппыДублей.Attribute.ВидНоменклатуры" id="f14e0023-0023-4000-8000-000000000023"/>
<Metadata name="DataProcessor.РК_ПроверкаСерий.TabularSection.ГруппыДублей.Attribute.Номер" id="f14e0024-0024-4000-8000-000000000024"/>
<Metadata name="DataProcessor.РК_ПроверкаСерий.TabularSection.ГруппыДублей.Attribute.ГоденДо" id="f14e0025-0025-4000-8000-000000000025"/>
<Metadata name="DataProcessor.РК_ПроверкаСерий.TabularSection.ГруппыДублей.Attribute.ДатаПроизводства" id="f14e0026-0026-4000-8000-000000000026"/>
<Metadata name="DataProcessor.РК_ПроверкаСерий.TabularSection.ГруппыДублей.Attribute.СерияМастер" id="f14e0027-0027-4000-8000-000000000027"/>
<Metadata name="DataProcessor.РК_ПроверкаСерий.TabularSection.ГруппыДублей.Attribute.КоличествоСерий" id="f14e0028-0028-4000-8000-000000000028"/>
<Metadata name="DataProcessor.РК_ПроверкаСерий.TabularSection.ГруппыДублей.Attribute.КоличествоЗамен" id="f14e0029-0029-4000-8000-000000000029"/>
<Metadata name="DataProcessor.РК_ПроверкаСерий.TabularSection.ГруппыДублей.Attribute.ОстатокМастер" id="f14e002a-002a-4000-8000-00000000002a"/>
<Metadata name="DataProcessor.РК_ПроверкаСерий.TabularSection.ГруппыДублей.Attribute.ОстатокДублей" id="f14e002b-002b-4000-8000-00000000002b"/>
<Metadata name="DataProcessor.РК_ПроверкаСерий.TabularSection.ГруппыДублей.Attribute.СерийСОстатком" id="f14e002c-002c-4000-8000-00000000002c"/>
<Metadata name="DataProcessor.РК_ПроверкаСерий.TabularSection.ГруппыДублей.Attribute.Предупреждение" id="f14e002d-002d-4000-8000-00000000002d"/>
<Metadata name="DataProcessor.РК_ПроверкаСерий.TabularSection.ГруппыДублей.Attribute.ДеталиОстатков" id="f14e002e-002e-4000-8000-00000000002e"/>
<Metadata name="DataProcessor.РК_ПроверкаСерий.TabularSection.ГруппыДублей.Attribute.Объединено" id="f14e002f-002f-4000-8000-00000000002f"/>
<Metadata name="DataProcessor.РК_ПроверкаСерий.TabularSection.ГруппыДублей.Attribute.Комментарий" id="f14e0030-0030-4000-8000-000000000030"/>
</Metadata> </Metadata>
<Metadata name="DataProcessor.РК_ПроверкаСерий.Form.Форма" id="f14e0001-0001-4000-8000-000000000001" configVersion="b2c3d4e5f678901234567890abcdef012345678901"/> <Metadata name="DataProcessor.РК_ПроверкаСерий.Form.Форма" id="f14e0001-0001-4000-8000-000000000001" configVersion="b2c3d4e5f678901234567890abcdef012345678901"/>
<Metadata name="DataProcessor.РК_ПроверкаСерий.Form.Форма.Form" id="f14e0001-0001-4000-8000-000000000001.0" configVersion="c3d4e5f678901234567890abcdef0123456789012"/> <Metadata name="DataProcessor.РК_ПроверкаСерий.Form.Форма.Form" id="f14e0001-0001-4000-8000-000000000001.0" configVersion="c3d4e5f678901234567890abcdef0123456789012"/>
+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.70</Version> <Version>1.3.1.71</Version>
<DefaultStyle/> <DefaultStyle/>
<DefaultLanguage>Language.Русский</DefaultLanguage> <DefaultLanguage>Language.Русский</DefaultLanguage>
<BriefInformation/> <BriefInformation/>
@@ -591,6 +591,592 @@
</Attribute> </Attribute>
</ChildObjects> </ChildObjects>
</TabularSection> </TabularSection>
<TabularSection uuid="f14e0020-0020-4000-8000-000000000020">
<InternalInfo>
<xr:GeneratedType name="DataProcessorTabularSection.РК_ПроверкаСерий.ГруппыДублей" category="TabularSection">
<xr:TypeId>f14e0020-0020-4001-8000-000000000020</xr:TypeId>
<xr:ValueId>f14e0020-0020-4002-8000-000000000020</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="DataProcessorTabularSectionRow.РК_ПроверкаСерий.ГруппыДублей" category="TabularSectionRow">
<xr:TypeId>f14e0020-0020-4003-8000-000000000020</xr:TypeId>
<xr:ValueId>f14e0020-0020-4004-8000-000000000020</xr:ValueId>
</xr:GeneratedType>
</InternalInfo>
<Properties>
<Name>ГруппыДублей</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Группы дублей</v8:content>
</v8:item>
</Synonym>
<Comment/>
<ToolTip/>
<FillChecking>DontCheck</FillChecking>
</Properties>
<ChildObjects>
<Attribute uuid="f14e0021-0021-4000-8000-000000000021">
<Properties>
<Name>Отметка</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Отметка</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type><v8:Type>xs:boolean</v8:Type></Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
</Properties>
</Attribute>
<Attribute uuid="f14e0022-0022-4000-8000-000000000022">
<Properties>
<Name>ИдентификаторГруппы</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>№ группы</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type><v8:Type>xs:decimal</v8:Type><v8:NumberQualifiers><v8:Digits>10</v8:Digits><v8:FractionDigits>0</v8:FractionDigits><v8:AllowedSign>Any</v8:AllowedSign></v8:NumberQualifiers></Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
</Properties>
</Attribute>
<Attribute uuid="f14e0023-0023-4000-8000-000000000023">
<Properties>
<Name>ВидНоменклатуры</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Вид номенклатуры</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type><v8:Type>cfg:CatalogRef.ВидыНоменклатуры</v8:Type></Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
</Properties>
</Attribute>
<Attribute uuid="f14e0024-0024-4000-8000-000000000024">
<Properties>
<Name>Номер</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Номер</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type><v8:Type>xs:string</v8:Type><v8:StringQualifiers><v8:Length>200</v8:Length><v8:AllowedLength>Variable</v8:AllowedLength></v8:StringQualifiers></Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<<FillValue xsi:type="xs:string"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
</Properties>
</Attribute>
<Attribute uuid="f14e0025-0025-4000-8000-000000000025">
<Properties>
<Name>ГоденДо</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Годен до</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type><v8:Type>xs:dateTime</v8:Type><v8:DateQualifiers><v8:DateFractions>DateTime</v8:DateFractions></v8:DateQualifiers></Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
</Properties>
</Attribute>
<Attribute uuid="f14e0026-0026-4000-8000-000000000026">
<Properties>
<Name>ДатаПроизводства</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Дата производства</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type><v8:Type>xs:dateTime</v8:Type><v8:DateQualifiers><v8:DateFractions>DateTime</v8:DateFractions></v8:DateQualifiers></Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
</Properties>
</Attribute>
<Attribute uuid="f14e0027-0027-4000-8000-000000000027">
<Properties>
<Name>СерияМастер</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Серия-мастер</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type><v8:Type>cfg:CatalogRef.СерииНоменклатуры</v8:Type></Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
</Properties>
</Attribute>
<Attribute uuid="f14e0028-0028-4000-8000-000000000028">
<Properties>
<Name>КоличествоСерий</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Кол-во серий</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type><v8:Type>xs:decimal</v8:Type><v8:NumberQualifiers><v8:Digits>10</v8:Digits><v8:FractionDigits>0</v8:FractionDigits><v8:AllowedSign>Any</v8:AllowedSign></v8:NumberQualifiers></Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
</Properties>
</Attribute>
<Attribute uuid="f14e0029-0029-4000-8000-000000000029">
<Properties>
<Name>КоличествоЗамен</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>К замене</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type><v8:Type>xs:decimal</v8:Type><v8:NumberQualifiers><v8:Digits>10</v8:Digits><v8:FractionDigits>0</v8:FractionDigits><v8:AllowedSign>Any</v8:AllowedSign></v8:NumberQualifiers></Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
</Properties>
</Attribute>
<Attribute uuid="f14e002a-002a-4000-8000-00000000002a">
<Properties>
<Name>ОстатокМастер</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Остаток мастер</v8:content>
</v8:item>
</Synonym>
<Comment/>
<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>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
</Properties>
</Attribute>
<Attribute uuid="f14e002b-002b-4000-8000-00000000002b">
<Properties>
<Name>ОстатокДублей</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Остаток дублей</v8:content>
</v8:item>
</Synonym>
<Comment/>
<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>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
</Properties>
</Attribute>
<Attribute uuid="f14e002c-002c-4000-8000-00000000002c">
<Properties>
<Name>СерийСОстатком</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Серий с остатком</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type><v8:Type>xs:decimal</v8:Type><v8:NumberQualifiers><v8:Digits>10</v8:Digits><v8:FractionDigits>0</v8:FractionDigits><v8:AllowedSign>Any</v8:AllowedSign></v8:NumberQualifiers></Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
</Properties>
</Attribute>
<Attribute uuid="f14e002d-002d-4000-8000-00000000002d">
<Properties>
<Name>Предупреждение</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Предупреждение</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type><v8:Type>xs:string</v8:Type><v8:StringQualifiers><v8:Length>200</v8:Length><v8:AllowedLength>Variable</v8:AllowedLength></v8:StringQualifiers></Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<<FillValue xsi:type="xs:string"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
</Properties>
</Attribute>
<Attribute uuid="f14e002e-002e-4000-8000-00000000002e">
<Properties>
<Name>ДеталиОстатков</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Детали остатков</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type><v8:Type>xs:string</v8:Type><v8:StringQualifiers><v8:Length>0</v8:Length><v8:AllowedLength>Variable</v8:AllowedLength></v8:StringQualifiers></Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<<FillValue xsi:type="xs:string"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
</Properties>
</Attribute>
<Attribute uuid="f14e002f-002f-4000-8000-00000000002f">
<Properties>
<Name>Объединено</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Объединено</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type><v8:Type>xs:boolean</v8:Type></Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
</Properties>
</Attribute>
<Attribute uuid="f14e0030-0030-4000-8000-000000000030">
<Properties>
<Name>Комментарий</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Комментарий</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type><v8:Type>xs:string</v8:Type><v8:StringQualifiers><v8:Length>0</v8:Length><v8:AllowedLength>Variable</v8:AllowedLength></v8:StringQualifiers></Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<<FillValue xsi:type="xs:string"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
</Properties>
</Attribute>
</ChildObjects>
</TabularSection>
<Form>Форма</Form> <Form>Форма</Form>
</ChildObjects> </ChildObjects>
</DataProcessor> </DataProcessor>
@@ -6,21 +6,7 @@
<v8:content>Проверка и исправление серий номенклатуры</v8:content> <v8:content>Проверка и исправление серий номенклатуры</v8:content>
</v8:item> </v8:item>
</Title> </Title>
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1"> <AutoCommandBar name="ФормаКоманднаяПанель" id="-1"/>
<ChildItems>
<Button name="ФормаНайтиПроблемы" id="1">
<Type>CommandBarButton</Type>
<CommandName>Form.Command.НайтиПроблемы</CommandName>
<ExtendedTooltip name="ФормаНайтиПроблемыРасширеннаяПодсказка" id="2"/>
</Button>
<Button name="ФормаИсправитьОтмеченные" id="3">
<Type>CommandBarButton</Type>
<DefaultButton>true</DefaultButton>
<CommandName>Form.Command.ИсправитьОтмеченные</CommandName>
<ExtendedTooltip name="ФормаИсправитьОтмеченныеРасширеннаяПодсказка" id="4"/>
</Button>
</ChildItems>
</AutoCommandBar>
<Events> <Events>
<Event name="OnCreateAtServer">ПриСозданииНаСервере</Event> <Event name="OnCreateAtServer">ПриСозданииНаСервере</Event>
</Events> </Events>
@@ -39,6 +25,24 @@
<ContextMenu name="РежимТестКонтекстноеМеню" id="6"/> <ContextMenu name="РежимТестКонтекстноеМеню" id="6"/>
<ExtendedTooltip name="РежимТестРасширеннаяПодсказка" id="7"/> <ExtendedTooltip name="РежимТестРасширеннаяПодсказка" id="7"/>
</CheckBoxField> </CheckBoxField>
<Pages name="ГруппаСтраницы" id="70">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Группа страницы</v8:content>
</v8:item>
</Title>
<ExtendedTooltip name="ГруппаСтраницыРасширеннаяПодсказка" id="71"/>
<ChildItems>
<Page name="СтраницаЗаполнение" id="72">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Заполнение реквизитов</v8:content>
</v8:item>
</Title>
<ExtendedTooltip name="СтраницаЗаполнениеРасширеннаяПодсказка" id="73"/>
<ChildItems>
<Table name="ПроблемныеСерии" id="10"> <Table name="ПроблемныеСерии" id="10">
<Representation>List</Representation> <Representation>List</Representation>
<ChangeRowSet>false</ChangeRowSet> <ChangeRowSet>false</ChangeRowSet>
@@ -65,6 +69,17 @@
</ContextMenu> </ContextMenu>
<AutoCommandBar name="ПроблемныеСерииКоманднаяПанель" id="16"> <AutoCommandBar name="ПроблемныеСерииКоманднаяПанель" id="16">
<ChildItems> <ChildItems>
<Button name="ПроблемныеСерииНайтиПроблемы" id="1">
<Type>CommandBarButton</Type>
<CommandName>Form.Command.НайтиПроблемы</CommandName>
<ExtendedTooltip name="ПроблемныеСерииНайтиПроблемыРасширеннаяПодсказка" id="2"/>
</Button>
<Button name="ПроблемныеСерииИсправитьОтмеченные" id="3">
<Type>CommandBarButton</Type>
<DefaultButton>true</DefaultButton>
<CommandName>Form.Command.ИсправитьОтмеченные</CommandName>
<ExtendedTooltip name="ПроблемныеСерииИсправитьОтмеченныеРасширеннаяПодсказка" id="4"/>
</Button>
<Button name="ПроблемныеСерииОтметить" id="17"> <Button name="ПроблемныеСерииОтметить" id="17">
<Type>CommandBarButton</Type> <Type>CommandBarButton</Type>
<CommandName>Form.Command.Отметить</CommandName> <CommandName>Form.Command.Отметить</CommandName>
@@ -196,6 +211,220 @@
</ChildItems> </ChildItems>
</Table> </Table>
</ChildItems> </ChildItems>
</Page>
<Page name="СтраницаДубли" id="74">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Объединение дублей</v8:content>
</v8:item>
</Title>
<ExtendedTooltip name="СтраницаДублиРасширеннаяПодсказка" id="75"/>
<ChildItems>
<Table name="ГруппыДублей" id="80">
<Representation>List</Representation>
<ChangeRowSet>false</ChangeRowSet>
<ChangeRowOrder>false</ChangeRowOrder>
<AutoInsertNewRow>false</AutoInsertNewRow>
<EnableStartDrag>false</EnableStartDrag>
<EnableDrag>false</EnableDrag>
<DataPath>Объект.ГруппыДублей</DataPath>
<RowFilter xsi:nil="true"/>
<ContextMenu name="ГруппыДублейКонтекстноеМеню" id="81">
<Autofill>false</Autofill>
<ChildItems>
<Button name="ГруппыДублейКонтекстноеМенюОтметить" id="82">
<Type>CommandBarButton</Type>
<CommandName>Form.Command.ОтметитьГруппыДублей</CommandName>
<ExtendedTooltip name="ГруппыДублейКонтекстноеМенюОтметитьРасширеннаяПодсказка" id="83"/>
</Button>
<Button name="ГруппыДублейКонтекстноеМенюСнятьОтметку" id="84">
<Type>CommandBarButton</Type>
<CommandName>Form.Command.СнятьОтметкуГруппыДублей</CommandName>
<ExtendedTooltip name="ГруппыДублейКонтекстноеМенюСнятьОтметкуРасширеннаяПодсказка" id="85"/>
</Button>
</ChildItems>
</ContextMenu>
<AutoCommandBar name="ГруппыДублейКоманднаяПанель" id="86">
<ChildItems>
<Button name="ГруппыДублейНайтиДубли" id="87">
<Type>CommandBarButton</Type>
<CommandName>Form.Command.НайтиДубли</CommandName>
<ExtendedTooltip name="ГруппыДублейНайтиДублиРасширеннаяПодсказка" id="88"/>
</Button>
<Button name="ГруппыДублейОбъединить" id="89">
<Type>CommandBarButton</Type>
<DefaultButton>true</DefaultButton>
<CommandName>Form.Command.ОбъединитьГруппы</CommandName>
<ExtendedTooltip name="ГруппыДублейОбъединитьРасширеннаяПодсказка" id="90"/>
</Button>
<Button name="ГруппыДублейОтметить" id="91">
<Type>CommandBarButton</Type>
<CommandName>Form.Command.ОтметитьГруппыДублей</CommandName>
<ExtendedTooltip name="ГруппыДублейОтметитьРасширеннаяПодсказка" id="92"/>
</Button>
<Button name="ГруппыДублейСнятьОтметку" id="93">
<Type>CommandBarButton</Type>
<CommandName>Form.Command.СнятьОтметкуГруппыДублей</CommandName>
<ExtendedTooltip name="ГруппыДублейСнятьОтметкуРасширеннаяПодсказка" id="94"/>
</Button>
</ChildItems>
</AutoCommandBar>
<ExtendedTooltip name="ГруппыДублейРасширеннаяПодсказка" id="95"/>
<SearchStringAddition name="ГруппыДублейСтрокаПоиска" id="96">
<AdditionSource>
<Item>ГруппыДублей</Item>
<Type>SearchStringRepresentation</Type>
</AdditionSource>
<ContextMenu name="ГруппыДублейСтрокаПоискаКонтекстноеМеню" id="97"/>
<ExtendedTooltip name="ГруппыДублейСтрокаПоискаРасширеннаяПодсказка" id="98"/>
</SearchStringAddition>
<ViewStatusAddition name="ГруппыДублейСостояниеПросмотра" id="99">
<AdditionSource>
<Item>ГруппыДублей</Item>
<Type>ViewStatusRepresentation</Type>
</AdditionSource>
<ContextMenu name="ГруппыДублейСостояниеПросмотраКонтекстноеМеню" id="100"/>
<ExtendedTooltip name="ГруппыДублейСостояниеПросмотраРасширеннаяПодсказка" id="101"/>
</ViewStatusAddition>
<SearchControlAddition name="ГруппыДублейУправлениеПоиском" id="102">
<AdditionSource>
<Item>ГруппыДублей</Item>
<Type>SearchControl</Type>
</AdditionSource>
<ContextMenu name="ГруппыДублейУправлениеПоискомКонтекстноеМеню" id="103"/>
<ExtendedTooltip name="ГруппыДублейУправлениеПоискомРасширеннаяПодсказка" id="104"/>
</SearchControlAddition>
<ChildItems>
<CheckBoxField name="ГруппыДублейОтметка" id="105">
<DataPath>Объект.ГруппыДублей.Отметка</DataPath>
<EditMode>EnterOnInput</EditMode>
<CheckBoxType>Auto</CheckBoxType>
<ContextMenu name="ГруппыДублейОтметкаКонтекстноеМеню" id="106"/>
<ExtendedTooltip name="ГруппыДублейОтметкаРасширеннаяПодсказка" id="107"/>
</CheckBoxField>
<LabelField name="ГруппыДублейИдентификаторГруппы" id="108">
<DataPath>Объект.ГруппыДублей.ИдентификаторГруппы</DataPath>
<ReadOnly>true</ReadOnly>
<EditMode>EnterOnInput</EditMode>
<Width>4</Width>
<ContextMenu name="ГруппыДублейИдентификаторГруппыКонтекстноеМеню" id="109"/>
<ExtendedTooltip name="ГруппыДублейИдентификаторГруппыРасширеннаяПодсказка" id="110"/>
</LabelField>
<InputField name="ГруппыДублейСерияМастер" id="111">
<DataPath>Объект.ГруппыДублей.СерияМастер</DataPath>
<ReadOnly>true</ReadOnly>
<EditMode>EnterOnInput</EditMode>
<OpenButton>true</OpenButton>
<ContextMenu name="ГруппыДублейСерияМастерКонтекстноеМеню" id="112"/>
<ExtendedTooltip name="ГруппыДублейСерияМастерРасширеннаяПодсказка" id="113"/>
</InputField>
<InputField name="ГруппыДублейПредупреждение" id="114">
<DataPath>Объект.ГруппыДублей.Предупреждение</DataPath>
<ReadOnly>true</ReadOnly>
<EditMode>EnterOnInput</EditMode>
<TextColor>style:SpecialTextColor</TextColor>
<ContextMenu name="ГруппыДублейПредупреждениеКонтекстноеМеню" id="115"/>
<ExtendedTooltip name="ГруппыДублейПредупреждениеРасширеннаяПодсказка" id="116"/>
</InputField>
<InputField name="ГруппыДублейВидНоменклатуры" id="117">
<DataPath>Объект.ГруппыДублей.ВидНоменклатуры</DataPath>
<ReadOnly>true</ReadOnly>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="ГруппыДублейВидНоменклатурыКонтекстноеМеню" id="118"/>
<ExtendedTooltip name="ГруппыДублейВидНоменклатурыРасширеннаяПодсказка" id="119"/>
</InputField>
<InputField name="ГруппыДублейНомер" id="120">
<DataPath>Объект.ГруппыДублей.Номер</DataPath>
<ReadOnly>true</ReadOnly>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="ГруппыДублейНомерКонтекстноеМеню" id="121"/>
<ExtendedTooltip name="ГруппыДублейНомерРасширеннаяПодсказка" id="122"/>
</InputField>
<InputField name="ГруппыДублейГоденДо" id="123">
<DataPath>Объект.ГруппыДублей.ГоденДо</DataPath>
<ReadOnly>true</ReadOnly>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="ГруппыДублейГоденДоКонтекстноеМеню" id="124"/>
<ExtendedTooltip name="ГруппыДублейГоденДоРасширеннаяПодсказка" id="125"/>
</InputField>
<InputField name="ГруппыДублейДатаПроизводства" id="126">
<DataPath>Объект.ГруппыДублей.ДатаПроизводства</DataPath>
<ReadOnly>true</ReadOnly>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="ГруппыДублейДатаПроизводстваКонтекстноеМеню" id="127"/>
<ExtendedTooltip name="ГруппыДублейДатаПроизводстваРасширеннаяПодсказка" id="128"/>
</InputField>
<InputField name="ГруппыДублейКоличествоСерий" id="129">
<DataPath>Объект.ГруппыДублей.КоличествоСерий</DataPath>
<ReadOnly>true</ReadOnly>
<EditMode>EnterOnInput</EditMode>
<Width>6</Width>
<ContextMenu name="ГруппыДублейКоличествоСерийКонтекстноеМеню" id="130"/>
<ExtendedTooltip name="ГруппыДублейКоличествоСерийРасширеннаяПодсказка" id="131"/>
</InputField>
<InputField name="ГруппыДублейКоличествоЗамен" id="132">
<DataPath>Объект.ГруппыДублей.КоличествоЗамен</DataPath>
<ReadOnly>true</ReadOnly>
<EditMode>EnterOnInput</EditMode>
<Width>6</Width>
<ContextMenu name="ГруппыДублейКоличествоЗаменКонтекстноеМеню" id="133"/>
<ExtendedTooltip name="ГруппыДублейКоличествоЗаменРасширеннаяПодсказка" id="134"/>
</InputField>
<InputField name="ГруппыДублейОстатокМастер" id="135">
<DataPath>Объект.ГруппыДублей.ОстатокМастер</DataPath>
<ReadOnly>true</ReadOnly>
<EditMode>EnterOnInput</EditMode>
<Width>8</Width>
<ContextMenu name="ГруппыДублейОстатокМастерКонтекстноеМеню" id="136"/>
<ExtendedTooltip name="ГруппыДублейОстатокМастерРасширеннаяПодсказка" id="137"/>
</InputField>
<InputField name="ГруппыДублейОстатокДублей" id="138">
<DataPath>Объект.ГруппыДублей.ОстатокДублей</DataPath>
<ReadOnly>true</ReadOnly>
<EditMode>EnterOnInput</EditMode>
<Width>8</Width>
<ContextMenu name="ГруппыДублейОстатокДублейКонтекстноеМеню" id="139"/>
<ExtendedTooltip name="ГруппыДублейОстатокДублейРасширеннаяПодсказка" id="140"/>
</InputField>
<InputField name="ГруппыДублейСерийСОстатком" id="141">
<DataPath>Объект.ГруппыДублей.СерийСОстатком</DataPath>
<ReadOnly>true</ReadOnly>
<EditMode>EnterOnInput</EditMode>
<Width>6</Width>
<ContextMenu name="ГруппыДублейСерийСОстаткомКонтекстноеМеню" id="142"/>
<ExtendedTooltip name="ГруппыДублейСерийСОстаткомРасширеннаяПодсказка" id="143"/>
</InputField>
<InputField name="ГруппыДублейДеталиОстатков" id="144">
<DataPath>Объект.ГруппыДублей.ДеталиОстатков</DataPath>
<ReadOnly>true</ReadOnly>
<EditMode>EnterOnInput</EditMode>
<Height>2</Height>
<ContextMenu name="ГруппыДублейДеталиОстатковКонтекстноеМеню" id="145"/>
<ExtendedTooltip name="ГруппыДублейДеталиОстатковРасширеннаяПодсказка" id="146"/>
</InputField>
<CheckBoxField name="ГруппыДублейОбъединено" id="147">
<DataPath>Объект.ГруппыДублей.Объединено</DataPath>
<ReadOnly>true</ReadOnly>
<EditMode>EnterOnInput</EditMode>
<CheckBoxType>Auto</CheckBoxType>
<ContextMenu name="ГруппыДублейОбъединеноКонтекстноеМеню" id="148"/>
<ExtendedTooltip name="ГруппыДублейОбъединеноРасширеннаяПодсказка" id="149"/>
</CheckBoxField>
<InputField name="ГруппыДублейКомментарий" id="150">
<DataPath>Объект.ГруппыДублей.Комментарий</DataPath>
<ReadOnly>true</ReadOnly>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="ГруппыДублейКомментарийКонтекстноеМеню" id="151"/>
<ExtendedTooltip name="ГруппыДублейКомментарийРасширеннаяПодсказка" id="152"/>
</InputField>
</ChildItems>
</Table>
</ChildItems>
</Page>
</ChildItems>
</Pages>
</ChildItems>
<Attributes> <Attributes>
<Attribute name="Объект" id="1"> <Attribute name="Объект" id="1">
<Type> <Type>
@@ -269,5 +498,69 @@
</Picture> </Picture>
<Action>СнятьОтметку</Action> <Action>СнятьОтметку</Action>
</Command> </Command>
<Command name="НайтиДубли" id="153">
<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.Find</xr:Ref>
<xr:LoadTransparent>true</xr:LoadTransparent>
</Picture>
<Action>НайтиДубли</Action>
</Command>
<Command name="ОбъединитьГруппы" id="154">
<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.Write</xr:Ref>
<xr:LoadTransparent>true</xr:LoadTransparent>
</Picture>
<Action>ОбъединитьГруппы</Action>
</Command>
<Command name="ОтметитьГруппыДублей" id="155">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Отметить</v8:content>
</v8:item>
</Title>
<Picture>
<xr:Ref>StdPicture.CheckAll</xr:Ref>
<xr:LoadTransparent>true</xr:LoadTransparent>
</Picture>
<Action>ОтметитьГруппыДублей</Action>
</Command>
<Command name="СнятьОтметкуГруппыДублей" id="156">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Снять отметку</v8:content>
</v8:item>
</Title>
<Picture>
<xr:Ref>StdPicture.UncheckAll</xr:Ref>
<xr:LoadTransparent>true</xr:LoadTransparent>
</Picture>
<Action>СнятьОтметкуГруппыДублей</Action>
</Command>
</Commands> </Commands>
</Form> </Form>
@@ -1,4 +1,4 @@
// Проверка и исправление данных Справочник.СерииНоменклатуры (#14). // Проверка и исправление данных Справочник.СерииНоменклатуры (#14, #15).
// Логика заполнения номера/срока из наименования — как docs/transfer/Код_исправления_серий_crm3-26.bsl. // Логика заполнения номера/срока из наименования — как docs/transfer/Код_исправления_серий_crm3-26.bsl.
#Область ОбработчикиСобытийФормы #Область ОбработчикиСобытийФормы
@@ -83,12 +83,94 @@
&НаКлиенте &НаКлиенте
Процедура Отметить(Команда) Процедура Отметить(Команда)
УстановитьОтметкуВыделенныхСтрок(Истина); УстановитьОтметкуВыделенныхСтрок("ПроблемныеСерии", Истина);
КонецПроцедуры КонецПроцедуры
&НаКлиенте &НаКлиенте
Процедура СнятьОтметку(Команда) Процедура СнятьОтметку(Команда)
УстановитьОтметкуВыделенныхСтрок(Ложь); УстановитьОтметкуВыделенныхСтрок("ПроблемныеСерии", Ложь);
КонецПроцедуры
&НаКлиенте
Процедура НайтиДубли(Команда)
Попытка
Количество = НайтиДублиНаСервере();
Исключение
ПоказатьПредупреждение(, КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
Возврат;
КонецПопытки;
Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаДубли;
ПоказатьОповещениеПользователя("Дубли серий", ,
"Найдено групп: " + Формат(Количество, "ЧН=0; ЧГ=0"));
КонецПроцедуры
&НаКлиенте
Процедура ОбъединитьГруппы(Команда)
Если Объект.ГруппыДублей.Количество() = 0 Тогда
ПоказатьПредупреждение(, "Сначала выполните поиск дублей");
Возврат;
КонецЕсли;
Если Не ЕстьОтмеченныеГруппыДублей() Тогда
ПоказатьПредупреждение(, "Отметьте группы для объединения");
Возврат;
КонецЕсли;
Если Не Объект.РежимТест Тогда
ТекстПредупреждения = ТекстПредупрежденияОбОстаткахНаСервере();
ТекстВопроса = "Объединить отмеченные группы дублей (замена ссылок на серию-мастер)?";
Если ЗначениеЗаполнено(ТекстПредупреждения) Тогда
ТекстВопроса = ТекстПредупреждения + Символы.ПС + Символы.ПС + ТекстВопроса;
КонецЕсли;
Описание = Новый ОписаниеОповещения("ОбъединитьГруппыПослеВопроса", ЭтотОбъект);
ПоказатьВопрос(Описание, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
Возврат;
КонецЕсли;
ВыполнитьОбъединениеНаКлиенте();
КонецПроцедуры
&НаКлиенте
Процедура ОбъединитьГруппыПослеВопроса(РезультатВопроса, ДопПараметры) Экспорт
Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
ВыполнитьОбъединениеНаКлиенте();
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьОбъединениеНаКлиенте()
Попытка
Результат = ОбъединитьОтмеченныеГруппыНаСервере();
Исключение
ПоказатьПредупреждение(, КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
Возврат;
КонецПопытки;
Текст = СтрШаблон("Объединено ссылок: %1; групп: %2; ошибок: %3%4",
Формат(Результат.ОбъединеноСсылок, "ЧН=0; ЧГ=0"),
Формат(Результат.ОбъединеноГрупп, "ЧН=0; ЧГ=0"),
Формат(Результат.Ошибок, "ЧН=0; ЧГ=0"),
?(Объект.РежимТест, " (тест)", ""));
ПоказатьОповещениеПользователя("Дубли серий", , Текст);
КонецПроцедуры
&НаКлиенте
Процедура ОтметитьГруппыДублей(Команда)
УстановитьОтметкуВыделенныхСтрок("ГруппыДублей", Истина);
КонецПроцедуры
&НаКлиенте
Процедура СнятьОтметкуГруппыДублей(Команда)
УстановитьОтметкуВыделенныхСтрок("ГруппыДублей", Ложь);
КонецПроцедуры КонецПроцедуры
#КонецОбласти #КонецОбласти
@@ -108,9 +190,10 @@
КонецФункции КонецФункции
&НаКлиенте &НаКлиенте
Процедура УстановитьОтметкуВыделенныхСтрок(Отметка) Процедура УстановитьОтметкуВыделенныхСтрок(ИмяТаблицы, Отметка)
ТаблицаФормы = Элементы.ПроблемныеСерии; ТаблицаФормы = Элементы[ИмяТаблицы];
ДанныеТаблицы = Объект[ИмяТаблицы];
Выделенные = ТаблицаФормы.ВыделенныеСтроки; Выделенные = ТаблицаФормы.ВыделенныеСтроки;
Если Выделенные.Количество() = 0 Тогда Если Выделенные.Количество() = 0 Тогда
ПоказатьПредупреждение(, "Выделите строки в таблице"); ПоказатьПредупреждение(, "Выделите строки в таблице");
@@ -118,7 +201,7 @@
КонецЕсли; КонецЕсли;
Для Каждого ИдентификаторСтроки Из Выделенные Цикл Для Каждого ИдентификаторСтроки Из Выделенные Цикл
СтрокаТЗ = Объект.ПроблемныеСерии.НайтиПоИдентификатору(ИдентификаторСтроки); СтрокаТЗ = ДанныеТаблицы.НайтиПоИдентификатору(ИдентификаторСтроки);
Если СтрокаТЗ <> Неопределено Тогда Если СтрокаТЗ <> Неопределено Тогда
СтрокаТЗ.Отметка = Отметка; СтрокаТЗ.Отметка = Отметка;
КонецЕсли; КонецЕсли;
@@ -126,6 +209,18 @@
КонецПроцедуры КонецПроцедуры
&НаКлиенте
Функция ЕстьОтмеченныеГруппыДублей()
Для Каждого Стр Из Объект.ГруппыДублей Цикл
Если Стр.Отметка И Не Стр.Объединено Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
&НаСервере &НаСервере
Функция НайтиПроблемыНаСервере() Функция НайтиПроблемыНаСервере()
@@ -387,4 +482,293 @@
КонецФункции КонецФункции
&НаСервере
Функция НайтиДублиНаСервере()
Объект.ГруппыДублей.Очистить();
ЗапросГруппы = Новый Запрос;
ЗапросГруппы.Текст =
"ВЫБРАТЬ
| Сер.ВидНоменклатуры КАК ВидНоменклатуры,
| Сер.Номер КАК Номер,
| Сер.ГоденДо КАК ГоденДо,
| Сер.ДатаПроизводства КАК ДатаПроизводства,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Сер.Ссылка) КАК КоличествоСерий
|ИЗ
| Справочник.СерииНоменклатуры КАК Сер
|ГДЕ
| НЕ Сер.ПометкаУдаления
|СГРУППИРОВАТЬ ПО
| Сер.ВидНоменклатуры,
| Сер.Номер,
| Сер.ГоденДо,
| Сер.ДатаПроизводства
|ИМЕЮЩИЕ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Сер.Ссылка) > 1";
ВыбГруппы = ЗапросГруппы.Выполнить().Выбрать();
НомерГруппы = 0;
Пока ВыбГруппы.Следующий() Цикл
Мастер = НайтиСериюМастерГруппы(
ВыбГруппы.ВидНоменклатуры,
ВыбГруппы.Номер,
ВыбГруппы.ГоденДо,
ВыбГруппы.ДатаПроизводства);
Если Не ЗначениеЗаполнено(Мастер) Тогда
Продолжить;
КонецЕсли;
СерииГруппы = СерииГруппыДублей(
ВыбГруппы.ВидНоменклатуры,
ВыбГруппы.Номер,
ВыбГруппы.ГоденДо,
ВыбГруппы.ДатаПроизводства);
Если СерииГруппы.Количество() < 2 Тогда
Продолжить;
КонецЕсли;
Остатки = ОстаткиПоСериям(СерииГруппы);
НомерГруппы = НомерГруппы + 1;
ДобавитьСтрокуГруппыДублей(НомерГруппы, ВыбГруппы, Мастер, СерииГруппы, Остатки);
КонецЦикла;
Возврат Объект.ГруппыДублей.Количество();
КонецФункции
&НаСервере
Функция НайтиСериюМастерГруппы(Вид, Номер, ГоденДо, ДатаПроизводства)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Сер.Ссылка КАК Ссылка
|ИЗ
| Справочник.СерииНоменклатуры КАК Сер
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ДвиженияСерийТоваров КАК Дв
| ПО Дв.Серия = Сер.Ссылка
|ГДЕ
| Сер.ВидНоменклатуры = &Вид
| И Сер.Номер = &Номер
| И Сер.ГоденДо = &ГоденДо
| И Сер.ДатаПроизводства = &ДатаПроизводства
| И НЕ Сер.ПометкаУдаления
|СГРУППИРОВАТЬ ПО
| Сер.Ссылка
|УПОРЯДОЧИТЬ ПО
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Дв.Регистратор) УБЫВ,
| Сер.Ссылка";
Запрос.УстановитьПараметр("Вид", Вид);
Запрос.УстановитьПараметр("Номер", Номер);
Запрос.УстановитьПараметр("ГоденДо", ГоденДо);
Запрос.УстановитьПараметр("ДатаПроизводства", ДатаПроизводства);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.Ссылка;
КонецЕсли;
Возврат Справочники.СерииНоменклатуры.ПустаяСсылка();
КонецФункции
&НаСервере
Функция СерииГруппыДублей(Вид, Номер, ГоденДо, ДатаПроизводства)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Сер.Ссылка КАК Серия
|ИЗ
| Справочник.СерииНоменклатуры КАК Сер
|ГДЕ
| Сер.ВидНоменклатуры = &Вид
| И Сер.Номер = &Номер
| И Сер.ГоденДо = &ГоденДо
| И Сер.ДатаПроизводства = &ДатаПроизводства
| И НЕ Сер.ПометкаУдаления";
Запрос.УстановитьПараметр("Вид", Вид);
Запрос.УстановитьПараметр("Номер", Номер);
Запрос.УстановитьПараметр("ГоденДо", ГоденДо);
Запрос.УстановитьПараметр("ДатаПроизводства", ДатаПроизводства);
Результат = Новый Массив;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Результат.Добавить(Выборка.Серия);
КонецЦикла;
Возврат Результат;
КонецФункции
&НаСервере
Функция ОстаткиПоСериям(Серии)
Результат = Новый Соответствие;
Если Серии.Количество() = 0 Тогда
Возврат Результат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Ост.Серия КАК Серия,
| СУММА(Ост.КоличествоОстаток) КАК Количество
|ИЗ
| РегистрНакопления.ДвиженияСерийТоваров.Остатки(, Серия В (&Серии)) КАК Ост
|СГРУППИРОВАТЬ ПО
| Ост.Серия";
Запрос.УстановитьПараметр("Серии", Серии);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Результат.Вставить(Выборка.Серия, Выборка.Количество);
КонецЦикла;
Возврат Результат;
КонецФункции
&НаСервере
Процедура ДобавитьСтрокуГруппыДублей(НомерГруппы, ДанныеГруппы, Мастер, СерииГруппы, Остатки)
ОстатокМастер = ОстатокСерииИзСоответствия(Остатки, Мастер);
ОстатокДублей = 0;
СерийСОстатком = 0;
Детали = Новый Массив;
КоличествоЗамен = 0;
Для Каждого Серия Из СерииГруппы Цикл
Остаток = ОстатокСерииИзСоответствия(Остатки, Серия);
Если Остаток > 0.000001 Тогда
СерийСОстатком = СерийСОстатком + 1;
КонецЕсли;
Если Серия <> Мастер Тогда
КоличествоЗамен = КоличествоЗамен + 1;
ОстатокДублей = ОстатокДублей + Остаток;
КонецЕсли;
Префикс = ?(Серия = Мастер, "Мастер", "Дубль");
Детали.Добавить(СтрШаблон("%1 %2: %3",
Префикс, Серия, Формат(Остаток, "ЧН=0; ЧГ=0; ЧДЦ=3")));
КонецЦикла;
Предупреждение = "";
Если СерийСОстатком > 1 Тогда
Предупреждение = "Остатки у " + Формат(СерийСОстатком, "ЧН=0; ЧГ=0") + " серий группы";
ИначеЕсли ОстатокДублей > 0.000001 Тогда
Предупреждение = "У дублей есть остатки → перенос на мастер";
КонецЕсли;
НовСтр = Объект.ГруппыДублей.Добавить();
НовСтр.Отметка = ПустаяСтрока(Предупреждение);
НовСтр.ИдентификаторГруппы = НомерГруппы;
НовСтр.ВидНоменклатуры = ДанныеГруппы.ВидНоменклатуры;
НовСтр.Номер = ДанныеГруппы.Номер;
НовСтр.ГоденДо = ДанныеГруппы.ГоденДо;
НовСтр.ДатаПроизводства = ДанныеГруппы.ДатаПроизводства;
НовСтр.СерияМастер = Мастер;
НовСтр.КоличествоСерий = СерииГруппы.Количество();
НовСтр.КоличествоЗамен = КоличествоЗамен;
НовСтр.ОстатокМастер = ОстатокМастер;
НовСтр.ОстатокДублей = ОстатокДублей;
НовСтр.СерийСОстатком = СерийСОстатком;
НовСтр.Предупреждение = Предупреждение;
НовСтр.ДеталиОстатков = СтрСоединить(Детали, "; ");
КонецПроцедуры
&НаСервере
Функция ОстатокСерииИзСоответствия(Остатки, Серия)
Остаток = Остатки.Получить(Серия);
Если Остаток = Неопределено Тогда
Возврат 0;
КонецЕсли;
Возврат Остаток;
КонецФункции
&НаСервере
Функция ТекстПредупрежденияОбОстаткахНаСервере()
Строки = Новый Массив;
Для Каждого Стр Из Объект.ГруппыДублей Цикл
Если Не Стр.Отметка Или Стр.Объединено Тогда
Продолжить;
КонецЕсли;
Если Не ЗначениеЗаполнено(Стр.Предупреждение) Тогда
Продолжить;
КонецЕсли;
Строки.Добавить(СтрШаблон("Группа %1: %2 (%3)",
Формат(Стр.ИдентификаторГруппы, "ЧН=0; ЧГ=0"),
Стр.Предупреждение,
Стр.ДеталиОстатков));
КонецЦикла;
Если Строки.Количество() = 0 Тогда
Возврат "";
КонецЕсли;
Возврат "Внимание: у отмеченных групп есть остатки по сериям:" + Символы.ПС
+ СтрСоединить(Строки, Символы.ПС);
КонецФункции
&НаСервере
Функция ОбъединитьОтмеченныеГруппыНаСервере()
Результат = Новый Структура("ОбъединеноСсылок, ОбъединеноГрупп, Ошибок", 0, 0, 0);
Для Каждого СтрГруппа Из Объект.ГруппыДублей Цикл
Если Не СтрГруппа.Отметка Или СтрГруппа.Объединено Тогда
Продолжить;
КонецЕсли;
СтрГруппа.Комментарий = "";
Если Не ЗначениеЗаполнено(СтрГруппа.СерияМастер) Тогда
СтрГруппа.Комментарий = "Не определена серия-мастер";
Результат.Ошибок = Результат.Ошибок + 1;
Продолжить;
КонецЕсли;
Заменяемые = Новый Соответствие;
СерииГруппы = СерииГруппыДублей(
СтрГруппа.ВидНоменклатуры,
СтрГруппа.Номер,
СтрГруппа.ГоденДо,
СтрГруппа.ДатаПроизводства);
Для Каждого Серия Из СерииГруппы Цикл
Если Серия <> СтрГруппа.СерияМастер Тогда
Заменяемые.Вставить(Серия, СтрГруппа.СерияМастер);
КонецЕсли;
КонецЦикла;
Если Заменяемые.Количество() = 0 Тогда
СтрГруппа.Комментарий = "Нет серий для замены";
Продолжить;
КонецЕсли;
Попытка
Если Объект.РежимТест Тогда
СтрГруппа.Объединено = Истина;
Результат.ОбъединеноСсылок = Результат.ОбъединеноСсылок + Заменяемые.Количество();
Результат.ОбъединеноГрупп = Результат.ОбъединеноГрупп + 1;
Иначе
ОбщегоНазначения.ЗаменитьСсылки(Заменяемые);
СтрГруппа.Объединено = Истина;
Результат.ОбъединеноСсылок = Результат.ОбъединеноСсылок + Заменяемые.Количество();
Результат.ОбъединеноГрупп = Результат.ОбъединеноГрупп + 1;
КонецЕсли;
Исключение
СтрГруппа.Комментарий = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
Результат.Ошибок = Результат.Ошибок + 1;
КонецПопытки;
КонецЦикла;
Возврат Результат;
КонецФункции
#КонецОбласти #КонецОбласти