Странная ошибка обновлятора с патентами
Написал скрипт для обновлятора по созданию новой организации. При это в некоторых базах начала проявляться ошибка.

Функция НастройкиУчетаУСНФормыВызовСервера.СписокПатентов возвращает список значений:
Функция СписокПатентов(Организация, Период) Экспорт СписокПатентов = Новый СписокЗначений; Запрос = Новый Запрос; Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("ДатаНачала", Период); Запрос.УстановитьПараметр("ДатаОкончания", НастройкиУчета.НайтиДатуОкончанияДействия(Период, Организация, "НастройкиСистемыНалогообложения")); Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ОперацияСПатентом.Патент КАК Патент, | ЕСТЬNULL(Патенты.Наименование, """") КАК Наименование |ИЗ | Документ.ОперацияСПатентом КАК ОперацияСПатентом | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Патенты КАК Патенты | ПО ОперацияСПатентом.Патент = Патенты.Ссылка |ГДЕ | ОперацияСПатентом.Организация = &Организация | И ОперацияСПатентом.Проведен | И НАЧАЛОПЕРИОДА(ОперацияСПатентом.ДатаНачала, ДЕНЬ) >= НАЧАЛОПЕРИОДА(&ДатаНачала, ДЕНЬ) | И НАЧАЛОПЕРИОДА(ОперацияСПатентом.ДатаОкончания, ДЕНЬ) <= НАЧАЛОПЕРИОДА(&ДатаОкончания, ДЕНЬ)"; Результат = Запрос.Выполнить(); Если Не Результат.Пустой() Тогда Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл ПредставлениеПорядкаОтраженияАвансов = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Доходы по патенту ""%1""'"), Выборка.Наименование); СписокПатентов.Добавить(Выборка.Патент, ПредставлениеПорядкаОтраженияАвансов); КонецЦикла; КонецЕсли; Возврат СписокПатентов; КонецФункции
Мутабельность здесь может быть только от NULL?
Посмотрел список этих документов по ссылке e1cib/list/Документ.ОперацияСПатентом:

По виду формы понял, что он не включен функциональной опцией. Включил через константу ИспользуетсяУСНПатент:


Форма приняла рабочий вид:

Но результат не поменялся. База была на сервере.
Написал аналогичный код не в Обновляторе, он отработал нормально из консоли кода, видимо проблема в COM-соединении.
Решил отладить с помощью трассировки в журнал регистрации:
&Вместо("СписокПатентов") Функция Расш1_СписокПатентов(Организация, Период) ЗаписьЖурналаРегистрации("Отладка.Вход", ,,, "Организация: " + Организация + " " + ТипЗнч(Организация) + " период:" + Период + " " + ТипЗнч(период)); СписокПатентов = Новый СписокЗначений; ... Результат = Запрос.Выполнить(); Если Не Результат.Пустой() Тогда Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл ... СписокПатентов.Добавить(Выборка.Патент, ПредставлениеПорядкаОтраженияАвансов); ЗаписьЖурналаРегистрации("Отладка.Цикл", ,,, "Патент: " + Выборка.Патент + " " + ТипЗнч(Выборка.Патент)); КонецЦикла; КонецЕсли; ЗаписьЖурналаРегистрации("Отладка.Выход", ,,, "СписокПатентов: " + СписокПатентов.Количество()); Возврат СписокПатентов; КонецФункции

Но почему-то в журнал регистрации не записывались события.
Я предположил, что проблема в том, что я передаю дату не в том виде, попробовал ее передавать по-другому:
- v8.date(2026, 01, 01) и v8.Дата(2026, 01, 01) — выдали ошибку, что такого метода нет
- v8.ОбщегоНазначенияКлиентСервер.СтрокаВДату(«01.01.2026») — сработало, но ошибка была та же.
При обновлении базы вылетала ошибка:

Я решил сделать ТИИ, не помогло. После ТИИ мое расширение удалилось.
Я обнаружил, что оно не обновлялось в конфигурации базы данных, т.к. вылетало по этой ошибке.
Тогда я сделал неактивными 6 остальных расширений и попробовал еще раз обновить свое расширение, чтобы оно встало в базу данных — открыл конфигурацию расширения и нажал синий бочонок. Но это не помогло, выскочила та же ошибка.
В итоге я решил поменять код в самой конфигурации — все равно это была тестовая база.
Но в отладке увидел, что мутабельных нет.
Даже так не работает:

Причем ругается почему-то о передачи значения с клиента на сервер, хотя модуль менеджера — тоже на сервере.

Тогда я вспомнил, что подобную ошибку уже видел. Это неверная диагностика 1С, связанная с тем, что модуль невидим. Проверил свойства модуля и да, он не доступен для внешнего соединения:

Я перенести код процедуры УстановкаНастроекПоУмолчанию из модуля менеджера НастройкиУчетаНДС в локальную процедуру Обновлятора. Также пришлось записывать еще два других регистра, чтобы они не заполнялись, не попадая в модуль, не доступный для внешнего соединения. Кстати, на файловой базе работает, не работает только на SQL.
//Создаем настройки налога, иначе при создании может возникать ошибка МесяцУчетнойПолитики = НачалоМесяца(ДатаУчетнойПолитики); ДанныеЗаполнения = v8.NewObject("Структура", "Период, Организация", МесяцУчетнойПолитики, Организация); НЗ = v8.РегистрыСведений.НастройкиУчетаНДС.СоздатьНаборЗаписей(); НЗ.Отбор.Организация.Значение = Организация; НЗ.Отбор.Организация.Использование = Истина; Запись = НЗ.Добавить(); Запись.Организация = Организация; //+++В будущем, когда 1с починит модуль НастройкиУчетаНДС (добавит галку внешнее соединение): //v8.РегистрыСведений.НастройкиУчетаНДС.УстановкаНастроекПоУмолчанию(Запись, ДанныеЗаполнения); УстановкаНастроекПоУмолчанию(Запись, ДанныеЗаполнения); НЗ.ОбменДанными.Загрузка = истина; //После исправления ошибки можно убрать //--- НЗ.Записать(Истина); //Создаем настройки учетной политики, чтобы они не создавались при записи регистра НастройкиСистемыНалогообложения НЗ = v8.РегистрыСведений.УчетнаяПолитика.СоздатьНаборЗаписей(); НЗ.Отбор.Организация.Значение = Организация; НЗ.Отбор.Организация.Использование = Истина; Запись = НЗ.Добавить(); Запись.Организация = Организация; v8.РегистрыСведений.УчетнаяПолитика.УстановкаНастроекПоУмолчанию(Запись, ДанныеЗаполнения); НЗ.ОбменДанными.Загрузка = истина; //После исправления ошибки можно убрать НЗ.Записать(Истина); //=== Регистр НастройкиУчетаУСН НЗ = v8.РегистрыСведений.НастройкиУчетаУСН.СоздатьНаборЗаписей(); НЗ.Отбор.Организация.Значение = Организация; НЗ.Отбор.Организация.Использование = Истина; Запись = НЗ.Добавить(); Запись.Период = МесяцУчетнойПолитики; Запись.Организация = Организация; НЗ.ОбменДанными.Загрузка = истина; //После исправления ошибки можно убрать НЗ.Записать(Истина);
Можно было бы решить проблему расширением, добавляющим галочку на модуль, но это скрипт для Обновлятора, не хотелось ставить лишний патч на множество баз.
Вот как много и долго пришлось решать проблему из-за ошибок в типовых 1С. Галочку они пожалели! Уже давно замечаю параноидальное отношение 1С к этим галочкам, просто Святой Грааль какой-то, особенно касается галочки «Вызов сервера», прямо не любят они ее ставить.
Среда: БП 3.0.191.41, 1С 8.3.27.1786. Объем: 3 час.




В итоге ты решил, что дело в галочке, но даже не проверил?
а смысл. я уже сталкивался с таким. и да, дело в галочке.
«Причем ругается почему-то о передачи значения с клиента на сервер, хотя модуль менеджера — тоже на сервере.» — чем галочка внешнее соединение поможет?
во внешнем соединении не доступно.
Что недоступно, если ты уже на сервере как ты сказал?
модуль не компилируется во внешнем соединении.
У модуля стоит сервер и вызов сервера. Все вызовы будут исполняться на сервере. Зачем ему компилироваться как внешнее соединение? Он вызывается на сервере. Отовсюду
рассуждения верные, но это ошибка платформы. в режиме 1с скрипт отрабатывает, из обновлятора нет.
Теперь это уже ошибка платформы. До этого проблема была в конфигурации. Может дело в другом?
протестируй на SQL