Имя: Пароль:
1C
 
Загрузка/выгрузка данных из ТСД Datalogic 4.x
0 LYuri
 
24.03.11
22:08
Здравствуйте. Есть ли у кого опыт написания внешней обработки для загрузки из терминала сбора данных (ТСД).

Суть вот в чём. Написал конфиграцию на Atol ML 4.7 с одной таблицей справочника в которой храниться штрих-код и еще одно произвольное поле. Нужно считать(записать) данные этого справочника в таблизу значений или в табличное поле соответственно. Терминал с драйвером общается нормально. Все компоненты стоят.
Помогите новичку плиз
1 LYuri
 
25.03.11
08:33
up
2 КонецЕсли
 
25.03.11
10:28
Загрузка упрощенно:

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

//Функции обработки ТСД:

Функция ЗагрузитьДанныеИзТерминалаСбораДанных(СтрокаТаблицыТерминала, Данные, Формат, НомерТаблицыТСД=0,НеПередаватьНоменклатуру=ложь) Экспорт
   Перем Объект, Модель,  НомерЛУ, Ответ;

   Если СтрокаТаблицыТерминала = Неопределено Тогда  
       Возврат "Терминал сбора данных не подключен";
   Иначе

       Параметры = Новый Структура();
       Параметры.Вставить("Объект" , СтрокаТаблицыТерминала.Объект );
       Параметры.Вставить("НомерЛУ", СтрокаТаблицыТерминала.НомерЛУ);
               
       Параметры.Свойство("Объект" , Объект );
       Параметры.Свойство("НомерЛУ", НомерЛУ);
       
       Объект.НомерТекущегоУстройства = НомерЛУ;
       Объект.ПоказатьПрогресс = 1;
       Объект.НомерФормы=НомерТаблицыТСД;
       Если Объект.Результат <> 0 Тогда
           ОписаниеРезультата = Объект.ОписаниеРезультата;
           Объект.ПрерватьОперацию();
           Возврат ОписаниеРезультата;
       КонецЕсли;

       // инициируем выборку из терминала
       Если Объект.НачалоОтчета() <> 0 Тогда
           ОписаниеРезультата = Объект.ОписаниеРезультата;
           Объект.ПрерватьОперацию();
           Возврат ОписаниеРезультата;
       КонецЕсли;

       Данные = СоздатьСтруктуруДанных(Формат);
       Если НеПередаватьНоменклатуру  Тогда
           ИндексНоменклатуры=Формат.СвязываемыеПоля.Найти("Номенклатура","ИмяКолонкиТЗ");
           Если ИндексНоменклатуры<>Неопределено Тогда
               Объект.ИндексПоляОтчета = ИндексНоменклатуры.ПолеТСД-1;
               Объект.ПолеДанныхВключено=0;
           КонецЕсли;    
           ИндексНоменклатуры=Формат.СвязываемыеПоля.Найти("Наименование","ИмяКолонкиТЗ");
           Если ИндексНоменклатуры<>Неопределено Тогда
               Объект.ИндексПоляОтчета = ИндексНоменклатуры.ПолеТСД-1;
               Объект.ПолеДанныхВключено=0;
           КонецЕсли;    

       КонецЕсли;
       
       Пока Объект.ПолучитьЗапись() = 0 Цикл                
           ДобавитьЗаписьВТЗ(Данные,Объект,Формат);
       КонецЦикла;

       Если Объект.КонецОтчета() <> 0 Тогда
           ОписаниеРезультата = Объект.ОписаниеРезультата;
           Объект.ПрерватьОперацию();
           Возврат ОписаниеРезультата;
       КонецЕсли;

   КонецЕсли;

   Возврат "";

КонецФункции
//*******************
Процедура ДобавитьЗаписьВТЗ(Данные,Объект,Формат)
   КоличествоПолей = Объект.КоличествоПолейОтчета;    
   НоваяЗапись=Данные.Добавить();
   Для Индекс = 0 По КоличествоПолей - 1 Цикл
       Объект.ИндексПоляОтчета = Индекс;  //из какого поля выбираем данные
       ДанныеПоля              = Объект.ПолеОтчета; //выборка данных
       НайденоПоле=Формат.СвязываемыеПоля.Найти(Индекс+1,"ПолеТСД");
       Если НайденоПоле<>Неопределено Тогда
           НоваяЗапись[НайденоПоле.ИмяКолонкиТЗ]=ДанныеПоля;    
       КонецЕсли;    
   КонецЦикла;    
   
КонецПроцедуры
3 LYuri
 
25.03.11
11:07
(2) Спасибо огромное!!! щас буду разбираца, пробовать.
4 LYuri
 
25.03.11
11:17
функции такой нет
{Обработка.ОбработкаТСД(31,18)}: Процедура или функция с указанным именем не определена (СоздатьСтруктуруДанных)
       Данные = <<?>>СоздатьСтруктуруДанных(Формат);
5 MikeFromAtol
 
25.03.11
11:40
C:\Program Files\ATOL\Drivers\Samples\Pdx\1Cv80\

а еще вот тут есть пример сильно доработанной типовой обработки с нормальной загрузкой/выгрузкой данных
6 LYuri
 
25.03.11
13:08
(5) да. я эту обработку уже опробовал. выгружает и загружает отлично, но не так как хотелось бы. к примеру, если я добавляю ШК новой номенклатуры, которой нет в базе, то выдаёт следующее
Считанный штрихкод не может быть обработан.
Необходимо убедиться, что данный штрихкод зарегистрирован в информационной базе и может быть обработан в данной форме.
(штрихкод "4601546082657", тип "EAN13")
Меня это не очень устраивает. Хотелось бы добавить номенклатуру в 1С через ТСД с указанием штрихкода, артикула, цены и наименования. но пока ни одна обработка такой возможности нам не даёт
7 LYuri
 
25.03.11
13:09
+(6) ну или подскажите как правильно делать?!
8 MikeFromAtol
 
25.03.11
14:04
(7) ну по изменению логики работы самой конфы я не подскажу. Может проще обратится к кому-нибудь кто в теме и за деньги написать как надо? Быстрее будет.
9 LYuri
 
25.03.11
14:31
(8) конфу уже пишут.
мне необходимо самому научица. хотя бы на самом простом уровне прочитать таблицу из ТСД и записать в ТЗ в 1С8
10 LYuri
 
25.03.11
20:48
(2) большая просьба, можно чуть подробнее. на данном примере не догоняю чегото
11 LYuri
 
26.03.11
13:43
Покопавшись в модулях УТ выделил для себя 3 этапа:
1. Подключение драйвера оборудования
2. Загрузка таблицы из ТСД
3. Выгрузка загруженной таблицы в ТаблицуЗначений.

Первый этап на повестке дня. Как правильно подключить драйвер ТО и опросить устройство.

Есть такая функция в модуле обработки ТОСервер

Функция ЗагрузитьТаблицуТСД(Идентификатор, ТаблицаЗагрузки)Экспорт

   Обработка = Неопределено;
   Объект    = Неопределено;

   ТаблицаЗагрузки = Новый ТаблицаЗначений;
   ТаблицаЗагрузки.Колонки.Добавить("Штрихкод");
       ТаблицаЗагрузки.Колонки.Добавить("Количество");

   Результат = ПолучитьОбъектДрайвера(Идентификатор, Обработка, Объект);

   Если НЕ ЗначениеЗаполнено(Результат) Тогда
       Результат = Обработка.ЗагрузитьТаблицу(Объект, ТаблицаЗагрузки);
       мОписаниеОшибки = Объект.ОписаниеОшибки;
   Иначе
       мОписаниеОшибки = ПолучитьТекстОшибкиПодключенияТО("ТСД");
   КонецЕсли;

   Возврат Результат;

КонецФункции // ЗагрузитьСтрокуТСД()

И как раз строчка Результат = ПолучитьОбъектДрайвера(Идентификатор, Обработка, Объект); и подключает сам драйвер.
12 LYuri
 
26.03.11
13:44
вот как раз ТЗ, которая создаётся в этой функции должна быть немного другая.
13 LYuri
 
26.03.11
14:01
и очень много ветвлений в обработке. уже устал отлавливать, что где подключается и загружается.
Может у кого есть рабочая упрощенная обработка?
14 LYuri
 
26.03.11
21:21
Ну вроде разобрался. Оказывается всё просто. подключаем драйвер терминала через компоненту pdx1c.dll:

Попытка
               ПрогИД = "AddIn.PDX45";
               ПодключитьВнешнююКомпоненту(ПрогИД);
               ДрайверТСД = Новый (ПрогИД);
               Сообщить("Драйвер подключен");
               Сообщить("Версия драйвера:"+Строка(ДрайверТСД.Версия));
   Исключение
               ОписаниеОшибки = "Невозможно подключить внешнюю компоненту.
               | Проверьте, что внешняя корректно установлена и имеет ту же версию,
               | что и обработка обслуживания.";
               Сообщить(ОписаниеОшибки);
   КонецПопытки;

А дальше уже дело техники - передать параметры соединения и опросить сам терминал сбора данных, через зашитые в драйвер функции. Вот перечисление некоторых, котроые выцепил в обработке:

ДрайверТСД.НомерФормы=1; //указываем из какой таблицы читаем данные

ДрайверТСД.ПоказатьПрогресс=Истина; //Показывает прогресс во время считывания из таблицы

ДрайверТСД.НачалоОтчета(); //Вот оно ТО ЧТО НАМ НАДО. Вот в этот момент происходит считывание данных из таблицы.

ДрайверТСД.Результат //Если равен 0, то всё считалось без ошибок

Ну и прочие функции драйвера.
15 LYuri
 
26.03.11
21:25
Поправите меня, если где ошибся.
16 LYuri
 
26.03.11
21:36
А ведь пока сам не копнёшь, никто не подскажет (( потерял 3 дня, но зато разобрался.
Как в одном мультфильме про страуса и птичку:"послушай, птичка! Лучше один день потерять, потом за пять минут долететь...".
Как в моём случае ;)
17 zladenuw
 
26.03.11
21:43
(16) а ты что думал..... типа все знаю о проблемах каждого. а вообще гугли или яндексни.... только правильно пиши вопрос :) ты же за ответ не платишь бабулесы... говори спасибо за то что дают советы :)
18 LYuri
 
26.03.11
21:58
(17) иногда не знаешь сам правильно ли формулируешь вопрос. а тем более, когда не знаешь в каком направлении рыть нужно. Я бы еще вчера, наверное, бабулесы то заплатил бы )). Сёдня уже нет.
19 zladenuw
 
26.03.11
22:00
(18) ну так это опыт.... я могу мучат одну задачу неделю, потом при возникновение ее за 20 мин... опыт.... вот она сила
20 zladenuw
 
26.03.11
22:00
всегда бывает то что видишь в первое
21 LYuri
 
26.03.11
22:06
(20) TRUE!!! у меня не было опыта работы с АТОЛовскими дровами. Сейчас уже есть, и это радует.
И каждую минуту узнаю всё больше, и всё больше удивляюсь, как это я сразу не допёр. А оказалось ваще всё до жути банально, всё это время описание интерфейса этого самого драйвера лежало у меня на диске в дистрибутиве. Обидно тока за потеряное время.
Щас буду писать свою конфу и свои выгрузки в 1С. У АТОЛа всё вроде неплохо, но тут либо допиливать, либо просить когото допилить.
22 zladenuw
 
26.03.11
22:08
(21) хоть правды.... оно так всюду....
23 zladenuw
 
26.03.11
22:08
все есть или только ты не понимаешь или нужно менять профессию.
24 LYuri
 
26.03.11
22:10
(23) менять профессию не будем
25 zladenuw
 
26.03.11
22:13
(24) ну это твое решение.... у меня кодинг это хобби....
26 LYuri
 
26.03.11
22:21
(25) у меня и хобби и основной мой хлеб покачто
27 zladenuw
 
26.03.11
22:29
(26) только долго так не гони.... а то белка в колесе долго не живеть... заепешся
28 LYuri
 
26.03.11
22:34
(27)ну поживём-увидим ;)
29 MikeFromAtol
 
28.03.11
18:35
(21) если надо что подсказать по командам-загрузки выгрузки драйвера, пиши на АТОЛовском форуме в новую тему, ответят либо техподдержка, либо разработчики, либо опытные в разработке 1С