1.3.1.118: fix ЗначениеЗаполнено на ДокументОбъект + автоотбор складов/орг (#40).

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
mihailkudravcev
2026-09-04 15:19:13 +03:00
parent f27bb420ed
commit a9910531f9
7 changed files with 116 additions and 13 deletions
+10
View File
@@ -4,6 +4,16 @@
--- ---
## 1.3.1.118 (2026-09-04)
### РК_ЗагрузкаОстатков — fix create-лога + автоотбор (#40)
- Fix: не вызывать `ЗначениеЗаполнено()` для `ДокументОбъект` (ошибка «Проверка мутабельных значений…» ломала `[DOC]`/`[SPEC]`/CSV docs после успешной записи).
- CSV спецификации пишется до протокола строк.
- При открытии формы — авто `ЗаполнитьСправочникиОтбора` (если задано подключение).
- Дефолтные отметки (только если нет сохранённого отбора): все склады кроме «Не использовать»; организации «Управленческая организация» и «ФК РАНА».
- Отметки складов/организаций сохраняются между сеансами.
## 1.3.1.117 (2026-09-04) ## 1.3.1.117 (2026-09-04)
### РК_ЗагрузкаОстатков — заполнение «Документы ввода» и диагностика create (#40) ### РК_ЗагрузкаОстатков — заполнение «Документы ввода» и диагностика create (#40)
+1 -1
View File
@@ -1 +1 @@
1.3.1.117 1.3.1.118
+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="7e15609c5d17010b887bacb8d78cb0f14c530f6c"/> <Metadata name="Configuration.crm326RHANA" id="ef31d55b-3788-4972-affb-b7aefd3838aa" configVersion="8bc0304a863fd0d809e3c7a95a0d233f090decc1"/>
<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="5f10be150ab97fd63f3bbd40829a9b8e66c49af5"> <Metadata name="DataProcessor.РК_ЗагрузкаОстатков" id="5922bda8-8f69-487c-823a-8b09e343f59a" configVersion="88cc47d1bfe473c3065db3641aac761d98c644c3">
<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="c6255e87098d91f0869f959e24a3f9b5cca76469"/> <Metadata name="DataProcessor.РК_ЗагрузкаОстатков.Form.Форма" id="dc49348d-9257-4545-9c29-70c138312177" configVersion="491ea14e9a0c0ef89264d44ac8377518f4f25f08"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.Form.Форма.Form" id="dc49348d-9257-4545-9c29-70c138312177.0" configVersion="841d709bfc85f348ecacdb929b9d7db19e3a6456"/> <Metadata name="DataProcessor.РК_ЗагрузкаОстатков.Form.Форма.Form" id="dc49348d-9257-4545-9c29-70c138312177.0" configVersion="b2e3377182bd8bd1a8fd9b596a9408aeca2145df"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.ObjectModule" id="5922bda8-8f69-487c-823a-8b09e343f59a.0" configVersion="8a5121f32a7abab098fc87e738baccdb44767aa7"/> <Metadata name="DataProcessor.РК_ЗагрузкаОстатков.ObjectModule" id="5922bda8-8f69-487c-823a-8b09e343f59a.0" configVersion="485b51d595cded0353c7f82593b08ae6c18ea677"/>
<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.117</Version> <Version>1.3.1.118</Version>
<DefaultStyle/> <DefaultStyle/>
<DefaultLanguage>Language.Русский</DefaultLanguage> <DefaultLanguage>Language.Русский</DefaultLanguage>
<BriefInformation/> <BriefInformation/>
@@ -512,8 +512,8 @@
КонецЦикла; КонецЦикла;
ДобавитьВСозданныеДокументы(Док.Ссылка, "Собственные", СкладДок, ДобавитьВСозданныеДокументы(Док.Ссылка, "Собственные", СкладДок,
Неопределено, Неопределено, СтрокиСклада, Док.Комментарий, Ложь, Результат); Неопределено, Неопределено, СтрокиСклада, Док.Комментарий, Ложь, Результат);
ДобавитьПротоколСозданногоДокумента(Результат, Док, Контекст, "own");
ДобавитьСтрокиCSVДокументаИзОбъекта(СтрокиCSVДокументов, "own", Док, СтрокиСклада); ДобавитьСтрокиCSVДокументаИзОбъекта(СтрокиCSVДокументов, "own", Док, СтрокиСклада);
ДобавитьПротоколСозданногоДокумента(Результат, Док, Контекст, "own");
ДобавитьСтрокуПротокола(Результат, "[POST] " + ПредставлениеДокументаДляПротокола(Док) ДобавитьСтрокуПротокола(Результат, "[POST] " + ПредставлениеДокументаДляПротокола(Док)
+ " — проведение не выполнялось (только Запись)"); + " — проведение не выполнялось (только Запись)");
Иначе Иначе
@@ -563,8 +563,8 @@
КонецЦикла; КонецЦикла;
ДобавитьВСозданныеДокументы(Док.Ссылка, "Комиссия 2.5", Неопределено, ДобавитьВСозданныеДокументы(Док.Ссылка, "Комиссия 2.5", Неопределено,
Док.СоглашениеСКомиссионером, Док.Партнер, СтрокиГруппы, Док.Комментарий, Ложь, Результат); Док.СоглашениеСКомиссионером, Док.Партнер, СтрокиГруппы, Док.Комментарий, Ложь, Результат);
ДобавитьПротоколСозданногоДокумента(Результат, Док, Контекст, "comm");
ДобавитьСтрокиCSVДокументаИзОбъекта(СтрокиCSVДокументов, "comm", Док, СтрокиГруппы); ДобавитьСтрокиCSVДокументаИзОбъекта(СтрокиCSVДокументов, "comm", Док, СтрокиГруппы);
ДобавитьПротоколСозданногоДокумента(Результат, Док, Контекст, "comm");
ДобавитьСтрокуПротокола(Результат, "[POST] " + ПредставлениеДокументаДляПротокола(Док) ДобавитьСтрокуПротокола(Результат, "[POST] " + ПредставлениеДокументаДляПротокола(Док)
+ " — проведение не выполнялось (только Запись)"); + " — проведение не выполнялось (только Запись)");
Иначе Иначе
@@ -640,7 +640,7 @@
Функция ПредставлениеДокументаДляПротокола(Док) Функция ПредставлениеДокументаДляПротокола(Док)
Если Не ЗначениеЗаполнено(Док) Тогда Если Не ДокументВводаСозданУспешно(Док) Тогда
Возврат "(нет документа)"; Возврат "(нет документа)";
КонецЕсли; КонецЕсли;
Возврат СокрЛП(Строка(Док.Ссылка)) Возврат СокрЛП(Строка(Док.Ссылка))
@@ -874,12 +874,24 @@
Если Док = Неопределено Или Док = Null Тогда Если Док = Неопределено Или Док = Null Тогда
Возврат Ложь; Возврат Ложь;
КонецЕсли; КонецЕсли;
// Нельзя вызывать ЗначениеЗаполнено() для ДокументОбъект — «Проверка мутабельных значений…».
Попытка Попытка
Возврат ТипЗнч(Док) = Тип("ДокументОбъект.ВводОстатковТоваров") И ЗначениеЗаполнено(Док.Ссылка); Если ТипЗнч(Док) = Тип("ДокументОбъект.ВводОстатковТоваров") Тогда
Возврат Не Док.Ссылка.Пустая();
КонецЕсли;
Исключение Исключение
Возврат ЗначениеЗаполнено(Док);
КонецПопытки; КонецПопытки;
Попытка
Если ТипЗнч(Док) = Тип("ДокументСсылка.ВводОстатковТоваров") Тогда
Возврат Не Док.Пустая();
КонецЕсли;
Исключение
КонецПопытки;
Возврат Ложь;
КонецФункции КонецФункции
Функция ТекстДиагностикиСопоставленияДляСозданияДокументов() Функция ТекстДиагностикиСопоставленияДляСозданияДокументов()
@@ -51,6 +51,7 @@
<Events> <Events>
<Event name="OnLoadDataFromSettingsAtServer">ПриЗагрузкеДанныхИзНастроекНаСервере</Event> <Event name="OnLoadDataFromSettingsAtServer">ПриЗагрузкеДанныхИзНастроекНаСервере</Event>
<Event name="OnCreateAtServer">ПриСозданииНаСервере</Event> <Event name="OnCreateAtServer">ПриСозданииНаСервере</Event>
<Event name="OnOpen">ПриОткрытии</Event>
</Events> </Events>
<ChildItems> <ChildItems>
<InputField name="ПодключениеКСтороннейБазе" id="30"> <InputField name="ПодключениеКСтороннейБазе" id="30">
@@ -1371,6 +1372,8 @@
<Field>Объект.ПутьКФайламВыгрузкиТаблиц</Field> <Field>Объект.ПутьКФайламВыгрузкиТаблиц</Field>
<Field>Объект.РежимЗаписиФайловВыгрузки</Field> <Field>Объект.РежимЗаписиФайловВыгрузки</Field>
<Field>Объект.ВыгружатьДанныеТаблиц</Field> <Field>Объект.ВыгружатьДанныеТаблиц</Field>
<Field>Объект.ОтборСкладовВнешнейБазы</Field>
<Field>Объект.ОтборОрганизацийВнешнейБазы</Field>
</Save> </Save>
<Columns> <Columns>
<AdditionalColumns table="Объект.ВходящиеСобственныеТовары"/> <AdditionalColumns table="Объект.ВходящиеСобственныеТовары"/>
@@ -1460,6 +1463,17 @@
<v8:Type>xs:boolean</v8:Type> <v8:Type>xs:boolean</v8:Type>
</Type> </Type>
</Attribute> </Attribute>
<Attribute name="ОтборЗагруженИзНастроек" id="7">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Отбор загружен из настроек</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>xs:boolean</v8:Type>
</Type>
</Attribute>
</Attributes> </Attributes>
<Commands> <Commands>
<Command name="ЗагрузитьОстатки" id="2"> <Command name="ЗагрузитьОстатки" id="2">
@@ -26,6 +26,7 @@
КонецЕсли; КонецЕсли;
ПостроитьДеревоГруппИзТабличнойЧасти(); ПостроитьДеревоГруппИзТабличнойЧасти();
ОтборЗагруженИзНастроек = Ложь;
КонецПроцедуры КонецПроцедуры
@@ -37,6 +38,27 @@
Если ПустаяСтрока(Объект.РежимЗаписиФайловВыгрузки) Тогда Если ПустаяСтрока(Объект.РежимЗаписиФайловВыгрузки) Тогда
Объект.РежимЗаписиФайловВыгрузки = "Клиент"; Объект.РежимЗаписиФайловВыгрузки = "Клиент";
КонецЕсли; КонецЕсли;
ОтборЗагруженИзНастроек = (Объект.ОтборСкладовВнешнейБазы.Количество() > 0
Или Объект.ОтборОрганизацийВнешнейБазы.Количество() > 0);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если Не ЗначениеЗаполнено(Объект.ПодключениеКСтороннейБазе) Тогда
Возврат;
КонецЕсли;
Попытка
Количество = ЗаполнитьСправочникиОтбораНаСервере();
ПоказатьОповещениеПользователя("Справочники отбора", ,
"Группы: " + Формат(Количество.Группы, "ЧН=0; ЧГ=0")
+ "; склады: " + Формат(Количество.Склады, "ЧН=0; ЧГ=0")
+ "; организации: " + Формат(Количество.Организации, "ЧН=0; ЧГ=0"));
Исключение
// При открытии не блокируем форму — пользователь заполнит отбор вручную.
КонецПопытки;
КонецПроцедуры КонецПроцедуры
@@ -550,9 +572,19 @@
КонецЕсли; КонецЕсли;
БылиОтметки = Новый Соответствие; БылиОтметки = Новый Соответствие;
БылиСохранённыеОтметки = Ложь;
Для Каждого Стр Из ТаблицаОтбора Цикл Для Каждого Стр Из ТаблицаОтбора Цикл
БылиОтметки.Вставить(Строка(Стр.Идентификатор), Стр.Отметка); БылиОтметки.Вставить(Строка(Стр.Идентификатор), Стр.Отметка);
Если Стр.Отметка Тогда
БылиСохранённыеОтметки = Истина;
КонецЕсли;
КонецЦикла; КонецЦикла;
Если ОтборЗагруженИзНастроек И ТаблицаОтбора.Количество() > 0 Тогда
БылиСохранённыеОтметки = Истина;
КонецЕсли;
ЭтоСклады = (ИмяЭндпоинта = "/v1/stock/warehouses");
ЭтоОрганизации = (ИмяЭндпоинта = "/v1/stock/organizations");
ТаблицаОтбора.Очистить(); ТаблицаОтбора.Очистить();
Для Каждого СтрокаAPI Из Строки Цикл Для Каждого СтрокаAPI Из Строки Цикл
@@ -568,11 +600,46 @@
Продолжить; Продолжить;
КонецПопытки; КонецПопытки;
СтараяОтметка = БылиОтметки.Получить(Строка(НовСтр.Идентификатор)); СтараяОтметка = БылиОтметки.Получить(Строка(НовСтр.Идентификатор));
НовСтр.Отметка = ?(СтараяОтметка = Неопределено, Ложь, СтараяОтметка = Истина); Если СтараяОтметка <> Неопределено Тогда
НовСтр.Отметка = (СтараяОтметка = Истина);
ИначеЕсли БылиСохранённыеОтметки Тогда
НовСтр.Отметка = Ложь;
ИначеЕсли ЭтоСклады Тогда
НовСтр.Отметка = ОтметкаСкладаПоУмолчанию(НовСтр.Наименование);
ИначеЕсли ЭтоОрганизации Тогда
НовСтр.Отметка = ОтметкаОрганизацииПоУмолчанию(НовСтр.Наименование);
Иначе
НовСтр.Отметка = Ложь;
КонецЕсли;
КонецЦикла; КонецЦикла;
КонецПроцедуры КонецПроцедуры
&НаСервере
Функция ОтметкаСкладаПоУмолчанию(Наименование)
Имя = ВРег(СокрЛП(Наименование));
Если ПустаяСтрока(Имя) Тогда
Возврат Ложь;
КонецЕсли;
Если СтрНайти(Имя, "НЕ ИСПОЛЬЗОВАТЬ") > 0 Тогда
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции
&НаСервере
Функция ОтметкаОрганизацииПоУмолчанию(Наименование)
Имя = ВРег(СокрЛП(Наименование));
Если Имя = ВРег("Управленческая организация") Или Имя = ВРег("ФК РАНА") Тогда
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции
&НаСервере &НаСервере
Функция ЗагрузитьОстаткиНаСервере() Функция ЗагрузитьОстаткиНаСервере()