Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Доступ к внешней компоненте во всей конфигурации

Доступ к внешней компоненте во всей конфигурации
Я
   Alex_Alexsin_2020
 
29.03.21 - 15:03
Всем привет!

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

Перем Ярус;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Далее уже при работе с оборудованием заполняется данная переменная
   Alex_Alexsin_2020
 
44 - 29.03.21 - 16:29
(41) 3) у тебя явно прописан IP и путь. все верно я не стал заморачиваться и для теста написал статику
   Alex_Alexsin_2020
 
45 - 29.03.21 - 16:31
(43) все понял спасибо!
   Alex_Alexsin_2020
 
46 - 29.03.21 - 16:31
так и сделаю )


Список тем форума
 
Прочитай, хотя бы, Митичкина "Разработка в системе 1С:Предприятие 8". Волшебник
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.