Группа: Пользователи
Сообщений: 498
Спасибо сказали: 5 раз
Рейтинг: 0
Всем привет! Ну вообщем вопрос такой ... И для того что бы была хорошо понятна суть вопроса ... и без лишних объяснений, думаю опять уместно затронуть вопрос "велосипедов" И показать их ... что они собой представляют. Поэтому вот они ... эти "ВЕЛОСИПЕДЫ" ... опять заново изобретенные ОБЩИЙ МОДУЛЬ - СЕРВЕР
//SubFx_ВнешняяОбработка.ПодключитьВнешнююОбработку(Внешние,АдресХранилища); Функция ПодключитьВнешнююОбработку(Внешние,АдресХранилища) Экспорт Если Внешние=Неопределено или Внешние="ВнешниеОбработки" Тогда Возврат ВнешниеОбработки.Подключить(АдресХранилища); Иначе Возврат ВнешниеОтчеты.Подключить(АдресХранилища); КонецЕсли; КонецФункции
//Расширение=Fx_Текст.РасширениеФайла(ИмяФайла); Функция РасширениеФайла(ИмяФайла) Экспорт ТекстДлина=СтрДлина(ИмяФайла); Символ="."; Count = 0; CountSymb = 0; SymbNum = 0; //--------------------------- Для i = 1 по ТекстДлина Цикл Count = Count + 1; char = Сред(ИмяФайла, i, 1); If char = Символ Then CountSymb = Count; EndIf; КонецЦикла; //--------------------------- Расширение = Сред(ИмяФайла,CountSymb+1); Возврат Расширение; КонецФункции
//ФормаВнешнейОбработки=SubFxКл_ВнешняяОбработка.ОткрытьПолучить("АдресПапки","Получить","ФормаИмя",); Функция ОткрытьПолучить(АдресПапки,ПолучитьОткрыть,ИмяФайла,ФормаИмя) Экспорт //====================== Расширение=Fx_Текст.РасширениеФайла(ИмяФайла); //Сообщить(Расширение); Если Расширение="epf" Тогда Внешние="ВнешниеОбработки"; Внешний="ВнешняяОбработка"; ИначеЕсли Расширение="erf" Тогда Внешние="ВнешниеОтчеты"; Внешний="ВнешнийОтчет"; Иначе Предупреждение("Файл: "+ИмяФайла+" не явяеться внешним отчетом или внешней обработкой!"); Возврат Неопределено; КонецЕсли; //====================== ПолноеИмяФайла=СтрЗаменить(АдресПапки+"\"+ИмяФайла,"\\","\"); //====================== Попытка АдресХранилища = ""; //Помещаем обработку во временном хранилище Результат = ПоместитьФайл(АдресХранилища,ПолноеИмяФайла, , Ложь); ИмяОбработки = SubFx_ВнешняяОбработка.ПодключитьВнешнююОбработку(Внешние,АдресХранилища); // Откроем форму подключенной внешней обработки Исключение Предупреждение("Обработка: "+ПолноеИмяФайла+" Не найдена!"); Возврат Неопределено; КонецПопытки; //====================== Если ФормаИмя=Неопределено Тогда ФормаАдрес=Внешний+"."+ ИмяОбработки +".Форма"; Иначе ФормаАдрес=Внешний+"."+ ИмяОбработки +"."+ФормаИмя; КонецЕсли; //====================== Если ПолучитьОткрыть="Открыть" Тогда ОткрытьФорму(ФормаАдрес); Иначе Форма=ПолучитьФорму(ФормаАдрес); КонецЕсли; //====================== Возврат Форма; КонецФункции
Это для того что бы было понятно сколько всего опять пришлось кодить и опять изобретать велосипеды. и все это всего лишь,для того что бы только подойти к поставленной задаче. ТОЛЬКО ПОДОЙТИ!!! Всего лишь.... пока еще не решив ее а только приступив к ее решению. И это при том, что еще не факт что вообще пучиться решить задачу... Так вот, ниже процедура, которая как раз подходит к решению поставленной задачи. Но которая показывает что подойдя к ней возникает кляуза. И поэтому наводит на мысль, возможно ли это сделать вообще? ... и позволяют ли сделать это возможности системы? В конце-концов, для решения задачи, зря что ли столько велосипедов изобрел? )))) Поэтому в указанной процедуре все необходимое уже готово и накодено в общем модуле. Осталось единственное ... самое главное.. ОТОБРАЗИТЬ ОБЪЕКТ ВЫБРАННОГО СПИСКА В ФОРМЕ ВНЕШНЕЙ ОБРАБОТКИ. Иными словами передать управления выбранного объекта не на ту форму которая у объекта в конфигурации базы, а на форму внешней обработки. ВОТ ЧТО НАДО. И вот цель задачи. И в данном коде видно, что помучившись изобретениями велосипедов, тем самым, сделав все необходимое для подспорья, и наконец поставив все точки на над И, стопор возник в финале На самом главном. )))) Поэтому, подскажите уважаемые )) Как решить задачу... По быстрому ... Короче ... помогите сэкономить время. Которое итак потратил опять на общий модуль. В который уже надоело постоянно заглядывать и писать там кучу строк. Код
&НаКлиенте Процедура СписокВоВнешнейОбработкеВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) СтандартнаяОбработка=Ложь; ФормаВнешнейОбработки=SubFxКл_ВнешняяОбработка.ОткрытьПолучить(Объект.ПапкаВнешнихОбработок,"Получить","ФайлИмя.epf",); //==================================== Ссылка= Элементы["СписокВоВнешнейОбработке"].ТекущаяСтрока; ПараметрыФормы = Новый Структура("Ключ", Ссылка); Форма_ТекОбъект = ПолучитьФорму("Документ.ИмяДокумента.ФормаОбъекта", ПараметрыФормы); //==================================== ФормаВнешнейОбработки.Объект=Форма_ТекОбъект.Объект; // ЕСТЕСТВЕННО РУГАЕТЬСЯ ... ПИШЕТ: Ошибка при установке значения атрибута контекста (Объект). По причине: Нельзя изменять поле, содержащее объект данных формы //ФормаВнешнейОбработки.Объект.Ссылка=Форма_ТекОбъект.Объект.Ссылка; // ЕСТЕСТВЕННО РУГАЕТЬСЯ ... ПИШЕТ: Поле объекта недоступно для записи (Ссылка). ФормаВнешнейОбработки.Объект.Ссылка=Форма_ТекОбъект.Объект.Ссылка; //------------------------------------ //ФормаВнешнейОбработки.Объект.Номер=Форма_ТекОбъект.Объект.Номер; //ФормаВнешнейОбработки.Объект.Дата=Форма_ТекОбъект.Объект.Дата; //==================================== ФормаВнешнейОбработки.Открыть(); КонецПроцедуры
Группа: Пользователи
Сообщений: 498
Спасибо сказали: 5 раз
Рейтинг: 0
Цитата(Vofka @ 07.06.19, 13:01)
Текста как обычно много, и как обычно ничего не понятно.
Да чего тут не понятного ... О Господи )) Тем более, что много не только текста но и кода. Я старался что бы было как нельзя понятно ...Ладно забыли ...
Цитата(pablo @ 07.06.19, 13:03)
1. Ваша сбойная строка не нужна.2. В качестве ключа передавайте нужную ссылку на документ, а не ссылку на текущую строку списка.
Хммм... на документ? ... Блиин ... извините ... или у меня проблемы с русским потому что не родной язык или не въезжаю. Поэтому пожалуйста строчку кода вместо "сбойной строки" Буду благодарен!
Gigi @ Сегодня, 13:09
,
Цитата(pablo @ 07.06.19, 13:03)
передавайте нужную ссылку на документ
Имеется ввиду вот так что ли?
Объект = Ссылка.ПолучитьОбъект();
Но это ведь среда сервера... и как потом полученный объект отобразить в форме внешней обработки, у которой основной реквизит стоит тот же документ базы. Т.е. в опции тип и прописан тот же документ: "ДокументОбъект.ИмяДокумента". И включает все те же реквизиты и табличные части что и в самой базе. Т.е. это просто копия того же самого ... отличие только в интерфейсе ФормыОбъекта. Просто управление выбранного объекта нужно передать на эту форму внешней обработки. Вот и весь вопрос Короче ... прошу поконкретнее и не на пальцах, а на конкретный пример кода Буду признателен!
Короче не знаю как решить вопрос. Который пока открыт В конечном счете нужно следующее:
ФормаВнешнейОбработки.Объект= // НУЖНО ПРИСВОИТЬ ОСНОВНОМУ РЕКВИЗИТУ ВНЕШНЕЙ ФОРМЫ ВЫБРАННЫЙ ОБЪЕКТ
Вот и все что надо. А создать форму внешней обработки не как обработку конкретного документа базы, а как отдельную копию просто формы, это просто целый гемор. Потому что скопировав готовую форму документа во внешнюю обработку (до этого со всеми реквизитами документа). И потом в основной реквизит в опции "Тип" поставив вместо прежнего объекта документа, "Внешнюю обработку"... сделав это все многочисленные элементы формы теряют пусть к данным. И нужно вручную их ставить. Короче целый гемор. Поэтому вопрос открыт!
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0
У Вас есть форма во внешней обработке. Вы хотите ее открыть, чтобы она при открытии заполнилась данными из вашей ссылки? Если да, то какие у вашей формы есть параметры? Если параметров нет, то создайте его, при открытии формы передайте в него ссылку, а в форме в процедуре ПриСозданииНаСервере прочитайте этот параметр и заполните из него данные.
Правильно поставленный вопрос содержит до 90% ответа.
Группа: Пользователи
Сообщений: 498
Спасибо сказали: 5 раз
Рейтинг: 0
Цитата(pablo @ 07.06.19, 15:06)
У Вас есть форма во внешней обработке. Вы хотите ее открыть, чтобы она при открытии заполнилась данными из вашей ссылки? Если да, то какие у вашей формы есть параметры? Если параметров нет, то создайте его, при открытии формы передайте в него ссылку, а в форме в процедуре ПриСозданииНаСервере прочитайте этот параметр и заполните из него данные.
Спасибо ... можно и так но Вам думаю уже нужно поздравить автора )) ЭВРИКА )))) Наконец то ... нашел решение ... самое мало геморное и легкое ... без лишних хлопот. От которых уже голова кругом. И ключ решения лег опять на тот же "Велосипед" из общего модуля. Там кое что нужно было докорректировать... В функции добавить еще один аргумент. Вот тот самый вариант "велосипеда" из общего модуля, но доработанный
//ФормаВнешнейОбработки=SubFxКл_ВнешняяОбработка.ОткрытьПолучить("АдресПапки","Получить",стрПараметрыФормы,"ФормаИмя",); Функция ОткрытьПолучить(АдресПапки,ПолучитьОткрыть,стрПараметрыФормы,ИмяФайла,ФормаИмя) Экспорт //====================== Расширение=Fx_Текст.РасширениеФайла(ИмяФайла); //Сообщить(Расширение); Если Расширение="epf" Тогда Внешние="ВнешниеОбработки"; Внешний="ВнешняяОбработка"; ИначеЕсли Расширение="erf" Тогда Внешние="ВнешниеОтчеты"; Внешний="ВнешнийОтчет"; Иначе Предупреждение("Файл: "+ИмяФайла+" не явяеться внешним отчетом или внешней обработкой!"); Возврат Неопределено; КонецЕсли; //====================== ПолноеИмяФайла=СтрЗаменить(АдресПапки+"\"+ИмяФайла,"\\","\"); //====================== Попытка АдресХранилища = ""; //Помещаем обработку во временном хранилище Результат = ПоместитьФайл(АдресХранилища,ПолноеИмяФайла, , Ложь); ИмяОбработки = SubFx_ВнешняяОбработка.ПодключитьВнешнююОбработку(Внешние,АдресХранилища); // Откроем форму подключенной внешней обработки Исключение Предупреждение("Обработка: "+ПолноеИмяФайла+" Не найдена!"); Возврат Неопределено; КонецПопытки; //====================== Если ФормаИмя=Неопределено Тогда ФормаАдрес=Внешний+"."+ ИмяОбработки +".Форма"; Иначе ФормаАдрес=Внешний+"."+ ИмяОбработки +"."+ФормаИмя; КонецЕсли; //====================== Если ПолучитьОткрыть="Открыть" Тогда Если стрПараметрыФормы=Неопределено Тогда ОткрытьФорму(ФормаАдрес); Иначе ОткрытьФорму(ФормаАдрес,стрПараметрыФормы); КонецЕсли; Иначе Если стрПараметрыФормы=Неопределено Тогда Форма=ПолучитьФорму(ФормаАдрес); Иначе Форма=ПолучитьФорму(ФормаАдрес,стрПараметрыФормы); КонецЕсли; КонецЕсли; //====================== Возврат Форма; КонецФункции
А вот точка над ИИИИИИ ... ))) Которая на этот раз наконец то аж взорвалась успехом ))))
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!