diff --git a/CHANGELOG.md b/CHANGELOG.md index 6136a9a..ba285ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,15 @@ --- +## 1.3.1.116 (2026-09-04) + +### РК_ЗагрузкаОстатков — детальный лог и CSV созданных документов (#29, #30) + +- При «Писать логи в папку»: лог сопоставления (`match`) с `[SERIES]` (номер, имя, ГоденДо, ДатаПроизводства, номенклатура). +- Лог «Создать документы»: `[WRITE]`/`[DOC]` (номер, дата, шапка), до 30 строк `[SPEC]`, `[POST]` (проведение пока не выполняется командой). +- CSV спецификации созданных документов: `rk_load_balances_docs_*.csv` (own/comm, артикул, серии, суммы/НДС, GUID источника). +- `[WARN]`, если нет сопоставленных строк — документы не создаются. + ## 1.3.1.115 (2026-09-03) ### РК_ЗагрузкаОстатков — автовыгрузка CSV таблиц (#29) diff --git a/VERSION b/VERSION index b2c44af..0d17019 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.3.1.115 +1.3.1.116 diff --git a/src/ConfigDumpInfo.xml b/src/ConfigDumpInfo.xml index 3620676..6deb164 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 8344948..4d811e2 100644 --- a/src/Configuration.xml +++ b/src/Configuration.xml @@ -62,7 +62,7 @@ Role.РК_ОсновнаяРоль - 1.3.1.115 + 1.3.1.116 Language.Русский diff --git a/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl b/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl index e605d4d..5324e1c 100644 --- a/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl +++ b/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl @@ -113,6 +113,13 @@ Результат.Вставить("НеСопоставлено", 0); Результат.Вставить("СозданоСерий", 0); Результат.Вставить("СозданоХарактеристик", 0); + Результат.Вставить("Протокол", Новый Массив); + + ДобавитьСтрокуПротокола(Результат, "=== Сопоставление own ==="); + ДобавитьСтрокуПротокола(Результат, "Режим: " + ?(РежимТест, "тест (без создания)", "запись")); + ДобавитьСтрокуПротокола(Результат, "Строк во входящих: " + + Формат(ВходящиеСобственныеТовары.Количество(), "ЧН=0; ЧГ=0") + + "; заглушки серий: " + ?(СоздаватьЗаглушкиСерий, "вкл", "выкл")); СуффиксДатыСер = Формат(?(ЗначениеЗаполнено(ДатаДокументовВвода), ДатаДокументовВвода, ДатаОстатков), "ДФ=yyyyMMdd"); Если ПустаяСтрока(СуффиксДатыСер) Тогда @@ -176,6 +183,12 @@ КонецЦикла; + ДобавитьСтрокуПротокола(Результат, "=== Итог own ==="); + ДобавитьСтрокуПротокола(Результат, "Сопоставлено: " + Формат(Результат.Сопоставлено, "ЧН=0; ЧГ=0") + + "; не: " + Формат(Результат.НеСопоставлено, "ЧН=0; ЧГ=0") + + "; серий создано: " + Формат(Результат.СозданоСерий, "ЧН=0; ЧГ=0") + + "; характеристик: " + Формат(Результат.СозданоХарактеристик, "ЧН=0; ЧГ=0")); + Возврат Результат; КонецФункции @@ -190,6 +203,13 @@ Результат.Вставить("НеСопоставлено", 0); Результат.Вставить("СозданоСерий", 0); Результат.Вставить("СозданоХарактеристик", 0); + Результат.Вставить("Протокол", Новый Массив); + + ДобавитьСтрокуПротокола(Результат, "=== Сопоставление comm ==="); + ДобавитьСтрокуПротокола(Результат, "Режим: " + ?(РежимТест, "тест (без создания)", "запись")); + ДобавитьСтрокуПротокола(Результат, "Строк во входящих: " + + Формат(ВходящиеКомиссионныеТовары.Количество(), "ЧН=0; ЧГ=0") + + "; заглушки серий: " + ?(СоздаватьЗаглушкиСерий, "вкл", "выкл")); СуффиксДатыСер = Формат(?(ЗначениеЗаполнено(ДатаДокументовВвода), ДатаДокументовВвода, ДатаОстатков), "ДФ=yyyyMMdd"); Если ПустаяСтрока(СуффиксДатыСер) Тогда @@ -273,6 +293,12 @@ КонецЦикла; + ДобавитьСтрокуПротокола(Результат, "=== Итог comm ==="); + ДобавитьСтрокуПротокола(Результат, "Сопоставлено: " + Формат(Результат.Сопоставлено, "ЧН=0; ЧГ=0") + + "; не: " + Формат(Результат.НеСопоставлено, "ЧН=0; ЧГ=0") + + "; серий создано: " + Формат(Результат.СозданоСерий, "ЧН=0; ЧГ=0") + + "; характеристик: " + Формат(Результат.СозданоХарактеристик, "ЧН=0; ЧГ=0")); + Возврат Результат; КонецФункции @@ -409,6 +435,7 @@ Результат.Вставить("Ошибок", 0); Результат.Вставить("ТекстТега", ""); Результат.Вставить("Протокол", Новый Массив); + Результат.Вставить("ТекстCSVДокументов", ""); Если Не ЗначениеЗаполнено(Организация) Тогда ВызватьИсключение "Укажите организацию для документов ввода остатков"; @@ -424,14 +451,20 @@ ДобавитьСтрокуПротокола(Результат, "Организация: " + СокрЛП(Строка(Организация))); ДобавитьСтрокуПротокола(Результат, "Дата документов: " + Формат(ДатаДокументовВвода, "ДЛФ=DT")); ДобавитьСтрокуПротокола(Результат, "Тег: " + ТекстТега); - ДобавитьСтрокуПротокола(Результат, "Примечание: команда выполняет Запись документов, проведение — отдельно."); + ДобавитьСтрокуПротокола(Результат, "Примечание: команда выполняет Запись документов; проведение — отдельным шагом (см. [POST])."); СозданныеДокументы.Очистить(); + СтрокиCSVДокументов = Новый Массив; + СтрокиCSVДокументов.Добавить(ЗаголовокCSVСозданныхДокументов()); СтрокиПоСкладу = СгруппироватьСопоставленныеСтрокиПоСкладу(); СтрокиКомиссии = СгруппироватьСопоставленныеСтрокиКомиссии(); ДобавитьСтрокуПротокола(Результат, "Групп own (складов): " + Формат(СтрокиПоСкладу.Количество(), "ЧН=0; ЧГ=0") + "; групп comm: " + Формат(СтрокиКомиссии.Количество(), "ЧН=0; ЧГ=0")); + Если СтрокиПоСкладу.Количество() = 0 И СтрокиКомиссии.Количество() = 0 Тогда + ДобавитьСтрокуПротокола(Результат, + "[WARN] Нет сопоставленных строк с количеством > 0 — документы не создаются. Сначала «Сопоставить»."); + КонецЕсли; Если ПерезаписатьДокументы И Не РежимТест И (СтрокиПоСкладу.Количество() > 0 Или СтрокиКомиссии.Количество() > 0) Тогда @@ -457,6 +490,8 @@ ДобавитьВСозданныеДокументы(Неопределено, "Собственные", СкладДок, Неопределено, Неопределено, СтрокиСклада, ТекстТега + ", склад " + СокрЛП(Строка(СкладДок)), Истина); ДобавитьСтрокуПротокола(Результат, "[TEST] " + Контекст); + ДобавитьСтрокиCSVДокументаИзВходящих(СтрокиCSVДокументов, "own", Неопределено, СкладДок, + Неопределено, Неопределено, Неопределено, СтрокиСклада, Истина); Продолжить; КонецЕсли; @@ -471,9 +506,10 @@ КонецЦикла; ДобавитьВСозданныеДокументы(Док.Ссылка, "Собственные", СкладДок, Неопределено, Неопределено, СтрокиСклада, Док.Комментарий, Ложь); - ДобавитьСтрокуПротокола(Результат, "[WRITE] " + Контекст - + " → " + СокрЛП(Строка(Док.Ссылка)) - + "; товаров=" + Формат(Док.Товары.Количество(), "ЧН=0; ЧГ=0")); + ДобавитьПротоколСозданногоДокумента(Результат, Док, Контекст, "own"); + ДобавитьСтрокиCSVДокументаИзОбъекта(СтрокиCSVДокументов, "own", Док, СтрокиСклада); + ДобавитьСтрокуПротокола(Результат, "[POST] " + ПредставлениеДокументаДляПротокола(Док) + + " — проведение не выполнялось (только Запись)"); Иначе ДобавитьСтрокуПротокола(Результат, "[SKIP] " + Контекст + " — пустой документ"); КонецЕсли; @@ -505,6 +541,8 @@ Первая.Соглашение, Первая.Партнер, СтрокиГруппы, ТекстТега + ", комиссия 2.5, " + СокрЛП(Строка(Первая.Партнер)), Истина); ДобавитьСтрокуПротокола(Результат, "[TEST] " + Контекст); + ДобавитьСтрокиCSVДокументаИзВходящих(СтрокиCSVДокументов, "comm", Неопределено, Неопределено, + Первая.Партнер, Первая.Соглашение, Первая.Договор, СтрокиГруппы, Истина); Продолжить; КонецЕсли; @@ -519,10 +557,10 @@ КонецЦикла; ДобавитьВСозданныеДокументы(Док.Ссылка, "Комиссия 2.5", Неопределено, Док.СоглашениеСКомиссионером, Док.Партнер, СтрокиГруппы, Док.Комментарий, Ложь); - ДобавитьСтрокуПротокола(Результат, "[WRITE] " + Контекст - + " → " + СокрЛП(Строка(Док.Ссылка)) - + "; товаров=" + Формат(Док.Товары.Количество(), "ЧН=0; ЧГ=0") - + "; договор=" + СокрЛП(Строка(Док.Договор))); + ДобавитьПротоколСозданногоДокумента(Результат, Док, Контекст, "comm"); + ДобавитьСтрокиCSVДокументаИзОбъекта(СтрокиCSVДокументов, "comm", Док, СтрокиГруппы); + ДобавитьСтрокуПротокола(Результат, "[POST] " + ПредставлениеДокументаДляПротокола(Док) + + " — проведение не выполнялось (только Запись)"); Иначе ДобавитьСтрокуПротокола(Результат, "[SKIP] " + Контекст + " — пустой документ"); КонецЕсли; @@ -534,13 +572,15 @@ КонецЦикла; + Результат.ТекстCSVДокументов = СтрСоединить(СтрокиCSVДокументов, Символы.ПС); ДобавитьСтрокуПротокола(Результат, "=== Итог ==="); ДобавитьСтрокуПротокола(Результат, "Own док.: " + Формат(Результат.СозданоДокументов, "ЧН=0; ЧГ=0") + " (" + Формат(Результат.СтрокВДокументах, "ЧН=0; ЧГ=0") + " стр.); comm: " + Формат(Результат.СозданоДокументовКомиссии, "ЧН=0; ЧГ=0") + " (" + Формат(Результат.СтрокКомиссии, "ЧН=0; ЧГ=0") + " стр.); удалено: " + Формат(Результат.УдаленоДокументов, "ЧН=0; ЧГ=0") - + "; ошибок: " + Формат(Результат.Ошибок, "ЧН=0; ЧГ=0")); + + "; ошибок: " + Формат(Результат.Ошибок, "ЧН=0; ЧГ=0") + + "; CSV строк спецификации: " + Формат(Макс(СтрокиCSVДокументов.Количество() - 1, 0), "ЧН=0; ЧГ=0")); Возврат Результат; @@ -592,6 +632,162 @@ КонецПроцедуры +Функция ПредставлениеДокументаДляПротокола(Док) + + Если Не ЗначениеЗаполнено(Док) Тогда + Возврат "(нет документа)"; + КонецЕсли; + Возврат СокрЛП(Строка(Док.Ссылка)) + + " / № " + СокрЛП(Док.Номер) + + " / " + Формат(Док.Дата, "ДЛФ=D"); + +КонецФункции + +Процедура ДобавитьПротоколСозданногоДокумента(Результат, Док, Контекст, Контур) + + ДобавитьСтрокуПротокола(Результат, "[WRITE] " + Контекст + + " → " + ПредставлениеДокументаДляПротокола(Док) + + "; товаров=" + Формат(Док.Товары.Количество(), "ЧН=0; ЧГ=0")); + ДобавитьСтрокуПротокола(Результат, "[DOC] " + Контур + + "; орг=" + СокрЛП(Строка(Док.Организация)) + + "; дата=" + Формат(Док.Дата, "ДЛФ=DT") + + "; номер=" + СокрЛП(Док.Номер) + + "; хоз=" + СокрЛП(Строка(Док.ХозяйственнаяОперация)) + + "; склад=" + СокрЛП(Строка(Док.Склад)) + + "; партнёр=" + СокрЛП(Строка(Док.Партнер)) + + "; соглашение=" + СокрЛП(Строка(Док.СоглашениеСКомиссионером)) + + "; договор=" + СокрЛП(Строка(Док.Договор)) + + "; НДС=" + СокрЛП(Строка(Док.НалогообложениеНДС)) + + "; валюта=" + СокрЛП(Строка(Док.Валюта)) + + "; комментарий=" + СокрЛП(Док.Комментарий)); + + МаксСтрокВЛог = 30; + Инд = 0; + Для Каждого СтрТов Из Док.Товары Цикл + Инд = Инд + 1; + Если Инд > МаксСтрокВЛог Тогда + ДобавитьСтрокуПротокола(Результат, "[SPEC] … ещё " + + Формат(Док.Товары.Количество() - МаксСтрокВЛог, "ЧН=0; ЧГ=0") + + " стр. — см. CSV документов"); + Прервать; + КонецЕсли; + ДобавитьСтрокуПротокола(Результат, "[SPEC] #" + Формат(Инд, "ЧН=0; ЧГ=0") + + "; ном=" + СокрЛП(Строка(СтрТов.Номенклатура)) + + "; сер=" + СокрЛП(Строка(СтрТов.Серия)) + + "; кол=" + Формат(СтрТов.Количество, "ЧН=0; ЧГ=0; ЧР=.") + + "; сумма=" + Формат(СтрТов.Сумма, "ЧН=0; ЧГ=0; ЧР=.") + + "; ставкаНДС=" + СокрЛП(Строка(СтрТов.СтавкаНДС)) + + "; суммаНДС=" + Формат(СтрТов.СуммаНДС, "ЧН=0; ЧГ=0; ЧР=.") + + "; суммаСНДС=" + Формат(СтрТов.СуммаСНДС, "ЧН=0; ЧГ=0; ЧР=.")); + КонецЦикла; + +КонецПроцедуры + +Функция ЗаголовокCSVСозданныхДокументов() + + Возврат "Контур;Тест;Номер;Дата;Ссылка;Организация;Склад;Партнер;Соглашение;Договор;ХозОперация;" + + "НомерСтроки;Номенклатура;НоменклатураКод;Артикул;Характеристика;Серия;СерияНомер;СерияГоденДо;" + + "ГТД;Количество;Сумма;СуммаРегл;СтавкаНДС;СуммаНДС;СуммаСНДС;НДСРегл;" + + "НоменклатураИдентификатор;СерияИдентификатор;СкладИдентификатор;КомментарийСопоставления"; + +КонецФункции + +Процедура ДобавитьСтрокиCSVДокументаИзОбъекта(СтрокиCSV, Контур, Док, СтрокиВходящие) + + Инд = 0; + Для Каждого СтрТов Из Док.Товары Цикл + Инд = Инд + 1; + СтрВх = Неопределено; + Если Инд <= СтрокиВходящие.Количество() Тогда + СтрВх = СтрокиВходящие[Инд - 1]; + КонецЕсли; + Значения = Новый Массив; + Значения.Добавить(ЗначениеДляCSV(Контур)); + Значения.Добавить(ЗначениеДляCSV(Ложь)); + Значения.Добавить(ЗначениеДляCSV(Док.Номер)); + Значения.Добавить(ЗначениеДляCSV(Док.Дата)); + Значения.Добавить(ЗначениеДляCSV(Док.Ссылка)); + Значения.Добавить(ЗначениеДляCSV(Док.Организация)); + Значения.Добавить(ЗначениеДляCSV(Док.Склад)); + Значения.Добавить(ЗначениеДляCSV(Док.Партнер)); + Значения.Добавить(ЗначениеДляCSV(Док.СоглашениеСКомиссионером)); + Значения.Добавить(ЗначениеДляCSV(Док.Договор)); + Значения.Добавить(ЗначениеДляCSV(Док.ХозяйственнаяОперация)); + Значения.Добавить(ЗначениеДляCSV(Инд)); + Значения.Добавить(ЗначениеДляCSV(СтрТов.Номенклатура)); + Значения.Добавить(ЗначениеДляCSV(?(СтрВх = Неопределено, "", СтрВх.НоменклатураКод))); + Значения.Добавить(ЗначениеДляCSV(?(СтрВх = Неопределено, "", СтрВх.Артикул))); + Значения.Добавить(ЗначениеДляCSV(СтрТов.Характеристика)); + Значения.Добавить(ЗначениеДляCSV(СтрТов.Серия)); + Значения.Добавить(ЗначениеДляCSV(?(СтрВх = Неопределено, "", СтрВх.СерияНомер))); + Значения.Добавить(ЗначениеДляCSV(?(СтрВх = Неопределено, "", СтрВх.СерияГоденДо))); + Значения.Добавить(ЗначениеДляCSV(?(СтрВх = Неопределено, "", СтрВх.ГТД))); + Значения.Добавить(ЗначениеДляCSV(СтрТов.Количество)); + Значения.Добавить(ЗначениеДляCSV(СтрТов.Сумма)); + Попытка + Значения.Добавить(ЗначениеДляCSV(СтрТов.СуммаРегл)); + Исключение + Значения.Добавить(""); + КонецПопытки; + Значения.Добавить(ЗначениеДляCSV(СтрТов.СтавкаНДС)); + Значения.Добавить(ЗначениеДляCSV(СтрТов.СуммаНДС)); + Значения.Добавить(ЗначениеДляCSV(СтрТов.СуммаСНДС)); + Попытка + Значения.Добавить(ЗначениеДляCSV(СтрТов.НДСРегл)); + Исключение + Значения.Добавить(""); + КонецПопытки; + Значения.Добавить(ЗначениеДляCSV(?(СтрВх = Неопределено, "", СтрВх.НоменклатураИдентификатор))); + Значения.Добавить(ЗначениеДляCSV(?(СтрВх = Неопределено, "", СтрВх.СерияИдентификатор))); + Значения.Добавить(ЗначениеДляCSV(?(СтрВх = Неопределено, "", СтрВх.СкладИдентификатор))); + Значения.Добавить(ЗначениеДляCSV(?(СтрВх = Неопределено, "", СтрВх.КомментарийСопоставления))); + СтрокиCSV.Добавить(СтрСоединить(Значения, ";")); + КонецЦикла; + +КонецПроцедуры + +Процедура ДобавитьСтрокиCSVДокументаИзВходящих(СтрокиCSV, Контур, ДокСсылка, Склад, Партнер, Соглашение, Договор, СтрокиВходящие, ЭтоТест) + + Инд = 0; + Для Каждого СтрВх Из СтрокиВходящие Цикл + Инд = Инд + 1; + Значения = Новый Массив; + Значения.Добавить(ЗначениеДляCSV(Контур)); + Значения.Добавить(ЗначениеДляCSV(ЭтоТест)); + Значения.Добавить(""); + Значения.Добавить(ЗначениеДляCSV(ДатаДокументовВвода)); + Значения.Добавить(ЗначениеДляCSV(ДокСсылка)); + Значения.Добавить(ЗначениеДляCSV(Организация)); + Значения.Добавить(ЗначениеДляCSV(?(ЗначениеЗаполнено(Склад), Склад, СтрВх.Склад))); + Значения.Добавить(ЗначениеДляCSV(?(ЗначениеЗаполнено(Партнер), Партнер, ?(Контур = "comm", СтрВх.Партнер, "")))); + Значения.Добавить(ЗначениеДляCSV(?(ЗначениеЗаполнено(Соглашение), Соглашение, ?(Контур = "comm", СтрВх.Соглашение, "")))); + Значения.Добавить(ЗначениеДляCSV(?(ЗначениеЗаполнено(Договор), Договор, ?(Контур = "comm", СтрВх.Договор, "")))); + Значения.Добавить(ЗначениеДляCSV(?(Контур = "comm", "ВводОстатковТоваровПереданныхНаКомиссию2_5", "ВводОстатковСобственныхТоваров"))); + Значения.Добавить(ЗначениеДляCSV(Инд)); + Значения.Добавить(ЗначениеДляCSV(СтрВх.Номенклатура)); + Значения.Добавить(ЗначениеДляCSV(СтрВх.НоменклатураКод)); + Значения.Добавить(ЗначениеДляCSV(СтрВх.Артикул)); + Значения.Добавить(ЗначениеДляCSV(СтрВх.Характеристика)); + Значения.Добавить(ЗначениеДляCSV(СтрВх.СерияСсылка)); + Значения.Добавить(ЗначениеДляCSV(СтрВх.СерияНомер)); + Значения.Добавить(ЗначениеДляCSV(СтрВх.СерияГоденДо)); + Значения.Добавить(ЗначениеДляCSV(СтрВх.ГТД)); + Значения.Добавить(ЗначениеДляCSV(СтрВх.Количество)); + Значения.Добавить(ЗначениеДляCSV(СтрВх.Стоимость)); + Значения.Добавить(ЗначениеДляCSV(СтрВх.СтоимостьРегл)); + Значения.Добавить(""); + Значения.Добавить(""); + Значения.Добавить(""); + Значения.Добавить(""); + Значения.Добавить(ЗначениеДляCSV(СтрВх.НоменклатураИдентификатор)); + Значения.Добавить(ЗначениеДляCSV(СтрВх.СерияИдентификатор)); + Значения.Добавить(ЗначениеДляCSV(СтрВх.СкладИдентификатор)); + Значения.Добавить(ЗначениеДляCSV(СтрВх.КомментарийСопоставления)); + СтрокиCSV.Добавить(СтрСоединить(Значения, ";")); + КонецЦикла; + +КонецПроцедуры + Функция ЗначениеДляCSV(Значение) Если Значение = Неопределено Или Значение = Null Тогда @@ -1693,8 +1889,39 @@ ОбСер.Записать(); Сер = ОбСер.Ссылка; Результат.СозданоСерий = Результат.СозданоСерий + 1; + ТекстГоден = ""; + ТекстПроизв = ""; + ТекстИмя = ИмяСерии; + Попытка + ТекстГоден = Формат(ОбСер.ГоденДо, "ДФ=yyyy-MM-dd"); + Исключение + КонецПопытки; + Попытка + ТекстПроизв = Формат(ОбСер.ДатаПроизводства, "ДФ=yyyy-MM-dd"); + Исключение + КонецПопытки; + Попытка + Если ЗначениеЗаполнено(ОбСер.Наименование) Тогда + ТекстИмя = ОбСер.Наименование; + КонецЕсли; + Исключение + КонецПопытки; + ДобавитьСтрокуПротокола(Результат, "[SERIES] " + + ?(ЭтоЗаглушка, "stub", "real") + + "; ном=" + СокрЛП(Строка(Ном)) + + "; арт=" + СокрЛП(СтрТ.Артикул) + + "; код=" + СокрЛП(СтрТ.НоменклатураКод) + + "; номер=" + СокрЛП(ОбСер.Номер) + + "; имя=" + СокрЛП(ТекстИмя) + + "; ГоденДо=" + ТекстГоден + + "; ДатаПроизводства=" + ТекстПроизв + + "; видНом=" + СокрЛП(Строка(ВидНом)) + + "; видСер=" + СокрЛП(Строка(ВидСер)) + + "; guid=" + Строка(Сер.УникальныйИдентификатор())); Исключение СтрТ.КомментарийСопоставления = "Ошибка создания серии: " + ИмяСерии; + ДобавитьСтрокуПротокола(Результат, "[SERIES][ERROR] " + ИмяСерии + ": " + + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЕсли; diff --git a/src/DataProcessors/РК_ЗагрузкаОстатков/Forms/Форма/Ext/Form/Module.bsl b/src/DataProcessors/РК_ЗагрузкаОстатков/Forms/Форма/Ext/Form/Module.bsl index e31e1cd..59c0697 100644 --- a/src/DataProcessors/РК_ЗагрузкаОстатков/Forms/Форма/Ext/Form/Module.bsl +++ b/src/DataProcessors/РК_ЗагрузкаОстатков/Forms/Форма/Ext/Form/Module.bsl @@ -178,12 +178,17 @@ КонецЕсли; РежимТест = (РезультатВопроса <> КодВозвратаДиалога.Да); Попытка - Текст = СопоставитьНаСервере(РежимТест); + РезультатСопоставления = СопоставитьНаСервере(РежимТест); + Текст = РезультатСопоставления.Текст; + ТекстЛога = РезультатСопоставления.ТекстЛога; Исключение ПоказатьПредупреждение(, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат; КонецПопытки; ПоказатьОповещениеПользователя("Сопоставление", , Текст); + Если ПисатьЛогиВПапку Тогда + ЗаписатьЛогПрогона(ТекстЛога, "match"); + КонецЕсли; АвтоВыгрузитьТаблицыПриНеобходимости(Ложь); КонецПроцедуры @@ -244,6 +249,7 @@ РезультатВызова = СоздатьДокументыНаСервере(РежимТест); Текст = РезультатВызова.Текст; ТекстЛога = РезультатВызова.ТекстЛога; + ТекстCSVДокументов = РезультатВызова.ТекстCSVДокументов; Исключение ПоказатьПредупреждение(, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат; @@ -252,6 +258,9 @@ ПоказатьОповещениеПользователя("Документы ввода", , Текст); Если ПисатьЛогиВПапку Тогда ЗаписатьЛогПрогона(ТекстЛога, "create_docs"); + Если Не ПустаяСтрока(ТекстCSVДокументов) Тогда + ЗаписатьТекстВКаталогВыгрузки(ТекстCSVДокументов, "rk_load_balances_docs", "csv"); + КонецЕсли; КонецЕсли; АвтоВыгрузитьТаблицыПриНеобходимости(Ложь); @@ -370,6 +379,32 @@ КонецФункции +&НаКлиенте +Процедура ЗаписатьТекстВКаталогВыгрузки(Текст, ПрефиксИмени, Расширение) + + Каталог = СокрЛП(Объект.ПутьКФайламВыгрузкиТаблиц); + Если ПустаяСтрока(Каталог) Тогда + ПоказатьПредупреждение(, "Включён «Писать логи в папку», но путь к каталогу не задан"); + Возврат; + КонецЕсли; + Если ПустаяСтрока(Текст) Тогда + Возврат; + КонецЕсли; + + Попытка + Если ЗаписьФайловНаСервере() Тогда + ИмяФайла = ЗаписатьТекстВКаталогВыгрузкиНаСервере(Текст, ПрефиксИмени, Расширение); + Иначе + ИмяФайла = УникальноеИмяФайлаВКаталоге(Каталог, ПрефиксИмени, Расширение); + ЗаписатьТекстUTF8BOM(ИмяФайла, Текст); + КонецЕсли; + ПоказатьОповещениеПользователя("Файл записан (" + РежимЗаписиФайловДляСообщения() + ")", , ИмяФайла); + Исключение + ПоказатьПредупреждение(, "Не удалось записать файл: " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + +КонецПроцедуры + &НаКлиенте Процедура ЗаписатьЛогПрогона(ТекстЛога, СуффиксОперации) @@ -689,7 +724,7 @@ РезКом = ОбъектОбработки.СопоставитьВходящиеКомиссионныеТовары(РежимТест); ЗначениеВРеквизитФормы(ОбъектОбработки, "Объект"); - Возврат СтрШаблон( + Текст = СтрШаблон( "Собственные: %1 / не %2; комиссия: %3 / не %4; серий: %5; характеристик: %6%7", Формат(РезСоб.Сопоставлено, "ЧН=0; ЧГ=0"), Формат(РезСоб.НеСопоставлено, "ЧН=0; ЧГ=0"), @@ -699,6 +734,20 @@ Формат(РезСоб.СозданоХарактеристик + РезКом.СозданоХарактеристик, "ЧН=0; ЧГ=0"), ?(РежимТест, " (тест)", "")); + ЧастиЛога = Новый Массив; + Если ТипЗнч(РезСоб.Протокол) = Тип("Массив") Тогда + Для Каждого СтрПрот Из РезСоб.Протокол Цикл + ЧастиЛога.Добавить(СтрПрот); + КонецЦикла; + КонецЕсли; + Если ТипЗнч(РезКом.Протокол) = Тип("Массив") Тогда + Для Каждого СтрПрот Из РезКом.Протокол Цикл + ЧастиЛога.Добавить(СтрПрот); + КонецЦикла; + КонецЕсли; + + Возврат Новый Структура("Текст, ТекстЛога", Текст, СтрСоединить(ЧастиЛога, Символы.ПС)); + КонецФункции &НаСервере @@ -734,7 +783,12 @@ ТекстЛога = СтрСоединить(Результат.Протокол, Символы.ПС); КонецЕсли; - Возврат Новый Структура("Текст, ТекстЛога", Текст, ТекстЛога); + ТекстCSVДокументов = ""; + Если Результат.Свойство("ТекстCSVДокументов") Тогда + ТекстCSVДокументов = Результат.ТекстCSVДокументов; + КонецЕсли; + + Возврат Новый Структура("Текст, ТекстЛога, ТекстCSVДокументов", Текст, ТекстЛога, ТекстCSVДокументов); КонецФункции @@ -800,6 +854,21 @@ КонецФункции +&НаСервере +Функция ЗаписатьТекстВКаталогВыгрузкиНаСервере(Текст, ПрефиксИмени, Расширение) + + Каталог = СокрЛП(Объект.ПутьКФайламВыгрузкиТаблиц); + Если ПустаяСтрока(Каталог) Тогда + ВызватьИсключение "Путь к каталогу выгрузки не задан"; + КонецЕсли; + + ПроверитьКаталогВыгрузкиНаСервере(Каталог); + ИмяФайла = УникальноеИмяФайлаВКаталогеНаСервере(Каталог, ПрефиксИмени, Расширение); + ЗаписатьТекстUTF8BOMНаСервере(ИмяФайла, Текст); + Возврат ИмяФайла; + +КонецФункции + &НаСервере Процедура ПроверитьКаталогВыгрузкиНаСервере(Каталог)