diff --git a/CHANGELOG.md b/CHANGELOG.md index d3de6dd..8b02eb9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,14 @@ --- +## 1.3.1.89 (2026-08-19) + +### РК_ПроверкаСерий — UUID в форме и исправление записи (#17) + +- На странице заполнения под таблицей `ПроблемныеСерии` добавлено отображение UUID выбранной серии, а `ТекстПоследнейОшибки` перенесён на отдельную страницу `Отчетность`. +- Новые строки таблицы проблем теперь создаются с `Отметка = Ложь`. +- `Исправить отмеченные` теперь определяет необходимость записи по реальному объекту `СерииНоменклатуры` из базы, а не по уже заполненной строке формы после `ЗаполнитьПоПредложениям`. + ## 1.3.1.88 (2026-08-19) ### РК_ПроверкаСерий — НГ/КГ по ссылке серии (#17) diff --git a/VERSION b/VERSION index 3e1b989..e881e6e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.3.1.88 +1.3.1.89 diff --git a/src/Configuration.xml b/src/Configuration.xml index 2319be5..ff80032 100644 --- a/src/Configuration.xml +++ b/src/Configuration.xml @@ -62,7 +62,7 @@ Role.РК_ОсновнаяРоль - 1.3.1.88 + 1.3.1.89 Language.Русский diff --git a/src/DataProcessors/РК_ПроверкаСерий/Forms/Форма/Ext/Form.xml b/src/DataProcessors/РК_ПроверкаСерий/Forms/Форма/Ext/Form.xml index 1105996..cb6a03f 100644 --- a/src/DataProcessors/РК_ПроверкаСерий/Forms/Форма/Ext/Form.xml +++ b/src/DataProcessors/РК_ПроверкаСерий/Forms/Форма/Ext/Form.xml @@ -26,23 +26,6 @@ - - ТекстПоследнейОшибки - true - - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Последняя ошибка</v8:content> - </v8:item> - - Top - 3 - false - false - true - - - <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> + + Top + + + @@ -516,6 +515,34 @@ + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отчетность</v8:content> + </v8:item> + + + + + ТекстПоследнейОшибки + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Последняя ошибка</v8:content> + </v8:item> + + Top + 3 + false + false + true + + + + + @@ -558,6 +585,21 @@ ТолькоСОстатком + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>UUID выбранной серии</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + diff --git a/src/DataProcessors/РК_ПроверкаСерий/Forms/Форма/Ext/Form/Module.bsl b/src/DataProcessors/РК_ПроверкаСерий/Forms/Форма/Ext/Form/Module.bsl index 3337cd1..7d9c91e 100644 --- a/src/DataProcessors/РК_ПроверкаСерий/Forms/Форма/Ext/Form/Module.bsl +++ b/src/DataProcessors/РК_ПроверкаСерий/Forms/Форма/Ext/Form/Module.bsl @@ -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 @@ КонецФункции +&НаСервере +Функция ТребуетсяЗаписьИсправленияСерии(ОбСерии, НомерЗаписи, ГоденДоЗаписи, НаименованиеЗаписи) + + Если ЗначениеЗаполнено(НомерЗаписи) + И СокрЛП(ОбСерии.Номер) <> НомерЗаписи Тогда + Возврат Истина; + КонецЕсли; + + Если СрокГодностиЗаполнен(ГоденДоЗаписи) + И ОбСерии.ГоденДо <> ГоденДоЗаписи Тогда + Возврат Истина; + КонецЕсли; + + Если ЗначениеЗаполнено(НаименованиеЗаписи) + И СокрЛП(ОбСерии.Наименование) <> НаименованиеЗаписи Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + &НаСервере Функция ГоденДоДляИсправленияСтроки(Стр)