![]() |
![]() |
|
Загрузка/выгрузка данных из ТСД 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С
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |