Имя: Пароль:
1C
Админ
Скрыть окно V83.Application
,
0 Jenstel
 
23.05.14
14:23
Платформа 8.3
Создаю OLE-объект
1C := CreateOleObject('V83.Application');
1C.Connect('File="C:\Accounting-2013";usr=ХХХ;pwd=ХХХ');

При создании, особенно на медленных машинах, появляется окно клиента (да ему еще и фокус передается). Это крайне неудобно, т.к. вызов происходит из собственного приложения.
Подскажите как сделать выполнение фоном, чтобы окно не отображалось
Пробовал 1C.Visible:=False - происходит все тоже самое с отображением окна, а потом оно просто исчезает. Везде в документации указано, что приложение наоборот должно не отображаться на экране.
1 butterbean
 
23.05.14
14:24
надо пользоваться ComConnector
2 banco
 
23.05.14
14:26
(0) может вам V83.COMConnector нужен?
3 Jenstel
 
23.05.14
14:34
Я про него тоже думал, но он ограничен функционалом. Я не профессионал в 1С-программировании и то, что я могу запрограммировать не работает при соединении через ComConnector. Например, не получается сделать ссылку на справочник
SprStore := 1C.Справочники.Номенклатура;
Метод не поддерживается
4 butterbean
 
23.05.14
14:46
(3) а 1С.Catalogs.Номенклатура??
5 hhhh
 
23.05.14
14:47
(3)

Глобальный контекст (Global context)
Справочники (Catalogs)
Использование:

Только чтение.
Описание:

Тип: СправочникиМенеджер.
Используется для доступа к определенным в конфигурации справочникам.

Доступность:

Сервер, толстый клиент, внешнее соединение.
См. также:

СправочникиМенеджер



не надо нам лапшу на уши вешать, всё поддерживается
6 Jenstel
 
23.05.14
15:09
(4) Метод 'Catalogs' не поддерживается объектом
7 DmitrO
 
23.05.14
15:19
Не работает потому что в случае использования ComConnector надо так:
Connector := CreateOleObject('V83.ComConnector');
1C := Connector.Connect('File="C:\Accounting-2013";usr=ХХХ;pwd=ХХХ');
SprStore := 1C.Справочники.Номенклатура;
8 Jenstel
 
23.05.14
15:34
(7) Так и пробовал изначально, но как и сказал, метод не поддерживается объектом.
ComConnector ограничен функционалом, так как создается не полноценное приложение (как в случае работы с Word и Excel через СОМ-OLE), а лишь COM-соединение, которое не может работать с интерфейсным функционалом.
9 ДенисЧ
 
23.05.14
15:36
(8) Работать по кому с интерфейсом - дурное дело.
10 DmitrO
 
23.05.14
15:39
Клянусь 1Сным богом в (7) нет работы с интерфейсным функционалом.
11 DmitrO
 
23.05.14
15:43
Ну хорошо, а
1C.Visible:=False;
вызывал после соединения (вызова Connect)? Просто если до, то эффекта не будет.
12 Jenstel
 
23.05.14
15:48
(11) Естественно после. Как я и написал эффект от него есть, но не совсем тот. После вызова Connect происходит долгое открытие приложения 1C, затем отображение окна, передача ему фокуса, а потом окно просто исчезает. Это очень неудобно для пользователя, который работает в своем MDI-приложении, а вызов  1С происходит из модального окна. Нужно скрыть весь процесс открытия приложения и смены фокуса от пользователя, например, курсором с часами.
13 DmitrO
 
23.05.14
15:51
Ну там действительно окно появляется, но на короткое время, иногда его даже вообще не заметно.
14 DmitrO
 
23.05.14
15:59
Хотя видимо это зависит от конфигурации 1С.. смотря что делается в 1С при открытии..
Ну тогда все.. либо возможность работать с интерфейсом и мелькание окна на экране, либо работать через ComConnector.
15 DmitrO
 
23.05.14
16:06
Может у пользователя под которым соединяешься тупо нет прав на внешнее соединение? После коннекта в переменной 1С COM-объект вообще?
16 Jenstel
 
23.05.14
16:16
(15) Про это тоже думал. Права полные
Решил проблему по-другому:
1. Создал нового юзера с типом запуска "Обычное приложение".
2. Дал ему нужные права
При создании V83.Application как раз происходит фоновая операция открытия клиента и доступен полный функционал.

Теперь новая проблема. Как работать с ссылками 1С в Delphi?
Допустим, я создаю платежное поручение
PP:=Con1C.Документы.ПлатежноеПоручение.СоздатьДокумент();
PP.Контрагент := ?
Как мне указать ссылку на справочного контрагента, если я знаю его полное наименование
17 DmitrO
 
23.05.14
16:30
PP.Контрагент := Con1C.Справочники.Контрагенты.НайтиПоНаименованию(CustomerName);
18 Jenstel
 
23.05.14
16:49
(17) С этим спасибо. Еще один костыль. При создании платежного  поручения через COM нет возможности выбрать наш банковский счет (в списке пусто) и создать тоже нельзя "Не указан владелец банковского счета". Что я упускаю при создании ПП?
19 DS
 
23.05.14
17:04
(18) Очевидно - указание владельца банковского счета.
20 Jenstel
 
23.05.14
18:01
(19) Да. Но создаю я платежное поручение и список счетов у меня уже есть. Мне нужно при создании выбрать. В каком параметре нужно передать владельца банковских счетов (мою контору), чтобы был доступен выбор счетов?
21 fyn
 
23.05.14
19:33
(20) вызовите специалиста лучше, а то запорите все и еще на деньги попадете
22 Jenstel
 
23.05.14
23:21
(21) Нет необходимости. 12 часов чтения мануалов и кодинга принесли свои плоды. Теперь из приложения возможно автоматом создавать неограниченное количество платежных поручений и других документов за секунду на основе данных в базе, а также, заодно связал программу и с клиент-банками и теперь есть возможность контролировать оплату и движения. Остался только интерфейс, но это мелочи.
Всем спасибо за участие.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс