Быстрая корректировка правил обмена при добавлении реквизита.

1. user950703 07.11.20 09:16 Сейчас в теме
Доброго времени суток, уважаемые.
Буквально вчера заказчик обновил конфигурацию БП 3.
И тут же в налаженном обмене из КА 1.1. начались проблемы.
Появилось сообщение при записи в целевую базу БП 3.0:

Ошибка в обработчике события ПослеЗагрузкиОбъекта
ИмяПКО = РеализацияТоваровУслуг
ТипОбъекта = Реализация (акт, накладная, УПД)
Объект = Реализация (акт, накладная, УПД) XXXXXXX от 05.11.2020 14:00:00
Обработчик = ПослеЗагрузкиОбъекта
ОписаниеОшибки = Ошибка при вызове метода контекста (Записать): Ошибка при выполнении обработчика - 'ПриЗаписи': {ОбщийМодуль.ЭлектронныйДокументооборотСКонтролирующимиОрганами.Модуль(2390)}: Ошибка при вызове метода контекста (ПолучитьОбработкуЭДО): Попытка передачи мутабельного значения результата метода ПолучитьОбработкуЭДО ().

Предварительный анализ показал, что возможным источником является добавление нового поля (реквизита), для обеспечения работы системы ЭДО в БП 3.0.

Вопрос заключаетcя в следующем: Существует ли возможность, не обновляя метаданные одной из баз, добавить в правила обмена новый реквизит, содержимое которого несущественно для функционала целевой базы.
По теме из базы знаний
Найденные решения
14. user950703 07.11.20 22:01 Сейчас в теме
(6)Спасибо. Натолкнуло на решение. Действительно, если выставить Клиент, то по идее, для файловой платформы, можно поставить в приоритет работу с объектом на клиенте вместо передачи объекта на сервер, а, значит, его мутирования.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
8. Torin 821 07.11.20 16:30 Сейчас в теме
(1)
Обработчик = ПослеЗагрузкиОбъекта

Открываем правила в блокноте и ищем
ОбщийМодуль.ЭлектронныйДокументооборотСКонтролирующимиОрганами

Накладываем
// 

и едем дальше
10. user950703 07.11.20 17:58 Сейчас в теме
(8) В обработчике После загрузки объекта директив ОбщийМодуль.ЭлектронныйДокументооборотСКонтролирующимиОрганами
в настоящее время нет, поэтому заремить (отключить) его я не имею возможности
2. user633533_encantado 11 07.11.20 09:42 Сейчас в теме
Описание ошибки не похоже на то, что был добавлен новый реквизит.

Обмен как идет, по правилам КД2 ?
3. user950703 07.11.20 11:27 Сейчас в теме
(2)Обмен идет, документы пишутся и в дальнейшем, проводятся. Гипотезу высказал клиент, и это отдельный вопрос. Но добавление реквизита без заморочек с метаданными мне интересно само по себе.
4. tetraren 35 07.11.20 12:20 Сейчас в теме
Судя по ошибке, дело не в реквизитах, а в том, что вы с сервера на клиент мутабельный объект пытаетесь передать.

Обычно вся загрузка происходит на сервере, и таких ошибок быть не может. Почему у вас код на киента попал?

Вы случайно не через COM-соединение обмен осуществляете из обычного приложения, коим является КА1 ?

Если так - как быстрое решение попробуйте вместо "Прямого соединения" поставить в параметрах соединения обмен через "сетевой/локальный каталог". Если поможет - значит оно самое.
5. user950703 07.11.20 12:49 Сейчас в теме
(4) Обмен идет не через прямое соединение а чтением/записью XML файла из локальной папки. Работают обработки Универсальный обмен данных XML. Причем БП 3. 0, куда идет запись - файловая.
9. Torin 821 07.11.20 16:40 Сейчас в теме
(5)+ у пользователя от имени которого выполняется загрузка не хватает прав на чтение констант
"Использовать внешний модуль защищенного документооборота с КО" и "Внешний модуль защищенного документооборота с КО"
11. user950703 07.11.20 18:17 Сейчас в теме
(9) Ни одной из этих констант в Конфигураторе бухгалтерии 3 я не вижу...
12. Torin 821 07.11.20 18:22 Сейчас в теме
(1)
Буквально вчера заказчик обновил конфигурацию БП 3.

(11)
Ни одной из этих констант в Конфигураторе бухгалтерии 3 я не вижу..


"Они существуют" (с) M&M’s
13. user950703 07.11.20 21:54 Сейчас в теме
(12)Извините. Действительно, не заметил.
6. tetraren 35 07.11.20 13:19 Сейчас в теме
В свойствах Общего модуля ЭлектронныйДокументооборотСКонтролирующимиОрганами галочка "Клиент" не стоит?
7. user950703 07.11.20 13:32 Сейчас в теме
(6)Нет, Только Сервер и Внешнее соединение
14. user950703 07.11.20 22:01 Сейчас в теме
(6)Спасибо. Натолкнуло на решение. Действительно, если выставить Клиент, то по идее, для файловой платформы, можно поставить в приоритет работу с объектом на клиенте вместо передачи объекта на сервер, а, значит, его мутирования.
15. tetraren 35 07.11.20 23:02 Сейчас в теме
(14) Пожалуйста. И всё же, для основательного решения проблемы я бы разобрался, как код, который должен исполняться на сервере, вдруг стал исполняться на клиенте.
16. VHS123 17.11.20 15:33 Сейчас в теме
Та же проблема, только через комконнектор.
В процессе создается обработка, и много чего еще, мягко говоря....
Решил через расширение модуля ЭлектронныйДокументооборотСКонтролирующимиОрганами.
То есть все то же, но без создания обработки.

&Вместо("СоответствиеВидовДокументовФНС")
Функция ОЭ_СоответствиеВидовДокументовФНС()
		
	Макет = Обработки.ДокументооборотСКонтролирующимиОрганами.ПолучитьМакет("ВидыПредставляемыхДокументов");
	ОбластьЯчеек = Макет.Область(1, 1, Макет.ВысотаТаблицы, Макет.ШиринаТаблицы);
	
    ПостроительЗапроса = Новый ПостроительЗапроса;
    ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьЯчеек);
	ПостроительЗапроса.Выполнить();
	
	Виды = ПостроительЗапроса.Результат.Выгрузить();
	Виды.Колонки.Добавить("Значение");
	
	ПредобработкаВидовПредставляемыхДокументов(Виды); 
	
	Для каждого Вид Из Виды Цикл
		Вид.Значение = Перечисления.ВидыПредставляемыхДокументов[Вид.Имя];
		ОбработкаВидовПредставляемыхДокументов(Виды, Вид); 
	КонецЦикла; 
	
	ПостобработкаВидовПредставляемыхДокументов(Виды);
	
	
	СоответствиеРезультат = Новый Соответствие;
	
	Для каждого Вид Из Виды Цикл
		СоответствиеРезультат.Вставить(Вид.Имя, Вид.Значение); 
	КонецЦикла; 
	
	Возврат СоответствиеРезультат;

КонецФункции

Функция КолонкиДляПреобразованияВБулево() Экспорт

	КолонкиБулево = Новый Массив;
	КолонкиБулево.Добавить("ЭтоНДС");
	КолонкиБулево.Добавить("ЕстьЭД");
	КолонкиБулево.Добавить("ОбязательноПодтверждение");
	
	Возврат КолонкиБулево;
		
КонецФункции

Процедура ПредобработкаВидовПредставляемыхДокументов(Виды)
	
	КолонкиБулево = КолонкиДляПреобразованияВБулево();
	
	Для каждого Имя Из КолонкиБулево Цикл
		Виды.Колонки.Добавить(Имя + "_Булево");
	КонецЦикла; 
	
КонецПроцедуры

Процедура ОбработкаВидовПредставляемыхДокументов(Виды, Вид)
	
	КолонкиБулево = КолонкиДляПреобразованияВБулево();
	
	Для каждого Имя Из КолонкиБулево Цикл
		Вид[Имя + "_Булево"] = Булево(Вид[Имя]);
	КонецЦикла; 
	
КонецПроцедуры

Процедура ПостобработкаВидовПредставляемыхДокументов(Виды)
	
	КолонкиБулево = КолонкиДляПреобразованияВБулево();
	
	Для каждого Имя Из КолонкиБулево Цикл
		Виды.Колонки.Удалить(Имя);
		Виды.Колонки[Имя + "_Булево"].Имя = Имя;
	КонецЦикла; 
	
КонецПроцедуры
Показать
Kostt; smwed; smewinka; tmixsam; +4 Ответить
17. user1495698 19.11.20 12:32 Сейчас в теме
(16) БОЛЬШОЕ человеческое СПАСИБО!
Очень помог Ваш пост с кодом!!!
22. Kostt 25 27.05.21 14:57 Сейчас в теме
(16) Спасибо ваш код помог. ЕРП 2.4.13.85
18. tmixsam 56 20.11.20 14:29 Сейчас в теме
Мне тоже очень помог Ваш пост с кодом!
Спасибо
19. smwed 2 06.12.20 20:50 Сейчас в теме
Мне тоже помогло! Огромная, вам, благодарность!
20. s_captain 14.12.20 12:13 Сейчас в теме
Проблема из-за обработчика ЗаписатьИсточникВРегистрДокументыПоТребованиюФНС. Некоторые объекты теперь регистрируются в регистре сведений ДокументыПоТребованиюФНС.

Обойти это можно через установку записываемому объекту "ОбменДанными.Загрузка = Истина", но так отключаются все внутренние обработчики, которые часто полезны, например, установка вспомогательных/служебных реквизитов объектов.

В обработчике есть дополнительный обход: для записываемого объекта добавить ДополнительныеСвойства.Вставить("ГрупповоеПерепроведение", Истина). Это конечно не комильфо, но эффект такой же как и у предыдущих советов .
21. rusakov1969 26.12.20 22:43 Сейчас в теме
Чтобы не трогать саму бухгалтерию в модуле экспорта пишем так

//ДокОбъект.ДополнительныеСвойства.Вставить("ЗаполнитьСчетаУчетаПередЗаписью", Истина);
// предыдущее не отрабатывает, т.к. пришлось установить ОбменДанными.Загрузка = Истина. См. ниже

Соединение.СчетаУчетаВДокументах.ЗаполнитьПередОтображениемПользователю(ДокОбъект);

// после обновления бухгалтерии
// {ОбщийМодуль.ЭлектронныйДокументооборотСКонтролирующимиОрганами.Модуль(2390)}: Ошибка при вызове метода контекста (ПолучитьОбработкуЭДО)
//Попытка передачи мутабельного значения результата метода ПолучитьОбработкуЭДО ().

ДокОбъект.ОбменДанными.Загрузка = Истина;
Показать
Оставьте свое сообщение

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