Ошибка при создании документа по COM - Не удалось записать: "Реестр документов"!

1. nikolega 174 22.07.19 13:40 Сейчас в теме
Добрый день.

Платформа: 1С:Предприятие 8.3 (8.3.14.1630)
Конфа: Управление торговлей, редакция 11 (11.4.8.73)

После обновления с 11.4.7.150 на 11.4.8.73 возникает ошибка при попытке создать документ в удаленной базе.
Произошла исключительная ситуация (1C:Enterprise 8.3.14.1630): Ошибка при выполнении обработчика - 'ПриЗаписи'
{РегистрСведений.РеестрДокументов.МодульМенеджера(30)}: Ошибка при вызове метода контекста (Записать)
Не удалось записать: "Реестр документов"!


Кто-нибудь сталкивался с такой проблемой ?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
15. nikolega 174 23.07.19 10:39 Сейчас в теме
Ну и мы подошли к причине ошибки:

Перед записью регистра сведений РеестрДокументов в модуле набора записей выполняется проверка на привилегированный режим.

Процедура ПередЗаписью(Отказ, Замещение)
	
	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;
	
	Если Не ПривилегированныйРежим() Тогда
		///***
		#Если ВнешнееСоединение Тогда
		Возврат;		 
		#КонецЕсли
	    ///***
		Отказ = Истина;
	КонецЕсли;
	
	ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект);

КонецПроцедуры
Показать


Решение обрамлено символами ///***.

Хотя и был установлен привилегированный режим в модуле менеджера регистра сведений, где этот набор записи записывается, привилегированный режим при записи набора в модуль набора записей не передается.

Есть другой конечно вариант - устанавливать привилегированный режим внутри процедуры ПередЗаписью, но мне текущее решение вполне достаточно.

Спасибо всем за активное участие. Подсказка chipazawra помогла решить проблему.
s_a_zavgorodni; aple313; rule6; +3 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. DжoNik 22.07.19 15:05 Сейчас в теме
(1) Была такая проблема при обмене РИБ. После обновления не заполнились Ключи аналитики какие то. Помогло установка и снятие пометки удаления в справочнике Склады (по всем элементам)
16. Fixxxer 24.07.19 13:49 Сейчас в теме
(1) Да, сталкивался.
Платформа:1С:Предприятие 8.3 (8.3.14.1694)
Конфигурация:1С:ERP Управление предприятием 2 (2.4.8.84)

Причина - Проверка на привилегированный режим в модуле набора записей регистра "Реестр документов"
...
Если Не ПривилегированныйРежим() Тогда
Отказ = Истина;
КонецЕсли;
...
Долго разбираться не стал зачем это добавлено. Обмены встали. Через расширение закомментил этот кусок. Думаю разобраться позже.
2. nikolega 174 22.07.19 14:01 Сейчас в теме
Код работал в версии 11.4.7.150:

Процедура ЗаписатьДокумент(ДокV8, СтрСтатус, Проводить = Истина)
	
	ДокV8.Записать(V8.РежимЗаписиДокумента.Запись);
	ДокV8.ОбменДанными.Загрузка = Ложь;
	ДокV8.Записать(V8.РежимЗаписиДокумента.Запись);
	Если Проводить Тогда
		Попытка
		    ДокV8.Записать(V8.РежимЗаписиДокумента.Проведение);		
			СтрСтатус.Комментарий = "Выгружен успешно";
			СтрСтатус.ДокументВУТ = V8.String(ДокV8.Ссылка);
		Исключение
			СтрСтатус.Комментарий = "Не удалось провести документ. "+ОписаниеОшибки();
		КонецПопытки;
	КонецЕсли; 
	
КонецПроцедуры
Показать


В третьей строке процедуры сейчас возникает ошибка (после того, как устанавливаем ОбменДанными.Загрузка = Ложь и пытаемся записать документ).
3. login1020 133 22.07.19 14:37 Сейчас в теме +1 $m
(2) Посмотрите, какой-нибудь реквизит теперь новый не заполняется или переименовали, перед записью в отладчике посмотрите чем заполнился документ, все ли обязательные реквизиты заполнены.
7. nikolega 174 22.07.19 15:14 Сейчас в теме
(3) В отладчике не останавливается при установке точки останова и подключении к сессии ком-соединения, документ то записывается из внешней базы. Если б было все так просто, но это же com.
9. login1020 133 22.07.19 15:24 Сейчас в теме
(7) По-любому документ не записывается, из-за того что обязательные реквзииты поменялись из-за версии УТ,а потом и дальше падает при регистрации в РеестреДокументов, т.к. ссылки нет или ТипДокумента не установлен.
4. chipazawra 22.07.19 14:37 Сейчас в теме +1 $m
Странно что он вообще сюда полез РегистрСведений.РеестрДокументов.МодульМенеджера(30)

Эта процедура "РегистрСведений.РеестрДокументов.ЗаписатьДанныеДокумента(Ссылка, ДополнительныеСвойства, Отказ, ЭтоОбновлениеИБ = Ложь) Экспорт" вызывается только в обработке проведения.

Мне кажется нужно копать в сторону режима записи.

Да и зачем записывать документ дважды ?

ДокV8.Записать(V8.РежимЗаписиДокумента.Запись);
ДокV8.ОбменДанными.Загрузка = Ложь;
ДокV8.Записать(V8.РежимЗаписиДокумента.Запись);
6. nikolega 174 22.07.19 15:12 Сейчас в теме
(4) Документ записывается с признаком ОбменДанными.Загрузка = Истина для того, чтобы установить конкретный установленный GUID документа, если этого не делать - платформа присвоит новый GUID.
8. chipazawra 22.07.19 15:20 Сейчас в теме
Ссылка = Документы.РеализацияТоваровУслуг.ПолучитьСсылку(Новый УникальныйИдентификатор("твой гуид"));
ДокументОбъект.УстановитьСсылкуНового(Ссылка);

Достаточно будет одной записи.
10. пользователь 22.07.19 15:26
Сообщение было скрыто модератором.
...
11. chipazawra 22.07.19 15:33 Сейчас в теме +1 $m
Вот попробуй
Прикрепленные файлы:
12. nikolega 174 22.07.19 15:35 Сейчас в теме
13. mkostya 30 22.07.19 20:08 Сейчас в теме
(11)не помогло.
у меня слетело в 15м релизе платформы )
14. nikolega 174 23.07.19 10:25 Сейчас в теме
(13) У меня получилось подключиться отладчиком. Тонкость в том, что нужно как я понял запускать приложение, из которого выполняется com-соединение в режиме толстого клиента.
И еще - не нужно указывать конкретный порт - тогда сканируются все порты.
Мой текст файла следующий:

<config xmlns="http://v8.1c.ru/v8/comcntrcfg">;
<debugconfig debug="true"
debuggerURL="tcp://localhost"/>
</config>
15. nikolega 174 23.07.19 10:39 Сейчас в теме
Ну и мы подошли к причине ошибки:

Перед записью регистра сведений РеестрДокументов в модуле набора записей выполняется проверка на привилегированный режим.

Процедура ПередЗаписью(Отказ, Замещение)
	
	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;
	
	Если Не ПривилегированныйРежим() Тогда
		///***
		#Если ВнешнееСоединение Тогда
		Возврат;		 
		#КонецЕсли
	    ///***
		Отказ = Истина;
	КонецЕсли;
	
	ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект);

КонецПроцедуры
Показать


Решение обрамлено символами ///***.

Хотя и был установлен привилегированный режим в модуле менеджера регистра сведений, где этот набор записи записывается, привилегированный режим при записи набора в модуль набора записей не передается.

Есть другой конечно вариант - устанавливать привилегированный режим внутри процедуры ПередЗаписью, но мне текущее решение вполне достаточно.

Спасибо всем за активное участие. Подсказка chipazawra помогла решить проблему.
s_a_zavgorodni; aple313; rule6; +3 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот