РК_ПроверкаСерий 1.3.1.89: UUID в форме и запись исправлений (#17).

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
mihailkudravcev
2026-08-19 13:00:31 +03:00
parent bd7b3a329d
commit 9ee4f347e1
5 changed files with 181 additions and 47 deletions
+1 -1
View File
@@ -62,7 +62,7 @@
<xr:Item xsi:type="xr:MDObjectRef">Role.РК_ОсновнаяРоль</xr:Item>
</DefaultRoles>
<Vendor/>
<Version>1.3.1.88</Version>
<Version>1.3.1.89</Version>
<DefaultStyle/>
<DefaultLanguage>Language.Русский</DefaultLanguage>
<BriefInformation/>
@@ -26,23 +26,6 @@
<ContextMenu name="РежимТестКонтекстноеМеню" id="6"/>
<ExtendedTooltip name="РежимТестРасширеннаяПодсказка" id="7"/>
</CheckBoxField>
<InputField name="ТекстПоследнейОшибки" id="157">
<DataPath>ТекстПоследнейОшибки</DataPath>
<ReadOnly>true</ReadOnly>
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Последняя ошибка</v8:content>
</v8:item>
</Title>
<TitleLocation>Top</TitleLocation>
<Height>3</Height>
<AutoMaxHeight>false</AutoMaxHeight>
<VerticalStretch>false</VerticalStretch>
<MultiLine>true</MultiLine>
<ContextMenu name="ТекстПоследнейОшибкиКонтекстноеМеню" id="158"/>
<ExtendedTooltip name="ТекстПоследнейОшибкиРасширеннаяПодсказка" id="159"/>
</InputField>
<Pages name="ГруппаСтраницы" id="70">
<Title>
<v8:item>
@@ -182,6 +165,9 @@
<ContextMenu name="ПроблемныеСерииУправлениеПоискомКонтекстноеМеню" id="29"/>
<ExtendedTooltip name="ПроблемныеСерииУправлениеПоискомРасширеннаяПодсказка" id="30"/>
</SearchControlAddition>
<Events>
<Event name="OnActivateRow">ПроблемныеСерииПриАктивизацииСтроки</Event>
</Events>
<ChildItems>
<CheckBoxField name="ПроблемныеСерииОтметка" id="31">
<DataPath>Объект.ПроблемныеСерии.Отметка</DataPath>
@@ -307,6 +293,19 @@
</InputField>
</ChildItems>
</Table>
<InputField name="UUIDВыбраннойСерии" id="193">
<DataPath>UUIDВыбраннойСерии</DataPath>
<ReadOnly>true</ReadOnly>
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>UUID выбранной серии</v8:content>
</v8:item>
</Title>
<TitleLocation>Top</TitleLocation>
<ContextMenu name="UUIDВыбраннойСерииКонтекстноеМеню" id="194"/>
<ExtendedTooltip name="UUIDВыбраннойСерииРасширеннаяПодсказка" id="195"/>
</InputField>
</ChildItems>
</Page>
<Page name="СтраницаДубли" id="74">
@@ -516,6 +515,34 @@
</Table>
</ChildItems>
</Page>
<Page name="СтраницаОтчетность" id="196">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Отчетность</v8:content>
</v8:item>
</Title>
<ExtendedTooltip name="СтраницаОтчетностьРасширеннаяПодсказка" id="197"/>
<ChildItems>
<InputField name="ТекстПоследнейОшибки" id="157">
<DataPath>ТекстПоследнейОшибки</DataPath>
<ReadOnly>true</ReadOnly>
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Последняя ошибка</v8:content>
</v8:item>
</Title>
<TitleLocation>Top</TitleLocation>
<Height>3</Height>
<AutoMaxHeight>false</AutoMaxHeight>
<VerticalStretch>false</VerticalStretch>
<MultiLine>true</MultiLine>
<ContextMenu name="ТекстПоследнейОшибкиКонтекстноеМеню" id="158"/>
<ExtendedTooltip name="ТекстПоследнейОшибкиРасширеннаяПодсказка" id="159"/>
</InputField>
</ChildItems>
</Page>
</ChildItems>
</Pages>
</ChildItems>
@@ -558,6 +585,21 @@
<Field>ТолькоСОстатком</Field>
</Save>
</Attribute>
<Attribute name="UUIDВыбраннойСерии" id="4">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>UUID выбранной серии</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>xs:string</v8:Type>
<v8:StringQualifiers>
<v8:Length>0</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers>
</Type>
</Attribute>
</Attributes>
<Commands>
<Command name="НайтиПроблемы" id="1">
@@ -2,12 +2,16 @@
// Заполнение номера — из наименования; при пустом номере и наличии срока — a-YYMMDD (#17).
// Дубли: вид + номер + ГоденДо (ДатаПроизводства в ключ не входит).
&НаКлиенте
Перем ПоследняяАктивированнаяСерия;
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Объект.РежимТест = Истина;
UUIDВыбраннойСерии = "";
КонецПроцедуры
@@ -26,6 +30,8 @@
КонецПопытки;
ОчиститьТекстПоследнейОшибки();
ПрименитьОтборПроблемныхСерий();
ПоследняяАктивированнаяСерия = Неопределено;
ОбновитьUUIDВыбраннойСерии();
ПоказатьОповещениеПользователя("Проверка серий", ,
"Найдено проблем: " + Формат(Количество, "ЧН=0; ЧГ=0"));
@@ -81,6 +87,7 @@
Формат(Результат.Исправлено, "ЧН=0; ЧГ=0"),
Формат(Результат.Ошибок, "ЧН=0; ЧГ=0"),
?(Объект.РежимТест, " (тест)", ""));
ОбновитьUUIDВыбраннойСерии();
ПоказатьОповещениеПользователя("Проверка серий", , Текст);
КонецПроцедуры
@@ -105,6 +112,7 @@
Возврат;
КонецПопытки;
ОчиститьТекстПоследнейОшибки();
ОбновитьUUIDВыбраннойСерии();
ПоказатьОповещениеПользователя("Проверка серий", ,
"Заполнено полей в строках: " + Формат(Количество, "ЧН=0; ЧГ=0"));
@@ -130,6 +138,7 @@
Возврат;
КонецПопытки;
ОчиститьТекстПоследнейОшибки();
ОбновитьUUIDВыбраннойСерии();
ПоказатьОповещениеПользователя("Проверка серий", ,
СтрШаблон("Предложений: номер %1, годен до %2, наименование %3, номенклатура %4",
Формат(Результат.Номеров, "ЧН=0; ЧГ=0"),
@@ -168,6 +177,28 @@
ПрименитьОтборПроблемныхСерий();
КонецПроцедуры
&НаКлиенте
Процедура ПроблемныеСерииПриАктивизацииСтроки(Элемент)
ТекущаяСтрока = ТекущаяСтрокаПроблемнойСерии();
Если ТекущаяСтрока = Неопределено Тогда
UUIDВыбраннойСерии = "";
ПоследняяАктивированнаяСерия = Неопределено;
Возврат;
КонецЕсли;
ОбновитьUUIDВыбраннойСерии();
Если ЗначениеЗаполнено(ПоследняяАктивированнаяСерия)
И ПоследняяАктивированнаяСерия = ТекущаяСтрока.Серия Тогда
ОткрытьФормуСерии(ТекущаяСтрока.Серия);
ПоследняяАктивированнаяСерия = Неопределено;
Возврат;
КонецЕсли;
ПоследняяАктивированнаяСерия = ТекущаяСтрока.Серия;
КонецПроцедуры
&НаКлиенте
Процедура Отметить(Команда)
УстановитьОтметкуВыделенныхСтрок("ПроблемныеСерии", Истина);
@@ -333,6 +364,41 @@
КонецФункции
&НаКлиенте
Функция ТекущаяСтрокаПроблемнойСерии()
Если Элементы.ПроблемныеСерии.ТекущиеДанные = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Возврат Элементы.ПроблемныеСерии.ТекущиеДанные;
КонецФункции
&НаКлиенте
Процедура ОбновитьUUIDВыбраннойСерии()
ТекущаяСтрока = ТекущаяСтрокаПроблемнойСерии();
Если ТекущаяСтрока = Неопределено Или Не ЗначениеЗаполнено(ТекущаяСтрока.Серия) Тогда
UUIDВыбраннойСерии = "";
Возврат;
КонецЕсли;
UUIDВыбраннойСерии = НРег(XMLСтрока(ТекущаяСтрока.Серия.УникальныйИдентификатор()));
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФормуСерии(Серия)
Если Не ЗначениеЗаполнено(Серия) Тогда
Возврат;
КонецЕсли;
ОткрытьФорму("Catalog.СерииНоменклатуры.Form.ФормаЭлемента", Новый Структура("Ключ", Серия));
КонецПроцедуры
&НаКлиенте
Процедура УстановитьОтметкуВыделенныхСтрок(ИмяТаблицы, Отметка)
@@ -479,7 +545,7 @@
Процедура ДобавитьСтрокуПроблемы(ДанныеСтроки, НомерСтроки, ОстаткиИНоменклатура)
НовСтр = Объект.ПроблемныеСерии.Добавить();
НовСтр.Отметка = Истина;
НовСтр.Отметка = Ложь;
НовСтр.ПорядковыйНомер = НомерСтроки;
НовСтр.НомерГруппы = 0;
НовСтр.КоличествоВГруппе = 0;
@@ -685,43 +751,39 @@
ГоденДоЗаписи = ГоденДоДляИсправленияСтроки(Стр);
НаименованиеЗаписи = НаименованиеДляИсправленияСтроки(Стр);
Если Не ЗначениеЗаполнено(СокрЛП(Стр.Номер))
И ЗначениеЗаполнено(НомерЗаписи) Тогда
ЕстьИзменения = Истина;
КонецЕсли;
Если СтрНайти(Стр.Проблема, "Пустой срок годности") > 0
И СрокГодностиЗаполнен(ГоденДоЗаписи) Тогда
ЕстьИзменения = Истина;
КонецЕсли;
Если Не ЗначениеЗаполнено(СокрЛП(Стр.Наименование))
И ЗначениеЗаполнено(НаименованиеЗаписи) Тогда
ЕстьИзменения = Истина;
КонецЕсли;
Если Не ЕстьИзменения Тогда
Стр.Комментарий = "Нет данных для исправления";
Продолжить;
КонецЕсли;
Попытка
ОбСерии = Стр.Серия.ПолучитьОбъект();
ЕстьИзменения = ТребуетсяЗаписьИсправленияСерии(
ОбСерии, НомерЗаписи, ГоденДоЗаписи, НаименованиеЗаписи);
Если Не ЕстьИзменения Тогда
Стр.Комментарий = "Нет данных для исправления";
Продолжить;
КонецЕсли;
Если Объект.РежимТест Тогда
Если ЗначениеЗаполнено(НомерЗаписи) Тогда
Стр.Номер = НомерЗаписи;
КонецЕсли;
Если СрокГодностиЗаполнен(ГоденДоЗаписи) Тогда
Стр.ГоденДо = ГоденДоЗаписи;
КонецЕсли;
Если ЗначениеЗаполнено(НаименованиеЗаписи) Тогда
Стр.Наименование = НаименованиеЗаписи;
КонецЕсли;
Стр.Исправлено = Истина;
Результат.Исправлено = Результат.Исправлено + 1;
СинхронизироватьСтрокиСерии(Стр.Серия, Стр);
Иначе
ОбСерии = Стр.Серия.ПолучитьОбъект();
Если Не ЗначениеЗаполнено(СокрЛП(Стр.Номер))
И ЗначениеЗаполнено(НомерЗаписи) Тогда
Если ЗначениеЗаполнено(НомерЗаписи)
И СокрЛП(ОбСерии.Номер) <> НомерЗаписи Тогда
ОбСерии.Номер = НомерЗаписи;
КонецЕсли;
Если СтрНайти(Стр.Проблема, "Пустой срок годности") > 0
И СрокГодностиЗаполнен(ГоденДоЗаписи) Тогда
Если СрокГодностиЗаполнен(ГоденДоЗаписи)
И ОбСерии.ГоденДо <> ГоденДоЗаписи Тогда
ОбСерии.ГоденДо = ГоденДоЗаписи;
КонецЕсли;
Если Не ЗначениеЗаполнено(СокрЛП(Стр.Наименование))
И ЗначениеЗаполнено(НаименованиеЗаписи) Тогда
Если ЗначениеЗаполнено(НаименованиеЗаписи)
И СокрЛП(ОбСерии.Наименование) <> НаименованиеЗаписи Тогда
ОбСерии.Наименование = НаименованиеЗаписи;
КонецЕсли;
ОбСерии.Записать();
@@ -754,6 +816,28 @@
КонецФункции
&НаСервере
Функция ТребуетсяЗаписьИсправленияСерии(ОбСерии, НомерЗаписи, ГоденДоЗаписи, НаименованиеЗаписи)
Если ЗначениеЗаполнено(НомерЗаписи)
И СокрЛП(ОбСерии.Номер) <> НомерЗаписи Тогда
Возврат Истина;
КонецЕсли;
Если СрокГодностиЗаполнен(ГоденДоЗаписи)
И ОбСерии.ГоденДо <> ГоденДоЗаписи Тогда
Возврат Истина;
КонецЕсли;
Если ЗначениеЗаполнено(НаименованиеЗаписи)
И СокрЛП(ОбСерии.Наименование) <> НаименованиеЗаписи Тогда
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции
&НаСервере
Функция ГоденДоДляИсправленияСтроки(Стр)