Имя: Пароль:
1C
1С v8
Открыть объект по найденной ссылке в другой базе
0 Mikhail Volkov
 
28.05.20
09:42
Например, из командной строки, или ЗапуститьПриложение() не используя COM/OLE-механизмы (базы на разных версиях платформы). Вопрос возник еще в теме Как проверить идет ли обмен данными по Com-соединению?
1 Mikhail Volkov
 
28.05.20
10:54
Смотрел на http://catalog.mista.ru/public/1042208/ обработку "Открытие документов и справочников по ссылке в другой базе только средствами 1С", но там используется команда ПерейтиПоНавигационнойСсылке(GotoURL) доступная, начиная с версии 8.3.14.
2 Галахад
 
гуру
28.05.20
11:14
Можно попробовать запускать внешнюю обработку и передавать параметром ссылку на объект.
/Executec:\Ай.epf /C"ссылка"
3 Greeen
 
28.05.20
11:24
(0) Можно базу опубликовать еще и по http ссылке открывать =)
4 VladZ
 
28.05.20
11:39
(0) Для каких целей?
5 Mikhail Volkov
 
28.05.20
12:20
(2) А из внешней обработки как? Если это набор команд, не беда, согласен написать прямо в Альфа-Авто - обычные формы (не УФ).
(4) Отказаться от Com, OLE.
6 Галахад
 
гуру
28.05.20
12:29
(5) Хм. При запуске 1С стартует обработка. При открытии обработки надо написать код открытия ссылки из полученных параметров.
7 Mikhail Volkov
 
28.05.20
12:56
(6) Вот и спрашиваю какой код написать? Например, все работают в Альфа-Авто, документы перебрасываются в базу Комплексная автоматизация - в ней делается отчетность. В Альфа-Авто сделали сверку документов с КА, обнаружился несоответствующий документ, нажали по его ссылке, открылся этот документ в КА. Пока это работает с КА1 по Com/OLE на единой платформе 8.3.10 (выше Альфа-Авто до 6 редакции не работает). Переходим на КА2 с другой платформой, и Com/OLE не работает.
8 ДенисЧ
 
28.05.20
12:59
Рисуй свою форму в КА2, получай данные, заполняй форму. После изменения - заливай данные обратно.
И да - от кома уходи. веб/хттп-сервисы наше всио.
9 Mikhail Volkov
 
28.05.20
13:44
(8) В Альфа-Авто рисовать все формы документов КА2, зачем? Может менять в КА2 не чего, не надо, а лишь выяснить по какой причине документ изменен в КА2. Может наоборот, в Альфа-Авто надо что-то изменить...
10 ДенисЧ
 
28.05.20
13:46
(9) Форму нужно рисовать там, где она должна открываться. Если основная работа идёт в КА, то рисовать в КА.
Если в АА, то в АА.
11 VladZ
 
28.05.20
14:19
Мои мысли по этой задаче (т.е. мое личное мнение исходя их опыта работы):
Основная мысль:
Открывать объект в другой информационной базе - это полнейший бред. Информационная система - это совокупность данных. Мало открыть документ. Всегда нужно проверить "что-то еще".
Поэтому, нужно передать информацию в другую базу и уже в другой базе анализировать или корректировать.

Таким образом, я бы решал задачу следующим образом:
1. Передавал в нужную информационную базу ссылки на "кривые документы".
2. В этой информационной базе формировал задачи пользователю (или группе) с указанием проблемного документа.

В итоге имеем:
1. Ответственный пользователь оперативно видит список "кривых" документов.
2. Есть возможность организовать контроль над работой этого пользователя.
3. Не нужно заморачиваться открытием объектов других баз.
4. Как результат - более надежный способ корректировки и контроля данных.
12 Mikhail Volkov
 
28.05.20
15:05
(11) Документами не заморачиваюсь, решаю только технические задачи. Так (9) было до меня, лишь хочу отказаться от Com/OLE, но работало как было раньше. Мало ли по какой причине надо пользователю открыть сразу заданный документ: например, письмо прислали со ссылкой.
13 НичегоНе Понятно
 
28.05.20
15:11
>>Мало ли по какой причине надо пользователю открыть сразу заданный документ: например, письмо прислали со ссылкой.
Это немного другое. Передать в работающий сеанс событие... достаточно костыльное дело, без драйверов и внешних компонент.
14 Mikhail Volkov
 
28.05.20
18:35
Смотрю на http://catalog.mista.ru/public/1042208/ обработку "Открытие документов справочников по ссылке в другой базе с использованием встроенного файла", она сделана под УФ. В базе с обычными формами она не откроется?
Поля: Название окна, База источник - понятно, задается ИмяСервера\ИмяБазы. А вот "Путь объекта ВИБ" - ладно, добавлю поля: Тип объекта, GUID объекта, напишу:

Процедура ГуидОбъектаПриИзменении(Элемент)
    Если ПустаяСтрока(ТипОбъекта) Или ПустаяСтрока(ГуидОбъекта) Тогда
        Предупреждение("Не задан " + ?(ПустаяСтрока(ТипОбъекта), "тип", "GUID") + " объекта!", 60);
        Возврат;
    КонецЕсли;
    НавигационныйГУИД = Сред(ГуидОбъекта,20,4)+Сред(ГуидОбъекта,25,12)+Сред(ГуидОбъекта,15,4)+Сред(ГуидОбъекта,10,4) + Сред(ГуидОбъекта,1,8);
    ПутьОбъектаВИБ = "e1cib/data/" + ТипОбъекта + "?ref=" + НавигационныйГУИД;    
КонецПроцедуры

А поле ПолныйПутьОткрытияОбъектаВБазеИсточника    как формировать? При открытии написано для примера "D:\Program Files (x86)\1cv8\common\1cestart.exe ENTERPRISE /S ИмяСервера\ИмяБазы /URL e1cib/data/Документ.ИмяДокумента?ref=80cc0050568d6b1711e95b9eabf5385b"
15 Сияющий в темноте
 
28.05.20
20:10
если нужно открыть в другой базе,то запускаем другую базу,в ней обработку,которая через WMI мониторит директорию за файлом,который отрабатывает и открывает форму.
для пользователя будет просто переключение на другую базу,где документ откроется сам
16 HawkEye
 
28.05.20
20:49
(7) если этого документа нет в базе приемнике, его надо туда пригнать, а не городить огород по открыванию документа источника в базе приемнике... в чем кайф смотреть на объекты в виде строки??
а чтобы оперативно пригнать документ, надо написать веб-сервис...

а чтобы COM работало на разных версиях, надо на каждую версию сделать свой алиас... на инфостарте статья была на эту тему...
17 HawkEye
 
28.05.20
20:51
(0) а для того, чтобы запустить обработку из команднойстроки, написать батник который стартует 1С, обработку положить в нужный каталог, а при старте системы посмотреть есть ли в этом каталоге обработка и запустить если есть....
18 Mikhail Volkov
 
29.05.20
07:01
(16) Да, вроде есть методы работы COM на разных версиях платформы, но не OLE.
19 Mikhail Volkov
 
29.05.20
10:50
Смотрю на http://catalog.mista.ru/public/1042208/ обработку "Открытие документов справочников по ссылке в другой базе с использованием встроенного файла", она сделана под УФ. В базе с обычными формами она не откроется? Как запустить обычную базу на УФ? Вчера как-то в УФ открылась.
Перевожу эту обработку на обычные формы, там есть на &НаСервере такая функция:
Функция ПоместитьФайлВХранилище(ИдентификаторФормы)
    
    Обработка = РеквизитФормыВЗначение("Объект");
    ОткрытьОбъектВДругойБазе = Обработка.ПолучитьМакет("ОткрытьОбъектВДругойБазе");
    
    Возврат ПоместитьВоВременноеХранилище(ОткрытьОбъектВДругойБазе, ИдентификаторФормы);
    
КонецФункции
У меня в обычных формах ругается: Процедура или функция с указанным именем не определена (РеквизитФормыВЗначение)
    Обработка = <<?>>РеквизитФормыВЗначение("Объект"); (Проверка: Толстый клиент (обычное приложение))
Еще:
Процедура ОткрытьВБазеИсточнике(Команда)
    
    ПутьКФайлу                    = КаталогВременныхФайлов();
    ПолныйПутьКФайлу            = ПутьКФайлу + "ОткрытьОбъектВДругойБазе.exe";
    ОткрытьОбъектВДругойБазе    = ПолучитьИзВременногоХранилища(ПоместитьФайлВХранилище(УникальныйИдентификатор));
    ОткрытьОбъектВДругойБазе.Записать(ПолныйПутьКФайлу);
    :
КонецПроцедуры
Ругается: Переменная не определена (УникальныйИдентификатор)
Как переделать в обычные формы?
20 Mikhail Volkov
 
29.05.20
16:39
А что делает эта функция: извлекает файл ОткрытьОбъектВДругойБазе.exe из макета, помещает его в хранилище (с ним не работал). Тут же его извлекает оттуда, записывает в КаталогВременныхФайлов(). Может сразу туда записать?
21 Mikhail Volkov
 
29.05.20
17:16
Заменил: ОткрытьОбъектВДругойБазе    = ПолучитьИзВременногоХранилища(ПоместитьФайлВХранилище(УникальныйИдентификатор)); на ОткрытьОбъектВДругойБазе    = ЭтотОбъект.ПолучитьМакет("ОткрытьОбъектВДругойБазе"); - вроде заработало!
Каждый раз база открывается вновь (если даже открыта), и просит имя и пароль (под Com не просит, если пользователь аутентифицируется под ОС). И Название окна - задал текстом, но в открывшихся окнах с базой КА2 его не вижу?
22 hhhh
 
29.05.20
17:46
(19) непонятно, зачем такие сложности. можно же как в (2) советуют, запускаешь КА 2.4, в ней делаешь Найти по номеру или НайтиПоНаименованию. И потом ОткрытьЗначение
23 Mikhail Volkov
 
29.05.20
19:01
(22) Можно, но нужно открывать, искать...
Оказывается в обработке ПолныйПутьОткрытияОбъектаВБазеИсточника не нужен, оставляю пустым - так же работает.
24 Mikhail Volkov
 
29.05.20
19:18
Хочу в обработку добавить кнопочку для выбора Справочника или Документа, сначала Тип, затем конкретный Объект. В УПП, например, есть что-то готовое?
25 Mikhail Volkov
 
30.05.20
10:07
А где формируется заголовок окна открываемой программы? Задал его произвольным текстом, и каждый раз при открытии объекта открывается новое окно с программой?
26 Mikhail Volkov
 
30.05.20
13:45
Где в ERP/КА2 к названию конфигурации добавляется название основной организации? Блин, обработка до 3-х пробелов допускает в имени окна.
27 Mikhail Volkov
 
30.05.20
14:15
(26) В общих настойках Заголовок программы. Теперь (24)...
28 Mikhail Volkov
 
30.05.20
15:45
Смотрю обработку ГрупповаяОбработкаОбъектов, в ней реквизит ОписаниеТипаОбъектов, при нажатии на нем выбирается тип Справочника или Документа. Скопировал его в свою обработку, нажимаю: показывает все типы объектов, не только Справочники или Документы. Как ограничить?
29 Mikhail Volkov
 
30.05.20
19:02
(28) Процедурой УстановитьДоступныеТипыОбъектов().
А что происходит при нажатии кнопки у реквизита ОписаниеТипаОбъектов на форме? Мне он не нужен на форме. Как сделать, чтобы при нажатии кнопки Объект сперва открылось окно выбора типа объекта, затем окно списка объектов выбранного типа?
Выбор объекта из списка объектов выбранного типа выполняется процедурой КоманднаяПанельОбрабатываемыеОбъектыПодборОбъектов(Кнопка) из ГрупповаяОбработкаОбъектов. Но не понял куда помещается выбранный объект?