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Документов, Объект.СозданныеДокументы.Количество());
КонецФункции