1.3.1.116: детальный лог match/create и CSV спецификации документов (#29/#30).

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
mihailkudravcev
2026-09-04 14:19:03 +03:00
parent 65e67a1adb
commit 5cf6faa2cc
6 changed files with 324 additions and 19 deletions
+9
View File
@@ -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) ## 1.3.1.115 (2026-09-03)
### РК_ЗагрузкаОстатков — автовыгрузка CSV таблиц (#29) ### РК_ЗагрузкаОстатков — автовыгрузка CSV таблиц (#29)
+1 -1
View File
@@ -1 +1 @@
1.3.1.115 1.3.1.116
+5 -5
View File
@@ -50,14 +50,14 @@
<Metadata name="CommonPicture.ПодписанЗашифрованСостояния" id="a0bd1007-a115-4d79-8160-d4f59cd57ffb" configVersion="08ed86b1653fc955004b703d7dce5d947956fdda"/> <Metadata name="CommonPicture.ПодписанЗашифрованСостояния" id="a0bd1007-a115-4d79-8160-d4f59cd57ffb" configVersion="08ed86b1653fc955004b703d7dce5d947956fdda"/>
<Metadata name="CommonPicture.СерииНоменклатурыКолонкаСтатусов" id="f2badc5e-4af7-4c05-be31-b4d5b7642ab5" configVersion="d070fbc999630568abec9d83770ed805666a24d9"/> <Metadata name="CommonPicture.СерииНоменклатурыКолонкаСтатусов" id="f2badc5e-4af7-4c05-be31-b4d5b7642ab5" configVersion="d070fbc999630568abec9d83770ed805666a24d9"/>
<Metadata name="CommonPicture.СтатусыУказанияСерий" id="cc5cab6d-e293-4890-a422-6e8cd2fb58bb" configVersion="17b11a4c6ec74254745177f7c136d38af0214bdf"/> <Metadata name="CommonPicture.СтатусыУказанияСерий" id="cc5cab6d-e293-4890-a422-6e8cd2fb58bb" configVersion="17b11a4c6ec74254745177f7c136d38af0214bdf"/>
<Metadata name="Configuration.crm326RHANA" id="ef31d55b-3788-4972-affb-b7aefd3838aa" configVersion="d8b911be0e8a66a86d24f5878e92349e2df69ce6"/> <Metadata name="Configuration.crm326RHANA" id="ef31d55b-3788-4972-affb-b7aefd3838aa" configVersion="9ddb0345819d297deaf5292d5f0036de40dce636"/>
<Metadata name="Constant.РК_РабочееПодключениеЧерезАПИ" id="47f107f1-41f6-4f00-bb8a-aa1cf8b60191" configVersion="132678198dbf6e5b884c9ba219f5523cb63f7f8a"/> <Metadata name="Constant.РК_РабочееПодключениеЧерезАПИ" id="47f107f1-41f6-4f00-bb8a-aa1cf8b60191" configVersion="132678198dbf6e5b884c9ba219f5523cb63f7f8a"/>
<Metadata name="Constant.РК_РежимОтладкиРана" id="32d682cc-7aeb-45c8-abc6-68fef7f36011" configVersion="a12fe879a2594e605228c43059bb3a72d30fa471"/> <Metadata name="Constant.РК_РежимОтладкиРана" id="32d682cc-7aeb-45c8-abc6-68fef7f36011" configVersion="a12fe879a2594e605228c43059bb3a72d30fa471"/>
<Metadata name="DataProcessor.ЗагрузкаДанныхИзФайла" id="b6fd11ac-f702-4d13-b328-9a78b0874483" configVersion="c39312c21ebce9b1bb7a4df34e3e489203b3f8a8"/> <Metadata name="DataProcessor.ЗагрузкаДанныхИзФайла" id="b6fd11ac-f702-4d13-b328-9a78b0874483" configVersion="c39312c21ebce9b1bb7a4df34e3e489203b3f8a8"/>
<Metadata name="DataProcessor.ЗагрузкаДанныхИзФайла.Form.ЗагрузкаДанныхИзФайла" id="f47d02ff-17f2-4764-a151-627f4067a479" configVersion="247298ad849a4d46b1f412e90c0184fe64756489"/> <Metadata name="DataProcessor.ЗагрузкаДанныхИзФайла.Form.ЗагрузкаДанныхИзФайла" id="f47d02ff-17f2-4764-a151-627f4067a479" configVersion="247298ad849a4d46b1f412e90c0184fe64756489"/>
<Metadata name="DataProcessor.ЗагрузкаДанныхИзФайла.Form.ЗагрузкаДанныхИзФайла.Form" id="f47d02ff-17f2-4764-a151-627f4067a479.0" configVersion="e853a6b3591994346f9ce1d3b7d5cf0daf864fb8"/> <Metadata name="DataProcessor.ЗагрузкаДанныхИзФайла.Form.ЗагрузкаДанныхИзФайла.Form" id="f47d02ff-17f2-4764-a151-627f4067a479.0" configVersion="e853a6b3591994346f9ce1d3b7d5cf0daf864fb8"/>
<Metadata name="DataProcessor.ЗагрузкаДанныхИзФайла.ManagerModule" id="b6fd11ac-f702-4d13-b328-9a78b0874483.2" configVersion="78276e2de46cee0ce6ddd3972858ba87a64b96c0"/> <Metadata name="DataProcessor.ЗагрузкаДанныхИзФайла.ManagerModule" id="b6fd11ac-f702-4d13-b328-9a78b0874483.2" configVersion="78276e2de46cee0ce6ddd3972858ba87a64b96c0"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков" id="5922bda8-8f69-487c-823a-8b09e343f59a" configVersion="a9225a1d3afe3eb040f4fce93331feea6438a755"> <Metadata name="DataProcessor.РК_ЗагрузкаОстатков" id="5922bda8-8f69-487c-823a-8b09e343f59a" configVersion="09c631828c784cf1e5601ce67f0024952f6c85e9">
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеКомиссионныеТовары.Attribute.СтоимостьРегл" id="068e3fcc-0bd5-4af0-a192-d100909a8cc1"/> <Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеКомиссионныеТовары.Attribute.СтоимостьРегл" id="068e3fcc-0bd5-4af0-a192-d100909a8cc1"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеСобственныеТовары.Attribute.СкладИдентификатор" id="086673fd-91b2-4966-8472-144da87650e6"/> <Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеСобственныеТовары.Attribute.СкладИдентификатор" id="086673fd-91b2-4966-8472-144da87650e6"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеСобственныеТовары.Attribute.КомментарийСопоставления" id="09d80a73-1aa6-4ecc-a39a-c667e99e3084"/> <Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеСобственныеТовары.Attribute.КомментарийСопоставления" id="09d80a73-1aa6-4ecc-a39a-c667e99e3084"/>
@@ -204,9 +204,9 @@
</Metadata> </Metadata>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.Form.ПодборСкладов" id="9dfcb2a8-bf22-44c3-97a7-a69f70ca4d61" configVersion="3bf7d51ed9ee398e1704b692c5cf543de885b35d"/> <Metadata name="DataProcessor.РК_ЗагрузкаОстатков.Form.ПодборСкладов" id="9dfcb2a8-bf22-44c3-97a7-a69f70ca4d61" configVersion="3bf7d51ed9ee398e1704b692c5cf543de885b35d"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.Form.ПодборСкладов.Form" id="9dfcb2a8-bf22-44c3-97a7-a69f70ca4d61.0" configVersion="8cddcd809beef075b470c32dd5564aebb81e405c"/> <Metadata name="DataProcessor.РК_ЗагрузкаОстатков.Form.ПодборСкладов.Form" id="9dfcb2a8-bf22-44c3-97a7-a69f70ca4d61.0" configVersion="8cddcd809beef075b470c32dd5564aebb81e405c"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.Form.Форма" id="dc49348d-9257-4545-9c29-70c138312177" configVersion="606a7a5859cd64675a4b7867a558d2c30f79eca7"/> <Metadata name="DataProcessor.РК_ЗагрузкаОстатков.Form.Форма" id="dc49348d-9257-4545-9c29-70c138312177" configVersion="514d5fb78bc205cacae4221325868b4465a6b3c2"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.Form.Форма.Form" id="dc49348d-9257-4545-9c29-70c138312177.0" configVersion="9d25269bf73f085cb17005bb781d5d23fe9f2acc"/> <Metadata name="DataProcessor.РК_ЗагрузкаОстатков.Form.Форма.Form" id="dc49348d-9257-4545-9c29-70c138312177.0" configVersion="aaf27f9c5bec1fc5373c84165074e79177042e9c"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.ObjectModule" id="5922bda8-8f69-487c-823a-8b09e343f59a.0" configVersion="c56db52af66e13a3d82e77ce60242a034db891f4"/> <Metadata name="DataProcessor.РК_ЗагрузкаОстатков.ObjectModule" id="5922bda8-8f69-487c-823a-8b09e343f59a.0" configVersion="7c17502dd4beb037cddbd41a5e64611e9032133d"/>
<Metadata name="DataProcessor.РК_ЗагрузкаЦен" id="a18e1801-18e0-4000-8000-000000000001" configVersion="800c7286acdc6bcc40d47f7aa70bdf0f18e2aa5d"> <Metadata name="DataProcessor.РК_ЗагрузкаЦен" id="a18e1801-18e0-4000-8000-000000000001" configVersion="800c7286acdc6bcc40d47f7aa70bdf0f18e2aa5d">
<Metadata name="DataProcessor.РК_ЗагрузкаЦен.Attribute.ПодключениеКСтороннейБазе" id="a18e1801-18e0-4000-8000-000000000101"/> <Metadata name="DataProcessor.РК_ЗагрузкаЦен.Attribute.ПодключениеКСтороннейБазе" id="a18e1801-18e0-4000-8000-000000000101"/>
<Metadata name="DataProcessor.РК_ЗагрузкаЦен.Attribute.ДатаЦен" id="a18e1801-18e0-4000-8000-000000000102"/> <Metadata name="DataProcessor.РК_ЗагрузкаЦен.Attribute.ДатаЦен" id="a18e1801-18e0-4000-8000-000000000102"/>
+1 -1
View File
@@ -62,7 +62,7 @@
<xr:Item xsi:type="xr:MDObjectRef">Role.РК_ОсновнаяРоль</xr:Item> <xr:Item xsi:type="xr:MDObjectRef">Role.РК_ОсновнаяРоль</xr:Item>
</DefaultRoles> </DefaultRoles>
<Vendor/> <Vendor/>
<Version>1.3.1.115</Version> <Version>1.3.1.116</Version>
<DefaultStyle/> <DefaultStyle/>
<DefaultLanguage>Language.Русский</DefaultLanguage> <DefaultLanguage>Language.Русский</DefaultLanguage>
<BriefInformation/> <BriefInformation/>
@@ -113,6 +113,13 @@
Результат.Вставить("НеСопоставлено", 0); Результат.Вставить("НеСопоставлено", 0);
Результат.Вставить("СозданоСерий", 0); Результат.Вставить("СозданоСерий", 0);
Результат.Вставить("СозданоХарактеристик", 0); Результат.Вставить("СозданоХарактеристик", 0);
Результат.Вставить("Протокол", Новый Массив);
ДобавитьСтрокуПротокола(Результат, "=== Сопоставление own ===");
ДобавитьСтрокуПротокола(Результат, "Режим: " + ?(РежимТест, "тест (без создания)", "запись"));
ДобавитьСтрокуПротокола(Результат, "Строк во входящих: "
+ Формат(ВходящиеСобственныеТовары.Количество(), "ЧН=0; ЧГ=0")
+ "; заглушки серий: " + ?(СоздаватьЗаглушкиСерий, "вкл", "выкл"));
СуффиксДатыСер = Формат(?(ЗначениеЗаполнено(ДатаДокументовВвода), ДатаДокументовВвода, ДатаОстатков), "ДФ=yyyyMMdd"); СуффиксДатыСер = Формат(?(ЗначениеЗаполнено(ДатаДокументовВвода), ДатаДокументовВвода, ДатаОстатков), "ДФ=yyyyMMdd");
Если ПустаяСтрока(СуффиксДатыСер) Тогда Если ПустаяСтрока(СуффиксДатыСер) Тогда
@@ -176,6 +183,12 @@
КонецЦикла; КонецЦикла;
ДобавитьСтрокуПротокола(Результат, "=== Итог own ===");
ДобавитьСтрокуПротокола(Результат, "Сопоставлено: " + Формат(Результат.Сопоставлено, "ЧН=0; ЧГ=0")
+ "; не: " + Формат(Результат.НеСопоставлено, "ЧН=0; ЧГ=0")
+ "; серий создано: " + Формат(Результат.СозданоСерий, "ЧН=0; ЧГ=0")
+ "; характеристик: " + Формат(Результат.СозданоХарактеристик, "ЧН=0; ЧГ=0"));
Возврат Результат; Возврат Результат;
КонецФункции КонецФункции
@@ -190,6 +203,13 @@
Результат.Вставить("НеСопоставлено", 0); Результат.Вставить("НеСопоставлено", 0);
Результат.Вставить("СозданоСерий", 0); Результат.Вставить("СозданоСерий", 0);
Результат.Вставить("СозданоХарактеристик", 0); Результат.Вставить("СозданоХарактеристик", 0);
Результат.Вставить("Протокол", Новый Массив);
ДобавитьСтрокуПротокола(Результат, "=== Сопоставление comm ===");
ДобавитьСтрокуПротокола(Результат, "Режим: " + ?(РежимТест, "тест (без создания)", "запись"));
ДобавитьСтрокуПротокола(Результат, "Строк во входящих: "
+ Формат(ВходящиеКомиссионныеТовары.Количество(), "ЧН=0; ЧГ=0")
+ "; заглушки серий: " + ?(СоздаватьЗаглушкиСерий, "вкл", "выкл"));
СуффиксДатыСер = Формат(?(ЗначениеЗаполнено(ДатаДокументовВвода), ДатаДокументовВвода, ДатаОстатков), "ДФ=yyyyMMdd"); СуффиксДатыСер = Формат(?(ЗначениеЗаполнено(ДатаДокументовВвода), ДатаДокументовВвода, ДатаОстатков), "ДФ=yyyyMMdd");
Если ПустаяСтрока(СуффиксДатыСер) Тогда Если ПустаяСтрока(СуффиксДатыСер) Тогда
@@ -273,6 +293,12 @@
КонецЦикла; КонецЦикла;
ДобавитьСтрокуПротокола(Результат, "=== Итог comm ===");
ДобавитьСтрокуПротокола(Результат, "Сопоставлено: " + Формат(Результат.Сопоставлено, "ЧН=0; ЧГ=0")
+ "; не: " + Формат(Результат.НеСопоставлено, "ЧН=0; ЧГ=0")
+ "; серий создано: " + Формат(Результат.СозданоСерий, "ЧН=0; ЧГ=0")
+ "; характеристик: " + Формат(Результат.СозданоХарактеристик, "ЧН=0; ЧГ=0"));
Возврат Результат; Возврат Результат;
КонецФункции КонецФункции
@@ -409,6 +435,7 @@
Результат.Вставить("Ошибок", 0); Результат.Вставить("Ошибок", 0);
Результат.Вставить("ТекстТега", ""); Результат.Вставить("ТекстТега", "");
Результат.Вставить("Протокол", Новый Массив); Результат.Вставить("Протокол", Новый Массив);
Результат.Вставить("ТекстCSVДокументов", "");
Если Не ЗначениеЗаполнено(Организация) Тогда Если Не ЗначениеЗаполнено(Организация) Тогда
ВызватьИсключение "Укажите организацию для документов ввода остатков"; ВызватьИсключение "Укажите организацию для документов ввода остатков";
@@ -424,14 +451,20 @@
ДобавитьСтрокуПротокола(Результат, "Организация: " + СокрЛП(Строка(Организация))); ДобавитьСтрокуПротокола(Результат, "Организация: " + СокрЛП(Строка(Организация)));
ДобавитьСтрокуПротокола(Результат, "Дата документов: " + Формат(ДатаДокументовВвода, "ДЛФ=DT")); ДобавитьСтрокуПротокола(Результат, "Дата документов: " + Формат(ДатаДокументовВвода, "ДЛФ=DT"));
ДобавитьСтрокуПротокола(Результат, "Тег: " + ТекстТега); ДобавитьСтрокуПротокола(Результат, "Тег: " + ТекстТега);
ДобавитьСтрокуПротокола(Результат, "Примечание: команда выполняет Запись документов, проведение — отдельно."); ДобавитьСтрокуПротокола(Результат, "Примечание: команда выполняет Запись документов; проведение — отдельным шагом (см. [POST]).");
СозданныеДокументы.Очистить(); СозданныеДокументы.Очистить();
СтрокиCSVДокументов = Новый Массив;
СтрокиCSVДокументов.Добавить(ЗаголовокCSVСозданныхДокументов());
СтрокиПоСкладу = СгруппироватьСопоставленныеСтрокиПоСкладу(); СтрокиПоСкладу = СгруппироватьСопоставленныеСтрокиПоСкладу();
СтрокиКомиссии = СгруппироватьСопоставленныеСтрокиКомиссии(); СтрокиКомиссии = СгруппироватьСопоставленныеСтрокиКомиссии();
ДобавитьСтрокуПротокола(Результат, "Групп own (складов): " + Формат(СтрокиПоСкладу.Количество(), "ЧН=0; ЧГ=0") ДобавитьСтрокуПротокола(Результат, "Групп own (складов): " + Формат(СтрокиПоСкладу.Количество(), "ЧН=0; ЧГ=0")
+ "; групп comm: " + Формат(СтрокиКомиссии.Количество(), "ЧН=0; ЧГ=0")); + "; групп comm: " + Формат(СтрокиКомиссии.Количество(), "ЧН=0; ЧГ=0"));
Если СтрокиПоСкладу.Количество() = 0 И СтрокиКомиссии.Количество() = 0 Тогда
ДобавитьСтрокуПротокола(Результат,
"[WARN] Нет сопоставленных строк с количеством > 0 — документы не создаются. Сначала «Сопоставить».");
КонецЕсли;
Если ПерезаписатьДокументы И Не РежимТест Если ПерезаписатьДокументы И Не РежимТест
И (СтрокиПоСкладу.Количество() > 0 Или СтрокиКомиссии.Количество() > 0) Тогда И (СтрокиПоСкладу.Количество() > 0 Или СтрокиКомиссии.Количество() > 0) Тогда
@@ -457,6 +490,8 @@
ДобавитьВСозданныеДокументы(Неопределено, "Собственные", СкладДок, ДобавитьВСозданныеДокументы(Неопределено, "Собственные", СкладДок,
Неопределено, Неопределено, СтрокиСклада, ТекстТега + ", склад " + СокрЛП(Строка(СкладДок)), Истина); Неопределено, Неопределено, СтрокиСклада, ТекстТега + ", склад " + СокрЛП(Строка(СкладДок)), Истина);
ДобавитьСтрокуПротокола(Результат, "[TEST] " + Контекст); ДобавитьСтрокуПротокола(Результат, "[TEST] " + Контекст);
ДобавитьСтрокиCSVДокументаИзВходящих(СтрокиCSVДокументов, "own", Неопределено, СкладДок,
Неопределено, Неопределено, Неопределено, СтрокиСклада, Истина);
Продолжить; Продолжить;
КонецЕсли; КонецЕсли;
@@ -471,9 +506,10 @@
КонецЦикла; КонецЦикла;
ДобавитьВСозданныеДокументы(Док.Ссылка, "Собственные", СкладДок, ДобавитьВСозданныеДокументы(Док.Ссылка, "Собственные", СкладДок,
Неопределено, Неопределено, СтрокиСклада, Док.Комментарий, Ложь); Неопределено, Неопределено, СтрокиСклада, Док.Комментарий, Ложь);
ДобавитьСтрокуПротокола(Результат, "[WRITE] " + Контекст ДобавитьПротоколСозданногоДокумента(Результат, Док, Контекст, "own");
+ " → " + СокрЛП(Строка(Док.Ссылка)) ДобавитьСтрокиCSVДокументаИзОбъекта(СтрокиCSVДокументов, "own", Док, СтрокиСклада);
+ "; товаров=" + Формат(Док.Товары.Количество(), "ЧН=0; ЧГ=0")); ДобавитьСтрокуПротокола(Результат, "[POST] " + ПредставлениеДокументаДляПротокола(Док)
+ " — проведение не выполнялось (только Запись)");
Иначе Иначе
ДобавитьСтрокуПротокола(Результат, "[SKIP] " + Контекст + " — пустой документ"); ДобавитьСтрокуПротокола(Результат, "[SKIP] " + Контекст + " — пустой документ");
КонецЕсли; КонецЕсли;
@@ -505,6 +541,8 @@
Первая.Соглашение, Первая.Партнер, СтрокиГруппы, Первая.Соглашение, Первая.Партнер, СтрокиГруппы,
ТекстТега + ", комиссия 2.5, " + СокрЛП(Строка(Первая.Партнер)), Истина); ТекстТега + ", комиссия 2.5, " + СокрЛП(Строка(Первая.Партнер)), Истина);
ДобавитьСтрокуПротокола(Результат, "[TEST] " + Контекст); ДобавитьСтрокуПротокола(Результат, "[TEST] " + Контекст);
ДобавитьСтрокиCSVДокументаИзВходящих(СтрокиCSVДокументов, "comm", Неопределено, Неопределено,
Первая.Партнер, Первая.Соглашение, Первая.Договор, СтрокиГруппы, Истина);
Продолжить; Продолжить;
КонецЕсли; КонецЕсли;
@@ -519,10 +557,10 @@
КонецЦикла; КонецЦикла;
ДобавитьВСозданныеДокументы(Док.Ссылка, "Комиссия 2.5", Неопределено, ДобавитьВСозданныеДокументы(Док.Ссылка, "Комиссия 2.5", Неопределено,
Док.СоглашениеСКомиссионером, Док.Партнер, СтрокиГруппы, Док.Комментарий, Ложь); Док.СоглашениеСКомиссионером, Док.Партнер, СтрокиГруппы, Док.Комментарий, Ложь);
ДобавитьСтрокуПротокола(Результат, "[WRITE] " + Контекст ДобавитьПротоколСозданногоДокумента(Результат, Док, Контекст, "comm");
+ " → " + СокрЛП(Строка(Док.Ссылка)) ДобавитьСтрокиCSVДокументаИзОбъекта(СтрокиCSVДокументов, "comm", Док, СтрокиГруппы);
+ "; товаров=" + Формат(Док.Товары.Количество(), "ЧН=0; ЧГ=0") ДобавитьСтрокуПротокола(Результат, "[POST] " + ПредставлениеДокументаДляПротокола(Док)
+ "; договор=" + СокрЛП(Строка(Док.Договор))); + " — проведение не выполнялось (только Запись)");
Иначе Иначе
ДобавитьСтрокуПротокола(Результат, "[SKIP] " + Контекст + " — пустой документ"); ДобавитьСтрокуПротокола(Результат, "[SKIP] " + Контекст + " — пустой документ");
КонецЕсли; КонецЕсли;
@@ -534,13 +572,15 @@
КонецЦикла; КонецЦикла;
Результат.ТекстCSVДокументов = СтрСоединить(СтрокиCSVДокументов, Символы.ПС);
ДобавитьСтрокуПротокола(Результат, "=== Итог ==="); ДобавитьСтрокуПротокола(Результат, "=== Итог ===");
ДобавитьСтрокуПротокола(Результат, "Own док.: " + Формат(Результат.СозданоДокументов, "ЧН=0; ЧГ=0") ДобавитьСтрокуПротокола(Результат, "Own док.: " + Формат(Результат.СозданоДокументов, "ЧН=0; ЧГ=0")
+ " (" + Формат(Результат.СтрокВДокументах, "ЧН=0; ЧГ=0") + " стр.); comm: " + " (" + Формат(Результат.СтрокВДокументах, "ЧН=0; ЧГ=0") + " стр.); comm: "
+ Формат(Результат.СозданоДокументовКомиссии, "ЧН=0; ЧГ=0") + Формат(Результат.СозданоДокументовКомиссии, "ЧН=0; ЧГ=0")
+ " (" + Формат(Результат.СтрокКомиссии, "ЧН=0; ЧГ=0") + " стр.); удалено: " + " (" + Формат(Результат.СтрокКомиссии, "ЧН=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(Значение) Функция ЗначениеДляCSV(Значение)
Если Значение = Неопределено Или Значение = Null Тогда Если Значение = Неопределено Или Значение = Null Тогда
@@ -1693,8 +1889,39 @@
ОбСер.Записать(); ОбСер.Записать();
Сер = ОбСер.Ссылка; Сер = ОбСер.Ссылка;
Результат.СозданоСерий = Результат.СозданоСерий + 1; Результат.СозданоСерий = Результат.СозданоСерий + 1;
ТекстГоден = "";
ТекстПроизв = "";
ТекстИмя = ИмяСерии;
Попытка
ТекстГоден = Формат(ОбСер.ГоденДо, "ДФ=yyyy-MM-dd");
Исключение
КонецПопытки;
Попытка
ТекстПроизв = Формат(ОбСер.ДатаПроизводства, "ДФ=yyyy-MM-dd");
Исключение
КонецПопытки;
Попытка
Если ЗначениеЗаполнено(ОбСер.Наименование) Тогда
ТекстИмя = ОбСер.Наименование;
КонецЕсли;
Исключение
КонецПопытки;
ДобавитьСтрокуПротокола(Результат, "[SERIES] "
+ ?(ЭтоЗаглушка, "stub", "real")
+ "; ном=" + СокрЛП(Строка(Ном))
+ "; арт=" + СокрЛП(СтрТ.Артикул)
+ "; код=" + СокрЛП(СтрТ.НоменклатураКод)
+ "; номер=" + СокрЛП(ОбСер.Номер)
+ "; имя=" + СокрЛП(ТекстИмя)
+ "; ГоденДо=" + ТекстГоден
+ "; ДатаПроизводства=" + ТекстПроизв
+ "; видНом=" + СокрЛП(Строка(ВидНом))
+ "; видСер=" + СокрЛП(Строка(ВидСер))
+ "; guid=" + Строка(Сер.УникальныйИдентификатор()));
Исключение Исключение
СтрТ.КомментарийСопоставления = "Ошибка создания серии: " + ИмяСерии; СтрТ.КомментарийСопоставления = "Ошибка создания серии: " + ИмяСерии;
ДобавитьСтрокуПротокола(Результат, "[SERIES][ERROR] " + ИмяСерии + ": "
+ КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки; КонецПопытки;
КонецЕсли; КонецЕсли;
@@ -178,12 +178,17 @@
КонецЕсли; КонецЕсли;
РежимТест = (РезультатВопроса <> КодВозвратаДиалога.Да); РежимТест = (РезультатВопроса <> КодВозвратаДиалога.Да);
Попытка Попытка
Текст = СопоставитьНаСервере(РежимТест); РезультатСопоставления = СопоставитьНаСервере(РежимТест);
Текст = РезультатСопоставления.Текст;
ТекстЛога = РезультатСопоставления.ТекстЛога;
Исключение Исключение
ПоказатьПредупреждение(, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); ПоказатьПредупреждение(, КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
Возврат; Возврат;
КонецПопытки; КонецПопытки;
ПоказатьОповещениеПользователя("Сопоставление", , Текст); ПоказатьОповещениеПользователя("Сопоставление", , Текст);
Если ПисатьЛогиВПапку Тогда
ЗаписатьЛогПрогона(ТекстЛога, "match");
КонецЕсли;
АвтоВыгрузитьТаблицыПриНеобходимости(Ложь); АвтоВыгрузитьТаблицыПриНеобходимости(Ложь);
КонецПроцедуры КонецПроцедуры
@@ -244,6 +249,7 @@
РезультатВызова = СоздатьДокументыНаСервере(РежимТест); РезультатВызова = СоздатьДокументыНаСервере(РежимТест);
Текст = РезультатВызова.Текст; Текст = РезультатВызова.Текст;
ТекстЛога = РезультатВызова.ТекстЛога; ТекстЛога = РезультатВызова.ТекстЛога;
ТекстCSVДокументов = РезультатВызова.ТекстCSVДокументов;
Исключение Исключение
ПоказатьПредупреждение(, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); ПоказатьПредупреждение(, КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
Возврат; Возврат;
@@ -252,6 +258,9 @@
ПоказатьОповещениеПользователя("Документы ввода", , Текст); ПоказатьОповещениеПользователя("Документы ввода", , Текст);
Если ПисатьЛогиВПапку Тогда Если ПисатьЛогиВПапку Тогда
ЗаписатьЛогПрогона(ТекстЛога, "create_docs"); ЗаписатьЛогПрогона(ТекстЛога, "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", "Собственные: %1 / не %2; комиссия: %3 / не %4; серий: %5; характеристик: %6%7",
Формат(РезСоб.Сопоставлено, "ЧН=0; ЧГ=0"), Формат(РезСоб.Сопоставлено, "ЧН=0; ЧГ=0"),
Формат(РезСоб.НеСопоставлено, "ЧН=0; ЧГ=0"), Формат(РезСоб.НеСопоставлено, "ЧН=0; ЧГ=0"),
@@ -699,6 +734,20 @@
Формат(РезСоб.СозданоХарактеристик + РезКом.СозданоХарактеристик, "ЧН=0; ЧГ=0"), Формат(РезСоб.СозданоХарактеристик + РезКом.СозданоХарактеристик, "ЧН=0; ЧГ=0"),
?(РежимТест, " (тест)", "")); ?(РежимТест, " (тест)", ""));
ЧастиЛога = Новый Массив;
Если ТипЗнч(РезСоб.Протокол) = Тип("Массив") Тогда
Для Каждого СтрПрот Из РезСоб.Протокол Цикл
ЧастиЛога.Добавить(СтрПрот);
КонецЦикла;
КонецЕсли;
Если ТипЗнч(РезКом.Протокол) = Тип("Массив") Тогда
Для Каждого СтрПрот Из РезКом.Протокол Цикл
ЧастиЛога.Добавить(СтрПрот);
КонецЦикла;
КонецЕсли;
Возврат Новый Структура("Текст, ТекстЛога", Текст, СтрСоединить(ЧастиЛога, Символы.ПС));
КонецФункции КонецФункции
&НаСервере &НаСервере
@@ -734,7 +783,12 @@
ТекстЛога = СтрСоединить(Результат.Протокол, Символы.ПС); ТекстЛога = СтрСоединить(Результат.Протокол, Символы.ПС);
КонецЕсли; КонецЕсли;
Возврат Новый Структура("Текст, ТекстЛога", Текст, ТекстЛога); ТекстCSVДокументов = "";
Если Результат.Свойство("ТекстCSVДокументов") Тогда
ТекстCSVДокументов = Результат.ТекстCSVДокументов;
КонецЕсли;
Возврат Новый Структура("Текст, ТекстЛога, ТекстCSVДокументов", Текст, ТекстЛога, ТекстCSVДокументов);
КонецФункции КонецФункции
@@ -800,6 +854,21 @@
КонецФункции КонецФункции
&НаСервере
Функция ЗаписатьТекстВКаталогВыгрузкиНаСервере(Текст, ПрефиксИмени, Расширение)
Каталог = СокрЛП(Объект.ПутьКФайламВыгрузкиТаблиц);
Если ПустаяСтрока(Каталог) Тогда
ВызватьИсключение "Путь к каталогу выгрузки не задан";
КонецЕсли;
ПроверитьКаталогВыгрузкиНаСервере(Каталог);
ИмяФайла = УникальноеИмяФайлаВКаталогеНаСервере(Каталог, ПрефиксИмени, Расширение);
ЗаписатьТекстUTF8BOMНаСервере(ИмяФайла, Текст);
Возврат ИмяФайла;
КонецФункции
&НаСервере &НаСервере
Процедура ПроверитьКаталогВыгрузкиНаСервере(Каталог) Процедура ПроверитьКаталогВыгрузкиНаСервере(Каталог)