попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода

1. digorec88 19.03.24 10:09 Сейчас в теме
Добрый день. Есть обработка написанная на обычных формах в которой создаются элементы справочников, документов. Запускаю ее в конфигурации на управляемых формах. При попытке создать элементы пишет ошибку в заголовке Темы. Свойства общих модулей менять бесполезно. Их куча. Вопрос. Как записать элемент справочника, не передавая на сервер?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 79 19.03.24 10:19 Сейчас в теме
(1)о коде и месте возникновения ошибки в нем мы конечно же должны догадаться телепатически?
3. digorec88 19.03.24 10:21 Сейчас в теме
(2) Я написал выше. При записи элемента любого справочника(контрагента, организации и т.д)
6. nomad_irk 79 19.03.24 10:25 Сейчас в теме
(3)Тогда объясните, как вам удалось на клиенте создать элемент справочника
7. digorec88 19.03.24 10:42 Сейчас в теме
(6) в том то и проблема что не создает, т.к база клиент-серверная.
10. nomad_irk 79 19.03.24 10:51 Сейчас в теме
(7)Содать элемент <> записать его в БД.
Где именно возникает ошибка:
при
Справочники.<ИмяСправочника>.СоздатьЭлемент();

или при
СправочникОбъект.Записать()

?

Так понимаю, управляемую форму для обработки вы сделали, перенесли в нее код из обычной формы копи-пастом, так?
11. digorec88 19.03.24 10:53 Сейчас в теме
(10) СправочникОбъект.Записать() Вот здесь.
Нет. Наоборот. Обработка на обычных формах. Запускается в управляемом приложении
12. nomad_irk 79 19.03.24 10:56 Сейчас в теме
(11)Обработка только с обычной формой в управляемом приложении запустится с "пустой" формой, должна быть управляемая форма.
15. digorec88 19.03.24 11:01 Сейчас в теме
(12) Не согласен. В свойствах конфы использовать обычные в управляемом.
22. nomad_irk 79 19.03.24 11:58 Сейчас в теме
(15)У меня пока один вопрос остался: для чего запускать обработку в режиме управляемого приложения в конфигурации, у которой основной режим запуска - обычное приложение?

Вы либо всю конфу в управляемый режим переводите и обработку в том числе, либо используйте обычное приложение.
23. digorec88 19.03.24 12:04 Сейчас в теме
(22)Ошибка при выполнении обработчика - 'ПередЗаписью'
по причине:
Попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода ЗаписатьВерсиюОбъекта ().
27. nomad_irk 79 19.03.24 12:12 Сейчас в теме
(23)Так происходит потому, что начало записи происходит на клиенте и дальше по стеку вызовов необходимо перейти на сервер.

В доступной мне конфигурации процедура выглядит следующим образом:

// Записывает версию объекта в регистр сведений
// Параметры
// Ссылка        - СправочникСсылка / ДокументСсылка - ссылка на объект ИБ
// ЧислоВерсийОбъекта - Число - число версий объекта
// ХранилищеДанных - ХранилищеЗначения - хранилище с объектом ИБ (сериализованным в Fast InfoSet)
//
Процедура ЗаписатьВерсиюОбъекта(знач Ссылка,
								знач ЧислоВерсийОбъекта,
								знач ХранилищеДанных,
								Знач Организация) Экспорт
	
	УстановитьПривилегированныйРежим(Истина);
	
	МенеджерЗаписиВерсииОбъектов = РегистрыСведений.ВерсииОбъектов.СоздатьМенеджерЗаписи();
	// Измерения
	МенеджерЗаписиВерсииОбъектов.Объект			= Ссылка;
	МенеджерЗаписиВерсииОбъектов.НомерВерсии	= Число(ЧислоВерсийОбъекта) + 1;
	МенеджерЗаписиВерсииОбъектов.Организация	= Организация;
	// Ресурсы
	МенеджерЗаписиВерсииОбъектов.ВерсияОбъекта	= ХранилищеДанных;
	// Реквизиты
	МенеджерЗаписиВерсииОбъектов.АвторВерсии	= ПараметрыСеанса.ТекущийПользователь;
	МенеджерЗаписиВерсииОбъектов.ДатаВерсии		= ТекущаяДата();
	
	МенеджерЗаписиВерсииОбъектов.Записать();
	
КонецПроцедуры
Показать


мутабельных значений тут не предполагается.
28. digorec88 19.03.24 12:14 Сейчас в теме
(27) но почему тогда он на этот обработчик ругается, если там нет мутабельных?
29. spacecraft 19.03.24 12:15 Сейчас в теме
(27) это не та процедура.
В ошибке указана процедура привязанная к подписке на событие:
Процедура ЗаписатьВерсиюОбъекта(Источник, Отказ) Экспорт
	
	// Безусловная проверка на ОбменДанными.Загрузка не требуется, т.к. в момент записи
	// версионируемого объекта при обмене необходимо сохранить его текущую версию в истории версий.
	Если Источник.ОбменДанными.Загрузка И Источник.ОбменДанными.Отправитель = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ВерсионированиеОбъектов.ЗаписатьВерсиюОбъекта(Источник, Ложь);
	
КонецПроцедуры
Показать

Где с клиента происходит попытка передачи Объект в первый параметр Источник на сервер. На что и ругается.
digorec88; +1 Ответить
31. digorec88 19.03.24 12:16 Сейчас в теме
33. digorec88 19.03.24 12:18 Сейчас в теме
34. spacecraft 19.03.24 12:20 Сейчас в теме
(33) это уже по 3 кругу?
Тут нет простых решений.
Актуальные решения уже были озвучены.
37. digorec88 19.03.24 12:26 Сейчас в теме
(34)решение с добавлением общего модуля с вызовом сервера не отработало. Добавил. Кинул туда функцию. Всё равно ругается
38. spacecraft 19.03.24 12:31 Сейчас в теме
(37)
Кинул туда функцию.

А в саму функцию уже Объект передаете? Те же грабли.
Только полное создание в общем серверном модуле самого объект, его заполнение и саму запись нужно делать. И флаги только Сервер и Вызов сервера. Никаких других флагов быть не должно.
40. digorec88 19.03.24 12:37 Сейчас в теме
(38) создаю в ней, записываю, и возвращаю ссылку
36. Sashares 35 19.03.24 12:24 Сейчас в теме
(33)У общего модуля поставить флаг Клиент Обычное приложение))
39. digorec88 19.03.24 12:32 Сейчас в теме
(36)Ошибка при вызове метода контекста (СоздатьКонтрагента)
{Расширение1 Обработка.КлиентБанк.Форма.ФормаКонтрагентов.Форма(29)}:Если НЕ at_Расширение.СоздатьКонтрагента(Строка,ФлажокОткрытияФормКотранетов).Пустая() Тогда

по причине:
Ошибка при вызове серверного метода.
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'param':
форма: Элемент
имя: {http://v8.1c.ru/8.2/managed-application/modules}param
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'СтрокаДереваЗначений'
41. digorec88 19.03.24 12:47 Сейчас в теме
(39)коллекцию кидаю на сервер((
42. nomad_irk 79 19.03.24 12:57 Сейчас в теме
(41)Если коллекция - ТЗ, то у меня для вас плохие новости.... :)
43. digorec88 19.03.24 13:10 Сейчас в теме
44. nomad_irk 79 19.03.24 13:22 Сейчас в теме
(43)оно так же мутабельное
45. digorec88 19.03.24 16:12 Сейчас в теме
(44)Поместил в структуру. Перестал ругаться. Всем спасибо.
25. digorec88 19.03.24 12:06 Сейчас в теме
(22)Основной режим запуска как раз таки Управляемое приложение
35. nomad_irk 79 19.03.24 12:21 Сейчас в теме
(25)Вот как выглядит палитра свойств конфигурации, разработанной сразу в управляемом режиме
Если конфигурация была изначально разработана для обычного приложения, то да, будут видны флажки использования форм в обычном и управляемом режиме.
Прикрепленные файлы:
4. digorec88 19.03.24 10:23 Сейчас в теме
(2) Я запускаю обработку написанную на обычных формах, в управляемом приложении.
13. Sashares 35 19.03.24 10:57 Сейчас в теме
(4)Переписать обработку на управляемые формы, это конечно, не наш путь?
14. digorec88 19.03.24 10:59 Сейчас в теме
(13) Поэтому и спрашиваю тут, чтобы не красноглазить
16. Sashares 35 19.03.24 11:01 Сейчас в теме
(14)Это самое правильное решение, переписать обработку так, чтобы она работала в тонком клиенте на управляемых формах.
17. digorec88 19.03.24 11:04 Сейчас в теме
(16) Есть еще другие варианты? Вообще есть ли такая возможность записывать объект в обычных формах на управляемом приложении в клиент-серверном варианте работы?
18. Sashares 35 19.03.24 11:10 Сейчас в теме
(17)
В общем случае - да.
В частном - это зависит от конфигурации.
Вам уже написали, что могут быть подписки, вызовы общих модулей и тд. которые не адаптированы для работы конфигурации в обычном приложении.
Без кода обработки, полного текста ошибок ничего детальнее сказать нельзя.
5. digorec88 19.03.24 10:24 Сейчас в теме
(2) В Файловом варианте никаких проблем. Но тут клиент-сервер
8. spacecraft 19.03.24 10:44 Сейчас в теме
(1) не видя код тяжело что-либо советовать.
Но еще, не учитываете подписки на события, которые могут выполняться при записи объектов. И они ничего не знают про формы.
9. digorec88 19.03.24 10:50 Сейчас в теме
(8) Хорошо. По другому скажу. Как записать элемент справочника в толстом клиенте на управляемых формах? Режим работы - клиент-сервер.
19. spacecraft 19.03.24 11:24 Сейчас в теме
(9) по другому скажу. В данном случае Обработкой обычное приложение - никак.
Все подписки располагаются в общих модулях с флагами "Сервер" и "Внешнее соединение".
В обработке на клиенте (Толстый клиент обычное приложение) создаете объект. При записи срабатывает подписка на событие, в которое на Сервер идет попытка передачи этого объекта и его возможное изменение. Из-за этого и ошибка, что возможно изменение и на сервере и на клиенте Объекта.

PS. Если приведете полный текст ошибки, то там скорее всего будет видно имя метода из подписки на событие.
20. digorec88 19.03.24 11:32 Сейчас в теме
(19) их куча. Поэтому и спрашиваю, есть какое нибудь другое решение. Исправлять все общие модули обработчиков подписок на событий нет смысла
21. spacecraft 19.03.24 11:42 Сейчас в теме
(20)
Поэтому и спрашиваю, есть какое нибудь другое решение

Решение уже было озвучено: переписать на тонкий клиент.

Ну, или добавлять общий серверный модуль с вызовом сервера и там делать заполнение и записывать объект. Но это решение не очень...
Проще обработку на тонкий клиент переделать.
24. digorec88 19.03.24 12:05 Сейчас в теме
(21)Ошибка при выполнении обработчика - 'ПередЗаписью'
по причине:
Попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода ЗаписатьВерсиюОбъекта ().
26. spacecraft 19.03.24 12:09 Сейчас в теме
(24)
ЗаписатьВерсиюОбъекта ()

Это как раз метод подписки на событие.
30. digorec88 19.03.24 12:15 Сейчас в теме
32. spacecraft 19.03.24 12:18 Сейчас в теме
(30)
Там нет бсп...

не верю... (с)
в любом случае подписка есть и процедура тоже. Она может содержать другой код, но сам факт передачи наличествует.
Оставьте свое сообщение

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