Digital-агентство Программист 1С
Портфолио
О нас
  • О компании
  • Партнеры
  • Реквизиты
  • Вопрос ответ
Услуги
  • Продвижение сайтов
    • SEO-продвижение
    • Seo-оптимизация сайта
    • Продвижение сайта статьями
    • SMM-продвижение в социальных сетях
    • Продвижение бренда в Инстаграм
    • Продвижение товаров интернет-магазина
  • Настройка и ведение контекстной рекламы
    • Настройка и ведение контекстной рекламы Яндекс.Директ
    • Google Adwords
    • Комплексная контекстная реклама
    • Аудит контекстной рекламы
  • Создание сайтов
    • Создание Интернет-магазина
    • Создание Корпоративного сайта
    • Наполнение интернет-магазина и сайтов
    • Дизайн и редизайн сайта
    • Интеграция сайта с Яндекс Маркетом
    • Коллтрекинг Mango
    • Web-аналитика и настройка счетчиков
  • Услуги 1С для бизнеса
    • Внедрение 1С
    • Hастройка 1С
    • Обслуживание 1С
    • Услуги программиста 1С
    • Сопровождение 1С
    • Автоматизация 1С
    • Доработка 1С
    • Интеграция 1С:Предприятие с Яндекс Маркетом
    • Маркировка импорта обуви
    • Интеграция OZON и 1C Предприятие
  • Автоматизация салона красоты
    • 1С:Предприятие для Салона красоты
    • CRM-система для Салона красоты
    • Создание сайта салона красоты
    • Продвижение сайта салона красоты
    • Реклама для Салона красоты
Блог
Контакты
Ещё
    Задать вопрос
    info@programmist1c.ru
    Люберцы, ул. Октябрьский проспект, 241Б,этаж 3 ,офис 301.
    Digital-агентство Программист 1С
    Портфолио
    О нас
    • О компании
    • Партнеры
    • Реквизиты
    • Вопрос ответ
    Услуги
    • Продвижение сайтов
      Продвижение сайтов
      • SEO-продвижение —
      • Seo-оптимизация сайта —
      • Продвижение сайта статьями —
      • SMM-продвижение в социальных сетях —
      • Продвижение бренда в Инстаграм —
      • Продвижение товаров интернет-магазина
    • Настройка и ведение контекстной рекламы
      Настройка и ведение контекстной рекламы
      • Настройка и ведение контекстной рекламы Яндекс.Директ —
      • Google Adwords —
      • Комплексная контекстная реклама —
      • Аудит контекстной рекламы
    • Создание сайтов
      Создание сайтов
      • Создание Интернет-магазина —
      • Создание Корпоративного сайта —
      • Наполнение интернет-магазина и сайтов —
      • Дизайн и редизайн сайта —
      • Интеграция сайта с Яндекс Маркетом —
      • Коллтрекинг Mango —
      • Web-аналитика и настройка счетчиков
    • Услуги 1С для бизнеса
      Услуги 1С для бизнеса
      • Внедрение 1С —
      • Hастройка 1С —
      • Обслуживание 1С —
      • Услуги программиста 1С —
      • Сопровождение 1С —
      • Автоматизация 1С —
      • Доработка 1С —
      • Интеграция 1С:Предприятие с Яндекс Маркетом —
      • Маркировка импорта обуви —
      • Интеграция OZON и 1C Предприятие
    • Автоматизация салона красоты
      Автоматизация салона красоты
      • 1С:Предприятие для Салона красоты —
      • CRM-система для Салона красоты —
      • Создание сайта салона красоты —
      • Продвижение сайта салона красоты —
      • Реклама для Салона красоты
    Блог
    Контакты
      Digital-агентство Программист 1С
      Портфолио
      О нас
      • О компании
      • Партнеры
      • Реквизиты
      • Вопрос ответ
      Услуги
      • Продвижение сайтов
        Продвижение сайтов
        • SEO-продвижение —
        • Seo-оптимизация сайта —
        • Продвижение сайта статьями —
        • SMM-продвижение в социальных сетях —
        • Продвижение бренда в Инстаграм —
        • Продвижение товаров интернет-магазина
      • Настройка и ведение контекстной рекламы
        Настройка и ведение контекстной рекламы
        • Настройка и ведение контекстной рекламы Яндекс.Директ —
        • Google Adwords —
        • Комплексная контекстная реклама —
        • Аудит контекстной рекламы
      • Создание сайтов
        Создание сайтов
        • Создание Интернет-магазина —
        • Создание Корпоративного сайта —
        • Наполнение интернет-магазина и сайтов —
        • Дизайн и редизайн сайта —
        • Интеграция сайта с Яндекс Маркетом —
        • Коллтрекинг Mango —
        • Web-аналитика и настройка счетчиков
      • Услуги 1С для бизнеса
        Услуги 1С для бизнеса
        • Внедрение 1С —
        • Hастройка 1С —
        • Обслуживание 1С —
        • Услуги программиста 1С —
        • Сопровождение 1С —
        • Автоматизация 1С —
        • Доработка 1С —
        • Интеграция 1С:Предприятие с Яндекс Маркетом —
        • Маркировка импорта обуви —
        • Интеграция OZON и 1C Предприятие
      • Автоматизация салона красоты
        Автоматизация салона красоты
        • 1С:Предприятие для Салона красоты —
        • CRM-система для Салона красоты —
        • Создание сайта салона красоты —
        • Продвижение сайта салона красоты —
        • Реклама для Салона красоты
      Блог
      Контакты
        Digital-агентство Программист 1С
        Digital-агентство Программист 1С
        • Портфолио
        • О нас
          • Назад
          • О нас
          • О компании
          • Партнеры
          • Реквизиты
          • Вопрос ответ
        • Услуги
          • Назад
          • Услуги
          • Продвижение сайтов
            • Назад
            • Продвижение сайтов
            • SEO-продвижение
            • Seo-оптимизация сайта
            • Продвижение сайта статьями
            • SMM-продвижение в социальных сетях
            • Продвижение бренда в Инстаграм
            • Продвижение товаров интернет-магазина
          • Настройка и ведение контекстной рекламы
            • Назад
            • Настройка и ведение контекстной рекламы
            • Настройка и ведение контекстной рекламы Яндекс.Директ
            • Google Adwords
            • Комплексная контекстная реклама
            • Аудит контекстной рекламы
          • Создание сайтов
            • Назад
            • Создание сайтов
            • Создание Интернет-магазина
            • Создание Корпоративного сайта
            • Наполнение интернет-магазина и сайтов
            • Дизайн и редизайн сайта
            • Интеграция сайта с Яндекс Маркетом
            • Коллтрекинг Mango
            • Web-аналитика и настройка счетчиков
          • Услуги 1С для бизнеса
            • Назад
            • Услуги 1С для бизнеса
            • Внедрение 1С
            • Hастройка 1С
            • Обслуживание 1С
            • Услуги программиста 1С
            • Сопровождение 1С
            • Автоматизация 1С
            • Доработка 1С
            • Интеграция 1С:Предприятие с Яндекс Маркетом
            • Маркировка импорта обуви
            • Интеграция OZON и 1C Предприятие
          • Автоматизация салона красоты
            • Назад
            • Автоматизация салона красоты
            • 1С:Предприятие для Салона красоты
            • CRM-система для Салона красоты
            • Создание сайта салона красоты
            • Продвижение сайта салона красоты
            • Реклама для Салона красоты
        • Блог
        • Контакты
        info@programmist1c.ru
        Люберцы, ул. Октябрьский проспект, 241Б,этаж 3 ,офис 301.
        • Главная
        • Примеры программирования

        Работа с последовательным (COM, RS-232) портом из 1С:Предприятие 7.7 и 8.0

        Мы всегда на связи
        Последовательный порт на практике служит для подключения к компьютеру считывателей штрих-кодов, электронных весов, а также другого внешнего оборудования. Статья описывает работу с последовательным портом в 1С:Предприятие 7.7 и 8.0. Приведен пример исходного кода внешней компоненты (Delphi 6), которая заменяет типовую компоненту scanopos.dll, и умеет работать с двумя или более сканерами.
        Автор статьи: romix | Редакторы: Волшебник, Vovan58
        Последняя редакция №14 от 06.02.07 |


        Ключевые слова: последовательный порт, COM, RS232, четность, кабель, сканер, RS-232, асинхронный, USB, ОбработкаВнешнегоСобытия, внешняя компонента, Delphi, scanopos.dll, TThread, торговое оборудование, связь


        Интерфейс RS-232 был разработан в 1969 году рядом крупных промышленных корпораций и опубликован Ассоциацией электронной промышленности США (Electronic Industries Association — EIA). .

        Приобретение правильного сканера



        Меня очень часто спрашивают: почему не работает сканер штрихкодов в 1С.

        Штрихкодовые сканеры различаются интерфейсом подключения. В частности, сканеры USB могут имитировать клавиатуру (это проявляется тем, что штрихкод считывается в блокноте), имитировать интерфейс RS-232 или работать по USB без имитации чего-либо. Все три варианта часто различаются шнуром, который реализует тот или иной интерфейс.

        Для 1С наименее всего подходят клавиатурные сканеры: считанный штрихкод не попадет в процедуру ОбработкаВнешнегоСобытия. Поэтому, если есть такая возможность, лучше заменить такой сканер на RS-232 или USB (имитация RS-232). См. также раздел "Поддержка сканеров с клавиатурным интерфейсом"  в конце этой статьи. О подключения сканера штрих-кода через COM-порт.

        Существуют и более старые (не USB) варианты сканеров, которые подключаются "в разрыв клавиатуры".
        Напишу еще раз: приобретения клавиатурных или имитирующих клавиатуру сканеров для работы в 1С следует избегать.

        Эмуляция COM-порта при наличии USB-соединения


        Имеется возможность представить порт USB "под именем" свободного COM-порта, например, при помощи драйвера (FTDI), и работать с ним как с новым COM-портом.

        Стандартные установки последовательного порта


        При экспериментах я устанавливал следующие (стандартные) настройки порта: скорость 9600 бит/с, 1 стоповый бит, нет контроля четности, 8 бит/байт). Для своих опытов я использовал кабель для соединения портов COM1 и COM2. Вы можете спаять такой кабель по схеме), или приобрести его на рынке примерно за 70 рублей.    

        Чувствительность к "горячему" подключению


        Следует отметить, что COM и LPT-порты чувствительны к "горячему" подключению - соединяя включенные устройства, вы можете спалить порты (или что-то еще). Поэтому перед подключением устройства я рекомендую отключать их от сети питания, и только потом их выполнять их электрическое соединение.
        USB этим недостатком не страдает, и дозволяет "горячее" подключение устройств.

        Посылка тестовых данных в COM-порт


        Имея тестовый кабель, вы уже можете экспериментировать с внешними компонентами для 1С:Предприятие.
        Посылку тестовых данных в порт я производил из пакетного (.BAT) файла MS-DOS. Содержимое моего файла test.bat:
                mode com2 baud=9600 parity=n data=8 stop=1
                type c:\test.txt >com2
        

        В файле c:\test.txt введите несколько символов (например, 1234567890) и завершите - обязательно! - их символом перевода строки (нажатием Enter).

        Программа, подключенная к другому концу кабеля, может быть тестовой программой TestComPort.exe (скачайте комплект, приведенный в конце статьи; в программе надо выбрать порт - в данном случае COM1, нажать Открыть, и уже можно посылать в нее символы при помощи BAT-файла, в большом окне вы увидите принятые текстовые строки), конфигурацией для 1С:Предприятие, приложенной в этом же архиве, или стандартной конфигурацией наподобие "1С:Торговля и Склад", где активизирована работа со сканером, подключенным в последовательный порт (внешняя компонента scanopos.dll).

        Получение внешнего события в 1С:Предприятие


        Внешнее событие, например, со сканера, с другого внешнего оборудования, или просто сгенерированное программно, приходит в 1С (как 7.7, так и 8.0) в предопределенную процедуру
        ОбработкаВнешнегоСобытия().

        ///////////////////////////////////////////////////////////////////////
        Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные)//Предопределенная процедура 1С
            //Глобальный обработчик внешнего события
            Сообщить("Внешнее событие: Источник="+Источник+"  Событие="+Событие+"  
        
        Данные="+Данные);
        КонецПроцедуры
        


        Эта процедура может располагаться в глобальном модуле или модуле формы 1С:Предприятие 7.7 или 8.0. Процедура принимает три входящих параметра: Источник, Событие и Данные. Это три текстовые строки, которые могут принимать произвольные значения - в качестве Источника можно установить имя внешней компоненты, в качестве события - строку-идентификатор события, например, "BarCodeValue", а в качестве данных - данные от устройства, например, считанный штрихкод.

        Инициализация внешней компоненты


        Код процедуры ПриНачалеРаботыСистемы() в тестовой конфигурации выглядит следующим образом:
        ///////////////////////////////////////////////////////////////////////
        Процедура ПриНачалеРаботыСистемы() //Предопределенная процедура 1С
            ок=1;
            Если глЗагрузитьВнешнююКомпоненту("vk_rs232")=0 Тогда
                Сообщить("Внешняя компонента не была загружена!","!");
            Иначе
                rs232=СоздатьОбъект("AddIn.vk_rs232");
            КонецЕсли;
            
            ИмяПорта=""+Константа.ComPort;
            
            Сообщить("Константа.ComPort: "+ИмяПорта);
            Сообщить("При считывании кода, который завершается символами #13#10, здесь должны 
        
        появляться считанные строки.");
            
            //Начинаем слушать порт
            rs232.ОткрытьПорт(ИмяПорта); 
            
        КонецПроцедуры
        


        Первый запуск конфигурации необходимо производить под правами администратора или привилегированного пользователя Windows. Это необходимо для любых внешних компонент или OLE-объектов, чтобы компонента (DLL) могла "прописать" себя в системный реестр Windows.

        Пример работы с COM-портом


        Рассмотренные ниже примеры работы с последовательным (COM-) портом будут использовать средства Windows API (системные функции CreateFile и т.д.). Для компиляции примеров потребуется Delphi версии 6 (впрочем, вы легко сможете переделать примеры под любой язык программирования, который поддерживает вызовы Windows API).

        В конце статьи приведена ссылка, по которой вы можете скачать работающие примеры кода внешней компоненты (vk_rs232.dll) и упрощенного тестового примера (TestComPort.exe, который содержит 120 строк тестового кода). Рассмотренная в качестве примера внешняя компонента для 1С:Предприятие
        умеет читать текстовые строки из последовательного порта, и представлять их как событие считывания штрихкода "BarCodeValue". Поэтому компоненту можно без изменений использовать, например, в конфигурации "Торговля и Склад" в качестве замены для штатной компоненты для считывания штрихкодов. Также компонента умеет записывать "встречные" данные в последовательный порт, если это необходимо для работы с устройствами (для сканеров штрих-кодов это не нужно).

        Пример расчитан на передачу в устройство или из устройства текстовых строк, разделенных символами 13,10, что характерно, например, для сканеров штрихкодов. Я использую фиксированные настройки (скорость - 9600, один стоп-бит, без бита четности, 8 бит в одном байте), а также фиксированные настройки таймаута (чтение "отваливается" через относительно короткий промежуток времени, чтобы избежать зависания). Вы можете переделать эти умолчания под ваше оборудование и требования к программному обеспечению.

        Настройка сканера


        Вы можете настроить сканер на те или иные завершающие коды (#13#10 и другие), а также изменить его настройки при помощи установочных штрихкодов, которые обычно поставляются в комплекте устройства.

        Общая идеология работы с RS-232 в системе Windows


        В MS-DOS (и ранних версиях Windows, включая 95 и 98),  работа с последовательными портами часто производилась напрямую через порты ввода-вывода командами Ассемблера IN и OUT. Этот способ не поддерживают современные операционные системы, начиная с Windows NT. В них остается (надо сказать, довольно древняя) возможность работы с этими портами как с файлами.

        Например, достаточно открыть файл с именем "COM1", чтобы можно было писать в него данные для внешнего устройства, и читать из него данные от этого устройства (входной и выходной поток данных не пересекаются).

          hCom:=CreateFile("COM2", ... );
        
          ok:=WriteFile(  //uses Windows
            hCom, //Файл
            Buff[1], //Буфер откуда пишем
            nBytes, //Число байтов для считывания
            wr_cnt, //Число записанных байтов
            nil
          );
        
          ok:=ReadFile(  //uses Windows
            hCom, //Файл
            Buff, //Буфер куда считываем
            100, //Число байтов для считывания
            rd_cnt, //Число считанных байтов
            nil
          );
        
          CloseHandle(hCom);
        
        


         Настройки параметров и таймаутов COM-порта производятся при помощи функций SetCommState и SetCommTimeOuts соответственно. Ссылка на работающий пример кода, который показывает эту идею более развернуто, приведена в конце статьи.

         Конечно, есть возможность работать с COM-портом и "более простыми средствами" - вплоть до открытия файла с именем "COM2", записи строк в этот файл и чтения встречных данных от устройства из этого же файла.
         
         Внешняя компонента, по сравнению с этим "простым" решением, добавляет возможность генерировать события считывания данных (например, штрихкодов со сканера) в асинхронном режиме, когда 1С не "замирает" до очередного считывания штрихкода, и не "крутится" в бесконечном цикле чтения, а получает внешние события, и реагирует на них в предопределенной процедуре ОбработкаВнешнегоСобытия(). Это удобно для пользователя, и не заставляет его нажимать на клавиатуре лишние клавиши перед считыванием штрихкода.  

        MSDN


        В качестве официальной  справки по различным функциям Windows используйте MSDN, который можно приобрести на DVD или на 3-х CD. В качестве "источника и составной части" он входит в комплект средств разработки от Microsoft, или приобретается отдельно. Кроме того, MSDN выложен в интернете, и как правило, находится в первых строках запросов в поисковике Google по контрастному запросу наподобие "SetCommState".

        Поддержка двух или более сканеров (08.03.2006)


        Компонента теперь использует потоки (объект TThread) вместо таймера. Компонента содержит тестовый пример для работы с двумя объектами (например, двумя сканерами).

        Настройка конца строки (12.07.2006)


        Компонента понимает свойство КонецСтроки (в англоязычном написании - EOL).
        По умолчанию - Симв(13)+Симв(10) в качестве последовательности, которая отделяет один штрихкод от другого.

        Поддержка сканеров с клавиатурным интерфейсом (20.09.2006)


        Компонента поддерживает перехват событий клавиатуры.
            rs232.ПерехватКлавиатуры(1);

        Это позволяет использовать сканеры с клавиатурным интерфейсом. Однако, нажатия на клавиши не подавляются. Строка очищается при каждой паузе между нажатиями на клавиши длительностью более 1 секунды. Событие генерируется по нажатию на клавишу Enter.
        (есть другой способ подключения сканера штрих-кода в разрыв клавиатуры.

        Глубина буфера событий



        Компонента позволяет выставить глубину буфера событий (свойство ГлубинаБуфераСобытий).
        Это значит, что если компьютер занят рассчетами, а в это время приходят новые события, то они будут накапливаться только в пределах этого буфера (последующие события будут потеряны).


         iEvent := nil;
         pConnection.QueryInterface(IID_IAsyncEvent,iEvent);
         iEvent.SetEventBufferDepth(300); //глубина буфера событий

        Заключение


        Мы рассмотрели работу с последовательным портом RS-232 из 1С:Предприятие. Различие между версиями 1С:Предприятие 7.7 и 8.0 в данном случае несущественно - внешние компоненты совместимы и могут использоваться в обеих версиях системы. Вы можете посылать данные в порт или считывать их из порта, чтобы управлять внешним устройством или принимать данные от него по протоколу RS-232. При помощи тестового кабеля, который соединяет два COM-порта, вы можете имитировать работу с оборудованием, даже не имея самого устройства в наличии.
        Услуги
        Продвижение сайтов
        Настройка и ведение контекстной рекламы
        Создание сайтов
        Услуги 1С для бизнеса
        Автоматизация салона красоты
        Компания
        О компании
        Партнеры
        Реквизиты
        Вопрос ответ
        Проекты
        Пресс-центр
        Контакты
        Подписка на рассылку
        info@programmist1c.ru
        Люберцы, ул. Октябрьский проспект, 241Б,этаж 3 ,офис 301.
        Политика конфиденциальности
        © 2026 Все права защищены.
        ООО «УСПЕХ» ОРГН:1105027007843