Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Програмный код таймаута 1с 8.3          
SeverinPasha Подменю пользователя
сообщение 13.11.18, 9:34
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 20
Спасибо сказали: 1 раз
Рейтинг: 0

Ситуация следующая, открываю порт для получения данных, но не могу поставить закрытие по истечению времени(например секунд). Перепробовал всё что знал и вычитал. Может кто поделится мыслью
Процедура СчитатьКартуНажатие(Элемент)
    Перем ЗначениеСчитки;
    ComPort = Новый COMОбъект("MsCommLib.MsComm");
    Попытка
        ComPort.CommPort        = 3;
        ComPort.Settings        = "38400,N,8,1";
        ComPort.InputMode = 1;
        ComPort.PortOpen = Истина;    
        ЭлементыФормы.СостояниеСвязи.Заголовок = "Связь есть...";
        Таймаут = 5;
        ПорогТаймаута = ТекущаяДата() + Таймаут;
        ТекущееЧисло = ТекущаяДата();
        
            Пока ComPort.InBufferCount <= 1 и ТекущееЧисло <> ПорогТаймаута  Цикл
                 Массив = ComPort.Input;    
            КонецЦикла;
                        
             ДанныеСПорта = ComPort.Input;
                          
             Массив = ДанныеСПорта.Выгрузить();

sava1 Подменю пользователя
сообщение 13.11.18, 9:39
Сообщение #2

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

навскидку [необходимо зарегистрироваться для просмотра ссылки]

SeverinPasha Подменю пользователя
сообщение 14.11.18, 8:01
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 20
Спасибо сказали: 1 раз
Рейтинг: 0

sava1 @ Вчера, 10:39 * ,
А может есть еще какой-либо вариант реализации?

sava1 Подменю пользователя
сообщение 14.11.18, 8:21
Сообщение #4

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

Цитата(SeverinPasha @ 13.11.18, 9:34) *
закрытие по истечению времени(например секунд)


а как еще можно придумать?
или у меня логика извращена...

Vofka Подменю пользователя
сообщение 14.11.18, 9:23
Сообщение #5

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

SeverinPasha, опишите проблему.

SeverinPasha Подменю пользователя
сообщение 14.11.18, 9:29
Сообщение #6

Общительный
**
Группа: Пользователи
Сообщений: 20
Спасибо сказали: 1 раз
Рейтинг: 0

Vofka @ Сегодня, 10:23 * ,
Я по клику открываю порт, чтобы принять данные. И никак не могу написать код, который будет закрывать порт через например 5 секунд. Пробовал работать с функциями даты но всё безрезультатно. Мне нужно просто остановить цикл через 5 секунд после начала приёма данных, при условии, что данные не пришли

Vofka Подменю пользователя
сообщение 14.11.18, 9:49
Сообщение #7

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

SeverinPasha, так и чем не подходит вариант с функцией ПодключитьОбработчикОжидания(...)? Это таймер, просто с не совсем удачным названием smile.gif .

Petre Подменю пользователя
сообщение 14.11.18, 9:50
Сообщение #8

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2902
Из: Київ, Україна
Спасибо сказали: 1144 раз
Рейтинг: 1225

SeverinPasha @ Today, 9:29 * ,
Запустите остановку обработчиком ожидания.


Signature
Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

SeverinPasha Подменю пользователя
сообщение 15.11.18, 8:35
Сообщение #9

Общительный
**
Группа: Пользователи
Сообщений: 20
Спасибо сказали: 1 раз
Рейтинг: 0

Petre @ Вчера, 10:50 * ,
Vofka @ Вчера, 10:49 * ,
Да тут не в названии дело)
Попробовал обработчиком и понял что это вариант не для данного случая.
Мне нужно не запускать всю процедуру по истечению времени. В коде есть отдельный цикл, который отвечает за приём данных.
 Пока ComPort.InBufferCount <= 1 Цикл
                 Массив = ComPort.Input;    
            КонецЦикла;

Так вот, мне нужно остановить именно его по истечению пяти секунд. У меня это даж было как-то получилось, но на ранней стадии разработки программы. Может кто подкинет идейку, как остановить именно этот цикл по завершению таймера. Я пробовал играться с текущей датой, но я какой-то глупый

Vofka Подменю пользователя
сообщение 15.11.18, 9:15
Сообщение #10

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

ТД = ТекущаяДата();
Ждать = 5;
Пока ComPort.InBufferCount <= 1 И ТД + Ждать < ТекущаяДата() Цикл
     Массив = ComPort.Input;    
КонецЦикла;

SeverinPasha Подменю пользователя
сообщение 15.11.18, 9:27
Сообщение #11

Общительный
**
Группа: Пользователи
Сообщений: 20
Спасибо сказали: 1 раз
Рейтинг: 0

Vofka @ Сегодня, 10:15 * ,
Я пробовал таким образом раньше делать
Не работает. Выбивает исключение, которое я прописал на всякий случай, чтобы видеть ошибки
                 Исключение
        Сообщить("Не возможно открыть порт.",СтатусСообщения.ОченьВажное);
        Отказ = Истина;
    КонецПопытки;    
    ComPort.PortOpen = Ложь;
    
КонецПроцедуры

и выдаёт именно "Не возможно открыть порт."

Vofka Подменю пользователя
сообщение 15.11.18, 9:54
Сообщение #12

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

SeverinPasha, вы как-то даете информацию обрывками, ничего не понятно.

SeverinPasha Подменю пользователя
сообщение 15.11.18, 10:19
Сообщение #13

Общительный
**
Группа: Пользователи
Сообщений: 20
Спасибо сказали: 1 раз
Рейтинг: 0

Vofka @ Сегодня, 10:54 * ,
Ну не сбрасывать же мне весь код. То что я сбросил это лишь лакмусовая бумага, которая показывает то, что данный вариант не работает.
Извиняюсь, если что-то не так описываю
В 1с я человек новый

Vofka Подменю пользователя
сообщение 15.11.18, 11:11
Сообщение #14

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

SeverinPasha, вам что-то подсказывают, вы говорите "я так пробовал, не работает". Но что вы пробовали я лично вообще не понимаю.

SeverinPasha Подменю пользователя
сообщение 19.11.18, 10:46
Сообщение #15

Общительный
**
Группа: Пользователи
Сообщений: 20
Спасибо сказали: 1 раз
Рейтинг: 0

Решение найдено, всем спасибо
ВремяСтарта = ТекущаяДата();
        Длит = 5;
        
            Пока ComPort.InBufferCount = 0 И (ТекущаяДата()- ВремяСтарта) < Длит Цикл
                     Массив = ComPort.Input;
            КонецЦикла;


Сообщение отредактировал Vofka - 19.11.18, 12:24

Vofka Подменю пользователя
сообщение 19.11.18, 16:40
Сообщение #16

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Я вам этот вариант ещё в сообщении #10 предложил. Не работает же.

SeverinPasha Подменю пользователя
сообщение 20.11.18, 8:38
Сообщение #17

Общительный
**
Группа: Пользователи
Сообщений: 20
Спасибо сказали: 1 раз
Рейтинг: 0

Vofka @ Вчера, 17:40 * ,
Самое интересное, что ваш код не работал. Я понимаю что по сути это одно и то же, но первым вариантом кода программа реально не работала. Всё равно большое спасибо

XBrut Подменю пользователя
сообщение 22.11.18, 7:45
Сообщение #18

Статус
**********
Группа: Пользователи
Сообщений: 1543
Спасибо сказали: 254 раз
Рейтинг: 0

SeverinPasha @ 13.11.18, 9:34 * ,

Пост #1

Таймаут = 5;
ПорогТаймаута = ТекущаяДата() + Таймаут;
ТЕКУЩЕЕЧИСЛО= ТекущаяДата();
Пока ComPort.InBufferCount <= 1 и ТЕКУЩЕЕЧИСЛО<> ПорогТаймаута  Цикл
    Массив = ComPort.Input;    
КонецЦикла;


В такому коді ТЕКУЩЕЕЧИСЛО ніколи не стане дорівнювати ПорогТаймаута і база буде вічно отримувати дані з ком-порту crazy.gif

П.С.
В таких випадках рекомендується більше відпочивати.


Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 29.03.24, 6:37
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!