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

26.03.13

Разработка - Механизмы платформы 1С

Варианты решения проблемы на примере работы обработки 1С:Администратор.
Конфигурация: Розница 2.0. Клиент-Сервер. Обычное приложение.
Ошибка возникает при Записи/Проведении/ОтменаПроведения документа.

СПРАВКА:

Мутабельный тип (англ. Mutable type) - сложный тип данных в объектно-ориентированном программировании, значения которого (как правило - объекты) после своего создания допускают изменение своих свойств.
1С: Подробнее о типах данных 1С:Предприятие: http://v8.1c.ru/overview/CommonCommTypes.htm
1С: XML-сериализация, механизм (XML Serialization, Mechanism): http://v8.1c.ru/overview/Term_000000318.htm
tanka495: Клиент- серверные вызовы: //infostart.ru/public/86838/


Немного теории:

Попытка передачи мутабельного значения - это попытка передачи объекта на сервер(клиент), данные которого могут быть изменены на клиенте(сервере).
Попытка передачи мутабельного значения с клиента на сервер, с сервера на клиент 1С:Предприятия возникает только в клиент-серверной версии (SQL).

Передача параметров

Передача параметров функции (процедуре), выполняемой на сервере достаточно тонкий вопрос. Это в первую очередь связано с необходимостью передачи их между процессом сервера приложений и клиента. При переходе управления с клиентской части на серверную все передаваемые параметры сериализуются, передаются на сервер, где "распаковываются" и используются. При переходе с серверной части на клиентскую – обратный процесс. Здесь необходимо отметить, что данная схема корректно обрабатывает передачу параметров по ссылке и по значению. При передаче параметров действуют следующие отграничения:

Передавать между клиентом и сервером (в обе стороны) можно только немутабельные значения (т.е. значения которых не могут изменяться): примитивные типы, ссылки, универсальные коллекции, значения системных перечислений, хранилище значения. При попытке передать что-либо другое – аварийное завершение клиентского приложения (даже, если передавать некорректный параметр пытается сервер).

Не рекомендуется при передаче параметров передавать большие объёмы данных (например, строки более 1 миллиона символов), это может негативно сказаться на производительности сервера.

Нельзя передавать параметры, содержащие циклическую ссылку, причем как с сервера на клиент, так и обратно.При попытке передать такой параметр – аварийное завершение клиентского приложения (даже если передавать некорректный параметр пытается сервер).

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


Проблемная ситуация:

"Розница 2.0". Клиент-Сервер. Обычное приложение.
Обработка "1С:Администратор": //infostart.ru/public/100967/

МО: {ВнешняяОбработка.КонсольАдминистратора.МодульОбъекта(658)}:
Ошибка при вызове метода контекста (Записать):
Ошибка при выполнении обработчика - 'ПередЗаписью':{ОбщийМодуль.ПрефиксацияОбъектовСобытия.Модуль(215)}:
Ошибка при вызове метода контекста (ДатаИлиОрганизацияОбъектаИзменена):
Попытка передачи с клиента на сервер мутабельного значения 2-го параметра метода ДатаИлиОрганизацияОбъектаИзменена().

Обработка 1С:Администратор.МодульОбъекта

     ОбъектИЗМ.Записать(?(РежимЗаписи = Неопределено, РежимЗаписиДокумента.Запись, РежимЗаписи));

ОбщийМодуль.ПрефиксацияОбъектовСобытия.Модуль(215):

Процедура ПроверитьНомерОбъектаПоДатеИОрганизации(Объект)

     Если ПрефиксацияОбъектов.ДатаИлиОрганизацияОбъектаИзменена(Объект.Ссылка, Объект.Метаданные(), Объект.Дата, Объект.Организация) Тогда


ВАРИАНТ РЕШЕНИЯ № 1: (возможный, но неоптимальный):
УСТАНОВКА СВОЙСТВА ОБЩЕГО МОДУЛЯ.

В конфигураторе:

В Свойствах ОбщийМодуль.ПрефиксацияОбъектов активизировать флажок "Клиент обычное приложение".


ВАРИАНТ РЕШЕНИЯ № 2: (рекомендуемый):
ПЕРЕДАЧА ССЫЛКИ.

В конфигураторе:

ОбщийМодуль.ПрефиксацияОбъектовСобытия

Процедура ПроверитьНомерОбъектаПоДатеИОрганизации(Объект)

// БЫЛО.
// Если
ПрефиксацияОбъектов.ДатаИлиОрганизацияОбъектаИзменена(Объект.Ссылка, Объект.Метаданные(), Объект.Дата, Объект.Организация) Тогда
// СТАЛО.
Если
ПрефиксацияОбъектов.ДатаИлиОрганизацияОбъектаИзменена(Объект.Ссылка, Объект.Дата, Объект.Организация) Тогда

ОбщийМодуль.ПрефиксацияОбъектов

Процедура ДатаИлиОрганизацияОбъектаИзменена(Ссылка, Знач ДатаПослеИзменения, Знач ОрганизацияПослеИзменения) Экспорт

// СТРОКА ДОБАВЛЕНА.
МетаданныеОбъекта = Ссылка.Метаданные();


ВАРИАНТ РЕШЕНИЯ № 3: (возможный, но не в данном случае):
ИСПОЛЬЗОВАНИЕ XML-СЕРИАЛИЗАЦИИ (предложено w-divin).

Сериализация не работает, если в качестве записываемого объекта выступают Метаданные.
(Ошибка при вызове метода контекста (ЗаписатьXML): Значения данного типа не могут быть представлены в XML).

Рекомендуется использовать при необходимости передать Объект (СправочникОбъект, ДокументОбъект и т.д.).

Использовать функции типа:

// Выгрузка ХОбъекта в XML-строку:
Функция ЗаписатьВXML(ХОбъект)
     ЗаписьXML = Новый ЗаписьXML;                            // Тонкий клиент, сервер, толстый клиент, внешнее соединение.
     ЗаписьXML.УстановитьСтроку();
     ЗаписатьXML(ЗаписьXML, ХОбъект);                      // Сервер, толстый клиент, внешнее соединение.
     Возврат ЗаписьXML.Закрыть();
КонецФункции

// Загрузка ХОбъекта из XML-строки:
Функция ПрочитатьИзXML(СтрокаXML)
     ЧтениеXML = Новый ЧтениеXML;                           // Тонкий клиент, сервер, толстый клиент, внешнее соединение.
     ЧтениеXML.УстановитьСтроку(СтрокаXML);
     ХОбъект = ПрочитатьXML(ЧтениеXML);                 // Сервер, толстый клиент, внешнее соединение.
     Возврат ХОбъект;
КонецФункции


Тестовая среда:
Операционная система: Windows XP SP3, Windows 7 SP1.
Сервер баз данных: MS SQL Server 2008 R2.
1С:Предприятие (Клиент-Сервер):
   -
Платформа 8.2.15.
   -
Конфигурация: Розница 2.0.3.17.
   -
Режим совместимости: 8.2.13/НеИспользовать.
   -
Режим запуска: Обычное приложение. Толстый клиент.

МА! С уважением к сообществу МА!


См. также

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    3635    dsdred    48    

66

Как готовить и есть массивы

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    5045    YA_418728146    25    

62

Планы обмена VS История данных

Обмен между базами 1C Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6174    dsdred    36    

110

1С-ная магия

Механизмы платформы 1С Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    18205    SeiOkami    46    

116

Дефрагментация и реиндексация после перехода на платформу 8.3.22

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    11780    human_new    27    

72

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8567    YA_418728146    6    

139

Внешние компоненты Native API на языке Rust - Просто!

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6207    sebekerga    54    

93

Все скопируем и вставим! (Буфер обмена в 1С 8.3.24)

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    15546    SeiOkami    31    

103
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. tormozit 7133 09.04.12 23:51 Сейчас в теме
Под аварийным завершением процесса (клиента или сервера) ты имеешь ввиду недопустимую операцию (Problem signature и т.д.) и завершение процесса со стороны ОС?
Большинство таких ситуаций признаются производителем платформы ошибками и исправляются. Если у тебя есть пример воспроизведения такой ситуации, то отправь его в тех. поддержку 1с.
4. StepByStep 3666 10.04.12 10:56 Сейчас в теме
(1) tormozit,

В данном случае это не ошибка платформы.

Дело в том, что:

У Розницы 2.0 Основной режим запуска - УПРАВЛЯЕМОЕ ПРИЛОЖЕНИЕ.

В Управляемом приложении ЭТА ошибка не наблюдается.
Никаких флажков в данном конкретном случае дополнительно выставлять НЕ надо.
Конечно же, речь идет о типовой конфигурации.
5. tormozit 7133 10.04.12 11:11 Сейчас в теме
(4) Дай четкий ответ на вопрос "Под аварийным завершением процесса (клиента или сервера) ты имеешь ввиду недопустимую операцию (Problem signature и т.д.) и завершение процесса со стороны ОС?"
8. StepByStep 3666 10.04.12 11:18 Сейчас в теме
(5) tormozit,


"Под аварийным завершением процесса (клиента или сервера) ты имеешь ввиду недопустимую операцию (Problem signature и т.д.) и завершение процесса со стороны ОС?"


ЗАВЕРШЕНИЕ ПРОЦЕССА ОС НЕ ПРОИСХОДИТ. 1С-КА НЕ "ОТВАЛИВАЕТСЯ".
50. tormozit 7133 12.06.15 10:20 Сейчас в теме
(8) Думаю термин "аварийное завершение" в статье применяется неверно. Вместо него следует применить "исключение" или "ошибка".
В подсистеме Инструменты разработчика (и в ее портативном варианте в сочетании с БСП) я реализовал более универсальный вариант метода №3. В общем модуле ирОбщий сделано 2 функции: ЗапистьОбъектЛкс и УдалитьОбъектЛкс, имеющих параметр НаСервере. Эти функции передают более полное, однако не все содержимое мутабельного объекта на сервер в отличие от описанного здесь способа через ЗаписатьXML. Во всех инструментах, выполняющих запись данных, сделан флажок "Запись на сервере" для перенаправления записи объекта на сервер.

По сути мутабельностью называют все то, что платформа не умеет сериализовать и десериализовать при вызовах клиент-сервер, однако это еще не значит что сериализовать это невозможно. В случае объектов БД кроме содержимого, имеющего штатную сериализацию, мы имеем еще свойства ОбменДанными типа ПараметрыОбменаДанными и ДополнительныеСвойства типа Структура, но самое главное у объекта имеется модуль, допускающий объявление переменных. Поэтому для полной сериализации такого объекта потребуется сериализовать рекурсивно
1. Данные. Сериализация реализована например методом ЗаписатьXML.
2. Свойство ОбменДанными. Все используемые внутри типы просто сериализуются.
3. Свойство ДополнительныеСвойства. Тут могут быть произвольные значения. Поэтому существует риски зацикливания и прочее.
4. Все переменные модуля объекта. Тут могут быть произвольные значения. Поэтому существует риски зацикливания и прочее.
Вот п.4 и есть изначальная причина обзывания объекта данных мутабельным. Потом к нему уже добавился п.3.

В моей реализации п.4 не сериализуется, т.к. надежного способа в рантайме перечислить все переменные модуля мне неизвестно. А остальные 3 пункта у меня сериализуются при передаче на сервер и обратно.
proonec; lmnlmn; Deslime; softgarant; Nelli_A86; SirYozha; AndreykO; programteh; +8 Ответить
2. WKBAPKA 214 10.04.12 09:26 Сейчас в теме
решение, конечно - оригинальное, ничего не скажешь! я и сам до этого допер... только в этом случае, как выполнения функций и процедур в таком модуле, скажется на производительности?
6. StepByStep 3666 10.04.12 11:14 Сейчас в теме
(2) WKBAPKA,

Производительность не замерял.

Но из общих соображений, а мы говорим о ТОЛСТОМ клиенте, когда он содержит в себе весь необходимый функционал не думаю, что это как-то заметно скажется на производительности.

По своим наблюдениям, могу сказать на той же внешней обработке "КонсольАдминистратора", обычное приложение на ЛОКАЛЬНОМ SQL на хорошей машине с SSD работает шустро.
3. w-divin 10.04.12 09:56 Сейчас в теме
а что делать если конфигурация работает только в режиме управляемого приложения?
7. StepByStep 3666 10.04.12 11:14 Сейчас в теме
(3) w-divin,

В Управляемом приложении ЭТА ошибка не наблюдается.
14. w-divin 10.04.12 14:50 Сейчас в теме
(7)

это кто тебе такое сказал?
ошибка передачи мутабельного значения одинакова что в обычном, что в управляемом приложении.
Вот только вылечить её таким неправильным способом в УП уже не получиться.
15. StepByStep 3666 10.04.12 15:06 Сейчас в теме
(14) w-divin,


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

Совершенно верно.

На сколько я понимаю ситуацию: в режиме Управляемого приложения вообще не происходит никакой передачи с клиента на Сервер, т.е. после того, как сказали Объект.Записать(...) (Обработка "КонсольАдминистратора" строка 662) причем делается это на Сервере НИКАКОЙ передачи с клиента на сервер в данном случае не происходит и, как следствие, ошибки не возникает.
16. w-divin 10.04.12 15:48 Сейчас в теме
(15)
На сколько я понимаю ситуацию: в режиме Управляемого приложения вообще не происходит никакой передачи с клиента на Сервер

глубокое заблуждение.
В управляемом приложении намного больше передач с клиента на сервер и обратно.
И многое из того что в обычном приложении отрабатывает на клиенте (как в твоем случае), в УП будет передаваться на сервер (либо платформой, либо разработчиком).
И на самом деле твое "решение" не решение, а разрешение выполнять операцию на клиенте, что в случае УП просто не будет работать.

Плюс выполнение операций на клиенте - ИМХО верх глупости. есть множество способов передать на сервер мутабельное значение и выполнять обработку уже на сервере.
17. StepByStep 3666 10.04.12 16:22 Сейчас в теме
(16) w-divin,

В управляемом приложении намного больше передач с клиента на сервер и обратно.

Совершенно верно.

Но я писал о конкретной ситуации: Внешняя обработка в Рознице 2.0 и о том, что "передачи с клиента на сервер в данном случае не происходит".


разрешение выполнять операцию на клиенте

Совершенно верно.


... что в случае УП просто не будет работать.

Ошибаетесь - работает - проверено неоднократно.
20. w-divin 10.04.12 16:44 Сейчас в теме
(17)

Цитата

... что в случае УП просто не будет работать.

Ошибаетесь - работает - проверено неоднократно.


не работает. в УП на клиенте даже нет объекта как такового. всеголишь ДанныеФормыКоллекция и т.п.
и даже для того чтобы получить сам объект нужно передать управление на сервер:

УправляемаяФорма (ManagedForm)
РеквизитФормыВЗначение (FormAttributeToValue)
Синтаксис:

РеквизитФормыВЗначение(<ИмяРеквизита>, <Тип>)
Параметры:

<ИмяРеквизита> (обязательный)

Тип: Строка.
Имя реквизита формы, который необходимо преобразовать.
Может быть указан реквизит данных формы (см. описание параметра <Объект> метода ДанныеФормыВЗначение).
<Тип> (необязательный)

Тип: Тип.
Тип значения, получаемого из реквизита формы (данных формы). Если данный параметр не указан, то он также получается из реквизита формы. Если реквизит является составным типом и значение параметра не указано, генерируется исключение времени выполнения.
Возвращаемое значение:

Тип: Произвольный.

Описание:

Преобразует указанный реквизит формы в объект прикладного типа.

Доступность:

Сервер.
Показать
22. StepByStep 3666 10.04.12 17:31 Сейчас в теме
(20) w-divin,


не работает. в УП на клиенте даже нет объекта как такового


1. Сделал контрольную проверку - Обработка работает в Управляемом приложении без каких-либо изменения в типовой конфигурации.
Никаких проблем с записью и проведением документа не возникает.
А именно это и нужно.

2. Скажите, пожалуйста, Вы какую конфигурацию смотрите ?
Розница 2.0 или что-то другое ?
Потому, что см. прикрепленный файл.
Прикрепленные файлы:
23. w-divin 10.04.12 18:00 Сейчас в теме
(22)

я не смотрю конфигурацию - я говорю о проблеме, озвученной в шапке:

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

Решение проблемы


конфа у тебя как пример.
и получается что это не решение проблемы, а "заплатка" для конретной конфы (((
24. StepByStep 3666 10.04.12 18:04 Сейчас в теме
(23) w-divin,
А я говорю о конкретной ситуации, т.е. Конкретная конфигурация, Конкретная обработка.
25. StepByStep 3666 10.04.12 18:04 Сейчас в теме
(23) w-divin,
Хорошо, если о проблеме в общем.

Что Вы имели в иду когда

в УП на клиенте даже нет объекта как такового
28. w-divin 10.04.12 18:12 Сейчас в теме
(25)

рекомендую ознакомиться с документацией по управляемым формам. или почитать тут для начала: СсылкО
29. StepByStep 3666 10.04.12 18:17 Сейчас в теме
(28) w-divin,
Читать и перечитывать всегда полезно.

Есть еще такое: infostart
26. StepByStep 3666 10.04.12 18:11 Сейчас в теме
(23) w-divin,

А по большому счету эта "заплатка" и не нужна, т.к. Основной режим запуска Розница 2.0: Управляемое приложение.
27. StepByStep 3666 10.04.12 18:12 Сейчас в теме
(23) w-divin,
И, следовательно, этой проблемы и не возникает.
18. StepByStep 3666 10.04.12 16:27 Сейчас в теме
(16) w-divin,


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

???

Можно передать ссылку и уже в процедуре получить Метаданные и прочее (см. публикация раздел проблемная ситуация).
19. w-divin 10.04.12 16:42 Сейчас в теме
(18)
Можно передать ссылку


в большинстве случаев нельзя - потому как нужно передать именно измененный объект.
самый распространенный способ - XML-сериализация.
21. StepByStep 3666 10.04.12 17:22 Сейчас в теме
(19) w-divin,

Возможен и такой вариант.
9. WKBAPKA 214 10.04.12 11:31 Сейчас в теме
логически можно предположить, что если установлен только флажок "Сервер", значит на клиенте при запуске этот модуль не компилируется?!
10. StepByStep 3666 10.04.12 11:40 Сейчас в теме
(9) WKBAPKA,


логически можно предположить, что если установлен только флажок "Сервер", значит на клиенте при запуске этот модуль не компилируется?!


Если говорить об управляемом приложении, то логически ДА, ибо в этом случае Флажок "Клиент (обычное приложение)" вообще скрыт (Установка в Конфигураторе "Сервис-Параметры-Общие" выставлено Редактирование конфигурации для режимов запуска: Управляемое приложение).
11. WKBAPKA 214 10.04.12 11:49 Сейчас в теме
(10)

теоретически и в обычном приложении такое должно быть, иначе смысл?
13. StepByStep 3666 10.04.12 12:02 Сейчас в теме
(11) WKBAPKA,


теоретически и в обычном приложении такое должно быть, иначе смысл?


Как раз в обычном приложении эта проблема и возникает (в управляемом - нет проблемы), потому что происходит ПЕРЕДАЧА значения с клиента на сервер, а передача не разрешена.
На сервере это значение может быть и должно быть обработано при условии, что оно получено сервером.


т.е. если 1С мудабельное :) значение не может обработать на сервере, значит обрабатывает его на клиенте

На толстом клиенте это значение в принципе может быть обработано, но в данном конкретном случае производится передача на сервер, а передача не разрешена.
12. WKBAPKA 214 10.04.12 11:49 Сейчас в теме
т.е. если 1С мудабельное :) значение не может обработать на сервере, значит обрабатывает его на клиенте
30. Miha.L 13.04.12 00:59 Сейчас в теме
Мудабельные значения ...
Спасибо. Спасибо. Спасибо. (варианта-то три)
2 вар. использовать.
31. StepByStep 3666 13.04.12 09:38 Сейчас в теме
(30) Miha.L,
Пожалуйста. Пожалуйста. Пожалуйста. (варианта-то три)
Право на существование имеют все три, надо смотреть по конкретной ситуации.
32. goodwin12 13.04.12 17:55 Сейчас в теме
режиме Управляемого приложения вообще не происходит никакой передачи с клиента на Сервер, т.е. после того, как сказали Объект.Записать(...) (Обработка "КонсольАдминистратора" строка 662) причем делается это на Сервере НИКАКОЙ передачи с клиента на сервер в данном случае не происходит и, как следствие, ошибки не возникает.
33. gaglo 18.04.12 11:20 Сейчас в теме
Почему не попользоваться парочкой ЗначениеВСтрокуВнутр / ЗначениеИзСтрокиВнутр ?
34. pt_olga 61 20.06.12 17:51 Сейчас в теме
У Розницы 2.0 Основной режим запуска - УПРАВЛЯЕМОЕ ПРИЛОЖЕНИЕ.


вот и в нашем Итилиуме на поддержке походу основной режим запуска - управляемое :(

конфа на поддержке,
ошибку сами не исправляют,
вменяемой отчетности нет, пишем сами... а сами хорошо пишем для толстого и пока плёха под тонкого
:(

ах, да! Автору статьи спасибо!)
35. soulsteps 73 21.06.12 00:11 Сейчас в теме
Проблема хорошая...автор молодец, четко и по делу и на "живом" мясе...Мое мнение - при правильной организации своего кода (ну или своего решения на базе 1С) таких проблем возникать не будет, в статье основные "проблемные" ситуации автор хорошо изложил...
36. пользователь 21.06.12 00:45
Сообщение было скрыто модератором.
...
37. OBEH 09.07.12 08:18 Сейчас в теме
Загрузка данных обработкой "Универсальный обмен данными в формате XML".
Выдало ошибку по поводу "мутабельности". Ссылка поиска привела сюда, в том числе.
Автору большое спасибо.
Попробовал предложенные варианты. Помогло только - запуск приложения в файловом режиме.
Не очень кашерно. Но, пока только этот вариант. Затем из файловой базы в SQL.
Хочется загружать сразу в SQL
38. v.l. 434 17.07.12 13:40 Сейчас в теме
Можете поменять расцветку в оформлении статьи?
42. StepByStep 3666 26.03.13 22:45 Сейчас в теме
39. yuraos 991 29.01.13 09:31 Сейчас в теме

Передавать между клиентом и сервером (в обе стороны) можно только немутабельные значения (т.е. значения которых не могут изменяться):
примитивные типы, ссылки, универсальные коллекции, значения системных перечислений, хранилище значения.

Насчет подчеркнутого не совсем так...
...покрайней мере под 8.1 столкнулся со следующим:
- "Структура" канает для передачи туда - суда (хотя и может быть изменена на сервере);
- а "ТаблицаЗначений" и "ДеревоЗначений" - уже не какнают.
аварийного заверщения работы клиента при этом не наблюдается,
наверное из-за того, что под 8.1 - он толстый

Так что с мутабельностью что-то намудрили разработчики платформы.
;)
ixijixi; StepByStep; +2 Ответить
40. yuraos 991 29.01.13 09:33 Сейчас в теме
(39) PS,
Кроме передачи значений на сервер есть еще такая функция
ЗначениеЗаполнено()
Она тоже не жалует "мутабельные" и завершается аварийно.
StepByStep; +1 Ответить
41. StepByStep 3666 26.03.13 19:53 Сейчас в теме
(39) yuraos, (40) yuraos,
Спасибо. Да. Все так.
43. diver.sun 21 21.05.13 17:29 Сейчас в теме
Меня периодически спасает значениевстрокувнутр и значениеизстрокивнутр
44. 1985Alex1985 18.10.13 00:13 Сейчас в теме
Столкнулся на днях с такой же пробемой в УТ3 редакция 3.0.4.3

Ошибку получаем при записи объектов (элемент справочника, новый документ) программно в обычном приложении в серверном варианте хранения БД.

Записываю примерно так:
Процедура КнопкаВыполнитьНажатие(Кнопка)
	Док = Документы.ЗаказКлиента.СоздатьДокумент(); 
    Док.Дата = ТекущаяДата();
    Док.Записать();
КонецПроцедуры

Получаю ошибку примерно такую:
Скрытый текст


Решений найдено 2.

1. Если вам не критично снять конфу с поддержки то в свойствах модуля на который ругается отлажчик надо
выставить свойство(Клиент обычное приложение).
З.Ы.: <Совет от КЭПА>: Если у вас в ОМ нет такого свойства зайдите в отладчике Сервис-Параметры - установите вариант "Управляемое и Обычное приложение" и св-во появится.

2. Если снимать конфу с поддержки не позволяет религия, нужно процелуру записи переделать под управляемый вариант, примерно так:

&НаКлиенте
Процедура ВыполнитьКлиент(Команда)
	
	ВыполнитьСервер();
	Ссылка = ВыполнитьСервер();
	ОповеститьОбИзменении(Ссылка);
	
КонецПроцедуры

&НаСервере
Функция ВыполнитьСервер();
	
	Док = Документы.ЗаказКлиента.СоздатьДокумент(); 
    Док.Дата = ТекущаяДата();
    Док.Записать();
	
	Возврат Док.Ссылка;
	
КонецФункции
Показать
46. StepByStep 3666 29.10.13 21:56 Сейчас в теме
(44) 1985Alex1985,
Да флажок или ссылка, ссылка предпочтительней.
45. lsd_777 28.10.13 17:03 Сейчас в теме
Читал, читал, ничего не понял. Подскажите по моей проблеме Розница 2.0.8.11 обычное приложение можно ли как то безболезненно это решить?
47. StepByStep 3666 29.10.13 22:06 Сейчас в теме
(45) lsd_777,
Поздравляю, Вы решили проблему самостоятельно.
Только вот, что странно. У меня в Рознице 2.0.8.11 (РМК - обычное приложение) такого не было и нет.
Скидки используются. По отладчику не смотрел.
48. lsd_777 30.10.13 07:08 Сейчас в теме
(47) У меня как пошло с версии 8.6, так и до 8.11 оставалось, пока не исправил. Времени уходит очень много на поиск решения.
57. Michael_1c 14.08.19 22:42 Сейчас в теме
(47) Андрей М. Скажите пожалуйста, как по вашему мнению лучше всего развиваться программисту 1с? Я имею ввиду что читать, или ходить на курсы, или практиковаться? И в какой последовательности?
Понимаю, что это не в тему статьи, но там не поймешь от кого получаешь совет, от еще одного стажера или от профи. Извините, если нужно могу удалить комент
49. bagirma 08.04.15 09:10 Сейчас в теме
"ВАРИАНТ РЕШЕНИЯ № 3:" очень помог.
Спасибо.
51. valek82 25.06.18 08:48 Сейчас в теме
52. kiyamov 3 17.07.18 13:58 Сейчас в теме
А чем ХранилищеЗначения не канает?
53. Rans 6 20.12.18 17:42 Сейчас в теме
Была похожая проблема в Рознице 2.2 при вызове метода Записать() во внешней обработке через COM соединение. Причина оказалась в обработчике события при записи, код которого был в не типовом общем модуле без флага "Внешнее соединение".
user809597; akR00b; +2 Ответить
54. akR00b 22 25.12.18 08:30 Сейчас в теме
(53)это сплошь и рядом, сегодня тоже наткнулся.
55. ccserg 63 04.01.19 11:15 Сейчас в теме
С Новым годом !
ЗУП КОРП 2,5 порадовали этой ошибкой , в справках 2 НДФЛ ,
применил 1 способ
56. Alex7774 33 25.01.19 12:55 Сейчас в теме
Спасибо. Способ изменения свойства сработал в УПП на одном из общих модулей.
Оставьте свое сообщение