|
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) Точно подключились? Как вес то получаешь? Обертки именно для получения веса я в исходниках не вижу.
|
|||
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
|
||||
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();
на Сообщит("Весы.CreateTimer(): "+Весы.CreateTimer());
Что сообщит? |
|||
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");
|
|||
147
arsik
гуру
14.04.22
✎
14:24
|
+(146) Или еще вот так
Весы = СоздатьОбъект("AddIn.TSModule");
Смысла этого таймера я так и не понял. |
|||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
Все сам дурак, забыл что тестировал настройки фаервола и залочил все порты. Извиняюсь.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |