|
Выполнение метода в фоне (На клиенте) | ☑ | ||
---|---|---|---|---|
0
Alex_
Alexsin_2020 31.03.21
✎
16:01
|
Доброго дня
ПОдскажите как сделать следующее! мне необходимо постояно следить за каталогом и если в нем появился файл помещать сперва инфу в ТЗ а затем печатать ее смысл в том что оборудование для печати работает только на тонком клиенте и НаКлиенте следовательно ника кане могу догнать как ассинхронно ее выполнять? при всем при этом печать чека идет из текстового файла и необходимо на линиях разрыва выдавать предупреждение типа Оторвите чек и только после нажатия ввода можно продолжать печать ( |
|||
1
hhhh
31.03.21
✎
16:08
|
(0) чего это у вас такая допотопная касса? Купите кассу, чтобы чек сам обрезался.
|
|||
2
Garykom
гуру
31.03.21
✎
16:10
|
(0) ВК написать
|
|||
3
Alex_
Alexsin_2020 31.03.21
✎
16:10
|
куплена ужо
СентоЛАН не умеет обрезать ( |
|||
4
Alex_
Alexsin_2020 31.03.21
✎
16:10
|
(2) серьезно?
вообще никак? |
|||
5
Garykom
гуру
31.03.21
✎
16:13
|
(4) фоновые на клиенте только в МП выполняются
|
|||
6
Garykom
гуру
31.03.21
✎
16:13
|
(5)+ но если у тебя локальная файловая то клиент=сервер
|
|||
7
Alex_
Alexsin_2020 31.03.21
✎
16:14
|
(5) МП что етсь?
(6) Серверная |
|||
8
Garykom
гуру
31.03.21
✎
16:15
|
с подобным уровнем знаний вам пока рано решать эту задачу
|
|||
9
Alex_
Alexsin_2020 31.03.21
✎
16:17
|
(8) Вы серьезно? ))
а по существу ответить? |
|||
10
Alex_
Alexsin_2020 31.03.21
✎
16:20
|
Обратите внимание на мою полосочку под ником )
и сравните со своей ) у меня меньше а следовательно я редко задаю вопросы я самоучка ) и да я многого не знаю от того и иду спросить совета ответьте пож. что такое МП |
|||
11
Жан Пердежон
31.03.21
✎
16:28
|
ПодключитьОбработчикОжидания()
|
|||
12
Kassern
31.03.21
✎
16:32
|
(10) наверное в контексте данной ветки имелось в виду мобильное приложение (МП)
|
|||
13
fisher
31.03.21
✎
16:37
|
(0) На клиенте только один поток. Поэтому асинхронности не будет. Но подозреваю, что (11) тебе подойдет.
|
|||
14
fisher
31.03.21
✎
16:40
|
Соврал. Асинхронность будет. Фонового выполнения не будет.
|
|||
15
Garykom
гуру
31.03.21
✎
16:43
|
(14) на клиенте фоновое только через ВК
|
|||
16
DGorgoN
31.03.21
✎
16:57
|
Я за ПодключитьОбработчикОжидания()
|
|||
17
fisher
31.03.21
✎
17:05
|
(15) Логично :) Я просто поправил себя же, потому что асинхронность <> многопоточность.
|
|||
18
Garykom
гуру
31.03.21
✎
17:31
|
(17) Теоретически можно попробовать для фона на клиенте извратиться через ПолеHTML и JS где вроде как есть многопоточность
https://developer.mozilla.org/ru/docs/Web/API/Web_Workers_API/Using_web_workers Но хз как это в 1С и в какой последовательности будет обрабатываться когда из JS будет дергаться https://infostart.ru/public/398366/ Но будет ли реально фоново хз |
|||
19
MouHacTaBHuk
31.03.21
✎
17:48
|
(1) (3) (16) я за попытку номер 2. Купить нормальный аппарат, который будет просто работать, а не висеть на бесконечной поддержке программиста
|
|||
20
sikuda
31.03.21
✎
18:39
|
(18) Не учите молодого сразу извращениям. Обычно JS не имеет доступ к локальному диска компьютера для безопасности.
|
|||
21
Garykom
гуру
31.03.21
✎
18:46
|
(20) js дёргает функцию в 1С которая имеет
|
|||
22
PuhUfa
31.03.21
✎
19:17
|
(0) >>на линиях разрыва выдавать предупреждение типа Оторвите чек
и кто будет отрывать чек? специально обученный сотрудник? а если он на обеде? |
|||
23
Alex_
Alexsin_2020 01.04.21
✎
10:03
|
(19) какая же программная касса по доступной цене у Нас В Беларуси есть?
)) которая может работать в режиме фискальника и для которой нету необхоимости сертифицировать по? |
|||
24
Alex_
Alexsin_2020 01.04.21
✎
10:04
|
(22) :-) это так поржать? ))))))))
|
|||
25
Alex_
Alexsin_2020 01.04.21
✎
10:05
|
(16) пробовал но он вешает прогу (
я решил сделать проще захотели отчеты с терминала печатать просто жмают кнопачку прога вешается и ждет файлов от терминала видимо много поточности я не добьюсь ( всем спасибо ) |
|||
26
VladZ
01.04.21
✎
10:17
|
Странная, конечно реализация.
Я бы попробовал разбить задачу на две части: - добавил фоновое задание, которое "забирает" данные из файла и пишет в регистр сведений. - вторая часть - эта сама обработка. Смотрит, какие данные не отработаны в регистре сведений и печатает из регистра. С любыми вопросами в любом месте. |
|||
27
Alex_
Alexsin_2020 01.04.21
✎
10:43
|
(26) проблема в том что
1. файл лежит в каталоге пользователя на клиенте (у меня серверная БД) было бы классно конечно реализовать прослушку каталога в фоне что бы обойтись одним методом но можно и не заморачиваться ( |
|||
28
fisher
01.04.21
✎
11:29
|
(25) > пробовал но он вешает прогу
У всех не вешает, а у тебя вешает. Беда. |
|||
29
Garykom
гуру
01.04.21
✎
11:44
|
(28) так он видать в цикле начинает проверку хреначить не отпуская основной поток
|
|||
30
Alex_
Alexsin_2020 01.04.21
✎
11:51
|
(28)
&НаКлиенте Процедура Печать() КассаПараметры = Новый Структура(); КассаПараметры.Вставить("Источник","Пользователь"); КассаПараметры.Вставить("ИмяСобытия","ПечатьНеФиск"); ВыполнитьОбработкуОповещения(Новый ОписаниеОповещения("ПечатьФискальнойИНефискальнойИнформации",ЭтотОбъект,КассаПараметры)); КонецПроцедуры &НаКлиенте Процедура ПечатьФискальнойИНефискальнойИнформации(Результат, Параметр) Экспорт //Здесь Цикл лежал я его убрал который всегда проверял наличие файла //И это вешало прогу //внутри этого цикла при условии что файл есть выполнялось все что ниже ТЗЧЕКОВ = СобытияПодключенияКассовогоОборудованияСервер.СоздатьТЗ(); ТЗЧЕКОВ.Колонки.Добавить("ВидЧека"); //Для Клиента / для банка ТЗЧЕКОВ.Колонки.Добавить("ВидСтроки"); //1 начало / 0 конец ТЗЧЕКОВ.Колонки.Добавить("Строка"); ////Рабоаем на кассе читаем файл порт = 3; скорость = 9600; ИмяФайла = глДрайверКассовогоОборудования.ПутьДляОтчетовСТерминала+"tusson.txt"; ОбъектДрайвераОбработки = глДрайверКассовогоОборудования.ДрайверКассы; Текст = Новый ЧтениеТекста(ИмяФайла); Строка = Текст.ПрочитатьСтроку(); Пока Строка <> Неопределено Цикл //строки читаются до символа перевода строки //читаем строку и печатаем текст Если СокрЛП(Строка) = "|" Тогда НовыйЧек = 0; СТрТЗ = ТЗЧЕКОВ.Добавить(); Если НовыйЧек = 1 Тогда СТрТЗ.ВидЧека = "ДляКлиента"; Иначе СТрТЗ.ВидЧека = "ДляБанка"; КонецЕсли; Если СокрЛП(Строка) <> "|" И СокрЛП(Строка) <> "" Тогда СТрТЗ.Строка = Строка; КонецЕсли; Если СОКРЛП(Строка) = "НЕДОСТАТОЧНО СРЕДСТВ" Тогда СообщениеКассиру = "НЕДОСТАТОЧНО СРЕДСТВ"; ИначеЕсли СОКРЛП(Строка) = "еще какое то сообщение" Тогда СообщениеКассиру = "------"; КонецЕсли; Строка = Текст.ПрочитатьСтроку(); Иначе СТрТЗ = ТЗЧЕКОВ.Добавить(); Если НовыйЧек = 1 Тогда СТрТЗ.ВидЧека = "ДляКлиента"; Иначе СТрТЗ.ВидЧека = "ДляБанка"; КонецЕсли; Если СокрЛП(Строка) <> "|" И СокрЛП(Строка) <> "" Тогда СТрТЗ.Строка = Строка; КонецЕсли; Если СОКРЛП(Строка) = "НЕДОСТАТОЧНО СРЕДСТВ" Тогда СообщениеКассиру = "НЕДОСТАТОЧНО СРЕДСТВ"; ИначеЕсли СОКРЛП(Строка) = "еще какое то сообщение" Тогда СообщениеКассиру = "------"; КонецЕсли; Строка = Текст.ПрочитатьСтроку(); КонецЕсли; КонецЦикла; Текст.Закрыть(); ошибка = ОбъектДрайвераОбработки.Текст(порт,скорость,0,""); Для каждого СтрТЗ из ТЗЧЕКОВ Цикл Если СтрТЗ.ВидЧека = "ДляКлиента" Тогда ошибка = ОбъектДрайвераОбработки.Текст(порт,скорость,1,СтрТЗ.Строка); КонецЕсли; КонецЦикла; ошибка = ОбъектДрайвераОбработки.Текст(порт,скорость,6,""); //Предупреждение("Оторвите чек!"); ошибка = ОбъектДрайвераОбработки.Текст(порт,скорость,0,""); Для каждого СтрТЗ из ТЗЧЕКОВ Цикл Если СтрТЗ.ВидЧека = "ДляБанка" Тогда ошибка = ОбъектДрайвераОбработки.Текст(порт,скорость,1,СтрТЗ.Строка); КонецЕсли; КонецЦикла; ошибка = ОбъектДрайвераОбработки.Текст(порт,скорость,6,""); //Предупреждение("Оторвите чек!"); ошибка = глДрайверКассовогоОборудования.ДрайверТерминала.УдалитьФ(); КонецПроцедуры |
|||
31
Alex_
Alexsin_2020 01.04.21
✎
11:54
|
(29) а как еще можно проверить наличие файла?
не отрицаю возможно я что то делаю не так ( |
|||
32
Garykom
гуру
01.04.21
✎
11:56
|
(31) Поиском по маске, если нет то закончили не надо в цикле крутить
И в следующую сработку ПодключитьОбработчикОжидания снова один раз проверь |
|||
33
fisher
01.04.21
✎
12:41
|
Я бы сделал так.
Обработка ожидания с нужной периодичностью (скажем, несколько секунд) проверяет наличие новых файлов и если они есть - бьет по чекам и подсасывает их в память (файлы при этом лучше не удалять безвозвратно, а перемещать в архивный каталог - чтобы можно было восстановиться при сбое). Естественно, без циклов. Есть файлы - подсосали и вышли. Нету - сразу вышли. Разбиение по чекам - ключевой момент, чтобы предупреждение об отрыве задавать немодально и не вешать интерфейс. Другая обработка ожидания анализирует очередь чеков в памяти и если очередь непустая - печатает очередной чек, удаляет его из памяти и выдает немодальное предупреждение об отрыве чека. Тут наверное нужно будет предусмотреть флаг блокировки интерфейса, чтобы пока пользователь не среагирует на предупреждение - очередь не обрабатывалась. |
|||
34
fisher
01.04.21
✎
12:50
|
То есть одновременно с выдачей немодального предупреждения устанавливать флажок в клиентской переменной модуля и пока он взведен - не обрабатывать очередь (сразу выходить из обработчика очереди). А когда пользователь асинхронно подтвердит отрыв чека - флаг сбрасывать и сразу запускать очередную выборку чека из очереди (чтобы не дожидаться срабатывания обработчика).
|
|||
35
Kassern
01.04.21
✎
12:51
|
Сколько же извращений ради чеков...
|
|||
36
fisher
01.04.21
✎
12:53
|
Если подумать, то лучше очередь чеков делать не в памяти, а разбивать их на файлики в том же каталоге (с другим расширением). Это если я правильно понял и в одном файлике может быть несколько чеков.
Тогда один обработчик будет разбивать на чеки, а второй будет их печатать и требовать отрыва. |
|||
37
Alex_
Alexsin_2020 01.04.21
✎
13:04
|
(32) дайте пример я что то не понимаю (
|
|||
38
fisher
01.04.21
✎
13:07
|
(37) Что тут понимать? При подключении обработчика ожидания ты можешь указать цикличность с которой платформа будет его вызывать. Получится тот же самый цикл только с паузами между итерациями, во время которых программа висеть не будет.
|
|||
39
Галахад
гуру
01.04.21
✎
13:08
|
Хм. Одного не понимаю, если база серверная, то наверное задание на печать формируется этой же самой базе.
|
|||
40
Галахад
гуру
01.04.21
✎
13:09
|
Зачем через файлик-то?
|
|||
41
fisher
01.04.21
✎
13:13
|
(40) У него какая-то программная касса, в которую он по API шлет задания, а она при фиксации чека выплевывает файликами их бумажные образы. Я так понял :)
|
|||
42
Галахад
гуру
01.04.21
✎
13:17
|
(41) О, как. Интересное решение. Получается в ККТ ничего не печатается.
|
|||
43
Конструктор1С
01.04.21
✎
13:21
|
(0) не пытайся сделать всё и сразу. Пускай регламентное задание шерстит расшаренный каталог, в случае чего стягивает файл и записывает данные в промежуточное хранилище. Когда прочитал возводи какой-нибудь флаг. Это флаг будет читать клиент и выводить данные на печать
|
|||
44
Alex_
Alexsin_2020 01.04.21
✎
13:28
|
(41) да именно так только не касса а терминал выплевывает файлы
а затем читаем этот файл и печатаем на кассу |
|||
45
fisher
01.04.21
✎
13:32
|
(44) "Терминал" - это типа фискальная часть, обделенная печатающим устройством?
|
|||
46
fisher
01.04.21
✎
13:33
|
(44) А как это чудо хоть выглядит? Кинь ссылку :)
|
|||
47
fisher
01.04.21
✎
13:35
|
А, дошло. POS-терминал.
|
|||
48
fisher
01.04.21
✎
13:37
|
То есть на POS-терминале теперь еще и 1С для печати чеков? Жесть.
|
|||
49
fisher
01.04.21
✎
13:40
|
Хоть убей не пойму, как это все можно сертифицированно использовать.
|
|||
50
Жан Пердежон
01.04.21
✎
19:12
|
(37) выбирай из 6 вариантов:
НачатьПоискФайлов(); НайтиФайлы(); НайтиФайлыАсинх(); ФФ = Новый Файл(ИмяФайла); ФФ.НачатьПроверкуСуществования(); ФФ.Существует(); ФФ.СуществуетАсинх(); |
|||
51
Alex_
Alexsin_2020 02.04.21
✎
12:14
|
(45) да Верно!
|
|||
52
Alex_
Alexsin_2020 02.04.21
✎
12:15
|
||||
53
Alex_
Alexsin_2020 02.04.21
✎
12:25
|
В общем модуле
Прописал такую строчку ПодключитьОбработчикОжидания("ЕстьФайлПечати", 60); и написал Метод Процедура ЕстьФайлПечати() Экспорт ВыбФайл = Новый Файл(глДрайверКассовогоОборудования.ПутьДляОтчетовСТерминала+"tusson.txt"); Если ВыбФайл.Существует() = Истина Тогда вмвм = ""; КонецЕсли; КонецПроцедуры программа ругается на первый параметр ЕстьФайлПечати что не так то? в моуле стоит флаг для клиента что ему надо то? |
|||
54
Alex_
Alexsin_2020 02.04.21
✎
12:28
|
(49) прогу для управления этим оборудованием не нужно сертифицировать
|
|||
55
Kondarat
02.04.21
✎
12:38
|
ПодключитьОбработчикОжидания (AttachIdleHandler)
Синтаксис: ПодключитьОбработчикОжидания(<ИмяПроцедуры>, <Интервал>, <Однократно>) . . . Описание: Подключает вызов указанной процедуры модуля приложения (модуля обычного приложения) или глобального общего модуля через определенный интервал времени. |
|||
56
Alex_
Alexsin_2020 02.04.21
✎
12:41
|
(5) да спасибо я уже нашел (не успел написать )
|
|||
57
Alex_
Alexsin_2020 02.04.21
✎
12:44
|
(Кто там советовал ПодключитьОбработчикОжидания)
Да это работает спасибо! :-) я почему то не дочитал и подумал о методе ВыполнитьОбработкуОповещения вот она и вешала окно ( |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |