Имя: Пароль:
1C
1C 7.7
v7: Многопоточность — миф или реальность?
,
0 bigdenis22
 
29.11.16
18:32
Возможно ли выполнение кода в параллельном потоке? Например опрос датчиков на КОМ-портах, весов, - в фоновом режиме?
Для работы с ком портами используются паузы, и когда идет опрос портов раз в 2 секунды, - невозможно комфортно редактировать форму документа.
нашел такую тему : Кто нибудь создавал потоки на 1С 7.7 ?
попробовал прикрутить КОМПОНЕНТу VTOOLs, но при создании потока 1с валится, вроде нашел, что не совместима с FormEx.
Ещё пишут, что в DialMail обмен почтой может запускаться в отдельном потоке, но похоже, в моей ситуации это не поможет...

Может кто решал подобные задачи? поделитесь опытом?
1 Вафель
 
29.11.16
18:33
с портами лучше по событиям
2 bigdenis22
 
29.11.16
18:34
(1) можно примеры пожалуйста?
3 Кирпич
 
29.11.16
18:35
Ну как бы обычно с весами и работают в отдельном потоке. И обычно ничо не тормозит.
4 bigdenis22
 
29.11.16
18:35
+2 я из 1с опрашиваю порты, события из датчиков не приходят.
5 Вафель
 
29.11.16
18:36
(4) так компонента нужна.
6 bigdenis22
 
29.11.16
18:38
(3) научите (подскажите) как? вот я тоже хочу, чтоб не тормозило :)
(5) какая и пример использования можно?
7 Кирпич
 
29.11.16
19:23
Свою вк напиши
8 Garykom
 
гуру
29.11.16
19:25
9 NorthWind
 
29.11.16
19:25
(0) Только ВК.
10 Garykom
 
гуру
29.11.16
19:25
(7) Не нужна никакая своя ВК совершенно, куча готовых ВК для работы со сканерами ШК прекрасно подойдут
11 Garykom
 
гуру
29.11.16
19:27
12 NorthWind
 
29.11.16
19:29
(10) если только читать, то да. А вот если писнуть, подождать энцать миллисекунд и читнуть - то вряд ли.
13 NorthWind
 
29.11.16
19:37
но вообще я бы сильно подумал прежде чем подобные опросы на эске делать, тем более на семерке. Логичнее приложение отдельное на каких-нибудь дельфях сделать или подобном, чтобы оно делало всю низкоуровневую работу, а для 1С, если надо, кидало бы инфу в некий промежуточный буфер, например в отдельную БД, которую потом из 1С можно было бы зачитывать.
14 Кирпич
 
29.11.16
22:08
(10) ну так автор, видимо, не нашел ничего
15 Torquader
 
29.11.16
23:48
Если из семёрки, то как показала практика отдельный и хорошо исполняемый поток - это созданный объект InternetExplorer.Application, так как оказалось, что у них разные апаренты, то "ослик" выполняется параллельно с 1С - в нём можно делать всё, что угодно, а из 1С периодически (когда нужно) в него заглядывать, чтобы узнать, как он справляется.
16 Злопчинский
 
30.11.16
00:42
(15) а из ослика законнектится через веб-клиента на восьмерку!!!
17 Jump
 
30.11.16
00:44
(0)Не надо делать на 1с то, для чего она не предназначена.

Нужно что-то хитрое, многопоточное или еще чего - решай на низкоуровневом языке, а из 1с просто вызывай.
18 Torquader
 
30.11.16
02:17
(16) А восьмёрка то вам зачем - современные весы часто имеют Web-интерфейс, к которому Ослу очень удобно подключаться.
19 Chieftain
 
30.11.16
03:28
(0) А чем не устроил встроенный в 1С++ класс "Таймер"? Работает отдельным потоком, для весов и датчиков-самое то.
20 Это_mike
 
30.11.16
07:25
(19) не 1с++, а формекс.
21 Vippi
 
30.11.16
08:02
(20) Не формекс, а 1С++ )))
22 bigdenis22
 
30.11.16
11:21
(8) (11) спасибо, сейчас почитаю.
(19) 1С++ класс "Таймер" а где его взять и почитать? из "встроенных" его вроде нету?
23 bigdenis22
 
30.11.16
11:34
(8) (11) ну дык или я плохо читал, или все-таки там работа с ком портом в основном потоке... я работаю с ком-портами через MSCOMM, почти тоже самое... мне нужно послать в порт команду, сделать паузу, и прочитать данные с порта, - вот эти паузы и дрочат, поэтому хотелось бы опрос портов вывести в параллельный поток... если это возможно.
24 Fragster
 
гуру
30.11.16
11:35
в клюшках все уприрается в таблицу журнала документов
25 Salimbek
 
30.11.16
11:35
(21) Таймер в Формекс-е, в 1С++ есть только "Система.Уснуть()", вроде.
26 Salimbek
 
30.11.16
11:45
(23) Если бы мне надо было быстро сделать, я бы наваял опрашиватель на любом языке, например Ruby, и настроил обмен сообщениями между 1С и приложением через SQLite базу. В Ruby оно быстро интегрируется, а в 1С через 1SQLite от Орефкова. Типа, положил запрос в БД, получил в ответ идентификатор запроса, потом в таблице ответов ищешь по этому идентификатору - что пришло с порта.
27 Salimbek
 
30.11.16
11:45
(21) Хотя извиняюсь... вроде в этой теме обсуждается Таймер из 1С++: http://www.1cpp.ru/forum/YaBB.pl?num=1190702677/0
но больше нигде в доках никакого упоминания я не нашел.
28 Ёпрст
 
30.11.16
11:50
Есть готовые поделки на веббраузере.
29 Ёпрст
 
30.11.16
11:50
там отчеты строятся фоном
30 Ёпрст
 
30.11.16
11:53
31 Кирпич
 
30.11.16
12:02
чо только люди не выдумают. Ruby какой-то еще. SQLite мля...
Автор напиши что ты хочешь иметь. Я тебе за мороженое сделаю ВК. А то сюда скоро придет один .NET любитель и такого насоветует, что ты будешь решать свою задачу месяц и попутно станешь адептом дотнета. А лечиться от этого ой как долго придется.
32 bigdenis22
 
30.11.16
12:21
(31) ну как бы в (0) и (23)  в принципе все описано.
нужен опрос датчиков на ком-портах и вывод динамических показаний на форму документа(визуализация показаний), так чтоб это не мешало пользователю работать с формой документа. на данном этапе, это только весы, дальше добавится температура и сканер РФИД. В определенный момент юзер нажимает кнопку на форме "Получить данные" и они записываются в документ, в текущую строку. Работа с ком портом сейчас осуществляется через MSCOMM, вот пример получения веса:

    ИначеЕсли РабочееМесто.ТипТО=Перечисление.ТипыВесов.SMART Тогда                              //SMART
     Если Весы.PortOpen <> 0 Тогда
        Весы.Settings = "19200,N,8,1";
        Весы.Output = Симв(080)+Симв(013); // команда P + возврат каретки  
    //    глПауза(0.1);
        глСистема.Уснуть(10);
        Пока Весы.InBufferCount < 13 Цикл
            глСистема.Уснуть(20);
        //    глПауза(0.02);
            Время=ТекущееВремя();
            тв2 = Число(Лев(Время,2))*60*60+Число(Сред(Время,4,2))*60+Число(Сред(время,7,2));
            Если тв2 > тв1+ВремяОжиданияВСек Тогда
                флПревышенияОжидания = 1;
                Прервать;
            КонецЕсли;
        КонецЦикла;  
        Буфер = СокрЛП(Весы.Input);
        пВес = Сред(Буфер,2,8);
        //    Сообщить("прием+++"+Строка(Буфер)+"\\(("+Сред(Буфер,2,8)+"))//");
     КонецЕсли;

получение температуры, будет приблизительно таким-же...
так вот пока система "ждет" ответа из ком-порта происходит как-бы зависание...
мне кажется, если опрос датчиков (с ожиданиями) можно делать не в основном потоке, - то подвисаний не будет.
33 Ёпрст
 
30.11.16
12:22
(32) ну, примитив - это или фформексовской обработкойОжидания лепить или Таймером из 1cpp. тут вообще кодить особо нечего
34 bigdenis22
 
30.11.16
12:27
(33) получение показаний описано в ГМ, и в форме документа вызывается "фформексовской обработкойОжидания".
с таймером ещё не разобрался, но КМК там тоже ожидание ответа из порта будет происходить в основном потоке и подвисания останутся!? или я не прав?
35 Кирпич
 
30.11.16
12:31
(34) у тебя мыло рабочее, которое в карточке? щас я ВК сляпаю, вышлю.
36 bigdenis22
 
30.11.16
12:35
(35) можно и туда, то личный, а это рабочий denis()bmk.kh.ua
37 bigdenis22
 
30.11.16
12:38
(35) дык а ВК на что заточена? на запуск 1с-ной процедуры/функции в отдельном потоке? или непосредственно на работу с ком портом?
38 ADirks
 
30.11.16
12:42
(34) а ты в таймере не жди ничего (не используй sleep())
команду отправил, на след. тактах проверяй наличие ответа

конечный автомат, короче
39 bigdenis22
 
30.11.16
12:49
(38) если в пустом цикле ждать ответа (от 30 до 200 мс.) проц ложится... это не есть кошерно.
40 Ёпрст
 
30.11.16
12:50
(39) зачем в цикле ? Жди его в другой обработке ожидания
41 bigdenis22
 
30.11.16
12:58
(40) которую запускать после отправки команды в порт?

сейчас получение данных реализовано как функция ГМ, которая в форме вызывается ОбработкойОжидания раз в 2 секунды... и получается, что пока не отработает функция, - происходит подвисание...

т.е. предлагается одной ОбработкойОжидания посылать команды на порты, а другой собирать данные?
42 Кирпич
 
30.11.16
12:59
(37) ну типа ВК.Команда("COM1",Симв(080)+Симв(013))

а потом в обработке ожидания ловишь сообщение от ВК
43 Chieftain
 
30.11.16
13:33
(34) Попробовал сейчас класс сделать, благо сейчас задача такая же есть.
Таймер на 500 мс - получение веса с весов, вывод сообщения в строку сообщений. работе не мешает. Запустил цикл перепроведения документов, во время работы цикла сообщения тоже выходят.
Вывод - работает отдельным потоком.
44 Злопчинский
 
30.11.16
13:42
ну вы сильные колдунцы!
45 Chieftain
 
30.11.16
13:43
(44) А ты всегда этому так удивляешься))
46 Chieftain
 
30.11.16
14:04
(27) Извиняюсь, ввел в заблуждение. Артур его видимо в FormEx запихал. А так как у меня нигде их отдельно нет - всегда работало.
47 ADirks
 
30.11.16
14:15
чёта заняться мне нечем, что-ли....


Перем оТаймер;
Перем фТаймер;
Перем нСчетчикТаймера;

Перем Сост; //Старт, ОжиданиеОтвета

Процедура Таймер()
    Если фТаймер = 1 Тогда
        Возврат;
    КонецЕсли;
    
    фТаймер = 1;
    
    Если Сост = "Старт" Тогда
        ЗапросВПорт();
        Сост = "ОжиданиеОтвета";
        нСчетчикТаймера = 20;
    ИначеЕсли Сост = "ОжиданиеОтвета" Тогда
        Если ПроверитьОтвет() = 1 Тогда
            ЗапросВПорт();
            нСчетчикТаймера = 20;
        ИначеЕсли нСчетчикТаймера <= 0 Тогда
            ЗапросВПорт();
            нСчетчикТаймера = 20;
        КонецЕсли;
    КонецЕсли;

    нСчетчикТаймера = нСчетчикТаймера - 1;
    фТаймер = 0;
КонецПроцедуры

Процедура ПослеСозданияФормы()
    оТаймер = СоздатьОбъект("Таймер");
    оТаймер.ЗадатьОбработчикВМодулеФормы(Контекст, "Таймер");
    оТаймер.Запустить(500);
    нСчетчикТаймера = 0;
    Сост = "Старт";
КонецПроцедуры
48 Кирпич
 
30.11.16
14:47
(41) я ВК отправил. лови на denis
49 Кирпич
 
30.11.16
14:48
+(48) смотри test.ert
50 bigdenis22
 
30.11.16
15:04
(49) Спасибо.
на Вин 7 не регается:
Ошибка при создании объекта из компоненты E:\Install\1c\comm\vkcomm.dll (отсутствует CLSID)
0
ВК = СоздатьОбъект("AddIn.commScales");    
{E:\INSTALL\1C\COMM\TEST.ERT(15)}: Неудачная попытка создания объекта (AddIn.commScales)

на вин 2003 зарегалась и работает. буду пробовать прикрутить к своей "ситуации", позже отпишусь о результатах...

если можно пояснение: все файлы, нетипичные для БД мне необходимо переложить в свою базу?
51 Кирпич
 
30.11.16
15:05
(50) только dll
остальное исходники. их не надо.
52 Кирпич
 
30.11.16
15:06
для семерки вроде есть приблуда какая то которая загружает ВК без регистрации. забыл уже.
53 bigdenis22
 
30.11.16
15:06
+ (50) сорри, прогнал... Запуск 1с от имени ОДмина - решили проблему на Вин 7...
54 Кирпич
 
30.11.16
15:09
http://openconf.1cpp.ru/vk/vkloader/

вот приблуда
55 bigdenis22
 
30.11.16
17:28
(51) прикрутил к своей базе: достаточно часто выскакивает событие
Внешнее событие: Источник=commScales  Событие=commErrorДанные=Timeout during operation
при этом опрос останавливается секунд на 5.
но это не самое худшее, самое худшее это то, что когда приходит внешнее событие - сбрасывается курсор (редактируемый текст выделяется полностью) и нажатие след. символа стирает набранный текст.
56 Кирпич
 
30.11.16
17:30
ну про курсоры я не знаю, а таймаут увеличить могу. щас вышлю.
57 Кирпич
 
30.11.16
17:33
а что за опрос? ты часто порт опрашиваешь чтоли? я то думал юзер на кнопку жмет. тогда по другому делать надо.
58 bigdenis22
 
30.11.16
17:36
опрашиваю раз в две секунды (для того чтоб на форме отображались актуальные данные ) а записываются они - да, по кнопке.
59 Кирпич
 
30.11.16
17:39
отправил. добавил третий параметр

    ВК.Команда("COM5",Симв(080)+Симв(013),10000);//timeout 10 сек
60 Кирпич
 
30.11.16
17:41
(58) просто получается, что ты каждые 2 секунды запускаешь поток, который открывает порт, пишет, читает. если первый не успевает за 2 сек, то последующие не выполняются. надо короче по другому. завтра уже.
61 Кирпич
 
30.11.16
17:43
а лучше вообще отдельная программа, в отдельном окне показывает данные с весов и по команде отдает данные в 1с. но это уже другая история. там всё за гривны.
62 bigdenis22
 
30.11.16
17:44
(60) ок. у меня тоже сегодня голова уже квадратная... не соображаю.
в любом случае спасибо за желание помочь.
63 Кирпич
 
30.11.16
17:46
ну или тупо не запускай следующее взвешивание пока первое не завершилось
64 oleg_km
 
30.11.16
18:07
(31) Я пришел. У меня все наваяно на .NET
65 Кирпич
 
30.11.16
18:52
(64)а раньше нельзя было появиться? Я между прочим пол обеденного перерыва потратил на эту лабуду.
Кстати ты - не ОН. Его чота нету. Я уже волнуюсь не захворал ли ОН.
66 bigdenis22
 
30.11.16
19:11
(47) сутра со свежими мозгами попробую ещё так сделать.
67 Torquader
 
30.11.16
19:13
(65) Он просто в ветки про семёрку не очень заглядывает. Мамонты - не его профиль.
68 Torquader
 
30.11.16
19:16
Вообще, если мы хотим сделать правильно, как это делается во многих системах, то мы для каждого датчика пишем отдельный поток, который опрашивает датчик и на определённое время засыпает. А результат опроса с отметкой времени последнего опроса пишет в блок памяти, из которого уже 1С забирает нужные ей данные при обновлении формы.
Для 1С получается всё просто и ясно - спросил и тут же ответили - ни вам задержки ни пропадания курсора.
А сами процессы опроса вообще не знают, что там происходит с их данными, после того как они их получили.
Другие способы - это уже не многопоточность, а попытки её кривой реализации в одном потоке.
69 Кирпич
 
30.11.16
19:20
(66) не. Делать надо красиво. Надо чтобы вк сама рисовала без всяких таймеров и даже без внешних событий. Например пускай рисует вес на какой нибудь кнопке на форме и по нажатию на эту кнопку юзер получает вес. Либо рисовать вес в отдельном, маленьком окошке.
70 Злопчинский
 
30.11.16
19:22
(69) кривое решение. если вес нужно получать без интерактивной работы юзера - что делать?
71 Кирпич
 
30.11.16
19:25
(70) ну так никто не заставляет обязательно рисовать. Просто чтобы возможность была. Чо сразу кривое то.
72 Злопчинский
 
30.11.16
19:26
(71) возможность чего? вот есть мое приложение 1сная обработка или какой-то 1Сный1 код.
как мне программно получит или быть оповещенным о приходе данных с вскрытием конверта-оповещения и получения данных..?
73 Кирпич
 
30.11.16
19:30
(72) ну как обычно. в ВК работает поток, который постоянно опрашивает весы. вызываешь метод ВК, который возвращает текущий вес. если надо, ВК постоянно выводит вес в отдельном окне.
74 Torquader
 
30.11.16
21:08
(73) В отдельном окне в 7.7 очень проблематично - семёрка использует очередь сообщений, и при переходе кода со строки на строку идёт опрос очереди сообщений - тогда всё и прорисовывается, а вот когда выполняется отчёт или другая деятельность 1С, не требующая встроенного языка - очередь сообщений подвисает, если мы что-то выведем в окно через SendMessage - мы будем ждать освобождения очереди. Если после освобождения зайдут к нам, то будет DeadLock и всё.
Так что - обновлять окна 1С должна только по своей инициативе.
75 Кирпич
 
30.11.16
21:12
(74) ну я как бы в курсе чо там и как подвисает
76 Garykom
 
гуру
30.11.16
21:51
(33) Не нужны там ни формекс ни 1с++, штатной ОбработкаОжидания() прекрасно все делается.

В коде (32) просто несусветная глупость с "глСистема.Уснуть(..);"


глВесы;

Процедура глСчитать()
   Если глВесы.InBufferCount < 13 Тогда
      Возврат;
   Иначе
      Буфер= СокрЛП(глВесы.Input);
      пВес = Сред(Буфер,2,8);
      Сообщить("Вес="+пВес);
      // и т.д.

      глВесы.Settings = "19200,N,8,1";
      глВесы.Output = Симв(080)+Симв(013);
      ОбработкаОжидания("глСчитать", 2);
   КонецЕсли;
КонецПроцедуры

Процедура НачатьСчитывание()
   Если глВесы.PortOpen <> 0 Тогда
      глВесы.Settings = "19200,N,8,1";
      глВесы.Output = Симв(080)+Симв(013);
      ОбработкаОжидания("глСчитать", 2);
   КонецЕсли;
КонецПроцедуры
77 Garykom
 
гуру
30.11.16
21:51
IdleProcessing(<?>,)
ОбработкаОжидания(<?>,)
Синтаксис:
ОбработкаОжидания(<ИмяПроцедуры>,<ИнтервалВызова>)
Назначение:
Инициирует периодический вызов процедуры глобального модуля с заданным интервалом времени.
Возвращает имя процедуры глобального модуля, которая назначена для периодического запуска (на момент до исполнения процедуры).
Параметры:
<ИмяПроцедуры> - необязательный параметр. Строковое выражение - имя процедуры глобального модуля, которая будет вызываться периодически с временным интервалом <ИнтервалВызова>. Тело процедуры <ИмяПроцедуры> должно быть написано разработчиком конфигурации в глобальном программном модуле. Если в качестве параметра передается 'пустая строка', то ранее запущенный процесс прекращается.
<ИнтервалВызова> - необязательный параметр. Числовое выражение - интервал времени в секундах, с которым периодически будет вызываться процедура глобального модуля <ИмяПроцедуры>. Если в качестве параметра передается 0 (ноль), то ранее запущенный процесс прекращается.
78 Garykom
 
гуру
30.11.16
21:53
(76)+ Дополнение, если конфа уже использует ОбработкаОжидания() то нуна не забывать что может только одна "периодического запуска" работать, можно сохранить имя предыдущей обработки и вызывать ее когда нуна в своей.
79 Garykom
 
гуру
30.11.16
22:00
(76)+ Чтобы "штатно" обновлять на форме "вес", пишем его в "Перем глВес" в глобальнике.

И задаем формулу "ТекущийВес()" для текстового поля где

Функция ТекущийВес()
   Возврат глВес;
КонецФункции
80 Garykom
 
гуру
30.11.16
22:05
Да если юзер работает (набирает текст в поле ввода) то вызов обработки ожидания обычно выделяет все введенное в поле и следующим нажатием символа введенные до этого символы того...
81 Garykom
 
гуру
30.11.16
22:12
Кста штатная обработка ожидания в 7.7 пашет в "отдельном потоке", но любое взаимодействие с базой и данными (включая глобальные переменные) вызывает блокировки (фризы интерфейса).

С переменными не так заметно, но если в ней начать документы проводить (у меня в некоторых старых конфах такое сделано) то фризы ощутимые :)
82 Garykom
 
гуру
30.11.16
22:38
(79) Да "без работы на форме", т.е. без переходов между элементами формы, нажатий кнопок и т.д., т.е. без событий вызывающих перерисовку форму (перетаскивание не помогает) текст нифига не обновится сам и уже нужны извращения с Форма.Обновить().

Посмотри вот часики https://cloud.mail.ru/public/LSTZ/jWuzNnNmE
83 Torquader
 
01.12.16
00:47
Насколько я помню, нажатие ALT и вызов меню останавливают как обработку ожидания, так и вообще все обмены интерфейса, так как меню вызывает свой обработчик очереди событий, которые все ненужные ему события отправляет котику под хвостик.
84 Garykom
 
гуру
01.12.16
00:56
Ну пора уже 77 на заслуженный отдых.
85 Torquader
 
01.12.16
00:59
(84) В некоторых местах ещё клиппер работает, так что 7.7 ещё поживёт, пока есть кому конденсаторы на мамках перепаять.
86 Garykom
 
гуру
01.12.16
01:04
(85) Мдя, сча уже кондеры не спасают.
Вот где бы взять недорого мамки под 775 ?
87 Djelf
 
01.12.16
01:06
(86) Фигня! arduino преспособим! ;)
88 Garykom
 
гуру
01.12.16
01:13
(87) Смешно но иногда хочется купить им планшеты вместо компов... Только 1С77 на андроиде не очень, но тут МС подсуетился и выпустил на Win10 дешевые и даже с hdmi выходом.
А переходник hdmi-vga стоит 200 рублей.
89 Garykom
 
гуру
01.12.16
01:14
(88)+ Но эта Windows 10 убивает настройкой конечно.
90 Злопчинский
 
01.12.16
01:16
Обработка ожидания - зло
91 Garykom
 
гуру
01.12.16
01:17
Зло это из учетной системы хрен знает что делать. Когда давно есть JS в браузере.
92 Djelf
 
01.12.16
01:19
(91) +100
93 Злопчинский
 
01.12.16
01:31
Зачем постоянно допрашивать вес? Не проще ли дождаться сигнала о поступлении веса?
94 Это_mike
 
01.12.16
07:11
(78) формексовских обработок ожидания, емнип, может быть много - каждая управляется отдельно
95 DrZombi
 
гуру
01.12.16
07:25
Зачем вообще в 7.7 многопоточность? :)
96 Это_mike
 
01.12.16
07:32
(95) Щоб булО!®
97 ADirks
 
01.12.16
07:44
(94) я вот тоже так думал...  оказалось - нет
98 NorthWind
 
01.12.16
08:04
(89) а чем там настройка особенно отличается от Windows 7, к примеру?
99 NorthWind
 
01.12.16
08:06
(93) ну во-первых, можно хотеть полную копию дисплея весов на компе. Чтобы было видно как он меняется. Во-вторых, многие весы не имеют такого функционала как отдача окончательного веса, они просто возвращают содержимое своего дисплея по запросу и в этом содержимом есть признак стабильности веса - нестабилен или стабилен.
100 Mankubus
 
01.12.16
08:21
100
101 bigdenis22
 
01.12.16
11:11
(93) (99) У нас сейчас устанавливаются весы, которые, если будут сами выдавать вес, без запроса, то его считывать будет очень гиморно... передают слово в 14 бит, первый раз вес в первой половине, второй - во второй... и так через раз...
а если по запросу - то все ок, всё постоянно...
менять весы не предлагать, только эти весы живут нормально в наших условиях агресивных сред (высшая IP защита) за вменяемые деньги.
НО , в ближашем будущем, появится необходимость получать показания с других датчиков по запросу и выводить их на форму.

Еще раз повторюсь, необходимо, что-бы на форме (на экране) у оператора отображались оперативные данные с датчиков, чтоб он видел, какие данные запишутся при нажатии кнопки.
102 bigdenis22
 
01.12.16
11:17
(76) спасибо, идея понятна, буду думать как можно у себя это прикрутить...
просто у меня уже есть 5 типов датчиков(весов)и ещё будет добавлятся, работа с которыми описана в глобальной функции ПолучитьВес(), кусочек которой я приводил выше.
103 Garykom
 
гуру
01.12.16
11:18
(98) В Win7 переход после WinXP был простой, вот те "панель управления" где все в одном виде и понятно.

В Win10 тупейшая смесь нового и старого, как и в Win8 только чуть чуть получше. Например скажите как отключить запрос пароля при загрузке (автологон сделать)?

Да по прежнему работает "control userpasswords2" но на планшетах клавы то немае хардварной обычно...
104 Garykom
 
гуру
01.12.16
11:19
(103)+ "клавы немае" это к вопросу вызова шортката Win+R
105 Garykom
 
гуру
01.12.16
11:20
(102) Рефакторинг наше все, когда пишешь нечто большое то иногда 2-3 раза переписывать приходится. Потому что "первый блин комом" это классика жанра.
106 NorthWind
 
01.12.16
11:38
(103) Например скажите как отключить запрос пароля при загрузке (автологон сделать)?
Первая же ссылка при поиске - https://lifehacker.ru/2015/02/18/avtomaticheskij-vhod-windows-10-tp/
107 Garykom
 
гуру
01.12.16
11:41
(106) "Сделайте правый клик на кнопке «Пуск» в левом нижнем углу экрана."

Как??? Как сделать "правый клик" без мышки на сенсорном экране?
108 Garykom
 
гуру
01.12.16
11:42
(107) и да я в курсе что "долгий тап", но в инструкции по "первой ссылке" об этом ни слова!
109 Кирпич
 
01.12.16
11:42
(102) вот наваял такой вариант
в отдельном потоке опрашивает весы, показывает вес в отдельном окне. по требованию возвращает текущий вес. этот шкилет можно доработать до полной красоты с датчиками и прочими блэкджеками.
http://i85.fastpic.ru/big/2016/1201/32/9e6d3a1810a32665671fdf14c8425432.png
110 NorthWind
 
01.12.16
11:43
А подцепить bluetooth, к примеру, клаву не вариант? У меня даже к айпэду получалось ее цеплять, винда-то уж точно понимает
111 NorthWind
 
01.12.16
11:44
(110) к (107), (108)
112 Garykom
 
гуру
01.12.16
11:44
(110) Ха девайсы на Win10 это "обычные компы" и большинство имеют usb-host так что переходник и обычная клава/мышка не проблема.

Суть то не в этом а в тупизне разрабов M$
113 Garykom
 
гуру
01.12.16
11:46
(109) Думаешь ТС или его работодатели готовы платить? Были бы готовы уже давно наняли спеца.
114 NorthWind
 
01.12.16
11:47
(112) Вам просто нужно разобраться со вводом на устройстве, потому что ввод нестандартный, не такой как на десктопе. Разрабы тут ни при чем.
115 Кирпич
 
01.12.16
11:48
(113) думаю нет. я чисто по доброте душевной. решил попрограммировать немножко.
116 Garykom
 
гуру
01.12.16
11:48
(114) Эээ а нафуя было засовывать десктопную ось на планшету?
117 Garykom
 
гуру
01.12.16
11:49
(116)+ Причем в тоже самое время страдая непонятно чем и засовывая планшетный интерфейс в десктопную ось.

Эти вот плитки в Win8 были таким извратом на компах/ноутах без тача ))
118 Garykom
 
гуру
01.12.16
11:50
(117)+ *принудительно засовывая
119 NorthWind
 
01.12.16
11:50
(116) потому что на это есть спрос. И пользоваться этим при желании можно, надо только включить голову в процесс.
120 Garykom
 
гуру
01.12.16
11:54
(119) Да пользоваться можно, но включать голову это доп.затраты на которые можно пойти только при необходимости и(или) отсутствии вариантов.

А еще нуна с собой эту голову не забыть, что и подсказыает статистика продаж планшетов на андроид и на виндовс.
121 Garykom
 
гуру
01.12.16
11:55
(120)+ В смысле планшеты на win это замечательная штука но для специфического применения с использованием специалистов.
122 NorthWind
 
01.12.16
11:56
(120) не хотите забивать голову - не надо! Есть леново йога и сурфейс про. Там клава в комплекте и все прекрасно и легко. Несите ваши денежки.
123 Кирпич
 
01.12.16
11:57
пацаны вам сюда http://4pda.ru/
124 NorthWind
 
01.12.16
11:58
Ну да, оффтоп. Закругляюсь, тем более что это спор о фломастерах
125 Garykom
 
гуру
01.12.16
12:09
(123) Туда я только по делу, там флудить плохо получается, аудитория отмороженная ))
126 Garykom
 
гуру
01.12.16
12:10
(123) Кста это пример когда форум стал основным в отличие от исходной странички, как и миста.
127 bigdenis22
 
01.12.16
12:27
(113) (115) ну как бы зря... готовы и заплатить. в разумных пределах :)
128 Кирпич
 
01.12.16
12:29
(127) так платите быстрее пока художник в запой не ушел
129 Garykom
 
гуру
01.12.16
12:31
(128) +1

вариант с правильной ВК наилучший
130 bigdenis22
 
01.12.16
12:55
(109) Интересная особенность новой версии:
запускаю на терминале, порты пробрасываются в сессию, при запуске тест.ерт отваливается порт...
F:\Documents and Settings\denis>change port
AUX = \DosDevices\COM1
COM1 = \Device\RdpDrPort\;COM1:133\tsclient\COM1
COM2 = \Device\Serial1
COM7 = \Device\RdpDrPort\;COM7:133\tsclient\COM7
LPT1 = \Device\RdpDrPort\;LPT1:133\tsclient\LPT1
PRN = \DosDevices\LPT1

F:\Documents and Settings\denis>change port
AUX = \DosDevices\COM1
COM1 = \Device\RdpDrPort\;COM1:133\tsclient\COM1
LPT1 = \Device\RdpDrPort\;LPT1:133\tsclient\LPT1
PRN = \DosDevices\LPT1

весы на ком7 (в обработке поправил)
до этого было все норм.
131 Кирпич
 
01.12.16
13:01
(130) хрен знает. я в терминале не пробовал.
132 Кирпич
 
01.12.16
13:05
в инете надо поглядеть
http://forum.oszone.net/post-2019225.html
133 Кирпич
 
01.12.16
13:12
отправил другой вариант. может заработает
134 bigdenis22
 
01.12.16
16:41
(133) результаты наблюдений:
Ком7 это действительно подключение через ЮСБ переходник, и порт отваливается (только на последних двух версиях ВК).
переключил на КОМ1 в мамке, - он не отваливается, но и никаких данных по КОМ порту не ходит, смотрю "Serial Port Monitor" ...
что локально, что на терминале
commScales
commError
Параметр задан неверно

при этом, включаю старый вариант (на MSCOMM) работает на ура.
135 Кирпич
 
01.12.16
16:45
(134) покаж код
136 Кирпич
 
01.12.16
16:45
у меня всё работает
137 bigdenis22
 
01.12.16
17:25
(76) спасибо за идею. переписал получение данных вот так:
    ИначеЕсли РабочееМесто.ТипТО=Перечисление.ТипыВесов.SMART Тогда                              //SMART
        Если Весы.PortOpen <> 0 Тогда
            Если ЖдемПоказаний=1 Тогда
                Если Весы.InBufferCount < 13 Тогда
                    //Возврат;
                Иначе
                    Буфер= СокрЛП(Весы.Input);
                    пВес = Сред(Буфер,2,8);
                    глВес=Число(пВес);
                    ЖдемПоказаний=0;
                КонецЕсли;
            КонецЕсли;
            
            Весы.Settings = "19200,N,8,1";
            Весы.Output = Симв(080)+Симв(013); // команда P + возврат каретки  
            ЖдемПоказаний=1;
            пВес = глВес;
            //            Сообщить("прием+++"+Строка(Буфер)+"\\(("+Сред(Буфер,2,8)+"))//");
        КонецЕсли;
    ИначеЕсли РабочееМесто.ТипТО=Перечисление.ТипыВесов.CAS_Ci2001A Тогда                //       CAS_Ci2001A

функция вызывается каждую секунду, у меня фризов не наблюдается. завтра проверим на боевом рабочем месте.

(135) я в твоей конфиге и обработке пробовал (после того как в моей перестало показывать), только КОМ менял на 7 и на 1.
138 Кирпич
 
01.12.16
17:30
(137) а 19200 нарисовал тоже? там вроде 9600 было.
странно, что не работает. у меня как часы.
139 Кирпич
 
01.12.16
17:32
строка должна быть "19200,8,N,1"
может ты строку "19200,N,8,1" там поставил?
140 Кирпич
 
01.12.16
17:33
скорее всего :)
141 bigdenis22
 
01.12.16
18:06
ВК.Старт("COM1","9600,8,N,1",10000,500,Симв(080)+Симв(013),"",1);

кстати да, только счас обратил внимание - в предыдущей версии не было параметров порта... может из-за скорости и сложился конфуз... счас проверю.
142 bigdenis22
 
01.12.16
19:25
+ (141) поменял скорость на 19200, - то же самое
commScales
commError
Параметр задан неверно
143 Кирпич
 
01.12.16
19:30
Я думал ты 8 и N перепутал. По идее такая ошибка при конфиге порта должна вылететь. Завтра найду сканер, попробую. На виртуальных портах все работает. Даже через RDP.
144 Serginio1
 
01.12.16
20:18
145 Кирпич
 
01.12.16
20:45
+(143) можно еще 0 вместо 1 поставить в параметрах. 0 у меня значит 1 бит четности.
146 Кирпич
 
01.12.16
20:47
(144) я уж думал не придешь
147 trdm
 
01.12.16
20:59
(137) > функция вызывается каждую секунду, у меня фризов не наблюдается. завтра проверим на боевом рабочем месте.

Нафиг такой опрос на операторском месте???
148 Кирпич
 
01.12.16
21:22
Тьфу блин. Не четности, а стоп бит. Короче "19200,8,N,0"
149 Serginio1
 
01.12.16
21:37
(146) Я думал ты сам посоветуешь
Использование классов .Net в 1С для новичков
150 Кирпич
 
01.12.16
22:57
Проверил на нульмодемном кабеле. И точно! Если 1, то выдает ошибку. Короче 19200,8,N,0 и будет работать.
151 bigdenis22
 
02.12.16
10:35
(147) что-бы на форме "оперативно отображались изменения показаний... допустимо раз в 2 секунды, раз в 3 секунды ещё можно, но уже менее комфортно. большая скважность - негодится.
(150) сейчас буду посмотреть.
152 bigdenis22
 
02.12.16
12:11
(150) локально заработало, но с разрядностью что-то не так:
 000006
это 64, 68 кг.
может в 1 с возвращать целиком буффер? а там вычленять?
153 losky_9
 
02.12.16
12:18
154 bigdenis22
 
02.12.16
12:38
+ (152) и в окошке и в сообщении перед " 000006" идет непечатный символ типа буквы "г" в обратную сторону... наверно разделитель какой то.
кстати, обратил внимание, ты считываеш 8 бит из порта :
[02/12/2016 11:33:21] Written data
    50 0d                                             P.              
[02/12/2016 11:33:21] Read data
    02 20 30 30 30 30 30 35                           . 000005        
[02/12/2016 11:33:21] - Close port COM1

а я 13

[02/12/2016 11:35:56] Read data
    02 20 30 30 30 30 30 32 33 4b 47 4d 0d            . 0000023KGM.    
[02/12/2016 11:35:56] Written data
    50 0d                                             P.              
[02/12/2016 11:35:57] Read data
    02 20 30 30 30 30 30 32 31 4b 47 20 0d            . 0000021KG .
155 Salimbek
 
02.12.16
12:45
(154) Вероятно, что подразумевалось "ты считываешь 8 байт"
156 Salimbek
 
02.12.16
12:46
Но правильнее - до символа-терминатора считывать, 0d вроде...
157 Кирпич
 
02.12.16
12:49
(154) ну там просто стоит считывать всё подряд. нужно до терминатора считывать или чего там весы передают.
158 Кирпич
 
02.12.16
12:55
отправил новую версию. последний параметр - терминатор
159 Кирпич
 
02.12.16
12:56
типа так теперь запускать
ВК.Старт("COM3","19200,8,N,0",10000,500,Симв(080)+Симв(013),"",1,Симв(013));
160 Кирпич
 
02.12.16
13:06
потом сделаю чтобы можно было в поток код JS передавать и пускай читает пишет что угодно. типа очень универсально.
161 Salimbek
 
02.12.16
13:07
(160) И эти люди запрещают мне писать на Ruby ! :-)
162 Кирпич
 
02.12.16
13:08
(161) да пиши, пиши.
163 Кирпич
 
02.12.16
13:11
(161) ну и у меня будет всё в одной dll. JS будет встроенный. Или интерпретатор СИ встроенный. Или оба два.
164 Кирпич
 
02.12.16
13:13
А потом моя ВК станет международной шахматной столицей.
165 Torquader
 
02.12.16
13:15
Чем вам ещё и JS упёрся - видимо - проблемы со сборкой мусора и залочкой объектов из-за этого вам просто не знакомы ?
166 Кирпич
 
02.12.16
13:22
(165) Да какая нафиг сборка мусора. Просто примитивные скрипты писать. Типа прочитал из порта, чего нибудь сделал и в 1с отправил.
Просто весы такая фигня, что универсально, без программирования ничего не получится. Какие нибудь весы, например, могут вес в формате BCD каком нибудь передавать. И чего с ними делать тогда? А так в скрипте все преобразования сделал и вернул в 1с красивое значение.
167 Кирпич
 
02.12.16
13:23
я ж не собираюсь NodeJS туда запихивать. Хотя пригодилось бы кому нибудь :)
168 Torquader
 
02.12.16
13:30
(166) Был такой язык Pascal Script, он как-то попонятнее выглядел.
А если Microsoft Script Control прикручивать, то там VbScript есть - язык, в котором в функции и процедуры все параметры по ссылке передаются, и он быстрее JavaScript, реализованного в том же Microsoft Script Control.
169 Кирпич
 
02.12.16
13:33
(168) ну вот что-то из этого можно взять. или сразу треш в виде tcc
170 uno-group
 
02.12.16
13:53
vk_rs232 вполне нормально работает. неправильно построен алгоритм работы с весами. Сейчас тоже бьюсь с весами. Ушел нафик от всех шатных мозгов. тензодатчики + Своя платка с ардулино и далее хоть в сеть хоть в ком порт, хоть в вайфай, хоть блюпуп. 20-30 баксов за электронику и весы выдают данные как мне нужно.
171 Serginio1
 
02.12.16
15:11
(152) Там по ссылке в 144 есть отчет правда на 8 ке есть отчет TestSerialPort
Внутри данные получаются

Процедура DataReceived(Данные)
    sp1 = Данные.sender;
    ШтрихКод = sp1.ReadExisting();
    Компорт = sp1.PortName;
    Сообщить(СтрШаблон("ШК=%1 Порт=%2",ШтрихКод,Компорт));
    
КонецПроцедуры


Можешь читать как массив байт

    bytes = sp1 .BytesToRead;
    buffer = Врап.СоздатьМассив("System.Byte",bytes);
    sp1 .Read(buffer, 0, bytes);

Ну и обрабатывай массив байт как тебе хочется