Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Отобразить объект выбранного списка в форме внешней обработки          
Gigi Подменю пользователя
сообщение 07.06.19, 11:47
Сообщение #1

Оратор
*****
Группа: Пользователи
Сообщений: 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_ВнешняяОбработка.ПодключитьВнешнююОбработку(Внешние,АдресХранилища); // Откроем форму подключенной внешней обработки
Исключение
    Предупреждение("Обработка: "+ПолноеИмяФайла+" Не найдена!"); Возврат Неопределено;
КонецПопытки;
//======================
Если ФормаИмя=Неопределено Тогда
    ФормаАдрес=Внешний+"."+ ИмяОбработки +".Форма";    
Иначе
    ФормаАдрес=Внешний+"."+ ИмяОбработки +"."+ФормаИмя;    
КонецЕсли;
//======================
Если ПолучитьОткрыть="Открыть" Тогда
    ОткрытьФорму(ФормаАдрес);    
Иначе
    Форма=ПолучитьФорму(ФормаАдрес);
КонецЕсли;
//======================
Возврат Форма;
КонецФункции


Это для того что бы было понятно сколько всего опять пришлось кодить и опять изобретать велосипеды.
и все это всего лишь,для того что бы только подойти к поставленной задаче.
ТОЛЬКО ПОДОЙТИ!!! Всего лишь.... пока еще не решив ее а только приступив к ее решению.
И это при том, что еще не факт что вообще пучиться решить задачу...
Так вот, ниже процедура, которая как раз подходит к решению поставленной задачи.
Но которая показывает что подойдя к ней возникает кляуза. И поэтому наводит на мысль, возможно ли это сделать вообще? ... и позволяют ли сделать это возможности системы?
В конце-концов, для решения задачи, зря что ли столько велосипедов изобрел? smile.gifsmile.gif ))))
Поэтому в указанной процедуре все необходимое уже готово и накодено в общем модуле.
Осталось единственное ... самое главное..
ОТОБРАЗИТЬ ОБЪЕКТ ВЫБРАННОГО СПИСКА В ФОРМЕ ВНЕШНЕЙ ОБРАБОТКИ.
Иными словами передать управления выбранного объекта не на ту форму которая у объекта в конфигурации базы, а на форму внешней обработки.
ВОТ ЧТО НАДО. И вот цель задачи.
И в данном коде видно, что помучившись изобретениями велосипедов, тем самым, сделав все необходимое для подспорья, и наконец поставив все точки на над И, стопор возник в финале
На самом главном. ))))
Поэтому, подскажите уважаемые )) Как решить задачу... По быстрому ...
Короче ... помогите сэкономить время. Которое итак потратил опять на общий модуль. В который уже надоело постоянно заглядывать и писать там кучу строк.
Код
&НаКлиенте
Процедура СписокВоВнешнейОбработкеВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка=Ложь;    
ФормаВнешнейОбработки=SubFxКл_ВнешняяОбработка.ОткрытьПолучить(Объект.ПапкаВнешнихОбработок,"Получить","ФайлИмя.epf",);
//====================================
Ссылка= Элементы["СписокВоВнешнейОбработке"].ТекущаяСтрока;
ПараметрыФормы = Новый Структура("Ключ", Ссылка);
Форма_ТекОбъект = ПолучитьФорму("Документ.ИмяДокумента.ФормаОбъекта", ПараметрыФормы);
//====================================
ФормаВнешнейОбработки.Объект=Форма_ТекОбъект.Объект; // ЕСТЕСТВЕННО РУГАЕТЬСЯ ... ПИШЕТ: Ошибка при установке значения атрибута контекста (Объект). По причине: Нельзя изменять поле, содержащее объект данных формы
//ФормаВнешнейОбработки.Объект.Ссылка=Форма_ТекОбъект.Объект.Ссылка; // ЕСТЕСТВЕННО РУГАЕТЬСЯ ... ПИШЕТ: Поле объекта недоступно для записи (Ссылка). ФормаВнешнейОбработки.Объект.Ссылка=Форма_ТекОбъект.Объект.Ссылка;
//------------------------------------
            //ФормаВнешнейОбработки.Объект.Номер=Форма_ТекОбъект.Объект.Номер;
            //ФормаВнешнейОбработки.Объект.Дата=Форма_ТекОбъект.Объект.Дата;
//====================================
ФормаВнешнейОбработки.Открыть();
КонецПроцедуры

Буду признателен!

Сообщение отредактировал Vofka - 07.06.19, 11:59

Vofka Подменю пользователя
сообщение 07.06.19, 12:01
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Текста как обычно много, и как обычно ничего не понятно. mamba.gif

pablo Подменю пользователя
сообщение 07.06.19, 12:03
Сообщение #3

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0

1. Ваша сбойная строка не нужна.2. В качестве ключа передавайте нужную ссылку на документ, а не ссылку на текущую строку списка.


Signature
Правильно поставленный вопрос содержит до 90% ответа.

Спасибо сказали: Gigi,

Gigi Подменю пользователя
сообщение 07.06.19, 13:07
Сообщение #4

Оратор
*****
Группа: Пользователи
Сообщений: 498
Спасибо сказали: 5 раз
Рейтинг: 0

Цитата(Vofka @ 07.06.19, 13:01) *
Текста как обычно много, и как обычно ничего не понятно.

Да чего тут не понятного ... О Господи faceoff.gif )) Тем более, что много не только текста но и кода. Я старался что бы было как нельзя понятно ...Ладно забыли ...
Цитата(pablo @ 07.06.19, 13:03) *
1. Ваша сбойная строка не нужна.2. В качестве ключа передавайте нужную ссылку на документ, а не ссылку на текущую строку списка.

upset.gif
Хммм... на документ? ... Блиин ... извините ... или у меня проблемы с русским потому что не родной язык или не въезжаю.
Поэтому пожалуйста строчку кода вместо "сбойной строки"
Буду благодарен!

Gigi @ Сегодня, 13:09 * ,
Цитата(pablo @ 07.06.19, 13:03) *
передавайте нужную ссылку на документ

Имеется ввиду вот так что ли?
Объект = Ссылка.ПолучитьОбъект();

Но это ведь среда сервера... и как потом полученный объект отобразить в форме внешней обработки, у которой основной реквизит стоит тот же документ базы.
Т.е. в опции тип и прописан тот же документ: "ДокументОбъект.ИмяДокумента".
И включает все те же реквизиты и табличные части что и в самой базе. Т.е. это просто копия того же самого ... отличие только в интерфейсе ФормыОбъекта.
Просто управление выбранного объекта нужно передать на эту форму внешней обработки. Вот и весь вопрос
Короче ... прошу поконкретнее и не на пальцах, а на конкретный пример кода
Буду признателен!

Цитата(Gigi @ 07.06.19, 13:36) *
а не ссылку на текущую строку списка.

Да ладно ... какая строка списка?
Когда в линии :
Ссылка=Элементы["СписокВоВнешнейОбработке"].ТекущаяСтрока;

Переменная "Ссылка" это не текущая строка а как раз и есть ССЫЛКА НА ДОКУМЕНТ! ТА САМАЯ...
Уже проверял и давно пережевал ...
Сообщить(ТипЗнч(Ссылка));                                                       // Возврат - Синоним документа
Сообщить(ТипЗнч(Ссылка)=Тип("ДокументСсылка.ДокИмя"));     // Возврат - Истина

Короче это я Вас понять не могу. При том что сам куда нельзя понятно изложил
Поэтому вопрос открыт!

pablo Подменю пользователя
сообщение 07.06.19, 13:19
Сообщение #5

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0

//Ссылка= Элементы["СписокВоВнешнейОбработке"].ТекущаяСтрока; 
ПараметрыФормы = Новый Структура("Ключ", Форма_ТекОбъект.Объект.Ссылка);
Форма_ТекОбъект = ПолучитьФорму("Документ.ИмяДокумента.ФормаОбъекта", ПараметрыФормы);
    //ФормаВнешнейОбработки.Объект=Форма_ТекОбъект.Объект;


Сообщение отредактировал pablo - 07.06.19, 13:20


Signature
Правильно поставленный вопрос содержит до 90% ответа.

Спасибо сказали: Gigi,

Gigi Подменю пользователя
сообщение 07.06.19, 13:53
Сообщение #6

Оратор
*****
Группа: Пользователи
Сообщений: 498
Спасибо сказали: 5 раз
Рейтинг: 0

Спасибо но не работает. И вообще нонсенс получается..
Цитата(pablo @ 07.06.19, 14:19) *
//Ссылка= Элементы["СписокВоВнешнейОбработке"].ТекущаяСтрока; 
ПараметрыФормы = Новый Структура("Ключ", Форма_ТекОбъект.Объект.Ссылка);
Форма_ТекОбъект = ПолучитьФорму("Документ.ИмяДокумента.ФормаОбъекта", ПараметрыФормы);
    //ФормаВнешнейОбработки.Объект=Форма_ТекОбъект.Объект;


Короче не знаю как решить вопрос. Который пока открыт
В конечном счете нужно следующее:
ФормаВнешнейОбработки.Объект= // НУЖНО ПРИСВОИТЬ ОСНОВНОМУ РЕКВИЗИТУ ВНЕШНЕЙ ФОРМЫ ВЫБРАННЫЙ ОБЪЕКТ

Вот и все что надо.
А создать форму внешней обработки не как обработку конкретного документа базы, а как отдельную копию просто формы, это просто целый гемор.
Потому что скопировав готовую форму документа во внешнюю обработку (до этого со всеми реквизитами документа).
И потом в основной реквизит в опции "Тип" поставив вместо прежнего объекта документа, "Внешнюю обработку"...
сделав это все многочисленные элементы формы теряют пусть к данным. И нужно вручную их ставить. Короче целый гемор.
Поэтому вопрос открыт!

pablo Подменю пользователя
сообщение 07.06.19, 14:06
Сообщение #7

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0

У Вас есть форма во внешней обработке.
Вы хотите ее открыть, чтобы она при открытии заполнилась данными из вашей ссылки? Если да, то какие у вашей формы есть параметры?
Если параметров нет, то создайте его, при открытии формы передайте в него ссылку, а в форме в процедуре ПриСозданииНаСервере прочитайте этот параметр и заполните из него данные.


Signature
Правильно поставленный вопрос содержит до 90% ответа.

Спасибо сказали: Gigi,

Gigi Подменю пользователя
сообщение 07.06.19, 14:28
Сообщение #8

Оратор
*****
Группа: Пользователи
Сообщений: 498
Спасибо сказали: 5 раз
Рейтинг: 0

Цитата(pablo @ 07.06.19, 15:06) *
У Вас есть форма во внешней обработке.
Вы хотите ее открыть, чтобы она при открытии заполнилась данными из вашей ссылки? Если да, то какие у вашей формы есть параметры?
Если параметров нет, то создайте его, при открытии формы передайте в него ссылку, а в форме в процедуре ПриСозданииНаСервере прочитайте этот параметр и заполните из него данные.

Спасибо ... можно и так но Вам думаю уже нужно поздравить автора ))
ЭВРИКА )))) Наконец то ... нашел решение ... самое мало геморное и легкое ... без лишних хлопот. От которых уже голова кругом.
И ключ решения лег опять на тот же "Велосипед" из общего модуля.
Там кое что нужно было докорректировать... В функции добавить еще один аргумент.
Вот тот самый вариант "велосипеда" из общего модуля, но доработанный

//ФормаВнешнейОбработки=SubFxКл_ВнешняяОбработка.ОткрытьПолучить("АдресПапки","Получить",стрПараметрыФормы,"ФормаИмя",);
Функция ОткрытьПолучить(АдресПапки,ПолучитьОткрыть,стрПараметрыФормы,ИмяФайла,ФормаИмя) Экспорт
//======================
Расширение=Fx_Текст.РасширениеФайла(ИмяФайла); //Сообщить(Расширение);    
Если Расширение="epf" Тогда
    Внешние="ВнешниеОбработки";
    Внешний="ВнешняяОбработка";
ИначеЕсли Расширение="erf" Тогда
    Внешние="ВнешниеОтчеты";
    Внешний="ВнешнийОтчет";
Иначе
    Предупреждение("Файл: "+ИмяФайла+" не явяеться внешним отчетом или внешней обработкой!"); Возврат Неопределено;
КонецЕсли;
//======================
ПолноеИмяФайла=СтрЗаменить(АдресПапки+"\"+ИмяФайла,"\\","\");
//======================
Попытка
    АдресХранилища = ""; //Помещаем обработку во временном хранилище
    Результат = ПоместитьФайл(АдресХранилища,ПолноеИмяФайла, , Ложь);
    ИмяОбработки = SubFx_ВнешняяОбработка.ПодключитьВнешнююОбработку(Внешние,АдресХранилища); // Откроем форму подключенной внешней обработки
Исключение
    Предупреждение("Обработка: "+ПолноеИмяФайла+" Не найдена!"); Возврат Неопределено;
КонецПопытки;
//======================
Если ФормаИмя=Неопределено Тогда
    ФормаАдрес=Внешний+"."+ ИмяОбработки +".Форма";    
Иначе
    ФормаАдрес=Внешний+"."+ ИмяОбработки +"."+ФормаИмя;    
КонецЕсли;
//======================
Если ПолучитьОткрыть="Открыть" Тогда
Если стрПараметрыФормы=Неопределено Тогда
    ОткрытьФорму(ФормаАдрес);
Иначе
    ОткрытьФорму(ФормаАдрес,стрПараметрыФормы);
КонецЕсли;
Иначе
    Если стрПараметрыФормы=Неопределено Тогда
        Форма=ПолучитьФорму(ФормаАдрес);
    Иначе
        Форма=ПолучитьФорму(ФормаАдрес,стрПараметрыФормы);
    КонецЕсли;    
КонецЕсли;
//======================
Возврат Форма;
КонецФункции


А вот точка над ИИИИИИ ... )))
Которая на этот раз наконец то аж взорвалась успехом ))))
&НаКлиенте
Процедура СписокВоВнешнейОбработкеВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка=Ложь;
Ссылка= Элементы["СписокВоВнешнейОбработке"].ТекущаяСтрока;
стрПараметрыФормы = Новый Структура("Ключ",Ссылка);    
ФормаВнешнейОбработки=SubFxКл_ВнешняяОбработка.ОткрытьПолучить(Объект.ПапкаВнешнихОбработок,"Получить",стрПараметрыФормы,"ФайлИмя.epf",);
ФормаВнешнейОбработки.Открыть();
КонецПроцедуры

Вот что и нужно было.
Ладно ... Всем огромное спасибо за отклик!
Думаю вопрос решен!
Пока!

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 19:21
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!