Добрый день!
Есть две обработки.. Обе загружены в 1с.. БП 3.0
Как из одной обработки получить форму другой?
Более подробней о проблеме: есть обработку создания документов по данным Exel. Она отрабатывает на отлично.. Вторая обработка - печать этих документов в нужном виде..у этой обработки создана форма, с возможностью ввода дополнительных параметров.
Как из первой обработки, получить форму второй обработки (не открыть форму, а получить)?
Есть две обработки.. Обе загружены в 1с.. БП 3.0
Как из одной обработки получить форму другой?
Более подробней о проблеме: есть обработку создания документов по данным Exel. Она отрабатывает на отлично.. Вторая обработка - печать этих документов в нужном виде..у этой обработки создана форма, с возможностью ввода дополнительных параметров.
Как из первой обработки, получить форму второй обработки (не открыть форму, а получить)?
По теме из базы знаний
- Получение произвольной формы внешней обработки в управляемом приложении
- Получение формы внешней обработки заполнения табличных частей
- Как вывести табличный документ на печать в управляемой форме внешней обработки
- Индикация прогресса выполнения фонового задания на управляемой форме внешней обработки
- Улучшайзер - как одна внешняя обработка может улучшать другие внешние обработки
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Вот пример
Вот пример
&НаКлиенте
Процедура Команда1(Команда)
ПараметрыКоманды = Новый Структура;
ОткрытьФорму("ВнешняяОбработка.юи_ВыгрузкаВБухгалтерию.Форма.Форма", ПараметрыКоманды, ЭтаФорма, , ВариантОткрытияОкна.ОтдельноеОкно,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаСервере
Функция Получить()
ИмяВременногоФайла = КаталогВременныхФайлов()+"юи_ВыгрузкаВБухгалтерию.epf";
ДвоичныеДанные = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоРеквизиту("ИмяОбъекта","юи_ВыгрузкаВБухгалтерию").ХранилищеОбработки.Получить();
ДвоичныеДанные.Записать(ИмяВременногоФайла);
ВнешняяОбработка = ВнешниеОбработки.Создать(ИмяВременногоФайла);
КонецФункции
Показать
(16) ну откроете вы форму. Данные вы как получите с неё? Их "получит" та обработка, которой она принадлежит.
В первой обработке, откуда вы открываете форму, вы не получите ничего. Можете только параметры передать "туда", на форму, чтобы учесть их при открытии.
В первой обработке, откуда вы открываете форму, вы не получите ничего. Можете только параметры передать "туда", на форму, чтобы учесть их при открытии.
(28) я полагаю, что если бы это не являлось проблемой, вопроса добавить в обработку форму, вторую, третью не возникло бы.
Если два разработчика работают над разными обработками и существует такая необходимость открыть одну из другой, не меняя чужую обработку и не копируя ни форму в целом, ни какую-либо часть кода, то на УФ насколько это сложно?
Если два разработчика работают над разными обработками и существует такая необходимость открыть одну из другой, не меняя чужую обработку и не копируя ни форму в целом, ни какую-либо часть кода, то на УФ насколько это сложно?
(29) тут все дело - обойти "якобы изолированность" клиента от сервера, которое 1С ввела для программистов (но не для исполнения всевозможного кода, загрузки форм и ЭУ).
Я предлагаю оптимальный вариант, чтобы не возвращаться к этому вопросу и к этой форме в дальнейшем. Но можно и костылями, их тут множество уже предложено )
Я предлагаю оптимальный вариант, чтобы не возвращаться к этому вопросу и к этой форме в дальнейшем. Но можно и костылями, их тут множество уже предложено )
(3) Можно так попробывать
ИмяВрФайла = ПолучитьИмяВременногоФайла();
ДопОбработка = Справочники.ДополнительныеОбработкиОтчеты.НайтиПоНаименованию("КакоеТоНазваниеОбработки");
ДвоичныеДанные = ДопОбработка.ХранилищеВнешнейОбработки.Получить();
Если ДвоичныеДанные = Неопрделено Тогда
Возрат
КонецЕсли
ДвоичныеДанные.Записать(ИмяВрФайла);
ВнешняяОбработка = ВнешниеОбработки.Создать(ИмяВрФайла);
ФормаОбработки = ВнешниеОбработки.ПолучитьФорму("ИмяФормы");
ИмяВрФайла = ПолучитьИмяВременногоФайла();
ДопОбработка = Справочники.ДополнительныеОбработкиОтчеты.НайтиПоНаименованию("КакоеТоНазваниеОбработки");
ДвоичныеДанные = ДопОбработка.ХранилищеВнешнейОбработки.Получить();
Если ДвоичныеДанные = Неопрделено Тогда
Возрат
КонецЕсли
ДвоичныеДанные.Записать(ИмяВрФайла);
ВнешняяОбработка = ВнешниеОбработки.Создать(ИмяВрФайла);
ФормаОбработки = ВнешниеОбработки.ПолучитьФорму("ИмяФормы");
(2) Как то давно писал так
Процедура ПечатьУПД()
Объект = Документ.ПолучитьОбъект();
КоличествоЭкземпляров = 1;
НаПринтер = Ложь;
ЭтоДокумент = Метаданные.Документы.Содержит(Объект.Метаданные());
Если ЭтоДокумент И Объект.Метаданные().Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить
и Не УправлениеДопПравамиПользователей.РазрешитьПечатьНепроведенныхДокументов(Объект.Проведен) Тогда
Сообщить("Недостаточно полномочий для печати непроведенного документа!");
Возврат;
КонецЕсли;
Попытка
СтруктураВнутреннихПечатныхФорм = Объект.ПолучитьСтруктуруПечатныхФорм()
Исключение
СтруктураВнутреннихПечатныхФорм = Новый Структура;
КонецПопытки;
ДеревоМакетов = УниверсальныеМеханизмы.ПолучитьДеревоМакетовПечати(Объект.Ссылка, СтруктураВнутреннихПечатныхФорм);
СтрокаПоУмолчанию = УниверсальныеМеханизмы.ПолучитьСтрокуДереваМакетовПоУмолчанию(Объект.Метаданные().Имя, ДеревоМакетов);
Если СтрокаПоУмолчанию = Неопределено Тогда
Сообщить("Для данного вида " + ?(ЭтоДокумент, "документа ", "") + "не назначено ни одной печатной формы!");
Возврат;
КонецЕсли;
Расшифровка = СтрокаПоУмолчанию.Расшифровка;
Если ТипЗнч(Расшифровка) = Тип("Структура") и Расшифровка.ВидПечатнойФормы = Перечисления.ВидыДополнительныхВнешнихОбработок.ПечатнаяФорма Тогда
Если Не РаботаСДиалогами.ПроверитьМодифицированность(Объект) Тогда
Возврат;
КонецЕсли;
ТабДокумент = УниверсальныеМеханизмы.НапечататьВнешнююФорму(Объект.Ссылка, Расшифровка);
УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер,
?(ЭтоДокумент, ОбщегоНазначения.СформироватьЗаголовокДокумента(Объект), Строка(Объект)), Объект.Ссылка);
Иначе
//Объект.Печать(Расшифровка, КоличествоЭкземпляров, НаПринтер);
КонецЕсли;
КонецПроцедуры // ПечатьУПД()
//////////////////////////////////////////////////////////// //////////////////////////
////////////////ИЛИ ЧЕРЕЗ КОНСТАНТУ В КОТОРУЮ ЗАПИСАНА ВН. ОБРАБОТКА//////////////////
//ВыбраннаяСтрока = Справочники.ВнешниеОбработки.НайтиПоКоду("OSN000001");
ВыбраннаяСтрока = Константы.ОбработкаДляОтправкиСМС.Получить(); //Константа расположена на ОБЩЕЙ форме НастройкаПараметровУчета
Выборка = ПолучаемКонтрагентовИзСправочникаРассылкаСМС();
Если Выборка = Неопределено Тогда
Возврат;
КонецЕсли;
Попытка
ИмяФайла = ПолучитьИмяВременногоФайла(); //Имя временного файла
ДвоичныеДанные = ВыбраннаяСтрока.ХранилищеВнешнейОбработки.Получить();
ДвоичныеДанные.Записать(ИмяФайла);
Форма = ВнешниеОбработки.ПолучитьФорму(ИмяФайла);
Если Не Форма = Неопределено Тогда
Форма.Открыть();
Иначе
ВнешняяОбработка = ВнешниеОбработки.Создать(ИмяФайла);
КонецЕсли;
ТЧ = Форма.ОбработкаОбъект.Контрагенты; //Через форму получаем объект и ТЧ Контрагенты
ТЧ.Очистить();
Пока Выборка.Следующий() Цикл
СтрТЧ = ТЧ.Добавить();
СтрТЧ.Контрагент = Выборка.Контрагент;
КонецЦикла;
Исключение
Предупреждение("Выбранный файл не является внешней обработкой.
|Либо, данная обработка не предназначена для
|запуска в этой конфигурации.");
КонецПопытки;
Показать
(7)
&НаКлиенте
Процедура ПроцедураМоейКоманды(Команда)
ПараметрыКоманды = Новый Структура;
ОткрытьФорму("ВнешняяОбработка.МояВнешняяОбработка.Форма.Форма", ПараметрыКоманды, ЭтаФорма, , ВариантОткрытияОкна.ОтдельноеОкно,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
Сделал примерно так:
Теперь при выполнении действий во второй обработке, появляется ошибка "Неизвестный идентификатор формы".. Кто-нибудь знает как от нее избавиться?
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
//Помещаем обработку во временном хранилище
АдресХранилища = "";
Результат = ПоместитьФайл(АдресХранилища, "C:\ВнешняяОбработка.epf", , Ложь);
ИмяОбработки = ПодключитьВнешнююОбработку(АдресХранилища);
// Откроем форму подключенной внешней обработки
ОткрытьФорму("ВнешняяОбработка."+ ИмяОбработки +".Форма");
КонецПроцедуры
&НаСервере
Функция ПодключитьВнешнююОбработку(АдресХранилища)
Возврат ВнешниеОбработки.Подключить(АдресХранилища);
КонецФункции
ПоказатьТеперь при выполнении действий во второй обработке, появляется ошибка "Неизвестный идентификатор формы".. Кто-нибудь знает как от нее избавиться?
(10)
Так в УФ не получится. Либо делайте форму "родной" для первого объекта, либо - через передачу данных между формами передавайте параметры.
Теперь при выполнении действий во второй обработке, появляется ошибка "Неизвестный идентификатор формы"
Потому и появляется, что вы пытаетесь форму из другого объекта "притянуть за уши" к первому объекту.
Так в УФ не получится. Либо делайте форму "родной" для первого объекта, либо - через передачу данных между формами передавайте параметры.
В 1С - напрямую никак без танцев.
Ну автор же явно пишет, что хочет получить форму, т.е. форму и данные на ней! В УФ нельзя получить или вызвать форму другого объекта, только - пересоздав новый экземпляр, и заполнив её заново.
Тут нужно либо - включить ту, вторую, форму с параметрами, целиком в первую обработку, либо - сохранять данные из второй формы в третьем месте (Хранилище, регистр, etc), и уже оттуда их брать как параметры для первой обработки.
Ну автор же явно пишет, что хочет получить форму, т.е. форму и данные на ней! В УФ нельзя получить или вызвать форму другого объекта, только - пересоздав новый экземпляр, и заполнив её заново.
Тут нужно либо - включить ту, вторую, форму с параметрами, целиком в первую обработку, либо - сохранять данные из второй формы в третьем месте (Хранилище, регистр, etc), и уже оттуда их брать как параметры для первой обработки.
(13)
И то её надо пересоздавать заново для второго объекта из метаданных обработки, а не как автор пытается - получить готовую, ранее уже созданную, форму второй обработки - в первой.
Но ведь есть же общие формы в метаданных?
Ну так и здесь вы получите форму. Но только форму, голую структуру, без данных.
И то её надо пересоздавать заново для второго объекта из метаданных обработки, а не как автор пытается - получить готовую, ранее уже созданную, форму второй обработки - в первой.
1С там че-то мутила типа "можно получить открытую форму по ключу..." бла-бла... но там столько нюансов и ограничений, притом, что не получишь до конца реальную форму с реальными данными на ней, что проще не связываться, а сделать передачу данных с формы на форму.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот