Имя: Пароль:
1C
1C 7.7
v7: 1c 7.7 + win 2022 server + весы
0 Yukito
 
12.04.22
19:37
Есть такая вот проблема, стоит сейчас 2003 сервер, хочу перевести на современную ОС, конкретно на 2022 сервер.

Проблема заключается вот в чем. У нас есть dll с помощью которой идёт обращение к весам, с которых берется значение веса при выборе номенклатуры. Собственно на 2003 сервере все работает, на win 7 тоже работает. А вот на win 10 и server 2022 вес не берется с весов.

Dll регистрирую с помощью regasm, в win 7 спокойно зарегистрировал и сразу же весы поднялись. Помогите решить проблему с 2022 сервером. Куда смотреть, что ему может не хватать?
1 NorthWind
 
12.04.22
19:38
битность 2003-го и семерки той какая? Небось 32?
2 Yukito
 
12.04.22
19:48
(1) Нет семёрка 64 битная. 2003 32 битная
3 NorthWind
 
12.04.22
19:54
Тогда из общих рекомендаций можно посоветовать еще проверить установленные версии .Net Framework на предмет наличия той, которая нужна для данной либы. Если не поможет, то неплохо бы поинтересоваться у техподдержки ПО весов, в чем может быть дело. Кстати, и модель весов бы озвучить неплохо, вдруг кто с ними тут работал и может что подсказать...
4 Yukito
 
12.04.22
20:00
(3) Framework версии 2, его я в 2022 установил, с помощью него собственно и регистрировал dll. Тот человек который писал эту dll давно утерян. Весы Bizerba ST+.
5 Woldemar22LR
 
12.04.22
20:05
(4) Дай угадаю. Бицерба 32 бита?
ЗЫ не лезь в работающий механизм. Ну вот зачем тебе вин 2022 сервер?
6 NorthWind
 
12.04.22
20:08
для работы с весами бицербовский софт используется? Что-то типа .ConnectBrain или что там у нее для весов?
В нем не может быть проблемы, может, недонастроено что-то?
Связь по Ethernet?
7 Yukito
 
12.04.22
20:12
(5) Потому что 2003 умирает, хочется посвежее. Ибо к 2003 никто драйверов уже не пишет, на те же принтера и т.д.
(6) Нет, никакого софта не используем. Только вот эта dll. Да, весы по ethernet данные передают, у них свой ip/port.

Говорю ж, скопировал внаглую 1с, базу к себе на комп с вин 7, прорегистировал dll и все работает.
8 Woldemar22LR
 
12.04.22
20:19
(7) Это как умирает??? Пиши дрова на линух и переходи на него.
9 Yukito
 
12.04.22
20:23
(8) Новое железо нормально не поддерживает, драйверов нет. С теми же ssd могут быть проблемы.

PS: Я не прогер.
10 NorthWind
 
12.04.22
20:26
(7) ну а если поотлаживать? Как я аонимаю, раз никакого миддл-варе нету, настройка соединения с весами идет прямо из 1С? Есть ли ошибки при соединении и прочих служебных операциях?
11 NorthWind
 
12.04.22
20:27
Может, у 2022 просто фаер не дает работать с этим адресом/портом?
12 Yukito
 
12.04.22
20:37
(11) Да, нет, отрубал, проверял, не оно...
13 NorthWind
 
12.04.22
21:02
Тогда, скорее всего, проблема в связке 32-битного приложения и .net framework 2 на новых платформах. Тут лет 5-7 назад бывал спец по нету с ником Serginio1, возможно, он бы помог... У меня нет вариантов.
14 NorthWind
 
12.04.22
21:05
Хотя один с ходу предложу - поднимайте семерку на VM и не мучьтесь.
15 dreizehn
 
12.04.22
21:25
(7) > хочется
Офигенное обоснование.
16 Yukito
 
12.04.22
22:40
(14) С виртуальными машинами до этого не работал. В двух словах, как реализовываться, если пользователей штук 15? Ну или где почитать? Спасибо
17 Злопчинский
 
13.04.22
00:08
(13) вот он Serginio1
профиль на ИС - можно там стукнуться, вдруг поможет: https://infostart.ru/profile/82159/public/
18 Злопчинский
 
13.04.22
00:08
Serginio1 - регулярно тут появляется со всякими обертками для 1С над НетФремйворком
19 Злопчинский
 
13.04.22
00:14
порлистай здесь и м.б. стукнуться к кому-то из авторов аналогичных разработок.
скорее всего кто писал или работал с весами - наваять что-то подобное твоей существующей lkk старой - я думаю трудности не составит
.
https://infostart.ru/public/all/?st=t&sort=postsd&public-filter%5Bsearch%5D=%EA%EE%EC%EF%EE%ED%E5%ED%F2%E0+%E4%EB%FF+%E2%E5%F1%EE%E2
20 Злопчинский
 
13.04.22
00:15
а так, конечно, хорошо что стукнулся суда, как я тебя направил ;-)
21 ДедМорроз
 
13.04.22
01:27
Поднимается 2003 в виртуалке и на нем все работает,а вот новые принтера и т.п.-это все заботы хоста.
22 Yukito
 
13.04.22
06:12
Спасибо за помощь, буду пробовать.
23 Yukito
 
13.04.22
06:33
(21) Ок, в двух словах, как это все происходит? Допустим хост остается 22 сервер. На нем в виртуалке поднимаем 2003 сервер, куда народ будет ходить по рдп, так? По поводу принтеров и хоста, там они просто добавляются через виртуалку от хоста или как это работает?
24 Йохохо
 
13.04.22
07:12
(23) интерфейс то какой к весам?
25 NorthWind
 
13.04.22
07:18
(23) да, плюс-минус частности все так. Причем работа с виртуальными машинами на многих вариантах поставки Windows Server есть штатно - почитайте про HyperV.
26 NorthWind
 
13.04.22
07:19
(24) Он уже выше говорил, bizerba st у него через ethernet.
27 Yukito
 
13.04.22
08:48
(25) Так ок, но меня вот беспокоит тема с принтерами, сейчас читаю, ищу инфу. На гостевой системе все равно драйвера на принтера ставить надо, но вот как раз на 2003 сервак под некоторые принтера, нормальных драйверов и нет...
28 NorthWind
 
13.04.22
09:10
(27) как вариант - подключить программистов, которые пересмотрят либу. С софтом это иногда бывает, он обновляется и старые приложения работать перестают. Если ее писали под вас и остался исходник - вообще замечательно, скорее всего, ее достаточно будет переделать под более свежую фреймворку и все
29 NorthWind
 
13.04.22
09:12
у меня с бицербой ситуация тоже тугая. Этикетировщики работают через софт Bizerba BCT, который работает максимум с Windows Vista 32 бит, а более свежий софт, который живет на Win10, стоит более 1000 евро за связь с одной машиной. Так что виртуалки наше все...
30 Builder
 
13.04.22
09:22
(0) Ставь сервер 2008 R2 и не выделывайся. Если в 7-ке работает, то и там должно.
31 Yukito
 
13.04.22
09:22
(28)  Да ее писали лет 15 назад... Еще до меня, по этому нереально найти, кого то.

Смотрю все же в сторону виртуалки, но пока не понимаю насчет принтеров, как конкретно оно все конектится. Допустим у меня есть Canon lbp 251, и драйверов под 2003 сервер на него нет. Каким макаром заставить его работать на виртуальной машине?
32 Yukito
 
13.04.22
09:23
(30) Пошел от высокого. Сейчас затестирую на 19, потом на 16 и т.д. =)
33 arsik
 
гуру
13.04.22
09:24
А зачем именно 2022 сервер?
2008 неплохоработает
34 Yukito
 
13.04.22
09:29
(33)  Я смотрю и на будущее тоже. Сколько времени пройдет, как перестанут под 2008 драйвера писать? И как у 2008 с SSD?
35 Builder
 
13.04.22
09:32
(34) У 2008 с SSD все отлично. Драйвера тоже есть для всего.
36 Djelf
 
13.04.22
09:40
(31) Ну и что, что нереально найти исходники? Если обфускацией кода не занимались, декомпилятор dotPeek весь код восстановит. Потом чуток поправить и все...
37 NorthWind
 
13.04.22
10:04
(34) 2008 первых релизов - это Vista, 2008 R2 - это Win7. Только серверная. Так что все, что истинно для Win7, с большой долей вероятности истинно и для 2008 R2. Что касается ваших опасений насчет дров и прочего, то тут вы, конечно, правы. Но если решать проблему всерьез, то тут только реинжинирить ваш софт.
38 NorthWind
 
13.04.22
10:07
по состоянию на сейчас, если вы пишете, что в Win7 ваш софт работает, и нет проблем с лицензиями на Win 2008 - вы действительно можете поставить на виртуалку 2008 R2 и таким образом закрыть вопрос на ближайшие годы.
39 arsik
 
гуру
13.04.22
10:13
(0) Выложи dll хоть посмотрим, что ей требуется.
40 Yukito
 
13.04.22
10:24
41 Yukito
 
13.04.22
10:27
(38)  Что посоветуете из виртуалок использовать?
42 NorthWind
 
13.04.22
10:29
(41) так я ж написал уже выше - Hyper-V.
Она у вас уже встроена в ваш 2022, надо только настроить и поднять виртуалку
43 NorthWind
 
13.04.22
10:29
зачем городить городушки, если есть уже встроенное средство?
44 arsik
 
гуру
13.04.22
11:05
(40) Ну да, ей ничего и не требуется кроме net.
Но в Windows 11 жалуется на компонент urlmon.dll
Windows 11 - https://i.imgur.com/PGb5N2S.png
Windows 2008R2 - https://i.imgur.com/juwmGHX.png
45 Yukito
 
13.04.22
11:11
(44)  Как то исправить можно? Я к сожалению, ни разу не программист, но с пониманием у меня более менее все нормально, голова вроде на плечах)
46 arsik
 
гуру
13.04.22
11:15
(45) Я не подскажу. Как ранее писали Serginio1 скорее всего сможет что то пояснить.
47 arsik
 
гуру
13.04.22
11:27
+(46) Как вариант, проверить установлен ли Internet Explorer. Если нет, то установить - https://serverfault.com/questions/1070916/install-internet-explorer-on-server-2019-standard
Я так понял старый urlmon.dll взаимодействовал с осликом.
48 NorthWind
 
13.04.22
11:56
(47) в десятке вроде как он есть, но тем не менее в (0) написано, что и в десятке не запускается. Возможно, что в библе свежих версий не хватает каких-то требуемых функций... Кстати, как вариант - попытаться ему подсунуть в текущую папку urlmon.dll от старых виндов, может, и прокатит
49 NorthWind
 
13.04.22
11:56
DLLи ведь ищутся сначала в текущей папке, потом по PATH?
50 HawkEye
 
13.04.22
11:58
(0) у тебя весы во время взвешивания что-ли лезут за ценой в 1С или все таки хранят цену у себя?
51 NorthWind
 
13.04.22
12:05
(44) в Win11 как раз-таки Internet Explorer выпилили. А чем вы смотрите зависимости?
52 Djelf
 
13.04.22
12:07
(45) Попробуй: https://cloud.mail.ru/public/KVd7/czphKBhUY
Исходники и собранная библиотека для net 4.5, и ПодключитьВнешнююКомпоненту не надо, это же ActiveX.
53 NorthWind
 
13.04.22
12:10
(52) не живая ссылка
54 Yukito
 
13.04.22
12:11
(53) Живая. Скачал вот.
55 Yukito
 
13.04.22
12:11
(50)  Нет, весы работают как весы. Т.е на них кладут товар. В 1с выбирается номенклатура, и выскакиевает окно куда надо вбить вес. Соответственно 1с берет вес с весов.
56 Yukito
 
13.04.22
12:13
(52) Не много не понял, про "ПодключитьВнешнююКомпоненту"
57 NorthWind
 
13.04.22
12:16
(54) хм, у меня из-под авторизованного майла 404, а в хроме открылась. Гуд.
58 Djelf
 
13.04.22
12:16
(53) Залил копию на яд https://disk.yandex.ru/d/l1_U4Sf6BQuc3A

(56) Твой же код? https://forum.infostart.ru/forum28/topic279939/ Он на ПодключитьВнешнююКомпоненту ругается. А без него объект создается и что-то должен делать ;)
59 Yukito
 
13.04.22
12:18
(58) Да мое, ну как мое, программиста который нашей 1с занимается. Сейчас буду пробовать, спасибо!
60 Yukito
 
13.04.22
12:46
(58) Нет, к сожалению не заработало... Ладно, спасибо за помощь. Буду смотреть тогда в сторону 2008 сервера под виртуалкой.
61 Djelf
 
13.04.22
12:59
(60) Не заработало что? Объект в 1С не создался?
62 Yukito
 
13.04.22
13:10
(61)  Ну вес не бьется. Я стер код, про внешнюю компоненту. 1с при запуске сообщает что весы подключены, значит TSModule съела, но вес все равно не берет с весов.
63 Djelf
 
13.04.22
13:17
(62) Точно подключились? Как вес то получаешь? Обертки именно для получения веса я в исходниках не вижу.

Весы = СоздатьОбъект("AddIn.TSModule");
Весы.IPAddres= Адрес;
Весы.Port    = Порт;
Сообщить("Connect "+Весы.Connect());
Сообщить("IsConnected "+Весы.IsConnected());
64 Yukito
 
13.04.22
13:27
(63) В 1с прописано так:

Попытка
Рез = ПодключитьВнешнююКомпоненту("AddIn.TSModule");
Исключение
Сообщить("Не удалось подключить внешнюю компоненту AddIn.TSModule");
СтатусВозврата(0);
Возврат;
КонецПопытки;
Весы = СоздатьОбъект("AddIn.TSModule");
ПоказанияВесов = 0;


Функция ПолучитьПоказанияВесов()  Экспорт
    Перем Ч,М,С, предст;                  
    Перем СписокПараметров;  
    Попытка
        Если Весы.IsConnected() = 0 Тогда
            Весы.Connect();
        КонецЕсли;
        Весы.Send(СтартСимвол + км_ПолучитьВесБезСтабилизации + РазделительСтрок);
        Ответ = Весы.Receive();
    
        Если Весы.IsConnected() = 1 Тогда
            Весы.Close();
        КонецЕсли;

    Попытка        
            Если (НазваниеНабораПрав() = "КладовщикВесы")или (НазваниеНабораПрав() = "АдминистраторДЗР") тогда
                КолВо=ПолучитьПоказанияВесов();
            КонецЕсли;
65 arsik
 
гуру
13.04.22
14:57
(62) Может у вас брандмауэр что то блокирует просто? И дело не в компоненте, а в сети?
66 arsik
 
гуру
13.04.22
14:58
(62) Ну и еще возможно он старую компоненту подключает?
67 Yukito
 
13.04.22
15:16
(65) брандмауэр полностью отрубал, весы пингуется. Старую не может подключать, я пробую полностью на голой системе + регистрирую компоненту. Без регистрации компоненты, 1с у меня не пишет что мол весы подключены.
68 Злопчинский
 
13.04.22
15:54
(64) Ответ = Весы.Receive();
здесь ответ-то от весов какой?
.
ты лезешь в то что "вес не проставляется" - да и похер что не прсотавляется, можеьт 1Сный код так написан что не обрабатывает какие-то ситуации.
смотреть то надо основу - если ДЛЛ подключилась - а при неподключении надо ЯВНО СООБЩИТЬ В ТАБЛО (перед Сообщить() для отладки вставить ОчиститьОкноСообщений()) - если ДЛЛ подклдючилась, надо смотреть что получено от весов. и копаться здесь. а не втом, что там потом делается и куда проставляется епта!
.
за все время обсуждения (и на ИС и здесь) я так и не увидел четкого ответа
1. компонента подключилась успешно? да/нет
2. какой ответ пришел от весов?
69 Злопчинский
 
13.04.22
15:55
.. возможно пропустил..
70 Yukito
 
13.04.22
18:09
(68) Я ж выше писал, я ни разу не программист, но сейчас так получилось что кроме меня решить данную штуку никто не может. Вот попробовал отладчиком сделать, выдает вот такое, может это поможет? Вот процедура ПриОткрытииВесов.

Процедура ПриОткрытииВесов()
//    ГруппаСправочника = Форма.Параметр;
    Пауза = 0;        
    ИнтервалОбновления = 1000; //в мс.  
    //IPАдрес = "192.168.0.60";
    IPАдрес = Константа.Весы_адрес;
    Порт = Константа.Весы_порт;
    
    Попытка
        Рез = ПодключитьВнешнююКомпоненту("AddIn.TSModule");
    Исключение
        Сообщить("Не удалось подключить внешнюю компоненту AddIn.TSModule");
        СтатусВозврата(0);
        Возврат;                        
    КонецПопытки;
    Весы = СоздатьОбъект("AddIn.TSModule");  
    ПоказанияВесов = 0;
    
    
    //Товары.НоваяКолонка("Товар", "Справочник.ТМЦ",,,,30);
    //Товары.НоваяКолонка("Количество", "Число",,,,10);
//    Итог = "Итого: " + Товары.Итог("Количество") + " кг.";
    Весы.CreateTimer();
    Весы.StartTimer(ИнтервалОбновления);  

    Весы.IPAddres = IPАдрес;
    Весы.Port = Порт;
//    ВывестиНаДисплей("Connecting with 1C");
КонецПроцедуры

Если смотреть что выдают переменные Рез и Весы:

Рез = 1
Весы = OLE._TSModule
71 Злопчинский
 
13.04.22
18:18
Рез =1  - ВК загружена
"Весы" - теперь смотришь дальше по коду где из этого объекта что-либо "извлекается"
72 Yukito
 
13.04.22
18:25
(71) Дальше идет функция в глобальном модуле:

Функция ПолучитьПоказанияВесов()  Экспорт
    Перем Ч,М,С, предст;                  
    Перем СписокПараметров;  
    Попытка
        Если Весы.IsConnected() = 0 Тогда
            Весы.Connect();
        КонецЕсли;
        Весы.Send(СтартСимвол + км_ПолучитьВесБезСтабилизации + РазделительСтрок);
        Ответ = Весы.Receive();
    
        Если Весы.IsConnected() = 1 Тогда
            Весы.Close();
        КонецЕсли;

И из этой функции в другом модуле идет:

Процедура ДобавитьТовар(ДобТовар)        
    Перем ВыбЗначение;
    // отключаем стандартный механизм подбора
    СтатусВозврата(0);

    НомСтр=0;
    ТаблицаПодбора.НайтиЗначение(ДобТовар,НомСтр,"Элемент");
    Если НомСтр<>0 Тогда
        ТаблицаПодбора.ПолучитьСтрокуПоНомеру(НомСтр);
    КонецЕсли;

    Кол=0;  
    Попытка          
        Если (НазваниеНабораПрав() = "КладовщикВесы") или (НазваниеНабораПрав() = "АдминистраторДЗР")тогда
            Кол=ПолучитьПоказанияВесов();
        КонецЕсли;    
    Исключение
        Кол=0;  
    КонецПопытки;
73 Yukito
 
13.04.22
18:59
И да, только что проверил работу весов на 2008 сервере, все работает. Просто зарегистрировав родную dll...
74 Yukito
 
13.04.22
19:04
(58) И сейчас попробовал вашу переделанную dll в 2008, сначала снял регистрацию старой dll, зарегистрировал вашу и... с ней все работает, даже если не убирать ПодключитьВнешнююКомпоненту(1с ругается при запуске, но то такое). Т.е дллки рабочие. Вопрос, чего блин может не хватать в 10/2022?
75 ДедМорроз
 
13.04.22
19:20
А вы пробовали регистрировать библиотеку для 32 бит через SyWow64/regasm ?
Насколько я помню,с 2008 сервера началось разделение реестра,которое корректно поддерживается.
76 Yukito
 
13.04.22
19:29
(75) Ну.. Там нет regasm.
77 Yukito
 
13.04.22
19:35
+ что то мне кажется что проблема не в длл, а в чем то другом =(
78 Злопчинский
 
13.04.22
19:48
(72) что в Ответ вот здесь?

Ответ = Весы.Receive();
здесь ответ-то от весов какой?
79 Serginio1
 
13.04.22
19:49
(76) Там 2 regasm
Microsoft.NET\Framework\v4.0.30319\regasm.exe
Microsoft.NET\Framework64\v4.0.30319\regasm.exe

Вот двумя и надо регистрировать
80 Serginio1
 
13.04.22
19:51
Ну и с ключом /codebase
81 Злопчинский
 
13.04.22
19:51
(72) "(71) Дальше идет функция в глобальном модуле:"
- трындеж.
.
    Весы = СоздатьОбъект("AddIn.TSModule");  
    ПоказанияВесов = 0;
    
    
    //Товары.НоваяКолонка("Товар", "Справочник.ТМЦ",,,,30);

    //Товары.НоваяКолонка("Количество", "Число",,,,10);

//    Итог = "Итого: " + Товары.Итог("Количество") + " кг.";
    Весы.CreateTimer();
    Весы.StartTimer(ИнтервалОбновления);  

    Весы.IPAddres = IPАдрес;
    Весы.Port = Порт;
//    ВывестиНаДисплей("Connecting with 1C");

КонецПроцедуры
.
эта функция не может быть "дальше"
после инициализации Весы - пару операторов и конец процедуры...
.
но это пок анесущественно
это всего показатель что в голове у тебя мысли митусятся как рой мух-дроздоофил...
.
не суетись..
82 Злопчинский
 
13.04.22
19:52
Выложи обработку посмотреть.
а то вейдер и клоны какие-то
83 Yukito
 
13.04.22
19:56
(79) Не помогло.
84 ДедМорроз
 
13.04.22
19:57
Не,ребята,сначала установить ip и порт,а потом пускать таймер.
На новой машине он успевает отработать с кривыми адресами и получить ошибку.
85 NorthWind
 
13.04.22
20:12
(72)
    Попытка          
        Если (НазваниеНабораПрав() = "КладовщикВесы") или (НазваниеНабораПрав() = "АдминистраторДЗР")тогда
            Кол=ПолучитьПоказанияВесов();
        КонецЕсли;    
    Исключение
        Кол=0;  
    КонецПопытки;

Добавьте строку после слова Исключение

Сообщить (ОписаниеОшибки ());

и скопируйте текст в окне сообщений, если там что-то будет появляться.
86 Yukito
 
13.04.22
20:17
(78) Ответ = ""

Хотя вот по родной базе отладчиком там же прошелся, должен быть вес.
87 Yukito
 
13.04.22
20:21
(85) Нет, ничего не появилось, никакого сообщения.
88 Yukito
 
13.04.22
20:33
Функция ПолучитьПоказанияВесов()  Экспорт
    Перем Ч,М,С, предст;                  
    Перем СписокПараметров;  
    Попытка
        Если Весы.IsConnected() = 0 Тогда
            Весы.Connect();
        КонецЕсли;
        Весы.Send(СтартСимвол + км_ПолучитьВесБезСтабилизации + РазделительСтрок);
        Ответ = Весы.Receive();
    
        Если Весы.IsConnected() = 1 Тогда
            Весы.Close();
        КонецЕсли;

Получаю:

Весы.IsConnected = 0
Весы.Connect = 0
Ответ = ""
89 NorthWind
 
13.04.22
20:43
(88) а прямо перед Send () можно IsConnected() увидеть состояние? Желательно на обеих виндах - там где работает и там где нет.
90 Yukito
 
13.04.22
21:00
91 Yukito
 
13.04.22
21:14
Фигня какая то, через отладчик при точках остановки, вес не хочет выдавать... Без точек остановки все норм, вес высвечивается. Это на рабочей машине.
92 NorthWind
 
13.04.22
21:22
(91) не хочет через отладчик - можно просто вписать Сообщить (нужноезначение); в соответствующем месте и запустить прогу. Само скажет без отладчика.
93 NorthWind
 
13.04.22
21:23
(90) на Send () точку останова сделайте
94 NorthWind
 
13.04.22
21:24
Я хочу понять, оно с весами вообще устанавливает связь или нет. Мне кажется, что нет.
95 ДедМорроз
 
13.04.22
21:25
В отладке UDP пакеты никто не ловит.
И понятие Соединение для udp - это вещь в себе.
96 ДедМорроз
 
13.04.22
21:26
И дело,скорей всего,в том,что не успевает отработать Receive.
97 ДедМорроз
 
13.04.22
21:29
Или,там,вме таки tcp
Хотя,у вас уже все есть - и команда и ответ,можно компоненту в топку.
98 Yukito
 
13.04.22
21:39
(93) https://prnt.sc/__3G6IHGQD6C

Так? Справа рабочая машина.
99 NorthWind
 
13.04.22
21:51
(98) соединение не устанавливается.
        public int Connect()
        {
            int num;
            this.Client = new TcpClient();
            this.Sock = this.Client.Client;
            try
            {
                this.Client.Connect(this.IPAddres, Convert.ToInt32(this.Port));
                num = 1;
            }
            catch
            {
                num = 0;
            }
            return num;
        }
код довольно простой и он возвращает 0, то бишь похоже на то что происходит эксепшн. Но вот какой - непонятно. Сейчас бы неплохо пересобрать либу чтобы она мессидж-бокс с текстом эксепшена выдавала, но у меня нечем...
100 NorthWind
 
13.04.22
21:52
(97) там TCP, см. (99). Затык здесь. Нет соединения.
101 NorthWind
 
13.04.22
21:53
может, все-таки почему-то не принимается соединение на порту?
Попробуйте на весы сказать telnet адрес_весов порт_весов. Проваливается в черный экран?
102 Yukito
 
13.04.22
21:56
(101) Проваливается.
103 NorthWind
 
13.04.22
22:07
(102) именно с машины на 2022, понятное дело... Так? Ок.
Тогда следующим этапом нужно пересобрать библиотеку на C#, убрав try/catch и оставив только строки
public int Connect()
        {

            int num = 0;
            this.Client = new TcpClient();
            this.Sock = this.Client.Client;
            this.Client.Connect(this.IPAddres, Convert.ToInt32(this.Port));
            num = 1;
            return num;
        }
попытка коннекта будет неудачной и мы должны увидеть сообщение об ошибке. Дальше - плясать от этого сообщения.
104 Yukito
 
13.04.22
22:15
(58) Сможете помочь? Спасибо
105 NorthWind
 
13.04.22
22:56
Утром попробую ms build tools 2019 скачать и собрать. Сейчас уже спать хочется, вставать рано...
106 Злопчинский
 
14.04.22
01:53
(84) логично!!!
107 Злопчинский
 
14.04.22
01:55
(88)
  Попытка
        Если Весы.IsConnected() = 0 Тогда
            Весы.Connect(); // А ГДЕ ГАРАНТИЯ ЧТО ЗДЕСЬ подконнектятся успешно?
        КонецЕсли;
108 Злопчинский
 
14.04.22
01:57
(107) ага, про это выше уже исследовали.
109 Yukito
 
14.04.22
06:35
(105) ну а так, какие могут быть варианты, почему не проходит коннект из под 1c? Есть предложения?
110 NorthWind
 
14.04.22
07:07
(109) если б мы знали, мы бы тут не сидели. Я собрал. Вот ссылка: https://drive.google.com/file/d/1Pd8_kqUieyfnzGLSdr1JcjMPF0TQbSJQ/view?usp=sharing
Попробуйте под обеими виндами. По идее, под старой должно работать как работало, а под новой должно быть сообщение об ошибке.
111 Yukito
 
14.04.22
08:03
(110)  Хм, нет, никакой ошибки не выскакивает.
112 NorthWind
 
14.04.22
09:02
Сделал простейшую обработку

//*******************************************
Процедура Сформировать()
    
    Сообщить ("Объект не создан");
    
    Весы = СоздатьОбъект("AddIn.TSModule");
    
    Сообщить ("Объект создан");
    
    Сообщить ("Состояние соединения " + Строка (Весы.IsConnected ()));
    
    Весы.IPAddres = "192.168.104.11";
    Весы.Port = 21;
    
    Весы.Connect ();
    
    Сообщить ("Состояние соединения " + Строка (Весы.IsConnected ()));
    
КонецПроцедуры

Обработка выводит:

Объект не создан
Объект создан
Состояние соединения 0
Состояние соединения 1

Win10. Регал с помощью reg.bat, который был приложен Djelf'ом.
192.168.103.11 порт 21 - реальная машина, которая у меня есть в сети и может принять соединение, весов таких, ясное дело, нет у меня.
Ну, устанавливается соединение...
Автор, попробуй вписать адрес и порт своей бицербы и запустить этот код... Чего напишет?
Вот ссылка на обработку - https://drive.google.com/file/d/1QJwXHJ0udTtv9LNsNip6xCqEcCTE38nM/view?usp=sharing
113 NorthWind
 
14.04.22
09:04
*104.11
114 Yukito
 
14.04.22
09:12
(112)

Объект не создан
Объект создан
Состояние соединения 0
Состояние соединения 1
115 lEvGl
 
гуру
14.04.22
09:13
(0) попробуйте WinSock, информации по ней много, в том числе и для 1С. Это ActiveX объект - установить настройки, коннект, отправка (те символы, что у вас используются СтартСимвол + км_ПолучитьВесБезСтабилизации + РазделительСтрок), соответственно отправляется строка, потом Recive(), либо событие DataArrival сработает (если его назначить) когда данные в буфере появятся
116 lEvGl
 
гуру
14.04.22
09:15
раз вы уже стали потихоньку ближе к прогерству
117 NorthWind
 
14.04.22
09:16
(114) вот, соединение установилось. А вчера, когда мы проводили эксперименты на реальной конфигурации, соединения не было на момент посылки запроса. Вопрос - почему?
118 NorthWind
 
14.04.22
09:17
может быть, IPAddress и Port по какой-то причине получают в вашей конфе неправильные данные? Попытайтесь их прописать жестко, чтобы они не извлекались ни из каких констант или чего-то подобного.
119 Yukito
 
14.04.22
09:37
(118)  Прописал жестко в глоб. модуле. Ничего не изменилось =( Мало того, если я обращаюсь к весам с 22 сервера, то с рабочей машины вес тоже перестает браться, пока я не закрою 1с на 22 сервере.
120 Yukito
 
14.04.22
09:43
(118)  И даже если я запускаю вашу обработку, то на рабочей машине вес перестает брать, пока 1с не закрою.
121 Yukito
 
14.04.22
09:47
И да, не важно чья будет dll. Проверил и родной и на переделанной.
122 NorthWind
 
14.04.22
09:51
(119) ну это как раз вполне логично, там может быть ограничение на количество одновременных подключений у бицербы.
123 Yukito
 
14.04.22
09:56
(122)  Так проблема в том что я когда все обработки закрываю, все равно на рабочей машине вес не дает взять. Т.е конект не отрубается от 1с к весам. Пока я саму 1с не закрою.
124 NorthWind
 
14.04.22
10:01
(123) а это, возможно, потому что я Close () не делаю в этой тестовой обработке. Поэтому хэндлы закрываются только при завершении процесса. Это не суть важно. Важно, что соединение все же устанавливается. А вот дальше, видимо, нужно расширять тестовый пример. Запрашивать вес и получать ответ. Для этого уже весы нужны.
125 Yukito
 
14.04.22
10:03
(124)

А если к вашей обработке, добавить что то из кода что я выше кидал, что бы она запрашивала вес?
126 NorthWind
 
14.04.22
10:06
(125) я про это и говорю
127 NorthWind
 
14.04.22
10:11
Нужно значение вот этого заклинания: СтартСимвол + км_ПолучитьВесБезСтабилизации
128 Yukito
 
14.04.22
10:21
(127)  СтартСимвол = Симв(0);

км_ПолучитьВесБезСтабилизации = "q%"; - это команда передаваемая весам.
129 arsik
 
гуру
14.04.22
10:27
(127) Нужно в Receive() и в Send() {try catch} убрать. И скорее всего видно будет где проблема
130 NorthWind
 
14.04.22
10:32
(129) резонно
131 NorthWind
 
14.04.22
11:45
попробовал закомментировать конструкции трай-кетч по рекомендации в (129).
Пробуйте, возможно, что-то скажет.
https://drive.google.com/file/d/1azGyVi4SSV28t3oE_lnEd2knrryFx1_c/view?usp=sharing
132 Yukito
 
14.04.22
11:59
(131) Тоже молчит...
133 arsik
 
гуру
14.04.22
12:28
(132)
Замени
Весы.CreateTimer();
Весы.StartTimer(ИнтервалОбновления);  

на
Сообщит("Весы.CreateTimer(): "+Весы.CreateTimer());
Сообщит("Весы.StartTimer(): "+Весы.StartTimer(ИнтервалОбновления));


Что сообщит?
134 NorthWind
 
14.04.22
12:32
Вписал в обработку вот такой код

Процедура Сформировать()
    
    Сообщить ("Объект не создан");
    
    Весы = СоздатьОбъект("AddIn.TSModule");
    
    Сообщить ("Объект создан");
    
    Сообщить ("Состояние соединения " + Строка (Весы.IsConnected ()));
    
    Весы.IPAddres = "192.168.104.11";
    Весы.Port = 21;
    
    Весы.Connect ();
    
    Сообщить ("Состояние соединения " + Строка (Весы.IsConnected ()));  
    
    Весы.Send (Симв(0) + "q%" + РазделительСтрок);                      
    
    // Пауза
    Для Сч = 1 По 2000000 Цикл
    КонецЦикла;
    
    Сообщить ("Ответ " + Весы.Receive());
    
    Весы.Close ();
    
    Сообщить ("Состояние соединения после его закрытия " + Строка (Весы.IsConnected ()));
    
КонецПроцедуры


Выдало:


Объект не создан
Объект создан
Состояние соединения 0
Состояние соединения 1
Ответ 220 Microsoft FTP Service
500 'Q%': command not understood

Состояние соединения после его закрытия 0

Поменяйте на адрес/порт весов и посмотрите, что получится у вас. Можно попробовать на весы поставить ченть.
135 arsik
 
гуру
14.04.22
12:48
(132) Microsoft .NET Framework 4.5 стоит?
136 NorthWind
 
14.04.22
12:52
(135) Мы уже с ним проверяли соединение в (112)-(114). Работает либа.
137 NorthWind
 
14.04.22
12:52
значит, и фреймворка фурычит
138 Yukito
 
14.04.22
13:27
Опа, прогресс:

Объект не создан
Объект создан
Состояние соединения 0
Состояние соединения 1
Ответ 08001,!   000,79kgL0010666076

Состояние соединения после его закрытия 0 (134)
139 Yukito
 
14.04.22
13:34
Мало того, работает обработка и на родной dll...
140 arsik
 
гуру
14.04.22
13:41
(139) Значит таймер криво инициируется.
141 NorthWind
 
14.04.22
13:55
Тогда нужно поглядеть, какие там перепендосы с таймером и зачем он вообще нужен. Посмотрю немного позже.
142 arsik
 
гуру
14.04.22
14:02
(139) У тебя какое значение ИнтервалОбновления? Это в миллисекундах. Попробуй увеличить в 10 раз и запусти код из (134) без "Для Сч = 1 По 2000000 Цикл КонецЦикла;"
143 NorthWind
 
14.04.22
14:10
(142) в этом моем коде нет инициализации таймера, он там вообще не применялся. Скорее всего еще что-то нужно будет дописать.
144 Yukito
 
14.04.22
14:16
(140) это про какой таймер? Не понял немного...
145 NorthWind
 
14.04.22
14:18
(144) там в компоненте есть таймер. Мы им пока не занимались.
146 arsik
 
гуру
14.04.22
14:20
(144) Вот так проверь
Весы = СоздатьОбъект("AddIn.TSModule");
Весы.IPAddres = "192.168.104.11";
Весы.Port = 21;
Весы.Connect();
Весы.CreateTimer();
Весы.StartTimer(2000);
Весы.Send (Симв(0) + "q%" + РазделительСтрок);
Сообщить ("Ответ " + Весы.Receive());
Весы.Close ();
147 arsik
 
гуру
14.04.22
14:24
+(146) Или еще вот так
Весы = СоздатьОбъект("AddIn.TSModule");
Весы.IPAddres = "192.168.104.11";
Весы.Port = 21;
Весы.Connect();
Весы.CreateTimer();
Весы.Send (Симв(0) + "q%" + РазделительСтрок);
Весы.StartTimer(2000);
Сообщить ("Ответ " + Весы.Receive());
Весы.Close ();

Смысла этого таймера я так и не понял.
148 NorthWind
 
14.04.22
15:01
(147) похоже на то что он не работает. Я попробовал зарядить 20000, а он проскакивает так же как 2.
149 NorthWind
 
14.04.22
15:02
на Win10
150 arsik
 
гуру
14.04.22
15:06
(148) Ну по коду он вообще бессмыслен. Так то нужна задержка между Send() и Receive(), судя по тому что после паузы Receive() нормально получает данные.
151 NorthWind
 
14.04.22
15:11
Похоже, что таймер просто вызывать обработку внешнего события должен. Ибо:
        private void OnTimedEvent(object sourse, ElapsedEventArgs e)
        {
            TSAddIn.ExtEvent.ExternalEvent("TSModule", "TSTimer", e.SignalTime.ToString());
        }
152 Yukito
 
14.04.22
15:25
(146) (147)

Что в первом, что во втором случае получаю ответ - Ответ 08001+)   000,00kgL0010666076 . Нули это нормально, на весах ничего сейчас нет, я не на работе, удаленно смотрю. Вес будет где то после 18-19.
153 NorthWind
 
14.04.22
15:31
(152) Чему равен ИнтервалОбновления из (81)?
И нет ли где-нибудь в обработках процедуры ОбработкаВнешнегоСобытия (...) ?
Если есть, то что внутри процедуры?
154 NorthWind
 
14.04.22
15:33
только вот вызывать-то он должен, но чет не запускается процедура под Win10.
155 Yukito
 
14.04.22
15:39
(153) Обработка есть, но она какая то древняя и ею никто не пользуется вообще. Ну и я не вижу что бы она где то вызывалась в глоб. модуле. В обработке интервал обновления = 1000 мс.
156 NorthWind
 
14.04.22
15:48
Тогда попробуйте в функции

Функция ПолучитьПоказанияВесов()  Экспорт
    Перем Ч,М,С, предст;                  
    Перем СписокПараметров;  
    Попытка
        Если Весы.IsConnected() = 0 Тогда
            Весы.Connect();
        КонецЕсли;
        Весы.Send(СтартСимвол + км_ПолучитьВесБезСтабилизации + РазделительСтрок);

после этой строки вписать строку

        Для Сч = 1 По 2000000 Цикл КонецЦикла;

и посмотрите, не появится ли вес с весов.
157 NorthWind
 
14.04.22
15:49
если появится, то значение 2000000 можно попробовать кратно уменьшать (в 2-10 раз за раз) до тех пор, пока вес не перестанет устойчиво получаться.
158 1snik_d
 
14.04.22
15:55
(157) Только паузу лучше так
    SystComm = СоздатьОбъект("AddIn.SystComm");
    SystComm.Ожидание(Сек*1000);

А то процессор зазря грузить
159 NorthWind
 
14.04.22
15:57
(158) главное чтобы станцевало. У меня нет уверенности что дело в задержке, хотя это очень-очень вероятно
160 NorthWind
 
14.04.22
15:57
и у него, скорее всего, нет этой компоненты, ее еще надо будет поставить
161 Yukito
 
14.04.22
15:59
(156) Пока на весах веса нет, мы можем вывести ответ вниз 1с? Как при вашей обработке? Что б понимать идет или нет.
162 NorthWind
 
14.04.22
16:00
(161) да, конечно.
163 NorthWind
 
14.04.22
16:00
через Сообщить ()
164 Yukito
 
14.04.22
16:04
(163) Я в плане, куда прописать правильнее будет?
165 Yukito
 
14.04.22
16:06
Прописал вот так: https://prnt.sc/gDEsP3jQZt1i

Получаю: https://prnt.sc/dvLXLi104Wye
166 NorthWind
 
14.04.22
16:08
(165) ну, наверно, надо попросить кого-нть че-нть плюхнуть на весы, чтобы было понятно, есть данные или нет.
167 NorthWind
 
14.04.22
16:08
или как?
168 Yukito
 
14.04.22
16:09
(166) Это само собой, жду как они там работу закончат и должны поставить на весы чет... Просто думал будет ответ, аля как выше было - "Ответ 08001+)   000,00kgL0010666076 "
169 Serginio1
 
14.04.22
16:10
Вообще у TcpClient есть свойство Available
https://docs.microsoft.com/ru-ru/dotnet/api/system.net.sockets.tcpclient.available?view=net-6.0
Значение свойства
Int32
Количество байтов данных, полученных из сети и доступных для чтения.
Во его и надо проверять в цикле с небольшими задержками
170 NorthWind
 
14.04.22
16:12
(168) а вот это я не знаю, потому как я всего кода функции ПолучитьПоказанияВесов () не видел. На предыдущей странице обрезана она.
171 Yukito
 
14.04.22
16:15
(170)

Функция ПолучитьПоказанияВесов()  Экспорт
    Перем Ч,М,С, предст;                  
    Перем СписокПараметров;  
    Попытка
        Если Весы.IsConnected() = 0 Тогда
            Весы.Connect();
             //Сообщить (Весы.Connect());
        КонецЕсли;
        Весы.Send(СтартСимвол + км_ПолучитьВесБезСтабилизации + РазделительСтрок);
        Для Сч = 1 По 2000 Цикл КонецЦикла;
        Сообщить (Весы.Send());
        Ответ = Весы.Receive();
    
        Если Весы.IsConnected() = 1 Тогда
            Весы.Close();
        КонецЕсли;
        
    
        СписокПараметров = глРазложить(Ответ, Разделитель);  
    Исключение
        П = 0;
    КонецПопытки;
    
    ////++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    //    ТекущееВремя(Ч,М,С);                      //Код для отладки
    //    тв = Ч*100 + М + С / 100;                 //
    //    Возврат Число(тв);                        //                        
    ////++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      
    Попытка
        П1 = СписокПараметров.ПолучитьЗначение(1,предст);
        П2 = СписокПараметров.ПолучитьЗначение(2,предст);
        П3 = СписокПараметров.ПолучитьЗначение(3,предст);
        П = Сред(П2,3);
        П = Лев(П, СтрДлина(П)-2);
        П = СтрЗаменить(П, " ", "");
        П = СтрЗаменить(П, ",", ".");
    Исключение
        П = 0;
    КонецПопытки;
    
    Возврат Формат(Число(П),"Ч12.7");
КонецФункции
172 NorthWind
 
14.04.22
16:16
(169) у железок еще есть такая особенность - их собственная асинхронность от вас и собственные тормоза. Эти весы совершенно необязательно сразу же отправят данные после того как им отправили запрос. И может получиться так, что в буфере пока еще и нет ничего к тому моменту, как вы спросите, сколько осталось.
173 NorthWind
 
14.04.22
16:20
(171) ну. Ответ-то разбирается через глРазложить, то есть он не подается на выход функции в неизменном виде.

Чтобы получить строку в неизменном виде, вам нужно Сообщить(Ответ) вставлять в этой функции после Ответ = Весы.Receive();, а не так, как в (165).
174 Yukito
 
14.04.22
16:32
(173) Понял, ладно, подожду пока появится вес. Там уже будем смотреть.
175 Yukito
 
14.04.22
16:43
Т.е я так понимаю, что проблема сейчас состоит в том, что вес не передается при вызове нужной мне функции?

Раз обработка NorthWind работает и успешно получает ответ от весов, значит в этом все в порядке.
176 NorthWind
 
14.04.22
16:53
(175) я предполагаю, проблема в том, что на свежих виндах к моменту, когда вы запрашиваете ответ, его еще нет в буфере приема, а в старых есть. В моей обработке присутствует пауза между запросом и получением ответа, а у вас нет.
177 NorthWind
 
14.04.22
16:54
это как вариант
178 1snik_d
 
14.04.22
17:06
(160) Это стандартно в винде есть, не нужно отдельно устанавливать
179 dreizehn
 
14.04.22
17:14
(178) > Это стандартно в винде есть
Не трынди, не вырастешь.
Для AddIn.SystComm нужна компонента DialMail
180 Yukito
 
14.04.22
17:36
(173) Ну вот кстати ничего не сообщает, куда бы я не ставил Сообщить.
181 Yukito
 
14.04.22
17:44
Вот в этом коде:

Функция ПолучитьПоказанияВесов()  Экспорт
    Перем Ч,М,С, предст;                  
    Перем СписокПараметров;  
    Попытка
        Если Весы.IsConnected() = 0 Тогда
            Весы.Connect();
             //Сообщить (Весы.Connect());

        КонецЕсли;
        Весы.Send(СтартСимвол + км_ПолучитьВесБезСтабилизации + РазделительСтрок);
        Для Сч = 1 По 2000 Цикл КонецЦикла;
        Сообщить (Весы.Send());
        Ответ = Весы.Receive();
    
        Если Весы.IsConnected() = 1 Тогда
            Весы.Close();
        КонецЕсли;
        
    
        СписокПараметров = глРазложить(Ответ, Разделитель);  
    Исключение
        П = 0;
    КонецПопытки;


Если смотреть отладчиком, то доходит до строки - Сообщить (Весы.Send()); и потом сразу прыгает на строку  П = 0;
182 Yukito
 
14.04.22
17:59
(177) Так, вес мне поставили. В общем тема с паузой не канает, мало того, почему ту забивается коннект на весы. Даже когда я закрываю выбор номенклатуры, пока 1с не перезагружу, даже вашей обработкой вес получить не могу. Сейчас попробую через отладчик еще раз глянуть, на каком месте начинается затык.
183 Yukito
 
14.04.22
18:07
(177) https://prnt.sc/XjcK9HXO7FSn

Вот я делю точку остановки и дальше сразу прыгает вниз...
184 NorthWind
 
14.04.22
18:17
(181) после сенда цикл, а не перед! Задержка нужна, чтобы ответ успел прийти.
185 Yukito
 
14.04.22
18:17
Так блин, я не знаю что я сделал, но вес я получил. Начал удалять в коде лишнее и ...
186 NorthWind
 
14.04.22
18:19
И ресив не надо вызывать дважды. Второй раз там нечего читать, все уже считано.
187 Yukito
 
14.04.22
18:19
Сейчас код выглядит так:

Функция ПолучитьПоказанияВесов()  Экспорт
    Перем Ч,М,С, предст;                  
    Перем СписокПараметров;  
    Попытка
        Если Весы.IsConnected() = 0 Тогда
            Весы.Connect();
         КонецЕсли;
        Весы.Send(СтартСимвол + км_ПолучитьВесБезСтабилизации + РазделительСтрок);
        Ответ = Весы.Receive();
        Если Весы.IsConnected() = 1 Тогда
            Весы.Close();
        КонецЕсли;
И собственно:

https://prnt.sc/YTgXX6ZPTEOY
188 NorthWind
 
14.04.22
18:24
скорее всего, вы где-то создали задержку, благодаря которой данные оказались в буфере и их удалось прочитать. Я бы рекомендовал поместить задержку вот здесь
  Весы.Send(СтартСимвол + км_ПолучитьВесБезСтабилизации + РазделительСтрок);
  // здесь задержка 20-50 мс
  Ответ = Весы.Receive();
189 Yukito
 
14.04.22
18:25
Вот только я теперь не могу понять, что я изменил, что оно заработало.
190 NorthWind
 
14.04.22
18:25
возможно, ничего, просто винда стала работать чуть медленнее
191 NorthWind
 
14.04.22
18:26
спустя некоторое время этот эффект может уйти и опять вес перестанет приходить
192 Yukito
 
14.04.22
18:27
(191) Сейчас скопирую нулевую базу, проверю на ней. Вы все же думаете что в задержке дело?
193 NorthWind
 
14.04.22
18:27
я бы советовал использовать какую-нибудь не нагружающую процессор задержку между строками как написано в (188). Можно такую, которую рекомендует (158).
194 NorthWind
 
14.04.22
18:28
думаю, достаточно будет 20 миллисекунд. Максимум 50.
195 Yukito
 
14.04.22
18:30
(194) Просто я ж как раз задержку вашу убрал, которая Для Сч = 1 По 2000000 Цикл КонецЦикла;

Самое фиговое во всем этом, что вот заработало, а теперь понять из за чего не работало, хрен поймешь.
196 NorthWind
 
14.04.22
18:32
(195) вы ее, во-первых, не совсем туда поставили. Нужно было МЕЖДУ отправкой запроса и получением ответа. Во-вторых, это пробная конструкция и цифру надо было, скорее всего, уменьшать. В-третьих, пустой цикл - это плохой метод организации задержки, годится только для экспериментов. В продуктив надо делать что-то типа (158).
197 NorthWind
 
14.04.22
18:34
и в-четвертых, вот тут у вас был косяк:
Ответ = Весы.Receive();
Сообщить (Весы.Receive()); // нельзя! Надо было: Сообщить (Ответ);
198 Yukito
 
14.04.22
18:38
(197) Ну сейчас проверю, а то на виртуалку копирую + пока сортировка поменяется. Хочу ради интереса просто проверить. Чудес ведь не бывает =)
199 NorthWind
 
14.04.22
18:43
(178) Хмм...
SystComm = СоздатьОбъект("AddIn.SystComm");
{D:\TSMODULE.ERT(10)}: Неудачная попытка создания объекта (AddIn.SystComm)

Че я делаю не так?
200 Yukito
 
14.04.22
18:44
(196) Ну собственно как я и думал, в нулевой базе банан а не вес. Сейчас буду сравнивать код...
201 NorthWind
 
14.04.22
18:47
(199) + это внешняя компонента DialMail.dll
202 Serginio1
 
14.04.22
18:51
(172) Ну вот как раз перед Read нужно дождаться когда Available  не равно 0. И уже в цикле смотреть Available   и следить за таймаутом
203 Yukito
 
14.04.22
18:57
https://prnt.sc/YKRWrmPO5Lnl

Почему подсвечивает как разный код? Одинаково ж все...
204 Duke1C
 
14.04.22
19:00
(203) Есть у штатного сравнения такие "глюки" + опять же пробелы какие "левые" или "tab"-ы
205 Yukito
 
14.04.22
19:26
Короче я не знаю ребят. Взял сейчас родную базу. И так и сяк проверял. В конечном счете когда изменил айпишник и порт на статику, а не константу, то вес сразу начал поступать.

НО. На той базе которую мы мучаем уже третий день, я это сделал почти в самом начале и тогда ничего не помогло. Да и сейчас когда я удалял из кода лишнее, я в блоке где айпишник и порт ничего не трогал. Как оно могло само заработать то? =_=
206 Yukito
 
14.04.22
19:26
Сейчас попробую еще на другой системе.
207 NorthWind
 
14.04.22
19:33
https://drive.google.com/file/d/1WhI7zKPPwKbFsel14YWIey76o26yQwKw/view?usp=sharing
здесь я добавил задержку в 30 мс в метод Receive. То есть в коде 1С ничего делать не надо. Попробуйте.
208 Yukito
 
14.04.22
19:37
(207) Так в том то и дело, что не в задержке проблема. Я сейчас взял новую базу, поменял ip и порт с констант на железную статику, и вес сразу начал идти...
209 NorthWind
 
14.04.22
19:40
(208) Заверните в СокрЛП () адрес, который вы берете из константы.
210 Yukito
 
14.04.22
19:42
(209) Не совсем понял, что сделать надо.
211 NorthWind
 
14.04.22
19:44
(210) Там где у вас

Весы = СоздатьОбъект("AddIn.TSModule");
Весы.IPAddres= Адрес;
Весы.Port    = Порт;

сделайте

Весы.IPAddres= СокрЛП(Адрес);

порт, я надеюсь, константа целая, а не строковая
212 Yukito
 
14.04.22
19:49
(211) Ну в константах просто вот так вот прописано - https://prnt.sc/jZUSE_FKTNlH

Так то что выше стереть и прописать СокрЛП? А порт как?
213 Злопчинский
 
14.04.22
19:50
(155) ОбработкаВнешнегоСобытия() - это не обработка, а предопределенная процедура, ты в коде можешь вообще нигде не найти вызова ее, т.к. она срабатыввает "сама", когда извне откуда-то приходит внешнее событие (жмак сканером присылает даннеы итд). ОбработкаВнешнегоСобытия() может быть в локальном модуле любой формы (какого-нибудь документа, справочника, итд), а м.б. в глобальном модуле - это процедура срабатывает если в форме нет локальной процедуры
214 Yukito
 
14.04.22
19:52
(211) Сделал так, вес берет.

https://prnt.sc/wG3N7p5ojTRS
215 NorthWind
 
14.04.22
19:59
(212) дело в том, что строковые константы обычно идут фиксированного размера, а у 7.7 в таких случаях строки добиваются пробелами до указанной фиксированной длины. Т.е. на вход компоненты у вас адрес приходит с хвостом из пробелов. Возможно, сокет плохо реагирует на такую хрень. С портом проще, он даже если задан строкой, то преобразуется в целое число и там пробелы по-любому отбрасываются.
216 NorthWind
 
14.04.22
20:01
неаккуратно написан код просто. Грамотный спец когда пишет - он старается сразу все предусмотреть и неоднозначности убрать, в частности, понавставлять эти СокрЛП в достаточном количестве там, где они нужны.
217 NorthWind
 
14.04.22
20:03
(213) этот кусок в компоненте все равно почему-то не заработал. Не вызывается обработка. Почему - я пока не понял, да похоже, теперь уже и не надо.
218 Злопчинский
 
14.04.22
20:13
(158) формексом можно, вероятность наличия формекса поболее ;-0
Для объекта "Сервис"
Пауза(<?>)
Синтаксис:
Пауза(<Задержка>)
Назначение:
Метод для приостановки выполнения кода на заданное количество миллисекунд. Применяется, например, при ожидании внешнего события, чтобы не наргужать систему пустым циклом.
Параметры:
<Задержка> - размер паузы в миллисекундах.
219 Yukito
 
14.04.22
20:16
(215) Огромное вам спасибо за помощь. Как я вас могу отблагодарить? Вы очень помогли, разобраться.
220 Злопчинский
 
14.04.22
20:18
(219) а что я тебе говорил? - ходи на мисту!
221 lEvGl
 
гуру
14.04.22
20:24
(218) чтобы не долбаться с задержками, придумали такое событие, как ПоступлениеДанных, в разных компонентах и средах называется по-разному, но смысл один. Настраиваются условия "сработки" этого события количеством байт в буфере например. Для tcp client через EvenHandler должно работать.
222 lEvGl
 
гуру
14.04.22
20:24
(220) да красавцы, двое суток бились, победили все таки)
223 Yukito
 
14.04.22
20:26
(222) самое обидно, что проблема как всегда была прямо перед носом...
224 Злопчинский
 
14.04.22
20:29
(223) в итоге что было-то? я по диагонали следил.
225 lEvGl
 
гуру
14.04.22
20:30
(223) если я правильно понял - из за статики?
226 ДедМорроз
 
14.04.22
20:30
По поводу адреса - насколько я помню,пробелы в конце dns умеет отрезать.
Вот только если у вас ip-адрес записан,то все зависит от библиотеки winsock.

На низком уровне,там вызов GetHostByName,который возвращает ошибку,если не сиог получить адрес,и вот если бы эта ошибка хоть как-то показывалась - вопросов бы не было.
227 ДедМорроз
 
14.04.22
20:30
Пробелы в конце имени (адреса) той стороны.
228 ДедМорроз
 
14.04.22
20:33
Когда вы пишете программу и прячете коды ошибок от тех,кто ей будет пользоваться,вы ставите мину замедленного действия - сколько времени ушло на копание ?
И сколько бы ушло,если бы сразу был ответ,cannot resolve hostname?
229 NorthWind
 
14.04.22
20:39
(224) строка с ip-адресом весов, добттая пробелами до длины без СокрЛП() передавалась на вход винсокета. Старые винды это жрали и открывали соединение. Новые нет.
230 victuan1
 
15.04.22
14:09
(218) Ради паузы тянуть целый формекс?
Вот пример ненагружающей процессор паузы без всяких компонент:

Процедура ЗадержкаВыполнения(ВремяОжидания); // в секундах
    Если ВремяОжидания > 0 Тогда
        Попытка
            WshShell = СоздатьОбъект("WScript.Shell");
            xPing = "ping -n 1 -w "+СокрЛП(1000*ВремяОжидания)+" 127.255.255.255";
            WshShell.Run(xPing, 0, -1);
        Исключение
            сообщить("Ошибка при выполнении задержки: "+ОписаниеОшибки(),"!!");
        КонецПопытки;
    КонецЕсли;
КонецПроцедуры
231 Djelf
 
15.04.22
14:43
Извиняюсь, был сильно занят и не мог участвовать в разборе полетов.
Я согласен, ошибку надо было в компоненте выкидывать в какое-то описание ошибки, но этого там нет.
Но... если работает - не трожь (первое правило сисажмина/программиста).
Рад что вычислили причину!

З.Ы. Нормальные исходники были сделаланы не дотпиком (много непонятного при сборке), а телериком (с первого раза собралось).
232 Yukito
 
20.04.22
18:12
(229) Оказалось это еще не все. Либо я уже переработался. Я это все делал из под учетки админа, но если я пытаюсь получить вес из под любой другой учетной записи, то банан. Права как на базу так и на 1с всем дал. Чего ему еще может не хватать?
233 Yukito
 
20.04.22
18:18
Все сам дурак, забыл что тестировал настройки фаервола и залочил все порты. Извиняюсь.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан