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

1) При работе в файловой базе все находится в памяти вашего компьютера — тут нет никаких проблем. Но когда дело касается взаимодействия вашего компьютера-клиента с компьютером-сервером, то сервер уже не имеет доступа к вашей оперативке — передаваемая в обработку информация пакуются в контейнеры и отправляются по сети. Пока все понятно?

2) При программировании на платформе 1С при работе с базой данных мы работаем или с Ссылками, или с полученными с их помощью Объектами. Ссылка отличается от Объекта своей неизменностью — это просто адрес с указанием типа данных и уникального идентификатора. Но Объект в отличии от Ссылки можно изменить и записать назад в базу по адресу этой Ссылки. Думаю это тоже понятно.

3) Что вы пытаетесь сделать? У вас локально в памяти есть измененный Объект (в переменной Источник) и вы хотите передать его на сервер для дальнейшей параллельной обработки и тут и там. К сожалению мы работаем не на квантовых компьютерах и потому эффект запутанности нам недоступен. Мы можем править Объект или локально, или на сервере. Но не одновременно в двух местах!

Итого. Судя по тексту вашей процедуры, вам вообще Источник передавать не нужно — передавайте сразу ДокументОснования. Но если предполагается, что на сервере Объект нужно изменить, то а) запишите его локально, б) передайте на него Ссылку, в) на сервере прочитайте по Cсылке, г) после изменения на сервере запишите Объект в базу, д) после возвращения потока управления на клиент, прочитайте Объект из базы по Ссылке.

Я
   maker1992

29.03.18 — 03:53

Здравствуйте.

Настроен автоматический обмен между УТ и Розницей. При передачи документов из Розницы в УТ, УТ запускается в режиме COM-соединения. После обмена имеются предупреждения «Попытка передачи с клиента на сервер мутабельного значения» и документы с таким предупреждением не проводятся, хотя вручную их можно провести. Т. е. я так понимаю, проблема возникает из-за COM-соединения.

Как быть в таком случае?

   h-sp

1 — 29.03.18 — 06:13

(0) ну что-то дорабатывали внутри УТ и криво доработали. Не учли COM-соединение

   maker1992

2 — 29.03.18 — 06:44

(1) Конфу не дорабатывал.

В описании конфигураций сказано, что обмен должен работать в данных версиях Розницы и УТ.

   maker1992

3 — 29.03.18 — 06:51

(2) Ошибка вылезает из-за передачи в процедуру структуры, но в справке написано, возможен обмен с сервером.

   hhhh

4 — 29.03.18 — 07:07

(3) внутри структуры у вас мутабельное значение. ДокументОбъект скорее всего.

   maker1992

5 — 29.03.18 — 08:59

В свойствах модуля, где находится вызываемая процедура, поставил галку «Вызов сервера» — ошибка больше не возникает.

   maker1992

6 — 29.03.18 — 08:59

+(5) и еще галку «Внешнее соединение».

   MakaMaka

7 — 29.03.18 — 09:10

(5) (6) и как это связано?

   Flover

8 — 29.03.18 — 09:10

(0)

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

все остальное формируется на другой стороне.

если передавать объект, форму и т.п. — выползет как раз вот такая ошибка.

   MakaMaka

9 — 29.03.18 — 09:18

(8) Подтвержаю инфу. Через ком передается только примитивные типы данных. Так же пердается Неопределено.

  

maker1992

10 — 29.03.18 — 09:50

(7) Ну COM-соединение — это же вроде внешнее соединение.

TurboConf — расширение возможностей Конфигуратора 1С

Я
   maker1992

29.03.18 — 03:53

Здравствуйте.

Настроен автоматический обмен между УТ и Розницей. При передачи документов из Розницы в УТ, УТ запускается в режиме COM-соединения. После обмена имеются предупреждения «Попытка передачи с клиента на сервер мутабельного значения» и документы с таким предупреждением не проводятся, хотя вручную их можно провести. Т. е. я так понимаю, проблема возникает из-за COM-соединения.

Как быть в таком случае?

   h-sp

1 — 29.03.18 — 06:13

(0) ну что-то дорабатывали внутри УТ и криво доработали. Не учли COM-соединение

   maker1992

2 — 29.03.18 — 06:44

(1) Конфу не дорабатывал.

В описании конфигураций сказано, что обмен должен работать в данных версиях Розницы и УТ.

   maker1992

3 — 29.03.18 — 06:51

(2) Ошибка вылезает из-за передачи в процедуру структуры, но в справке написано, возможен обмен с сервером.

   hhhh

4 — 29.03.18 — 07:07

(3) внутри структуры у вас мутабельное значение. ДокументОбъект скорее всего.

   maker1992

5 — 29.03.18 — 08:59

В свойствах модуля, где находится вызываемая процедура, поставил галку «Вызов сервера» — ошибка больше не возникает.

   maker1992

6 — 29.03.18 — 08:59

+(5) и еще галку «Внешнее соединение».

   MakaMaka

7 — 29.03.18 — 09:10

(5) (6) и как это связано?

   Flover

8 — 29.03.18 — 09:10

(0)

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

все остальное формируется на другой стороне.

если передавать объект, форму и т.п. — выползет как раз вот такая ошибка.

   MakaMaka

9 — 29.03.18 — 09:18

(8) Подтвержаю инфу. Через ком передается только примитивные типы данных. Так же пердается Неопределено.

  

maker1992

10 — 29.03.18 — 09:50

(7) Ну COM-соединение — это же вроде внешнее соединение.

TurboConf — расширение возможностей Конфигуратора 1С

ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку «Обновить» в браузере.

Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.

Содержание:

1.       Что собой представляет мутабельные значения в 1С?

2.       Как проверить заполненные мутабельные значения в 1С?

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

1.   Что собой представляет мутабельные значения в 1С?

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

Мутабельный тип (в переводе с английского Mutable – изменчивый) – это сложный тип данных в 1С, который может менять свои свойства уже после создания.

К мутабельным типам в языке программирования 1С относятся:

·         объект;

·         форма;

·         список значений;

·         таблица значений.

Исходя из этого все остальные типы являются не мутабельными. К таким типам значений следует относить простые или так называемые примитивные типы, сложные, но неизменчивые типы и предопределенные типы.

Простые (примитивные) типы:

·         строка;

·         число;

·         дата;

·         булево.

Ссылка является сложным типом, который, однако, мы не можем изменить непосредственно. Для этого требуется получение объекта через конструкцию Ссылка.ПолучитьОбъект().

Предопределенным типом является цвет.

С описанием типов разобрались. Следующий вопрос, который, думаю, заинтересует многих – как же проверить заполненность мутабельных значений в 1С.  

2.   Как проверить заполненные мутабельные значения в 1С?

При переходе со старой версии платформы 1С:Предприятие (до 8.2) на актуальную нередко в момент тестирования или эксплуатации возникают ошибки проверки мутабельного значения на заполненность. Это связано с особенностью глобальной функции ЗначениеЗаполнено(). Ранее использовалась гл. функция НеЗаполнено(), которая проверяла, хоть и медленнее, но более эффективно. То есть в новых версиях платформы 1С Предприятие подобная проблема может возникнуть в тот момент, когда проверяем значение, не зная его типа.

Зачастую ошибки подобного толка касаются таких типов как формы и элементы форм, списки значений (таблица, список, дерево), COM- объекты и т.д.

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

Для проверки типа данных 1С мы можем использовать конструкцию типа:

проверки типа данных 1С

В данном случае 1С проанализирует первое условие, и если типы совпадут, дальнейшее условие отработано не будет.

В некоторых случаях целесообразно сделать проверку на примитивные типы, для этого заранее создадим массив примитивных типов:

создадим массив примитивных типов

Далее последует проверка:

проверка на примитивные типы

Специалист компании ООО «Кодерлайн»

Кулажевский Сергей Дмитриевич

Описание ошибки
При попытке сформировать результат отчета при работе с СКД в консоли разработчика, когда активна строка с пользовательскими настройками, возникает ошибка следующего содержания:

Попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода XMLТекст ().
{InfostartToolkit Обработка.ИТК_КонсольРазработчика.Форма.Основная.Форма(5126)}: ИТК_КонсольРазработчикаДанныеКлиент.ИзменитьПоле(ЭтотОбъект, Строка, «Текст», ИТК_СКДВызовСервера.XMLТекст(КомпоновщикНастроек.ПользовательскиеНастройки));
{InfostartToolkit Обработка.ИТК_КонсольРазработчика.Форма.Основная.Форма(513)}: СохранитьИзмененныеДанныеСтроки();
{InfostartToolkit Обработка.ИТК_КонсольРазработчика.Форма.Основная.Форма(2376)}: ЗагрузитьДанныеВКомпоновщикНастроек(ПолныеДанныеСКД(ТекущаяСтрока));
{InfostartToolkit Обработка.ИТК_КонсольРазработчика.Форма.Основная.Форма(563)}: ОбновитьЭлементыФормы();

по причине:
Попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода XMLТекст ().

Сценарий воспроизведения
Шаги по воспроизведению:

  1. Открыть консоль разработчика.
  2. Добавить в дерево данных «Схему компоновки данных».
  3. Добавить в подчинение новой СКД «Пользовательскую настройку СКД».
  4. Выделив строку пользовательских настроек в дереве данных нажать в главном меню кнопку «Выполнить».
  5. Появится окно с сообщение об ошибке, текст которого приведен выше.

Окружение:

Infostart Toolkit 1.6.3

Платформа: 8.3.16.1876 (Linux x86-64)
Режим БД: клиент-серверный

Конфигурация:
1С:ERP. Управление холдингом (3.0.4.4)
Основной режим запуска: Управляемое приложение
Режим совместимости: Версия8_3_14
Версия БСП: 3.1.3.264

Клиент:
ОС: Windows x86-64 (Microsoft Windows 10 version 10.0 (Build 17763))
Язык: ru
Режим запуска: Управляемое приложение

При загрузке выдает сообщение «Попытка передачи мутабельного значения 1-го параметра метода СерверОбновитьПользователей». Клиент-серверный вариант. скорее всего из-за строчки «МассивПользователейОнЛайн = ПолучитьСоединенияИнформационнойБазы;» Строчка выполняется в привеллигрованном модуле. В файлом варианте работает. (Есстесно) Как лечить? Хочется, что бы функция определения подключенных пользователей работала и в серверном и файловом варианте..

я не уверен что именно здесь…. но наверно..

#Если клиент тогда #КонецЕсли

Да.. имеенно здесь ошибка…  Но теперь другого рода: «Попытка вызова функции , возвращающей мутабельной значение». Что такое мутабельное значение??

имеено так и сделал:        #Если Клиент Тогда        АктивныеПользователи = ПолучитьАктивныхПользователейКлиент;    #ИначеЕсли Сервер Тогда это в общем модуле 1, (стоят галки — кдиент, сервер, внешнее соединение) Функции ПолучитьАктивныхПользователейКлиент, ПолучитьАктивныхПользователейСервер в другом модуле (галки — сервер, привелигированный).

изменяемое значение — нельзя на сервере

+ например, такое значение нельзя написать при объявлении функции как значение по умолчанию, типа

В общем: у тебя в функции на сервер передаётся объект, который на сервере не может быть инициализирован.

Хм… мне впринципе в привелигированном модуле надо выполнить только

возьми функцию в {#Если Клиент}

+ ПолучитьСоединенияИнформационнойБазы;, а все остальное запихнуть в обычный??

какую??????????? ПолучитьАктивныхПользователейКлиент ?? она выполняется в модуле у которого только «Сервер». Он разве будет выполнять на клиенте??

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

+ какая хрен разница где ты список пользователей получишь

большая! если не давать пользователям админские права, то выполнить эту функцию они могут только в привилигированном модуле.

Все равно ошибка… вывод- НЕ РАБОТАЕТ ИЗНАЧАЛЬНО!=((

На какой строке ошибка случается, можешь по-человечески указать? И описание параметров функции, при вызове которой ругается.

Млин.. что тут не понятного… она одна…. Вопрос возник следующий — как можно определить в каком варианте запущена баз в «файловом» или «клиент-серверном»?

Объект «Массив» допускает обмен с сервером, так что попробуй:

+ Должно работать и на сервере, и на клиенте…

Не работает в привилигированном модуле при работе в варианте клиент-сервер. Это факт! Сделал вот так: ……В том же модуле: Функция ПолучитьАктивныхПользователейКлиентСервер

И где в указанной строке то, на что указывает ошибка? «Попытка передачи мутабельного значения 1-го параметра метода СерверОбновитьПользователей», а конкретнее: 1. где первый параметр? 2. где метод СерверОбновитьПользователей?

1) ну как видишь, функция без параметров. 2) см и . В жаловалась на функцию «ПолучитьАктивныхПользователейКлиент». (СерверОбновитьПользователей — это название старой функции в модуле.. уже не восстановлю)..

М-да?!?! Почему тогда вот это работает на клиент/сервере у меня в модуле приложения в процедуре «ПередНачаломРаботыСистемы»:

у тя у всех пользователей стоят права «Административные функции» и «Активные пользователи»?? У меня, тока у меня.

добавил пользователям право «Активные пользователи». и сделал как в .

Тэги:

Комментарии доступны только авторизированным пользователям

Описание ошибки
При попытке сформировать результат отчета при работе с СКД в консоли разработчика, когда активна строка с пользовательскими настройками, возникает ошибка следующего содержания:

Попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода XMLТекст ().
{InfostartToolkit Обработка.ИТК_КонсольРазработчика.Форма.Основная.Форма(5126)}: ИТК_КонсольРазработчикаДанныеКлиент.ИзменитьПоле(ЭтотОбъект, Строка, «Текст», ИТК_СКДВызовСервера.XMLТекст(КомпоновщикНастроек.ПользовательскиеНастройки));
{InfostartToolkit Обработка.ИТК_КонсольРазработчика.Форма.Основная.Форма(513)}: СохранитьИзмененныеДанныеСтроки();
{InfostartToolkit Обработка.ИТК_КонсольРазработчика.Форма.Основная.Форма(2376)}: ЗагрузитьДанныеВКомпоновщикНастроек(ПолныеДанныеСКД(ТекущаяСтрока));
{InfostartToolkit Обработка.ИТК_КонсольРазработчика.Форма.Основная.Форма(563)}: ОбновитьЭлементыФормы();

по причине:
Попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода XMLТекст ().

Сценарий воспроизведения
Шаги по воспроизведению:

  1. Открыть консоль разработчика.
  2. Добавить в дерево данных «Схему компоновки данных».
  3. Добавить в подчинение новой СКД «Пользовательскую настройку СКД».
  4. Выделив строку пользовательских настроек в дереве данных нажать в главном меню кнопку «Выполнить».
  5. Появится окно с сообщение об ошибке, текст которого приведен выше.

Окружение:

Infostart Toolkit 1.6.3

Платформа: 8.3.16.1876 (Linux x86-64)
Режим БД: клиент-серверный

Конфигурация:
1С:ERP. Управление холдингом (3.0.4.4)
Основной режим запуска: Управляемое приложение
Режим совместимости: Версия8_3_14
Версия БСП: 3.1.3.264

Клиент:
ОС: Windows x86-64 (Microsoft Windows 10 version 10.0 (Build 17763))
Язык: ru
Режим запуска: Управляемое приложение

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

Автор SnarkSpb, 10 окт 2015, 13:31

0 Пользователей и 1 гость просматривают эту тему.

Добрый день!

Прошу помощи…
Есть конфигурация: Комплексная автоматизация 1.1 (1.1.60.1)
Платформа  8.3 (8.3.6.2152)
толстый клиент
Режим: Серверный (сжатие: усиленное)

Имеется подписка на событие у документа ЗаказПокупателя — ‘ОбработкаПроверкиЗаполнения’
При проведении документа возникает ошибка:
«Попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода Интаро_ДокументыОбработкаПроверкиЗаполнения ()».

Проблема в том, что в свойствах модуля, в котором прописана обработка события нет флага «Клиент (обычное приложение)» — и стандартное решение проблемы мутабельного значения не применить.


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

Помог? Нажми — Спасибо :)
skype: Soprov1C


Найти другой путь для решения конкретной проблемы не самая большая задача, меня больше смущает, то что просто отсутствует сам по себе флаг  «Клиент (обычное приложение)», ведь при его отсутствии стандартный механизм «подписки на события» не будет работать, а ведь он используется в том числе, чтобы дописать/переписать стандартные обработки проведения и записи.


Поверте в 1С все работает. (иногда)
И логика тут не причем, к сожалению:)

Помог? Нажми — Спасибо :)
skype: Soprov1C


Понравилась статья? Поделить с друзьями:
  • Ошибка передачи в егаис передайте данные
  • Ошибка передачи не удалось отправить через smb 2101
  • Ошибка передачи customer email некорректные параметры в команде
  • Ошибка передачи на сервер мутабельного значения параметра
  • Ошибка передачи 4803 kyocera при сканировании