Версия для печати темы (https://pro1c.org.ua/index.php?s=f9d5d64a462e2ea9261779e5d8b1f207&showtopic=51581)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Пучить полный адрес файла внешней обработки при ее открытии

Автор: Gigi 17.04.19, 11:03

Всем привет!

&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПолныйАдресФайла="???????";
Сообщить(ПолныйАдресФайла);
КонецПроцедуры

Шарил в поисковике ... потом надоело... и кроме того времени нет на это...
И если пойск занимает более 5-ти минут то лучше уже здесь... по способу решение задачи в фоновом режиме.... Не отвлекаясь от работы.
Так что, кто нибудь поможет сэкнмить время..
И скинуть готовый код....Вернее вписать строки в эту процедуру как это сделать.
Так что нужен только код по быстрому и безо всяких комментариев.
Буду признателен!

Автор: Bernet 17.04.19, 11:51

Gigi @ Сегодня, 12:03 * ,
У внешних обработок есть свойство "ИспользуемоеИмяФайла"

     Сообщить(ЭтотОбъект.ИспользуемоеИмяФайла);

Автор: Gigi 17.04.19, 12:38

Bernet @ Сегодня, 12:51 * ,
Большое спасибо ...
Только чуть не понятно...

&НаКлиенте
Процедура ПриОткрытии(Отказ)
ОбработкаАдрес();
КонецПроцедуры
&НаСервере
Процедура ОбработкаАдрес()
Сообщить(Объект.ИспользуемоеИмяФайла);    
КонецПроцедуры

Так не работает!
А мне нужно перехватить адрес файла обработки при открытии формы или объекта.
А если это свойство применимо только в модуле объекта то там у В.О. только одно событие.. "ОбработкаПроверкиЗаполнения"
http://pro1c.org.ua/index.php?showtopic=3057
Цитата
Далее рассмотрим, когда вызывается данный обработчик. Это зависит от типа объекта и его свойств. Так для, например, для справочника обработчик вызывается перед записью объекта; для документа: если разрешено проведение - при проведении, иначе при записи; для обработки : при вызове стандартных команд "OK", Да". Подробно это описано во встроенной справке. Но также есть возможность вызвать данный обработчик в произвольный момент, используя метод объекта ПроверитьЗаполнение(). Например, определить команду Проверить в форме документа:

Т.е. протестить свойство смог только так ...
Вписал строку в модуль объекта:
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Сообщить(ЭтотОбъект.ИспользуемоеИмяФайла);    
КонецПроцедуры

Вывел кнопку "Ок" из стандартных команд ... и при открытии нажал.
Даже не успел посомтреть какой сообщение появилось )) форма тут же исчезла.
А мне нужно просто при открытии объекта перехватить адрес файла обработки ... что бы просто записать его в какое то поле.
В принципе вот все что надо.
Короче .. Буду опять признателен если по быстрому покажете как... самому не охота с этим париться и даже думать.
Просто опять код... учитывая цель проблематики.

Автор: andr_andrey 17.04.19, 13:10

Цитата(Gigi @ 17.04.19, 13:38) *
самому не охота с этим париться и даже думать.

faceoff.gif

Автор: Bernet 17.04.19, 13:23

andr_andrey @ Сегодня, 14:10 * ,
В обычных формах:

Сообщить(ЭтотОбъект.ИспользуемоеИмяФайла);

В управляемых:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
    
    ПутьКОбработке = ПолучитьИспользуемоеИмяФайла();
    Сообщить(ПутьКОбработке);
    
КонецПроцедуры

&НаСервере
Функция ПолучитьИспользуемоеИмяФайла()
    
    ТекущийОбъект = РеквизитФормыВЗначение("Объект");
    
    Возврат ТекущийОбъект.ИспользуемоеИмяФайла;
    
КонецФункции

Автор: Gigi 17.04.19, 14:47

andr_andrey @ Сегодня, 14:10 * ,
help.gif
Не понятно что ли?
Я же говорю вам уважаемые ... есть дела поважнее чем эта ерунда..
Так что свою иронию оставьте при себе уважаемые )) ... тем более что мне она ... ну сами понимаете ))
А вместо этого пожалуйста скиньте код решения и все..
Еще раз повторяю ... ПЕРЕХВАТИТЬ АДРЕС ФАЙЛА ПРИ ОТКРЫТИИ...
ВОТ ВСЕ ЧТО НАДО
Буду признателен!


Bernet @ Сегодня, 14:23 * ,
Гууу ... наконец то...
Спасибо ... ша проверю ... протестю по быстрому...

Gigi @ Сегодня, 14:24 * ,
Теперь нормально!
С этой командой: "РеквизитФормыВЗначение" был не знаком.
Ну и ладно ... ничего страшного ...
Спасибо...
Пока!



Gigi @ Сегодня, 14:40 * ,
faceoff.gif
Это мне нужно так ... от этого бесконечного гема системы..
Гууу ... как устал уже от всего этого...
Вроде бы от одной малой пакости избавились теперь возникла другая ..
Вот функция..

Функция Получить(ИмяФайла)  Экспорт
ДвДан = Новый ДвоичныеДанные(ИмяФайла);
АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвДан);
ИмяОбр = ВнешниеОбработки.Подключить(АдресВоВременномХранилище,,);    
Возврат ИмяОбр;
КонецФункции

Она вписана в общий модуль конфы... и в файловой и той которая на сервере.
Но дело в том, что данная функция вызванная при открытии обработкой в файловом варианте находит указанный путь а в серверном нет..
faceoff.gif
Я не понял внешние обработки обязательно нужно размешать на сервере что ли? Что бы команды функции ее нашли наконец...
Достало уже ... времени нет на эту ерунду ..
Короче ... скиньте код что бы функция находила адрес на ПК ... И что бы машина понимала что не на сервере надо искать, а на ПК.
Но ведь для этого команды функции работают ведь на сервере ... ваш клиент-серверный язык ....
Ладно извините
Короче подскажите!
Буду признателен!

Gigi @ Сегодня, 15:19 * ,
Для ясности задачи вот полный вариант кода:

//=== общий модуль с именем: "SubFx_ВнешняяОбработка"

//SubFx_ВнешняяОбработка.Получить(ИмяФайла);
Функция Получить(ИмяФайла)  Экспорт
ДвДан = Новый ДвоичныеДанные(ИмяФайла);
АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвДан);
ИмяОбр = ВнешниеОбработки.Подключить(АдресВоВременномХранилище,,);    
Возврат ИмяОбр;
КонецФункции


//=== Форма обработки с разными дин. списками в ней  на пример с именем: "ЭнСист_РабочийСтол" .... и событие выбора объекта одного из дин. списка на пример с именем: "ПоезныйОтпуск_Акты"

&НаКлиенте
Процедура АктыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка=Ложь;
//===================================
ТекОбрАдрес=ПолучитьИспользуемоеИмяФайла();
АдресОбработки=СтрЗаменить(ТекОбрАдрес,"ЭнСист_РабочийСтол","ПОЛЕЗНЫЙ_ОТПУСК_Акт"); //Это при условии что все обрабтки в одной папке. Что обычн так и делаю
ПолноеИмяФайла=АдресОбработки;
//===================================
Обработка=SubFx_ВнешняяОбработка.Получить(ПолноеИмяФайла);
ПараметрыОткрытия = Новый Структура("КлючВарианта", "");
Уникальность = "ВнешняяОбработка." + Обработка + "/КлючВарианта.";
Форма = ПолучитьФорму("ВнешняяОбработка." + Обработка + ".Форма",,Неопределено,Уникальность);
//===================================
СсылкаНаДокумент=Элементы["ПоезныйОтпуск_Акты"].ТекущаяСтрока;
Форма.Объект.ДокСсылка=СсылкаНаДокумент;
//===================================
Форма.ОткрытьМодально();
КонецПроцедуры


&НаСервере
Функция ПолучитьИспользуемоеИмяФайла()
ТекущийОбъект = РеквизитФормыВЗначение("Объект");
Возврат ТекущийОбъект.ИспользуемоеИмяФайла;
КонецФункции


Что бы было ясно что нужно и по быстрому..
Но работает если с файловой которая на ПК, а с сервера не находит путь.
Просто нужно по быстрому докорректирвать
Ладно... извините за эмоции
Буду признатен!

Автор: Vofka 17.04.19, 16:19

andr_andrey, вы будто автора впервые читаете crazy.gif

Автор: Gigi 17.04.19, 17:01

Vofka @ Сегодня, 17:19 * ,
Ладно ... всем еще раз большие извинения за такое агрессивное негодование ... на которое были объективные причины.
но вопрос открыт....
Поэтому все таки как получить адрес файла обработки с клиента ... которая на персональном ... не на сервере..
Вы конечно как угодно, но вопрос открыт...

Автор: Prospero 17.04.19, 21:07

Цитата(Gigi @ 17.04.19, 12:38) *
А мне нужно просто при открытии объекта перехватить адрес файла обработки... Вывел кнопку "Ок" из стандартных команд ... и при открытии нажал.

Может я чего-то не понимаю ... upset.gif
Простите, а что мешает использовать событие в модуле формы "ПриОткрытии" Вашей обработки ?
Вам же привели пример выше (Bernet)

Цитата(Gigi @ 17.04.19, 12:38) *
А если это свойство применимо только в модуле объекта то там у В.О. только одно событие.. "ОбработкаПроверкиЗаполнения"

Так добавьте свою функцию туда...
Модуль объекта Вашей внешней обработки:
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда

Функция ПолучитьИмяФайлаВнешнейОбработки() Экспорт
    Попытка
        Возврат ЭтотОбъект.ИспользуемоеИмяФайла;
    Исключение
        Возврат "";
    КонецПопытки;
КонецФункции
#КонецЕсли


Модуль формы Вашей внешней обработки:
&НаСервере 
Функция (ПолучитьНаСервере()
    Возврат РеквизитФормыВЗначение("Объект").ПолучитьИмяФайлаВнешнейОбработки();
КонецФункции


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Сообщить(ПолучитьНаСервере());
КонецПроцедуры


Автор: Gigi 17.04.19, 22:21

Prospero @ Сегодня, 22:07 * ,
Хоть кто то автора правильно понимает ..
Попробую завтра протестить ..сильно устал.
Весь день сегодня навалило столько вопросов ...
Попробую как сказали ... если что или напишу тут или в личку...
А пока .. гууу... час уже ... нужно круглятся ... голова уже не варит.
Но спасибо..




Да еще ... )))) По поводу ...

Цитата(Vofka @ 17.04.19, 17:19) *
andr_andrey, вы будто автора впервые читаете crazy.gif

Вообще хоть иногда негодую но я тут лично никого вроде бы не оскорблял ))))
Только систему 1С которая местами действительно crazy.gif
И которая достала уже своими ограничениями ...
Ладно пока!




Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua