Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как организовать фоновую работу сканера в 1С
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Работа с торговым оборудованием
sanytch
Здравствуйте форумчане. Решив проблему со сканером, описанную необходимо зарегистрироваться для просмотра ссылки вышел на последний этап. Теперь нужно обработку которая сейчас работает со сканером сделать фоновой, т.е. так чтобы оператор 1С каждый раз не сворачивал-разворачивал её, а выполнял свои задачи, а обработка висела "в фоне". Подскажите как можно сделать... методом научного тыка (в Гугле не нашел каких то подходящих решений) запихивал процедуры во все модули, начиная с модуля управляемого приложения, модуля сеанса, внешнего соединения и заканчивая модулем обычного приложения... не реагирует никак. в обработке основная Процедура ВнешнееСобытие + Процедура ОбработкаПодбора, а дальше штатные из конфигурации из вышеупомянутых модулей... Но, воз и ныне там... Помогите, пжалста...
logist
В модуле обычного приложения есть обработчик ВнешнееСобытие, думаю вам туда. И где-то там же должна быть переменная которая хранит форму в которую должен помещаться результат сканирования.
Flexy
В типовых обычно Обработчик события "ВнешнееСобытие"
И код:
Процедура ВнешнееСобытие(Источник, Событие, Данные)

    Если Не ВводДоступен() Тогда
        Возврат;
    КонецЕсли;

    ПолучитьСерверТО().ОбработатьВнешнееСобытие(Источник, Событие, Данные, ЭтаФорма);

КонецПроцедуры // ВнешнееСобытие()


ВводДоступен() проверяет активна ли форма для ввода в нее данных. Имхо для фона не нужно использовать проверку на активность формы.
Процедура ВнешнееСобытие(Источник, Событие, Данные)

    //Если Не ВводДоступен() Тогда
    //    Возврат;
    //КонецЕсли;

    ПолучитьСерверТО().ОбработатьВнешнееСобытие(Источник, Событие, Данные, ЭтаФорма);

КонецПроцедуры // ВнешнееСобытие()
logist
Цитата(Flexy @ 03.03.17, 11:24) необходимо зарегистрироваться для просмотра ссылки
Имхо для фона не нужно использовать проверку на активность формы.

Это само собой, но внешнему событию надо понимать в какую форму передавать ввод, иначе он будет в активную.
Flexy
Цитата(logist @ 03.03.17, 11:22) необходимо зарегистрироваться для просмотра ссылки
Это само собой, но внешнему событию надо понимать в какую форму передавать ввод, иначе он будет в активную.

Точно smile.gif Тогда наверное ловить в модуле приложения в процедуре ОбработкаВнешнегоСобытия() и передавать в какой-то свой дополнительный общий модуль для обработки. По идее так будет и без формы работать.
А если надо в форме обработки "в фоне", то делаем обработчик события для этой формы:
Процедура ВнешнееСобытие(Источник, Событие, Данные)

   ОбработатьДанныеВФоне(Данные);

КонецПроцедуры // ВнешнееСобытие()
sanytch
logist @ Сегодня, 9:38 необходимо зарегистрироваться для просмотра ссылки ,
Спасибо за ответ. В моей конфе в Модуле Обычного Приложения Процедура ОбработкаВнешнегоСобытия выглядит так:

Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
    
    Если Источник = "Zvit1C" Тогда
        // Событие от 1С:Звіт        
        
        // Актуализируем глМенеджерЗвит1С, если был подключен как внешний
        Если Не глПодключитьМенеджерЗвит1С() Тогда
            Возврат;
        КонецЕсли;

        глМенеджерЗвит1С.ОбработкаВнешнегоСобытияЗвит1С(Источник, Событие, Данные);    
        
    Иначе
        //Событие от торгового оборудования
        Если мКлиентOnline <> Неопределено Тогда
            мКлиентOnline.ВнешнееСобытие(Источник, Событие, Данные);
        КонецЕсли;

        ПолучитьСерверТО().ЗавершитьОбработкуВнешнегоСобытия(Источник, Событие, Данные);
        
    КонецЕсли;    
    
КонецПроцедуры

и если я правильно понимаю то сразу после открытия базы я просто пикну сканером и должен попасть в эту процедуру после Иначе в //Событие от торгового оборудования. Ставлю после Иначе точку останова и не попадаю туда...

sanytch @ Сегодня, 21:47 необходимо зарегистрироваться для просмотра ссылки ,
А не заходит сюда потому что при запуске видимо нужно подключать сканер...
в обработке:
Процедура ПриОткрытии()
    
    ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма);

но в модуле обычного приложения так низя) какая такая ЭтаФорма... Подскажите Как заставить 1С-ку подкючить СШК сразу при открытии?
sanytch
Flexy @ Сегодня, 12:07 необходимо зарегистрироваться для просмотра ссылки ,
Спасибо за ответ. Идея "без формы" вообще классная, но моя обработка с таблицей, где все данные о сканированных объектах плюс выбор типа цены и всякое другое. Да и с реализацией этой идеи, думаю, мне будет тяжко справится и долго, а время, как раз то, чего у меня нет.
А вот про
Цитата
А если надо в форме обработки "в фоне", то делаем обработчик события для этой формы:
Процедура ВнешнееСобытие(Источник, Событие, Данные)

ОбработатьДанныеВФоне(Данные);

КонецПроцедуры // ВнешнееСобытие()

если не затруднит подробнее, не совсем вашу мысль улавливаю.
У меня из Процедуры ВнешнееСобытие вызывается первым делом ПолучитьСерверТО().ОбработатьВнешнееСобытие(Источник, Событие, Данные, ЭтаФорма) а потом пролетав по разным общим модулям возвращаюсь в обработку в процедуру ОбработкаПодбора(ТабличнаяЧасть, ЗначениеВыбора) где заполняю ТЧ на форме номенклатурой штрихкода.
дальше танцы с бубнами со сканером и т.д. и т.п. Чтобы было понятнее обработка моя это сильно урезаный документ ЧекККМ из УТП(более точно о конфе и платформе в теме вопроса).
Ваш вариант позволит даже при свёрнутой форме всё это проделать? Не пойму как это возможно, ведь внешнее событие может возникнуть только при активной форме... Или я об этом не знаю? Не обессудьте ибо уже бьюс неделю по ночам с этим чудным сканером... 09000000.gif
logist
Цитата(sanytch @ 03.03.17, 23:35) необходимо зарегистрироваться для просмотра ссылки
но в модуле обычного приложения так низя) какая такая ЭтаФорма

Вы плохо читали/поняли мое сообщение. В модуле обычного приложения создайте глобальную переменную, при открытии формы в которую будет помещаться результат сканирования после подключения оборудования (ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма)wink.gif добавляйте глФормаДляРезультатаСканирования = ЭтаФорма; Только не забудьте ПриЗакрытии формы сделать глФормаДляРезультатаСканирования = Неопределено.
В модуле обычного приложения в обработке внешнего события после Иначе добавьте
Если глФормаДляРезультатаСканирования <> Неопределено Тогда
ПолучитьСерверТО().ОбработатьВнешнееСобытие(Источник, Событие, Данные, глФормаДляРезультатаСканирования);
Возврат; // Или по другому определите окончание, так что бы дальше код не выполнялся
КонецЕсли
sanytch
logist @ Сегодня, 9:47 необходимо зарегистрироваться для просмотра ссылки ,
Спасибо большое понял! теперь ход мысли ясен) Спасибо за "разжовывание". Буду терзать) 32000000.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.