|
Вопрос про временное хранилище | ☑ | ||
---|---|---|---|---|
0
Ksandr
20.01.12
✎
16:50
|
Здравствуйте, имею такую необходимость поместить во временное хранилище 2 объекта, 1 на клиенте, 1 на сервере.
Так вот, помещаю первый (на клиенте), смотрю отладчиком, все хорошо ПолучитьИзВременногоХранилища(АдресВХранилище + "_1") выдает то что нужно, после помещения (на сервере) во временное хранилище еще одного объекта по адресу АдресВХранилище + "_2" первый становится неопределено. ЧЯДНТ? З.Ы. Адрес в хранилище - уникальный идентификатор формы |
|||
1
5 Элемент
20.01.12
✎
16:56
|
в ПоместитьВоВременноеХранилище передаешь второй параметр?
|
|||
2
Ksandr
20.01.12
✎
16:58
|
(1) Конечно. В первом объект, во втором адрес
|
|||
3
5 Элемент
20.01.12
✎
17:00
|
(2) надо не адрес, а уникальный идентификатор формы.
ты лучше код выложи. |
|||
4
Ksandr
20.01.12
✎
17:30
|
Код ничем не примечателен. В СП пишут, что уникальный идентификатор, строка
Попытка ТекCOMОбъект = Новый COMОбъект(ОбъектПодключения + ".Application"); ТекCOMОбъект.Connect(СтрокаПодключения); ПоместитьВоВременноеХранилище(ТекCOMОбъект, АдресВХранилище + "Application"); ПодключеноApplication = Истина; Исключение ПодключеноApplication = Ложь; ОбщегоНазначения.СообщитьОбОшибке("Не удалось установить подключение V82.Application по причине " + ОписаниеОшибки()); КонецПопытки; Попытка ПодключитьCOMConnector(ОбъектПодключения, СтрокаПодключения, АдресВХранилище); ПодключенCOMConnector = Истина; Исключение ПодключенCOMConnector = Ложь; ОбщегоНазначения.СообщитьОбОшибке("Не удалось установить подключение V82.COMConnector по причине " + ОписаниеОшибки()); КонецПопытки; |
|||
5
Ksandr
20.01.12
✎
17:31
|
ПодключитьCOMConnector(ОбъектПодключения, СтрокаПодключения, АдресВХранилище);
выполняется на сервере без контекста, после выполнения пропадает первое значение. |
|||
6
5 Элемент
20.01.12
✎
17:37
|
(4) должен быть УИД формы. В СП же русским языком написано. А у тебя что?
|
|||
7
Ksandr
20.01.12
✎
17:39
|
(6) Угу, именно русским:
ПоместитьВоВременноеХранилище (PutToTempStorage) Синтаксис: ПоместитьВоВременноеХранилище(<Данные>, <Адрес>) Параметры: <Данные> (обязательный) Тип: Произвольный. Данные, которые необходимо поместить во временное хранилище. <Адрес> (необязательный) Тип: УникальныйИдентификатор; Строка. Адрес во временном хранилище, по которому надо поместить данные. Или уникальный идентификатор формы, во временное хранилище которой, надо поместить данные и вернуть новый адрес. В случае, если передается УникальныйИдентификатор формы, то значение будет автоматически удалено после закрытия этой формы. Если параметр не указан, помещенное значение будет удалено после очередного запроса сервера из общего модуля, при контекстном и неконтекстном серверном вызове из формы, при серверном вызове из модуля команды или при получении формы. |
|||
8
Ksandr
20.01.12
✎
17:40
|
Надо попробовать поместить два объекта по уникальному идентификатору, вдруг не заместятся
|
|||
9
5 Элемент
20.01.12
✎
17:42
|
при первом вызове передаваемый адрес не ссылается на адрес во временном хранилище.
поэтому она считает что параметр не передан. |
|||
10
vmv
20.01.12
✎
17:44
|
пользуйся, возьми суть, переменные вставь свои
// Модуль: Add_V82AppClient // Клиентские методы этой ИБ при внешнем соединении с ней других баз данных 1С ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////// ОБЩИЕ МЕТОДЫ // // Это метод вызывается посредством внешнего соединения из другой ИБ, в _OEIB_Structures // содержится переданная из другой ИБ структура с тремя вложенными структурами // // OEIB_Identification_ : // Внешний объект: Структура идентификации // // _OEIB_Identification : // Родной объект : Структура идентификации // // _OEIB_Properties : // Родной объект : Структура свойств полученная из Внешний объект // // По COM-структуре на клиенте во внешнем соединении можно делать обход, но передать ее на сервер нельзя. // Для передачи структур на сервер в этой базе необходимо скопировать их из COM-структуры в // аналогичные структуры и передать через временное хранилище в этой базе. // // Функция ОбновитьВнешнююСсылкуОбъектаКлиент(_OEIB_Structures, ТекстОшибки) Экспорт _OEIB_StructuresServer = Новый Структура; // Создаем сводную переменную-структуру в этой базе // Копируем вложенные COM_Структуры в этой ИБ OEIB_Identification_ = ВнешнююСтруктуруСкопироватьВОбычную(_OEIB_Structures.OEIB_Identification_); _OEIB_Identification = ВнешнююСтруктуруСкопироватьВОбычную(_OEIB_Structures._OEIB_Identification); _OEIB_Properties = ВнешнююСтруктуруСкопироватьВОбычную(_OEIB_Structures._OEIB_Properties); // Вставляем вложенные структуры в сводную структуру в этой ИБ _OEIB_StructuresServer.Вставить("OEIB_Identification_", OEIB_Identification_); // Внешний объект: Структура идентификации _OEIB_StructuresServer.Вставить("_OEIB_Identification", _OEIB_Identification); // Родной объект : Структура идентификации _OEIB_StructuresServer.Вставить("_OEIB_Properties" , _OEIB_Properties); // Родной объект : Структура свойств полученная из Внешний объект // Сохраняем во временном хранилище этой ИБ полученную сводную структуру АдресВХ = ПоместитьВоВременноеХранилище(_OEIB_StructuresServer, Новый УникальныйИдентификатор()); // Передаем на сервер адрес временного хранилища и обрабатываем там данные полученные из хранилища // Получаем с сервера адрес другого временного хранилища по которому хранится структура содержащую идентификацию обновленного(созданного) в этой ИБ объекта АдресВХ = Add_V82AppServer.ОбновитьВнешнююСсылкуОбъектаСервер(АдресВХ, ТекстОшибки); // Получаем обновленную структуру с сервера по адресу временного хранилища _OEIB_Identification = ПолучитьИзВременногоХранилища(АдресВХ); Если Не ЗначениеЗаполнено(_OEIB_Identification) Тогда Возврат Новый Структура; КонецЕсли; УдалитьИзВременногоХранилища(АдресВХ); Возврат _OEIB_Identification; // Собственно возврат GUID, Версии и т.д. обновленногов этой ИБ Объекта. КонецФункции Функция ВнешнююСтруктуруСкопироватьВОбычную(ВнешняяСтруктура) ОбычнаяСтруктура = Новый Структура; Для каждого ВнешняяСтруктураЭлемент Из ВнешняяСтруктура Цикл ОбычнаяСтруктура.Вставить(ВнешняяСтруктураЭлемент.Ключ, ВнешняяСтруктураЭлемент.Значение); КонецЦикла; Возврат ОбычнаяСтруктура; КонецФункции // Модуль: Add_V82AppServer ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////// ОБЩИЕ МЕТОДЫ ПРИЕМА ДАННЫХ ИЗ ВНЕШНИХ ИБ Функция ОбновитьВнешнююСсылкуОбъектаСервер(АдресВХ, ТекстОшибки) Экспорт // Получаем сводную структуру на сервере по адресу временного хранилища _OEIB_Structures = ПолучитьИзВременногоХранилища(АдресВХ); Если Не ЗначениеЗаполнено(_OEIB_Structures) Тогда ТекстОшибки = ТекстОшибки + Символы.ПС + "Не передана структура данных для внешней информационной базы"; Возврат Ложь; КонецЕсли; // Получаем вложенную структуру. Внешний объект : Структура идентификации ВнешнийОбъектИдент = _OEIB_Structures.OEIB_Identification_; Если Не ЗначениеЗаполнено(ВнешнийОбъектИдент) Тогда ТекстОшибки = ТекстОшибки + Символы.ПС + "Не передана структура идентификации объекта-источника для внешней информационной базы"; Возврат Ложь; КонецЕсли; // Получаем вложенную структуру. Родной объект: Структура идентификации РоднойОбъектИдент = _OEIB_Structures._OEIB_Identification; Если Не ЗначениеЗаполнено(РоднойОбъектИдент) Тогда ТекстОшибки = ТекстОшибки + Символы.ПС + "Не передана структура идентификации объекта-приемника для внешней информационной базы"; Возврат Ложь; КонецЕсли; // Получаем вложенную структуру. Родной объект: Структура свойств полученная из Внешний объект РоднойОбъектСвойства = _OEIB_Structures._OEIB_Properties; Если Не ЗначениеЗаполнено(РоднойОбъектСвойства) Тогда ТекстОшибки = ТекстОшибки + Символы.ПС + "Не передана структура свойств объекта-приемника для внешней информационной базы"; Возврат Ложь; КонецЕсли; УспешноеОбновление = ОбновитьОбъектПоВнешнейСсылке(ВнешнийОбъектИдент, РоднойОбъектИдент, РоднойОбъектСвойства, ТекстОшибки); УдалитьИзВременногоХранилища(АдресВХ); // Удаляем обработанные данные из временного хранилища Если УспешноеОбновление Тогда // Помещаем структуру содержащую идентификацию обновленного(созданного) в этой ИБ объекта в другое хранилище для чтения на клиенте. АдресВХ = ПоместитьВоВременноеХранилище(РоднойОбъектИдент, Новый УникальныйИдентификатор()); Возврат АдресВХ; Иначе Возврат ""; // Возвращаем пустой адрес КонецЕсли; КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |