|   |   | 
| 
 | Выполнение метода в фоне (На клиенте) | ☑ | ||
|---|---|---|---|---|
| 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 | 
        (Кто там советовал ПодключитьОбработчикОжидания) 
 Да это работает спасибо! :-) я почему то не дочитал и подумал о методе ВыполнитьОбработкуОповещения вот она и вешала окно ( | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |