Имя: Пароль:
1C
1С v8
Доступ к внешней компоненте во всей конфигурации
0 Alex_
Alexsin_2020
 
29.03.21
15:03
Всем привет!

Подскажите можно ли и как)

1С 8,3 УФ конфигу пишу с 0

смысл таков пишу рабочее место кассира

подключаю терминал

так вот терминал нужно слушать  вразных моудлях но при этом сессия (назовем ее так) должна быть одна


смысл таков подключить и заюзать команду Соединить() я могу только один раз (конечно как Вариант всегд аюзать разьединить) но нельзя бы один раз гд ето в переменную поместить уже соединение ивызывать эту переменную в любом месте?

Путь = "d:\yar\";
    ProgID = "AddIn.YarusG";
    Если подключитьВнешнююКомпоненту(ProgID) Тогда
        Ярус  = Новый (ProgID);
        аа = Ярус.Соединить("192.168.001.152",3390,Путь);
        Сообщить(аа);
        
    Иначе            
        Сообщить("Не удалось подключить драйвер");
        Возврат;
    КонецЕсли;
1 Garykom
 
гуру
29.03.21
15:08
>конфигу пишу с 0
>пишу рабочее место кассира

пошел за попкорном
2 Garykom
 
гуру
29.03.21
15:10
(0) Ты про клиент-сервер 1С хотя бы в курсе?
Сча модно 8.3 УФ даже файловые через веб-сервер
3 Garykom
 
гуру
29.03.21
15:11
(0) А этот твой "192.168.001.152",3390 что сделает если к нему с двух одновременно стукнуться?
4 Kassern
 
29.03.21
15:11
(0) Можешь при начале сеанса твое оборудование подключить и в глобальную переменную его впихнуть, но я бы так делать не стал. Лучше пихай в РМКассира при открытии типо такого МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПриОткрытииФормы(Неопределено, ЭтаФорма, "СканерШтрихкода"); Драйвер можешь пихнуть в макет общий и из него подключать. При закрытии формы МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПриЗакрытииФормы(Неопределено, ЭтаФорма);
5 Kassern
 
29.03.21
15:13
(0) лучше возьми последнюю БСП и на ее базе пиши свою конфу "с 0"...
6 Garykom
 
гуру
29.03.21
15:14
(5) Лучше взять Розницу и ничего не писать почти
7 Kassern
 
29.03.21
15:16
(6) так не интересно, видно же ТС полюбаться с конфигуратором хочет и написать свою нетленку)
8 sitex
 
naïve
29.03.21
15:20
(3) Стукнуться и разойдутся :)
9 Alex_
Alexsin_2020
 
29.03.21
15:22
(3) Ругнется матом )
10 Alex_
Alexsin_2020
 
29.03.21
15:24
Ребята взять типовое не предлагать!
КОнфига уже разработана и работает с Сентой (кассой) все классно но хотят что бы я подрубил еще и терминал туда

проблема вся в том что мне нужно мониторить то что делается на терминале и на кассе каждые nn сек

и проще было бы реализовать отдельно от обработки методы подключения и работы с каждой операцией в общем модуле

потом сервер с этими дравами не работает только на клиенте!
11 Alex_
Alexsin_2020
 
29.03.21
15:25
я сырой в 8-ке

подскажите в общих модулях есть перечисление (Повторное использование возвращаемых значений)

это может мне подойти и если да то подскажите как это юзать?
12 Kassern
 
29.03.21
15:28
(10) я же тебе написал как делать в (4). При открытии формы подключай оборудование, при закрытии - отключай. Создай общий модуль, в котором будут экспортные функции для подключения/отключения оборудования. Драйвер желательно загрузи в макет, чтобы с любого места цепляться без проблем.
13 Kassern
 
29.03.21
15:28
(12) В ОбработкаОповещения модуле лови события с устройства.
14 Alex_
Alexsin_2020
 
29.03.21
15:31
(12) извините пока писал не заметил )

но это Вы мне типовое решение говорите у меня то самописная и этих модулей няма (

а вот если даже выдирать то я не понимаю типовых (

мне проще было написать нетиповую :-)
15 Alex_
Alexsin_2020
 
29.03.21
15:33
нельзя ли в общем модуле

задать что то типа

Перем Ярус;

и далее функция

Путь = "d:\yar\";
    ProgID = "AddIn.YarusG";
    Если подключитьВнешнююКомпоненту(ProgID) Тогда
        Ярус  = Новый (ProgID);
        аа = Ярус.Соединить("192.168.001.152",3390,Путь);
        Сообщить(аа);
        
    Иначе            
        Сообщить("Не удалось подключить драйвер");
        Возврат;
    КонецЕсли;

в (11) я писал о повторных вызовах

можно ли вызывать только перем?

тоесть я при начале работы выполняю функцию подключения и далее могу ли тупо получать перем?
16 Alex_
Alexsin_2020
 
29.03.21
15:34
Можешь при начале сеанса твое оборудование подключить и в глобальную переменную его впихнуть, но я бы так делать не стал. (Почему)

и как впихнуть то в глобалную перем? и можно ли эту перем обнолвтяь?

смысл в том что если провод вырвали? и затем нажмали переподключиться?
17 Масянька
 
29.03.21
15:36
(16) 1. (да и все остальное) - это не семерка! Концепция другая.
18 Alex_
Alexsin_2020
 
29.03.21
15:39
(16) а семерка здесь причем?
19 Alex_
Alexsin_2020
 
29.03.21
15:39
что есть глобальная переменная?
20 Kassern
 
29.03.21
15:40
(16) Создаешь в модуле сеанса переменную экспортную типа глПодключаемоеОборудование. И ПриНачалеРаботыСистемы в процедуре инициализируешь
21 Kassern
 
29.03.21
15:41
(19) это переменная перед процедурами в модуле приложения типа Перем глПодключаемоеОборудование Экспорт;
22 Kassern
 
29.03.21
15:42
(10) ну раз касса уже работает, смотришь как реализованно подключение, и делаешь аналог, делов то
23 Alex_
Alexsin_2020
 
29.03.21
15:44
(1) попкорна много? :-)
я уж еуходит ьсобрался )
24 Alex_
Alexsin_2020
 
29.03.21
15:46
(22) прогу писал я и подключение делал в модуле формы обработки но получился оооочень длинный моудль у формы и мне уже трудно работать с кодом

хочу разделить код раоты кассы и терминала по разным общим модулям

(20) модуле сеанса  разв ене сервер ли?
25 Alex_
Alexsin_2020
 
29.03.21
15:54
В общем создал общий модуль "МетодыРаботыСТерминалом" Устанвоил флаг  Клиент (Упр.П)

создал экспортную функцию

&НаКлиенте
Функция ПодключитьТерминал() Экспорт
    Перем Ярус;
    
    Если Ярус = Неопределено Тогда
        Путь = "d:\yar\";
        ProgID = "AddIn.YarusG";
        Если подключитьВнешнююКомпоненту(ProgID) Тогда
            Ярус  = Новый (ProgID);
            Ярус.Соединить("192.168.001.152",3390,Путь);
            Возврат Ярус;
            
        Иначе            
            Возврат Ярус;
        КонецЕсли;
    КонецЕсли;
    Возврат Ярус;
КонецФункции

вроде работает ))) или я чт от оне верно сделал?
26 Kassern
 
29.03.21
15:54
(24) ну так раздели, в чем проблема? Создаешь общий модуль для оборудования, может несколько (для клиента/сервера). Пихаешь туда свои процедуры подключения, делаешь их экспортными и вуаля. В модуле формы будет просто Ярус=ТорговоеОборудование.ПодлкючитьОборудование(ПараметрыПодключения)
27 Kassern
 
29.03.21
15:56
(25) А зачем тебе Путь = "d:\yar\"?
28 Alex_
Alexsin_2020
 
29.03.21
15:58
(27) туда библа ложит текстовой файл чека :-)
который я затем разбираю и печатаю ка кнефискальный чек на кассе

(26) выше в (250 верно ли будет?

прост омне не нужно постоянно подрубаться а только раз либо еще раз если отвалились
29 Kassern
 
29.03.21
16:01
(28) В модуле приложения создай глобальную переменную и при начале работы системы в процедуре ее заполни типа, глЯрус=МетодыРаботыСТерминалом.ПодключитьТерминал(); А далее если глЯрус<> неопределенно тогда используй его в качестве подключения, иначе делай новое подключение.
30 Kassern
 
29.03.21
16:03
(28) и лучше переменные с путем и айпишник засунь в константы либо в какой нить регистр сведений. И сделай заполнение через пользовательский интерфейс. Завтра айпишник поменяется, у тебя все колом встанет, пока ты конфигуратор не обновишь.
31 Kassern
 
29.03.21
16:05
(25)
Перем Ярус;
Если Ярус = Неопределено Тогда
////
зачем это? У тебя Ярус всегда будет неопределено в таком случае. Ты только что создал переменную и проверяешь заполнена она или нет...
32 Alex_
Alexsin_2020
 
29.03.21
16:06
(30) эти данные лежат в Настройках юзера  а ссыль на него в в параметрах сеанса

а разве модуль приложения не Сервер? мне то клиент нужен
33 Alex_
Alexsin_2020
 
29.03.21
16:07
(31) так работает же

сперва то Ярус = неопределено

а затем я ее подключаю

после если неравно то проходим мимо и возвращаем ее

что не так?
34 fisher
 
29.03.21
16:09
(25) Оно будет подключаться в том месте, откуда вызываешь. Если одновременно из двух открытых форм попробуешь работать - будет два подключения (если компонента это позволяет). Если хочешь именно одно подключение на сеанс, тогда надо через экспортную переменную модуля приложения работать, как выше советовали.
35 Alex_
Alexsin_2020
 
29.03.21
16:10
глЯрус то же работает спасибо!

но чем это чревато то?
36 Alex_
Alexsin_2020
 
29.03.21
16:12
(34) именно так я и представил себе НО

создал вторую обработку

сперва попробовал выполнить операцию оплаты

предварительно поставил точки останова на возврате значений

так вот затем открыл вторую обработку и вот что вышло

пр иоткрытии первой я вошел на точку останова

а при открытии второ нет

но при этом из второй так же вс еработает
37 Alex_
Alexsin_2020
 
29.03.21
16:14
в любом случае и при моей реализации как в (25) и при Модуле приложения все работает Спасибо за решение
до скорых встреч :-)
38 Alex_
Alexsin_2020
 
29.03.21
16:14
это то что мне нужно было )
39 Alex_
Alexsin_2020
 
29.03.21
16:14
(1) как попкорн?
40 Alex_
Alexsin_2020
 
29.03.21
16:20
еще вопрос

могу ли я в переменную впихнуть не одну переменную а в ТЧ настройки пути, драва кассы и драва терминала

структуру короче?
41 Kassern
 
29.03.21
16:24
(39) Смотри что ты пишешь...
&НаКлиенте
Функция ПодключитьТерминал() Экспорт
    Перем Ярус;
    
    Если Ярус = Неопределено Тогда
        Путь = "d:\yar\";
        ProgID = "AddIn.YarusG";
        Если подключитьВнешнююКомпоненту(ProgID) Тогда
            Ярус  = Новый (ProgID);
            Ярус.Соединить("192.168.001.152",3390,Путь);
            Возврат Ярус;
            
        Иначе            
            Возврат Ярус;
        КонецЕсли;
    КонецЕсли;
    Возврат Ярус;
КонецФункции
//////////////
По факту:
1)если ты пишешь Перем Ярус; в начале, то она будет равна Неопределено всегда! Следовательно дальше условие бесполезное, тебе надо использовать глобальную переменную, либо параметр функции.
2) Зачем ты 3жды возвращаешь ярус? Зачем так писать? ты в любом случае его вернешь последним возвратом.
3) у тебя явно прописан IP и путь.
И это в маленьком куске кода...
42 Kassern
 
29.03.21
16:26
(40) так и надо делать, присваиваешь своей переменной глЯрус к примеру структуру и заполняешь ее.
43 Kassern
 
29.03.21
16:28
(42) в типовой торговле переменная глПодключаемоеОборудование создается следующим образом.
глПодключаемоеОборудование = Новый Структура();
        глПодключаемоеОборудование.Вставить("ДрайвераПодключаемогоОборудования", Новый Соответствие());
        глПодключаемоеОборудование.Вставить("ПараметрыПодключенияПО"           , Новый Массив());
        глПодключаемоеОборудование.Вставить("ПоследнийСлипЧек"                 , "");
        глПодключаемоеОборудование.Вставить("ЗавершениеРаботыСистемы"          , Ложь);
///
Далее уже при работе с оборудованием заполняется данная переменная
44 Alex_
Alexsin_2020
 
29.03.21
16:29
(41) 3) у тебя явно прописан IP и путь. все верно я не стал заморачиваться и для теста написал статику
45 Alex_
Alexsin_2020
 
29.03.21
16:31
(43) все понял спасибо!
46 Alex_
Alexsin_2020
 
29.03.21
16:31
так и сделаю )