|
|
|
БСП и внешние обработки | ☑ | ||
|---|---|---|---|---|
|
0
Вуглускр1991
04.05.11
✎
13:59
|
".. тебе, сестрица, Только быль - не небылицу: Расскажу ..."
Выпадает ошибка в работе: "Неизвестный идентификатор формы" Почему: использую в тонком клиенте внешнюю форму и из неё вызываю внешнюю форму подключенную по всем правилам БСП. Оказывается две разные внешние обработки, имеющие открытые в клиенте формы и разные метаданные (ну понятно обработки-то разные), регистрируются системой 1С как ВнешняяОбработка1 (тип объект метаданных). Метаданные разные - регистрация одна. После этого серверные процедуры формы обработки, первой (зарегистрированной), теряют идентификаторы метаданных и вообще вся форма на сервере "теряется" в дереве метаданных. Вот и возникает эта ошибка. БСП : Общий модуль "ДополнительныеОтчетыИОбработки" : Процедура ПолучитьОбъектВнешнейОбработки(ВнешняяОбработкаСсылка, БезопасныйРежим) Код: ВнешняяОбработкаОбъект = ВнешняяОбработкаСсылка.ПолучитьОбъект(); // объект справочник ДвоичныеДанныеОбработки = ВнешняяОбработкаОбъект.ХранилищеОбработки.Получить(); // Обработка ИмяВременногоФайла = ПолучитьИмяВременногоФайла("epf"); // файл ДвоичныеДанныеОбработки.Записать(ИмяВременногоФайла); Если ВнешняяОбработкаОбъект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет ИЛИ ВнешняяОбработкаОбъект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда Возврат ВнешниеОтчеты.Создать(ИмяВременногоФайла, БезопасныйРежим); // И вот она ошибка в коде Иначе Возврат ВнешниеОбработки.Создать(ИмяВременногоФайла, БезопасныйРежим); // И вот она ошибка в коде КонецЕсли; Нужно заботиться об имени Внешней обработки в дереве метаданных. Из СП: ВнешниеОбработкиМенеджер (ExternalDataProcessorsManager) Подключить (Connect) Синтаксис: Подключить(<Путь>, <Имя>, <БезопасныйРежим>) Параметры: <Путь> (обязательный) Тип: Строка. Ссылка на реквизит объекта конфигурации, который содержит данные внешней обработки. Ссылка может быть получена методом ПолучитьНавигационнуюСсылку. <Имя> (необязательный) Тип: Строка. Имя внешней обработки, с которым она будет зарегистрирована в системе. Наличие одинаковых имен в процессе работы сеанса не допускается. Если имя не указано, будет использовано имя, содержащееся в самой обработке. <БезопасныйРежим> (необязательный) Тип: Булево. Признак подключения внешней обработки в безопасном режиме. Если параметр не указан, подключение будет осуществлено в безопасном режиме. Значение по умолчанию: Истина Возвращаемое значение: Тип: Строка. Описание: Выполняет подключение внешней обработки по указанному пути. Возвращает имя подключенной внешней обработки. Доступность: Сервер, внешнее соединение. |
|||
|
1
Mitriy
04.05.11
✎
14:08
|
а по-русски?
|
|||
|
2
Вуглускр1991
04.05.11
✎
14:12
|
(1) Какое место перевести? Уж как мог
|
|||
|
3
Вуглускр1991
04.05.11
✎
14:23
|
А вот и патч:
ВнешняяОбработкаОбъект = ВнешняяОбработкаСсылка.ПолучитьОбъект(); ДвоичныеДанныеОбработки = ВнешняяОбработкаОбъект.ХранилищеОбработки.Получить(); //ИмяВременногоФайла = ПолучитьИмяВременногоФайла("epf"); //ДвоичныеДанныеОбработки.Записать(ИмяВременногоФайла); // На клиенте размещаем обработку во временном хранилище АдресХранилища = ПоместитьВоВременноеХранилище(ДвоичныеДанныеОбработки); //Результат = ПоместитьФайл(АдресХранилища, ИмяВременногоФайла, , Ложь); //// На сервере подключаем обработку из созданного ранее //// временного хранилища. //ИмяОбработки = ВнешниеОбработки.Подключить(АдресВременногоХранилища); ИмяОбработки = Строка(ВнешняяОбработкаОбъект.Ссылка.УникальныйИдентификатор()); Пысы = ""; Если ВнешняяОбработкаОбъект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет ИЛИ ВнешняяОбработкаОбъект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда Пысы = ВнешниеОтчеты.Подключить(АдресХранилища, ИмяОбработки , БезопасныйРежим); Возврат ВнешниеОтчеты.Создать(Пысы); Иначе Пысы = ВнешниеОбработки.Подключить(АдресХранилища, ИмяОбработки , БезопасныйРежим); Возврат ВнешниеОбработки.Создать(Пысы); КонецЕсли; |
|||
|
4
Leksus
04.05.11
✎
14:24
|
(2) тоже по коду не понял где же тут две обработки?
|
|||
|
5
Leksus
04.05.11
✎
14:24
|
теперь понял :)
|
|||
|
6
Вуглускр1991
04.05.11
✎
14:33
|
(4) Одну я вызываю с команды формы:
&НаСервере Функция ТмпВнешОбр() мояВнешняяОбработка = ВнешниеОбработки.Создать("C:\TEMP\Bases\ner\SYSLOG\бпро.epf"); Возврат мояВнешняяОбработка.Метаданные().Имя; КонецФункции &НаКлиенте Процедура Подключаемый_ОткрытьПроцесс(Команда) ПараметрКоманды = Новый Массив; ПараметрКоманды.Добавить(МыслиОПроцессе); ОбработОмен = ТмпВнешОбр(); Фо = ПолучитьФорму("ВнешняяОбработка."+ ОбработОмен +".Форма",Новый Структура("ИдентификаторКоманды,ОбъектыНазначения","глСканерЛГПроцесс",ПараметрКоманды),ЭтаФорма,МыслиОПроцессе); Фо.ЗакрыватьПриЗакрытииВладельца = Истина; Фо.Открыть(); КонецПроцедуры А вторую средствами БСП &НаКлиенте Процедура эфНаличие(Команда) ПараметрыВыполненияКоманды = Новый Структура("Источник",ЭтаФорма); МассиПар = Новый Массив; МассиПар.Добавить(Элементы.тбТоварыПроц.ТекущиеДанные.Номенклатура); СтруктураВнОтчета = СервИнформ.ПолучитьДанныеВнешнегоОО("глНаличиеНаСкладах"); ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьОбработку( СтруктураВнОтчета.Ссылка, СтруктураВнОтчета.ВидОбработокСтрока, СтруктураВнОтчета.Идентификатор, СтруктураВнОтчета.БезопасныйРежим, СтруктураВнОтчета.ВариантЗапуска, СтруктураВнОтчета.ПоказыватьОповещение, СтруктураВнОтчета.Модификатор, МассиПар, ПараметрыВыполненияКоманды); КонецПроцедуры Эту тоже потом через БСП буду, но пока отлаживаю да делаю... |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |