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

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

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

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

СПРАВКА:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

попытка передачи с клиента на сервер мутабельного значения 1 го параметра метода. Смотреть фото попытка передачи с клиента на сервер мутабельного значения 1 го параметра метода. Смотреть картинку попытка передачи с клиента на сервер мутабельного значения 1 го параметра метода. Картинка про попытка передачи с клиента на сервер мутабельного значения 1 го параметра метода. Фото попытка передачи с клиента на сервер мутабельного значения 1 го параметра методаС уважением к сообществ у МА!

Источник

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

В своей практике я сталкнулся с такой проблемой. В нашей компании была база УТ, файловый режим работы. Работала замечательно без каких либо нареканий. В один прекрачный день наш системный администратор решил файловый вариант cделать клиент-серверным. Все вроде бы работало нормально. И тут мне звоинт пользователь и говорит, что печатная форма, которой он пользовался все время, вдруг почему то перестала работать. Сообщение у пользователя выходило такое «Не удалось сформировать внешнюю печатную форму! [*]Ошибка при вызове метода контекста (ПредставлениеСерий): Попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода ПредставлениеСерий ().».

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

Запрос = Новый Запрос;
Запрос.УстановитьПараметр(«ТекущийДокумент», Ссылка);

Запрос.Текст =
«ВЫБРАТЬ
| Номер,
| Дата,
| Контрагент,
| Организация,
| Товары.(
| Номенклатура,
| Номенклатура.»+ ТекстКодАртикул + » КАК КодАртикул,
| Номенклатура.НаименованиеПолное КАК Товар,
| КоличествоМест,
| Количество,
| ЕдиницаИзмерения.Представление КАК ЕдиницаИзмерения,
| ЕдиницаИзмеренияМест.Представление КАК ЕдиницаИзмеренияМест,
| ХарактеристикаНоменклатуры КАК Характеристика,
| СерияНоменклатуры КАК Серия
| ),
| ВозвратнаяТара.(
| Номенклатура,
| Номенклатура.»+ ТекстКодАртикул + » КАК КодАртикул,
| Номенклатура.НаименованиеПолное КАК Товар,
| Количество,
| Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаИзмерения
| )
|ИЗ
| Документ.ПриходныйОрдерНаТовары КАК ПриходныйОрдерНаТовары
|ГДЕ
| ПриходныйОрдерНаТовары.Ссылка = &ТекущийДокумент
|УПОРЯДОЧИТЬ ПО
| Товары.НомерСтроки,
| ВозвратнаяТара.НомерСтроки»;

Шапка = Запрос.Выполнить().Выбрать();
Шапка.Следующий();
ВыборкаСтрокТовары = Шапка.Товары.Выбрать();

Пока ВыборкаСтрокТовары.Следующий() Цикл

Если НЕ ЗначениеЗаполнено(ВыборкаСтрокТовары.Номенклатура) Тогда
Продолжить;
КонецЕсли;

ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТовары);
ОбластьМакета.Параметры.НомерСтроки = Ном;
ОбластьМакета.Параметры.Товар = ВыборкаСтрокТовары.Товар + ФормированиеПечатныхФормСервер.ПредставлениеСерий(ВыборкаСтрокТовары);

Ошибка возникала в момент когда обрабатывалась строка: «ОбластьМакета.Параметры.Товар = ВыборкаСтрокТовары.Товар + ФормированиеПечатныхФормСервер.ПредставлениеСерий(ВыборкаСтрокТовары);».
Я посмотрел еще раз описание мутабельного значения: «Передавать между клиентом и сервером (в обе стороны) можно только немутабельные значения (т.е. значения которых не могут изменяться): примитивные типы, ссылки, универсальные коллекции, значения системных перечислений, хранилище значения. При попытке передать что-либо другое – аварийное завершение клиентского приложения (даже, если передавать некорректный параметр пытается сервер). Я был удивлен универсальные коллекции можно передавать, а строку универсальной коллекции нет. Поэтому я решил воспользоваться другой универсальной коллекцией, а именно Структурой. В итоге код получился такой:

Пока ВыборкаСтрокТовары.Следующий() Цикл

Если НЕ ЗначениеЗаполнено(ВыборкаСтрокТовары.Номенклатура) Тогда
Продолжить;
КонецЕсли;

Представление = Новый Структура();
Представление.Вставить(«Характеристика», ВыборкаСтрокТовары.Характеристика);
Представление.Вставить(«Серия», ВыборкаСтрокТовары.Серия);

ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТовары);
ОбластьМакета.Параметры.НомерСтроки = Ном;
ОбластьМакета.Параметры.Товар = ВыборкаСтрокТовары.Товар + ФормированиеПечатныхФормСервер.ПредставлениеСерий(Представление);

Так что если кто то будет сталкиваться с такой же проблемой пусть знает, что строка таблицы значений является мутабельным значением и ее (строку) передавать нельзя. Нужно создать структуру.
Решение же моей проблемы было: в функции «ФормированиеПечатныхФормСервер.ПредставлениеСерий» проверялось условие:

Если ЗначениеЗаполнено(Выборка.Характеристика) и (ТипЗнч(Выборка.Характеристика) = Тип(«СправочникСсылка.ХарактеристикиНоменклатуры»)) Тогда

Если ЗначениеЗаполнено(Выборка.Серия) Тогда

Источник

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

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

(2) nickpugachev, Это в подписке на события планировалось. Я впервый раз столкнулся с этим, поэтому достаточно тяжело сообразить о чем вы говорите. Я уже начитался, что объекты нельзя передать на сервер. Но нигде толком не описано, что же именно нужно передать, чтобы можно было создать и заполнить документ.

Такую же структуру пробовал записать к документу ПриЗАписи, но так же ошибка.
Мне не важно толи подпиской, то ли в форме Призаписи.

просто открываете форму с нужными параметрами.

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

(5) nickpugachev, Вообще мне открывать форму не надо. Это просто, чтобы видеть в данный момент что я создаю. Открытия не будет в окончательной версии.

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

Т.е. Если условие1 тогда
Получаю форму
Заполняю данными из текущего документа реализации.
Меняю организацию
Меняю кассу.
Записываю.

3. Если галки в модуле меняю на Сервер, ВызовСервера и Привелигированный то же самое.
Причем ошибка возникает перед открытием формы Реализации, т.е. даже этот документ не открывается.

(21) Release, Сейчас попробую.

Теперь вписываю код из 3-х строчек и получаю:

Может быть где-то что-то еще надо поменять? Мы выполняем всё на клиенте. Т.е. я даже не знаю нужно ли что-то настраивать при обработке чего-то на сервере.

Источник

v8: мутабельное значение и толстый клиент

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

Работаю в толстом режиме, обычные формы (не управляемые).

(1) пятым параметром я передают переменную Коллекция, которая перед этой функции:

с уважением, Ваш гууууугл )))

А скриншот с содержимым КоллекцииПечатныхФорм с сервера можно?

(34) что у типовой возвращает?

у меня не возвращает, при этом даже

(37) тыкни пальцем, где я передаю мутабельное значение:

(41) вторым способом пробовал, это у обработки Реквизит с типом «ТаблицаЗначений».

в (40) инициализирую в неопределено и называю по-другому, чтобы не пересекалось с именем реквизита.

(45)>>Но мне форма не нужна, мне макет нужно

что есть в твоем понимании макет? и зачем он тебе?

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

В обработке (обычная форма) необходимо, чтобы отработал код в клиент-сервером варианте (на файловой работает), которая вернет коллекцию печатных форм (сформированных табличных документов):

Вот так я примерно воспринимаю автора.

Короче, что не получается?

(70) спасибо, сделаю регистр сведений по сохранению отчетов по умолчанию для каждого пользовователя, в глобальнике поменяю в пару местах и всё.

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

(64) в файловой работает код, а в клиент-сервере нет.

(70) шок только от одного:

, где ВызватьКлиентскуюПроцедуру в модуле объекта описана как:

(84) разделение на клиент-сервер же нет.

Когда разделения нет (а нет его в твоей файловой версии) то и ошибки нет, а когда разделение есть (а есть оно у тебя на работе) то ошибка есть. обычные формы и клиент сервер не являются взаимоисключающим понятиями как ты почему-то решил.

(85) тогда еще один добавить параметр МассивТабличныхДокументов в процедуру УправлениеПечатью.СформироватьПечатныеФормы, массивТабличныхДокументов и возвращать для «особых» случаев.

тогда еще так попробую завтра. а то уже на управляемые пошел.

(83) я тебе написал выше, как расставить клиент сервер. С клиента вызываешь серверную процедуру, из серверной процедуры вызываешь свой общий модуль, который компилируется на сервере, макеты пихаешь в табличную часть, при возврате в обработку получишь ссылки.

Ну или скопируй весь требуемый код из общего модуля к себе в модуль объекта обработки. По нажатию кнопки на форме создавай экземпляр объекта обработки и вызывай нужную процедуру.

Источник

Мутабельность при записи документа, через ком соединение

Платформа 8.3 управляемое приложение. При проведении через ком вот такая бяка:

Я бы для начала обрезал руки разработчику конфигурации.
Потом разработчику обработки, которая соединяется.

И да, вы угадали. По самую голову.

В подсистеме Инструменты разработчика (и в ее портативном варианте в сочетании с БСП) http://devtool1c.ucoz.ru реализован кажется наиболее универсальный вариант обхода описанной проблемы. Сама проблема у меня описана тут http://devtool1c.ucoz.ru/forum/2-218-1#866

В общем модуле ирОбщий сделано 2 функции: ЗапистьОбъектЛкс и УдалитьОбъектЛкс, имеющих параметр НаСервере. Эти функции передают почти полное, однако не все, содержимое мутабельного объекта на сервер. Во всех инструментах, выполняющих запись данных, сделан флажок «Запись на сервере» для перенаправления записи объекта на сервер.

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

В моей реализации п.4 не сериализуется, т.к. надежного способа в рантайме перечислить все переменные модуля мне неизвестно. А остальные 3 пункта у меня сериализуются при передаче на сервер и обратно.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *