Имя: Пароль:
1C
1С v8
v8: Открытие (получение) внешней обработки с помощью кода
,
0 Tanis
 
11.02.13
13:09
Добрый день!
Подскажите как добраться до внешней обработки с помощью кода?
1 DrShad
 
11.02.13
13:10
ВнешняяОбработка = ВнешниеОбработки.Создать(ПолноеИмяФайла);
ВнешняяОбработка.ПолучитьФорму().Открыть();
2 Kreont
 
11.02.13
13:16
Обробка = ВнешниеОбработки.Создать(НазваШшляхуПовногоОбробки);
Форма = Обробка.ПолучитьФорму();
// Здесь можно параметры установить на форме нужные
Форма.Открыть();
3 Tanis
 
11.02.13
13:48
Файл не обнаружен.
Я так вроде уже делал.
4 Tanis
 
11.02.13
13:48
и почему создать?
5 Kreont
 
11.02.13
14:10
(3)Полное имя значит неправильное указал.
(4) Создать в смысле объект 1с языка что б работать с обработкой, а не саму обработку.
6 Tanis
 
11.02.13
14:23
Имя указывается в "" ?
Пишет не обнаружено.
7 Kreont
 
11.02.13
14:26
(6) может прав нету на чтение.
Сделай путь попроще, "D:\obrabotka.epf", и проверь.
8 Tanis
 
11.02.13
14:40
Какой путь указать???
Обработка же подключена уже в к базе.
И куда путь вписать?
9 Конфигуратор1с
 
11.02.13
14:42
(0) Так в смысле из справочника внешних обработок?
10 Kreont
 
11.02.13
14:42
"Обработка же подключена уже в к базе." ???
Ну это тогда не совсем внешняя обработка, речь идет про подключаемые внешн.обработки?
11 Tanis
 
11.02.13
14:43
Ну да, она в справочнике внешних обработок уже.
12 Tanis
 
11.02.13
14:45
С путем тоже пишет, файл не найден.
13 Конфигуратор1с
 
11.02.13
14:56
Процедура СправочникСписокВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
   
   Если Не ВыбраннаяСтрока.ЭтоГруппа Тогда
       
       ЭтоОбработка = ?(ВыбраннаяСтрока.ВидОбработки = Перечисления.ВидыДополнительныхВнешнихОбработок.Обработка, Истина, Ложь);
       ЭтоОтчет = ?(ВыбраннаяСтрока.ВидОбработки = Перечисления.ВидыДополнительныхВнешнихОбработок.Отчет, Истина, Ложь);
       
       Если НЕ (ЭтоОбработка ИЛИ ЭтоОтчет) Тогда
           Возврат;
       КонецЕсли;
       
       
       //И ВыбраннаяСтрока.ВидОбработки = Перечисления.ВидыДополнительныхВнешнихОбработок.Обработка Тогда
       
       Попытка
           
           ИмяФайла = ПолучитьИмяВременногоФайла();
           ДвоичныеДанные = ВыбраннаяСтрока.ХранилищеВнешнейОбработки.Получить();
           ДвоичныеДанные.Записать(ИмяФайла);
           
           Если ЭтоОбработка Тогда
               
               Форма = ВнешниеОбработки.ПолучитьФорму(ИмяФайла);
               
           Иначе
               
               Форма = ВнешниеОтчеты.ПолучитьФорму(ИмяФайла);
               
           КонецЕсли;
           
           Если Не Форма = Неопределено Тогда
               
               Форма.Открыть();
               
           Иначе
               
               Если ЭтоОбработка Тогда
                   ВнешняяОбработка = ВнешниеОбработки.Создать(ИмяФайла);
               Иначе
                   ВнешнийОтчет = ВнешниеОтчеты.Создать(ИмяФайла);
               КонецЕсли;
               
           КонецЕсли;
           
           УдалитьФайлы(ИмяФайла);
           
       Исключение
           
           Если ЭтоОбработка Тогда
               
               Предупреждение("Выбранный файл не является внешней обработкой.
                              |Либо, данная обработка не предназначена для
                              |запуска в этой конфигурации.");
           Иначе
               Предупреждение("Выбранный файл не является внешним отчетом.
                              |Либо, данный отчет не предназначена для
                              |запуска в этой конфигурации.");
           КонецЕсли;
           
       КонецПопытки;
       
       СтандартнаяОбработка = Ложь;
       
   КонецЕсли;
   
КонецПроцедуры
14 Конфигуратор1с
 
11.02.13
14:56
вот тебе процедура из типоовй по открытию обработки в справочнике.
15 Tanis
 
11.02.13
16:08
Спасибо. Теперь обработку получаю, если ставить открыть, то открывается, а вот условие с ней не срабатывает.

Если НЕ Форма.Открыта() = Истина Тогда
       Отказ = Истина;
       Сообщить("У Вас нет прав на запись: " + Источник + "  Документ был проведен!)
16 hhhh
 
11.02.13
16:26
а где это условие Открыта() проверяется?
17 Tanis
 
11.02.13
16:32
в событии перед записью.
Эта доп обработка перепроводит документы за выбранный период
18 Tanis
 
11.02.13
16:52
Странно.
Пробую открыть эту форму при записи объекта, она окрывается, и тогда условие что если "НЕ открыта" срабатывает, дает записать.
Если запускать эту форму через справочник внешних обработок, то условие почему-то не видит что она открыта.
19 Tanis
 
11.02.13
16:58
как добиться нужного?
20 hhhh
 
11.02.13
17:09
наверно разные формы.
21 Tanis
 
12.02.13
08:26
Нет не разные, как они могут быть разными?
22 Tanis
 
12.02.13
09:04
Как еще можно добиться нужного?
23 DrShad
 
12.02.13
09:09
(22) начни с нормального описания своей проблемы
24 Tanis
 
12.02.13
09:55
Ставлю ограничение на запись проведенных документов, для всех пользователей кто не в группе.
Работает.
При запуске обработок "Контроль последовательности" и "групповое перепроведение", срабатывал запрет.
Поставил условие, что если эти обработки открыты, тогда можно записывать.
Но есть 2 внешних обработки которые тоже перезаписывают эти документы, вот их и хочу тоже в условие добавить, что если они открыты, то запись возможна.
Но не могу на них выйти...
25 FIXXXL
 
12.02.13
10:55
(24)огород какой-то...
Мож тебе проще подписки на события доков юзать?
26 Tanis
 
12.02.13
11:07
Так в них и делаю. Событие перед записью.
Там и ставлю эти условия.
27 DrShad
 
12.02.13
11:09
проще сделать переопределяемый параметр сеанса, а во всех обработка при открытии его выставлять в ИСтина и при закрытии в Ложь
28 Tanis
 
12.02.13
11:31
поподробнее можно про этот параметр сеанса?
29 DrShad
 
12.02.13
11:32
а что не ясно?
30 Tanis
 
12.02.13
11:42
само понятие параметр сеанса. :-(
Или просто любой параметр в форме поставить?
31 Tanis
 
12.02.13
11:44
Без изменения форм никак?
32 Tanis
 
12.02.13
12:51
ИмяФайла = ПолучитьИмяВременногоФайла("epf");
       ДвоичныеДанные = ВыбраннаяСтрока.ХранилищеВнешнейОбработки.Получить();
       ДвоичныеДанные.Записать(ИмяФайла);
       Форма = ВнешниеОбработки.Создать(ИмяФайла);
       Форма = ВнешниеОбработки.ПолучитьФорму(ИмяФайла);
       //УдалитьФайлы(ИмяФайла);
       Форма.Открыть();
         
   Если (Источник.Проведен = Истина) И (НайденнаяСтрока = Неопределено) И (НЕ РольДоступна("ПолныеПрава")) И НЕ Обработки.УправлениеПоследовательностями.ПолучитьФорму().Открыта() = Истина И НЕ Обработки.ГрупповоеПерепроведениеДокументов.ПолучитьФорму().Открыта() = Истина И НЕ Форма.Открыта() = Истина Тогда
       Отказ = Истина;
       Сообщить("У Вас нет прав на запись: " + Источник + "  Документ был проведен!");
   КонецЕсли;

Имеем вот такой код. Почему когда Форма.Открыть(); открывается нужная форма, а когда И НЕ Форма.Открыта() условие не срабатывает.
При этом если форма открывается во время записи, а не от из справочника "Внешних обработок", то условие работает.
33 Tanis
 
12.02.13
13:08
Почему может такое быть?
34 НЕА123
 
12.02.13
13:15
(32)
сегодня, конечно, не пятница.
советую поспать

хрень полная. например условие.

Обработки.УправлениеПоследовательностями.ПолучитьФорму().Открыта() всегда ложь.
35 Tanis
 
12.02.13
13:16
почему всегда ложь? Когда при закрытии месяца запускается!
Условие работает
36 Tanis
 
12.02.13
13:18
так что прежде чем хамить, проверьте правильность...
37 НЕА123
 
12.02.13
13:21
(35)
ээээ... пардон. ступил.
но (27) лучше.
38 НЕА123
 
12.02.13
13:22
(36)
попытаюсь исправиться.

>При этом если форма открывается во время записи, а не от из справочника "Внешних обработок", то условие работает.
это совершенно другая обработка.
39 Tanis
 
12.02.13
13:38
Почему она считает ее другой? Хранилище разное что-ли получается?
Я просто не в курсе о параметрах сеанса.
Извинения принимаются. :-)
40 Tanis
 
12.02.13
13:38
а добраться до той, которая в справочнике возможно?
41 НЕА123
 
12.02.13
14:05
(39)
в конфигураторе добавить параметр сеанса "ЗапретЧегото" тип число.
при старте обработок типа  УправлениеПоследовательностями

параметрысеанса.ЗапретЧегото = параметрысеанса.ЗапретЧегото + 1;
при закрытии соответственно
параметрысеанса.ЗапретЧегото = параметрысеанса.ЗапретЧегото - 1;

ну и проверять
если ЗапретЧегото Тогда
Отказ.Истина;
.....
42 НЕА123
 
12.02.13
14:07
(40)
на УФ, в принципе, можно.
но один хрен... грязновато это.
43 Tanis
 
12.02.13
14:13
Что за УФ?
Не хотел эти обработки трогать. (не мои, писались до меня)
Может вообще проще их в конфу занести.
44 Tanis
 
12.02.13
15:49
Упрявляемые формы не используются
45 Dolphinbet
 
12.02.13
16:09
А как из отчета (в обработке расшифровки) получить новый экземпляр этого же отчета открытого из справочника "Внешних отчетов и обработок"?
46 Tanis
 
13.02.13
08:45
т.е получается бесполезно кодом до нее добираться?
47 НЕА123
 
13.02.13
08:56
какая разница - открыта форма какая-то или не открыта?
ну потом откроют.
а может она в другом сеансе открыта?
непонятно.
48 Tanis
 
13.02.13
10:25
Разница, в том, чтоб дать этой форме действие над проведением документов.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший