diff --git a/CHANGELOG.md b/CHANGELOG.md
index f388917..fc50b96 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -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)
### РК_ЗагрузкаОстатков — заполнение «Документы ввода» и диагностика create (#40)
diff --git a/VERSION b/VERSION
index 393a7c1..03cbda1 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.3.1.117
+1.3.1.118
diff --git a/src/ConfigDumpInfo.xml b/src/ConfigDumpInfo.xml
index 6ec6012..9a8aaf3 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 d21b737..fb107d2 100644
--- a/src/Configuration.xml
+++ b/src/Configuration.xml
@@ -62,7 +62,7 @@
Role.РК_ОсновнаяРоль
- 1.3.1.117
+ 1.3.1.118
Language.Русский
diff --git a/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl b/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl
index 2890cb7..cb1195d 100644
--- a/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl
+++ b/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl
@@ -512,8 +512,8 @@
КонецЦикла;
ДобавитьВСозданныеДокументы(Док.Ссылка, "Собственные", СкладДок,
Неопределено, Неопределено, СтрокиСклада, Док.Комментарий, Ложь, Результат);
- ДобавитьПротоколСозданногоДокумента(Результат, Док, Контекст, "own");
ДобавитьСтрокиCSVДокументаИзОбъекта(СтрокиCSVДокументов, "own", Док, СтрокиСклада);
+ ДобавитьПротоколСозданногоДокумента(Результат, Док, Контекст, "own");
ДобавитьСтрокуПротокола(Результат, "[POST] " + ПредставлениеДокументаДляПротокола(Док)
+ " — проведение не выполнялось (только Запись)");
Иначе
@@ -563,8 +563,8 @@
КонецЦикла;
ДобавитьВСозданныеДокументы(Док.Ссылка, "Комиссия 2.5", Неопределено,
Док.СоглашениеСКомиссионером, Док.Партнер, СтрокиГруппы, Док.Комментарий, Ложь, Результат);
- ДобавитьПротоколСозданногоДокумента(Результат, Док, Контекст, "comm");
ДобавитьСтрокиCSVДокументаИзОбъекта(СтрокиCSVДокументов, "comm", Док, СтрокиГруппы);
+ ДобавитьПротоколСозданногоДокумента(Результат, Док, Контекст, "comm");
ДобавитьСтрокуПротокола(Результат, "[POST] " + ПредставлениеДокументаДляПротокола(Док)
+ " — проведение не выполнялось (только Запись)");
Иначе
@@ -640,7 +640,7 @@
Функция ПредставлениеДокументаДляПротокола(Док)
- Если Не ЗначениеЗаполнено(Док) Тогда
+ Если Не ДокументВводаСозданУспешно(Док) Тогда
Возврат "(нет документа)";
КонецЕсли;
Возврат СокрЛП(Строка(Док.Ссылка))
@@ -874,12 +874,24 @@
Если Док = Неопределено Или Док = Null Тогда
Возврат Ложь;
КонецЕсли;
+
+ // Нельзя вызывать ЗначениеЗаполнено() для ДокументОбъект — «Проверка мутабельных значений…».
Попытка
- Возврат ТипЗнч(Док) = Тип("ДокументОбъект.ВводОстатковТоваров") И ЗначениеЗаполнено(Док.Ссылка);
+ Если ТипЗнч(Док) = Тип("ДокументОбъект.ВводОстатковТоваров") Тогда
+ Возврат Не Док.Ссылка.Пустая();
+ КонецЕсли;
Исключение
- Возврат ЗначениеЗаполнено(Док);
КонецПопытки;
+ Попытка
+ Если ТипЗнч(Док) = Тип("ДокументСсылка.ВводОстатковТоваров") Тогда
+ Возврат Не Док.Пустая();
+ КонецЕсли;
+ Исключение
+ КонецПопытки;
+
+ Возврат Ложь;
+
КонецФункции
Функция ТекстДиагностикиСопоставленияДляСозданияДокументов()
diff --git a/src/DataProcessors/РК_ЗагрузкаОстатков/Forms/Форма/Ext/Form.xml b/src/DataProcessors/РК_ЗагрузкаОстатков/Forms/Форма/Ext/Form.xml
index 80199c3..9165297 100644
--- a/src/DataProcessors/РК_ЗагрузкаОстатков/Forms/Форма/Ext/Form.xml
+++ b/src/DataProcessors/РК_ЗагрузкаОстатков/Forms/Форма/Ext/Form.xml
@@ -51,6 +51,7 @@
ПриЗагрузкеДанныхИзНастроекНаСервере
ПриСозданииНаСервере
+ ПриОткрытии
@@ -1371,6 +1372,8 @@
Объект.ПутьКФайламВыгрузкиТаблиц
Объект.РежимЗаписиФайловВыгрузки
Объект.ВыгружатьДанныеТаблиц
+ Объект.ОтборСкладовВнешнейБазы
+ Объект.ОтборОрганизацийВнешнейБазы
@@ -1460,6 +1463,17 @@
xs:boolean
+
+
+
+ ru
+ Отбор загружен из настроек
+
+
+
+ xs:boolean
+
+
diff --git a/src/DataProcessors/РК_ЗагрузкаОстатков/Forms/Форма/Ext/Form/Module.bsl b/src/DataProcessors/РК_ЗагрузкаОстатков/Forms/Форма/Ext/Form/Module.bsl
index 54a86ca..3989e28 100644
--- a/src/DataProcessors/РК_ЗагрузкаОстатков/Forms/Форма/Ext/Form/Module.bsl
+++ b/src/DataProcessors/РК_ЗагрузкаОстатков/Forms/Форма/Ext/Form/Module.bsl
@@ -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 Из Строки Цикл
@@ -568,11 +600,46 @@
Продолжить;
КонецПопытки;
СтараяОтметка = БылиОтметки.Получить(Строка(НовСтр.Идентификатор));
- НовСтр.Отметка = ?(СтараяОтметка = Неопределено, Ложь, СтараяОтметка = Истина);
+ Если СтараяОтметка <> Неопределено Тогда
+ НовСтр.Отметка = (СтараяОтметка = Истина);
+ ИначеЕсли БылиСохранённыеОтметки Тогда
+ НовСтр.Отметка = Ложь;
+ ИначеЕсли ЭтоСклады Тогда
+ НовСтр.Отметка = ОтметкаСкладаПоУмолчанию(НовСтр.Наименование);
+ ИначеЕсли ЭтоОрганизации Тогда
+ НовСтр.Отметка = ОтметкаОрганизацииПоУмолчанию(НовСтр.Наименование);
+ Иначе
+ НовСтр.Отметка = Ложь;
+ КонецЕсли;
КонецЦикла;
КонецПроцедуры
+&НаСервере
+Функция ОтметкаСкладаПоУмолчанию(Наименование)
+
+ Имя = ВРег(СокрЛП(Наименование));
+ Если ПустаяСтрока(Имя) Тогда
+ Возврат Ложь;
+ КонецЕсли;
+ Если СтрНайти(Имя, "НЕ ИСПОЛЬЗОВАТЬ") > 0 Тогда
+ Возврат Ложь;
+ КонецЕсли;
+ Возврат Истина;
+
+КонецФункции
+
+&НаСервере
+Функция ОтметкаОрганизацииПоУмолчанию(Наименование)
+
+ Имя = ВРег(СокрЛП(Наименование));
+ Если Имя = ВРег("Управленческая организация") Или Имя = ВРег("ФК РАНА") Тогда
+ Возврат Истина;
+ КонецЕсли;
+ Возврат Ложь;
+
+КонецФункции
+
&НаСервере
Функция ЗагрузитьОстаткиНаСервере()