diff --git a/CHANGELOG.md b/CHANGELOG.md index ba285ad..f388917 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,15 @@ --- +## 1.3.1.117 (2026-09-04) + +### РК_ЗагрузкаОстатков — заполнение «Документы ввода» и диагностика create (#40) + +- ТЧ `СозданныеДокументы` на форме заполняется явно из результата создания (не только через `ЗначениеВРеквизитФормы`). +- Если документов 0 — предупреждение: нужно сначала «Сопоставить». +- В лог create: диагностика ТЧ (всего / сопоставлено / готово qty>0) для own и comm. +- Проверка успешного создания документа: `ДокументОбъект` + заполненная ссылка. + ## 1.3.1.116 (2026-09-04) ### РК_ЗагрузкаОстатков — детальный лог и CSV созданных документов (#29, #30) diff --git a/VERSION b/VERSION index 0d17019..393a7c1 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.3.1.116 +1.3.1.117 diff --git a/src/ConfigDumpInfo.xml b/src/ConfigDumpInfo.xml index 6deb164..6ec6012 100644 --- a/src/ConfigDumpInfo.xml +++ b/src/ConfigDumpInfo.xml @@ -50,14 +50,14 @@ - + - + @@ -204,9 +204,9 @@ - - - + + + diff --git a/src/Configuration.xml b/src/Configuration.xml index 4d811e2..d21b737 100644 --- a/src/Configuration.xml +++ b/src/Configuration.xml @@ -62,7 +62,7 @@ Role.РК_ОсновнаяРоль - 1.3.1.116 + 1.3.1.117 Language.Русский diff --git a/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl b/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl index 5324e1c..2890cb7 100644 --- a/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl +++ b/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl @@ -436,6 +436,8 @@ Результат.Вставить("ТекстТега", ""); Результат.Вставить("Протокол", Новый Массив); Результат.Вставить("ТекстCSVДокументов", ""); + Результат.Вставить("СтрокиСозданныхДокументов", Новый Массив); + Результат.Вставить("ДиагностикаСопоставления", ""); Если Не ЗначениеЗаполнено(Организация) Тогда ВызватьИсключение "Укажите организацию для документов ввода остатков"; @@ -457,6 +459,10 @@ СтрокиCSVДокументов = Новый Массив; СтрокиCSVДокументов.Добавить(ЗаголовокCSVСозданныхДокументов()); + ТекстДиагностики = ТекстДиагностикиСопоставленияДляСозданияДокументов(); + Результат.ДиагностикаСопоставления = ТекстДиагностики; + ДобавитьСтрокуПротокола(Результат, ТекстДиагностики); + СтрокиПоСкладу = СгруппироватьСопоставленныеСтрокиПоСкладу(); СтрокиКомиссии = СгруппироватьСопоставленныеСтрокиКомиссии(); ДобавитьСтрокуПротокола(Результат, "Групп own (складов): " + Формат(СтрокиПоСкладу.Количество(), "ЧН=0; ЧГ=0") @@ -488,7 +494,7 @@ Результат.СозданоДокументов = Результат.СозданоДокументов + 1; Результат.СтрокВДокументах = Результат.СтрокВДокументах + СтрокиСклада.Количество(); ДобавитьВСозданныеДокументы(Неопределено, "Собственные", СкладДок, - Неопределено, Неопределено, СтрокиСклада, ТекстТега + ", склад " + СокрЛП(Строка(СкладДок)), Истина); + Неопределено, Неопределено, СтрокиСклада, ТекстТега + ", склад " + СокрЛП(Строка(СкладДок)), Истина, Результат); ДобавитьСтрокуПротокола(Результат, "[TEST] " + Контекст); ДобавитьСтрокиCSVДокументаИзВходящих(СтрокиCSVДокументов, "own", Неопределено, СкладДок, Неопределено, Неопределено, Неопределено, СтрокиСклада, Истина); @@ -497,7 +503,7 @@ ДобавитьСтрокуПротокола(Результат, "[FILL] " + Контекст); Док = СоздатьДокументПоСкладу(СкладДок, СтрокиСклада, ТекстТега); - Если ЗначениеЗаполнено(Док) Тогда + Если ДокументВводаСозданУспешно(Док) Тогда Результат.СозданоДокументов = Результат.СозданоДокументов + 1; Результат.СтрокВДокументах = Результат.СтрокВДокументах + Док.Товары.Количество(); Для Каждого СтрТ Из СтрокиСклада Цикл @@ -505,7 +511,7 @@ СтрТ.ЗагруженоВДокумент = Истина; КонецЦикла; ДобавитьВСозданныеДокументы(Док.Ссылка, "Собственные", СкладДок, - Неопределено, Неопределено, СтрокиСклада, Док.Комментарий, Ложь); + Неопределено, Неопределено, СтрокиСклада, Док.Комментарий, Ложь, Результат); ДобавитьПротоколСозданногоДокумента(Результат, Док, Контекст, "own"); ДобавитьСтрокиCSVДокументаИзОбъекта(СтрокиCSVДокументов, "own", Док, СтрокиСклада); ДобавитьСтрокуПротокола(Результат, "[POST] " + ПредставлениеДокументаДляПротокола(Док) @@ -539,7 +545,7 @@ Результат.СтрокКомиссии = Результат.СтрокКомиссии + СтрокиГруппы.Количество(); ДобавитьВСозданныеДокументы(Неопределено, "Комиссия 2.5", Неопределено, Первая.Соглашение, Первая.Партнер, СтрокиГруппы, - ТекстТега + ", комиссия 2.5, " + СокрЛП(Строка(Первая.Партнер)), Истина); + ТекстТега + ", комиссия 2.5, " + СокрЛП(Строка(Первая.Партнер)), Истина, Результат); ДобавитьСтрокуПротокола(Результат, "[TEST] " + Контекст); ДобавитьСтрокиCSVДокументаИзВходящих(СтрокиCSVДокументов, "comm", Неопределено, Неопределено, Первая.Партнер, Первая.Соглашение, Первая.Договор, СтрокиГруппы, Истина); @@ -548,7 +554,7 @@ ДобавитьСтрокуПротокола(Результат, "[FILL] " + Контекст); Док = СоздатьДокументКомиссии(СтрокиГруппы, ТекстТега); - Если ЗначениеЗаполнено(Док) Тогда + Если ДокументВводаСозданУспешно(Док) Тогда Результат.СозданоДокументовКомиссии = Результат.СозданоДокументовКомиссии + 1; Результат.СтрокКомиссии = Результат.СтрокКомиссии + Док.Товары.Количество(); Для Каждого СтрТ Из СтрокиГруппы Цикл @@ -556,7 +562,7 @@ СтрТ.ЗагруженоВДокумент = Истина; КонецЦикла; ДобавитьВСозданныеДокументы(Док.Ссылка, "Комиссия 2.5", Неопределено, - Док.СоглашениеСКомиссионером, Док.Партнер, СтрокиГруппы, Док.Комментарий, Ложь); + Док.СоглашениеСКомиссионером, Док.Партнер, СтрокиГруппы, Док.Комментарий, Ложь, Результат); ДобавитьПротоколСозданногоДокумента(Результат, Док, Контекст, "comm"); ДобавитьСтрокиCSVДокументаИзОбъекта(СтрокиCSVДокументов, "comm", Док, СтрокиГруппы); ДобавитьСтрокуПротокола(Результат, "[POST] " + ПредставлениеДокументаДляПротокола(Док) @@ -818,7 +824,7 @@ КонецФункции -Процедура ДобавитьВСозданныеДокументы(ДокументСсылка, ВидОстатков, Склад, Соглашение, Партнер, СтрокиТоваров, Комментарий, ЭтоТест) +Процедура ДобавитьВСозданныеДокументы(ДокументСсылка, ВидОстатков, Склад, Соглашение, Партнер, СтрокиТоваров, Комментарий, ЭтоТест, Результат = Неопределено) НовСтр = СозданныеДокументы.Добавить(); Если ЗначениеЗаполнено(ДокументСсылка) Тогда @@ -843,8 +849,86 @@ НовСтр.Комментарий = Комментарий; НовСтр.ЭтоТест = ЭтоТест; + Если ТипЗнч(Результат) = Тип("Структура") Тогда + Если Не Результат.Свойство("СтрокиСозданныхДокументов") + Или ТипЗнч(Результат.СтрокиСозданныхДокументов) <> Тип("Массив") Тогда + Результат.Вставить("СтрокиСозданныхДокументов", Новый Массив); + КонецЕсли; + СтрРез = Новый Структура; + СтрРез.Вставить("Документ", ?(ЗначениеЗаполнено(ДокументСсылка), ДокументСсылка, Неопределено)); + СтрРез.Вставить("ВидОстатков", ВидОстатков); + СтрРез.Вставить("Склад", ?(ЗначениеЗаполнено(Склад), Склад, Неопределено)); + СтрРез.Вставить("Соглашение", ?(ЗначениеЗаполнено(Соглашение), Соглашение, Неопределено)); + СтрРез.Вставить("Партнер", ?(ЗначениеЗаполнено(Партнер), Партнер, Неопределено)); + СтрРез.Вставить("КоличествоСтрок", НовСтр.КоличествоСтрок); + СтрРез.Вставить("КоличествоТоваров", НовСтр.КоличествоТоваров); + СтрРез.Вставить("Комментарий", Комментарий); + СтрРез.Вставить("ЭтоТест", ЭтоТест); + Результат.СтрокиСозданныхДокументов.Добавить(СтрРез); + КонецЕсли; + КонецПроцедуры +Функция ДокументВводаСозданУспешно(Док) + + Если Док = Неопределено Или Док = Null Тогда + Возврат Ложь; + КонецЕсли; + Попытка + Возврат ТипЗнч(Док) = Тип("ДокументОбъект.ВводОстатковТоваров") И ЗначениеЗаполнено(Док.Ссылка); + Исключение + Возврат ЗначениеЗаполнено(Док); + КонецПопытки; + +КонецФункции + +Функция ТекстДиагностикиСопоставленияДляСозданияДокументов() + + OwnВсего = ВходящиеСобственныеТовары.Количество(); + OwnСоп = 0; + OwnСопСкладНом = 0; + OwnГотово = 0; + Для Каждого СтрТ Из ВходящиеСобственныеТовары Цикл + Если СтрТ.Сопоставлено Тогда + OwnСоп = OwnСоп + 1; + Если ЗначениеЗаполнено(СтрТ.Склад) И ЗначениеЗаполнено(СтрТ.Номенклатура) Тогда + OwnСопСкладНом = OwnСопСкладНом + 1; + Если СтрТ.Количество > 0 Тогда + OwnГотово = OwnГотово + 1; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + CommВсего = ВходящиеКомиссионныеТовары.Количество(); + CommСоп = 0; + CommСопНСИ = 0; + CommГотово = 0; + Для Каждого СтрТ Из ВходящиеКомиссионныеТовары Цикл + Если СтрТ.Сопоставлено Тогда + CommСоп = CommСоп + 1; + Если ЗначениеЗаполнено(СтрТ.Номенклатура) + И ЗначениеЗаполнено(СтрТ.Партнер) + И ЗначениеЗаполнено(СтрТ.Соглашение) Тогда + CommСопНСИ = CommСопНСИ + 1; + Если СтрТ.Количество > 0 Тогда + CommГотово = CommГотово + 1; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат "Диагностика ТЧ: own всего=" + Формат(OwnВсего, "ЧН=0; ЧГ=0") + + ", соп=" + Формат(OwnСоп, "ЧН=0; ЧГ=0") + + ", соп+склад+ном=" + Формат(OwnСопСкладНом, "ЧН=0; ЧГ=0") + + ", готово(qty>0)=" + Формат(OwnГотово, "ЧН=0; ЧГ=0") + + "; comm всего=" + Формат(CommВсего, "ЧН=0; ЧГ=0") + + ", соп=" + Формат(CommСоп, "ЧН=0; ЧГ=0") + + ", соп+НСИ=" + Формат(CommСопНСИ, "ЧН=0; ЧГ=0") + + ", готово(qty>0)=" + Формат(CommГотово, "ЧН=0; ЧГ=0"); + +КонецФункции + Функция ТегКомментарияДокументов() Суффикс = Формат(ДатаДокументовВвода, "ДФ=yyyyMMdd"); diff --git a/src/DataProcessors/РК_ЗагрузкаОстатков/Forms/Форма/Ext/Form/Module.bsl b/src/DataProcessors/РК_ЗагрузкаОстатков/Forms/Форма/Ext/Form/Module.bsl index 59c0697..54a86ca 100644 --- a/src/DataProcessors/РК_ЗагрузкаОстатков/Forms/Форма/Ext/Form/Module.bsl +++ b/src/DataProcessors/РК_ЗагрузкаОстатков/Forms/Форма/Ext/Form/Module.bsl @@ -250,12 +250,19 @@ Текст = РезультатВызова.Текст; ТекстЛога = РезультатВызова.ТекстЛога; ТекстCSVДокументов = РезультатВызова.ТекстCSVДокументов; + КоличествоВСписке = РезультатВызова.КоличествоВСписке; Исключение ПоказатьПредупреждение(, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат; КонецПопытки; Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаСозданныеДокументы; ПоказатьОповещениеПользователя("Документы ввода", , Текст); + Если КоличествоВСписке = 0 Тогда + ПоказатьПредупреждение(, + "Документы не созданы: нет сопоставленных строк с количеством > 0." + Символы.ПС + + "Сначала выполните «Сопоставить» (Да — запись), затем снова «Создать документы»." + Символы.ПС + + Символы.ПС + Текст); + КонецЕсли; Если ПисатьЛогиВПапку Тогда ЗаписатьЛогПрогона(ТекстЛога, "create_docs"); Если Не ПустаяСтрока(ТекстCSVДокументов) Тогда @@ -767,16 +774,45 @@ Результат = ОбъектОбработки.СоздатьДокументыВводаОстатков(РежимТест); ЗначениеВРеквизитФормы(ОбъектОбработки, "Объект"); + // Явно переносим список созданных документов на форму (на случай сбоя копирования ТЧ). + Объект.СозданныеДокументы.Очистить(); + Если ТипЗнч(Результат.СтрокиСозданныхДокументов) = Тип("Массив") Тогда + Для Каждого СтрРез Из Результат.СтрокиСозданныхДокументов Цикл + НовСтр = Объект.СозданныеДокументы.Добавить(); + Если СтрРез.Свойство("Документ") И ЗначениеЗаполнено(СтрРез.Документ) Тогда + НовСтр.Документ = СтрРез.Документ; + КонецЕсли; + НовСтр.ВидОстатков = СтрРез.ВидОстатков; + Если СтрРез.Свойство("Склад") И ЗначениеЗаполнено(СтрРез.Склад) Тогда + НовСтр.Склад = СтрРез.Склад; + КонецЕсли; + Если СтрРез.Свойство("Соглашение") И ЗначениеЗаполнено(СтрРез.Соглашение) Тогда + НовСтр.Соглашение = СтрРез.Соглашение; + КонецЕсли; + Если СтрРез.Свойство("Партнер") И ЗначениеЗаполнено(СтрРез.Партнер) Тогда + НовСтр.Партнер = СтрРез.Партнер; + КонецЕсли; + НовСтр.КоличествоСтрок = СтрРез.КоличествоСтрок; + НовСтр.КоличествоТоваров = СтрРез.КоличествоТоваров; + НовСтр.Комментарий = СтрРез.Комментарий; + НовСтр.ЭтоТест = СтрРез.ЭтоТест; + КонецЦикла; + КонецЕсли; + Текст = СтрШаблон( - "Собственные док.: %1 (%2 стр.); комиссия 2.5: %3 (%4 стр.); удалено: %5; ошибок: %6; тег: %7%8", + "Собственные док.: %1 (%2 стр.); комиссия 2.5: %3 (%4 стр.); удалено: %5; ошибок: %6; в списке формы: %7; тег: %8%9", Формат(Результат.СозданоДокументов, "ЧН=0; ЧГ=0"), Формат(Результат.СтрокВДокументах, "ЧН=0; ЧГ=0"), Формат(Результат.СозданоДокументовКомиссии, "ЧН=0; ЧГ=0"), Формат(Результат.СтрокКомиссии, "ЧН=0; ЧГ=0"), Формат(Результат.УдаленоДокументов, "ЧН=0; ЧГ=0"), Формат(Результат.Ошибок, "ЧН=0; ЧГ=0"), + Формат(Объект.СозданныеДокументы.Количество(), "ЧН=0; ЧГ=0"), Результат.ТекстТега, ?(РежимТест, " (тест)", "")); + Если Не ПустаяСтрока(Результат.ДиагностикаСопоставления) Тогда + Текст = Текст + Символы.ПС + Результат.ДиагностикаСопоставления; + КонецЕсли; ТекстЛога = ""; Если ТипЗнч(Результат.Протокол) = Тип("Массив") Тогда @@ -788,7 +824,8 @@ ТекстCSVДокументов = Результат.ТекстCSVДокументов; КонецЕсли; - Возврат Новый Структура("Текст, ТекстЛога, ТекстCSVДокументов", Текст, ТекстЛога, ТекстCSVДокументов); + Возврат Новый Структура("Текст, ТекстЛога, ТекстCSVДокументов, КоличествоВСписке", + Текст, ТекстЛога, ТекстCSVДокументов, Объект.СозданныеДокументы.Количество()); КонецФункции