Тсд Cipher 8000 С Драйвером Scancode И 1с Тис 7.70.921.

Тема в разделе "1C и всё что с ней связано", создана пользователем dimi3o, 19 янв 2013.

  1. dimi3o

    dimi3o New Member

    Регистрация:
    19 янв 2013
    Сообщения:
    4
    Симпатии:
    0
    Всем привет!
    Пытаюсь запустить работу ТСД CipherLab 8000-C на предприятии с 1С 7.7 ТиС 9.2 (7.70.921), который забросили в черный угол 8 лет назад. Использую прошивку Scancode.
    Поставил ядро: K8000V334. Прошивку: U8000241-IG09. Задачу: 1c_8000 (от 12.08.2009). В задачу никаких изменений не вносил, просто загрузил и всё. Далее в 1С подключаю драйвер версии 6.0.4.0(Scancode). Тут все успешно (При включении 1С одинарный звуковой сигнал от ТСД). В настройках все параметры и порты верные.
    Но при нажатии кнопки "Выгрузить в ТСД Cipher" в "Справочники.Номенклатура" вылезает следующая ошибка:

    Документ = Форма.Параметр.Получить("Контекст");
    {\EXTFORMS\PRNFORMS\CIPHERLAB.ERT(13)}: Поле агрегатного объекта не обнаружено (Получить)


    Пробовал даже совсем старую версию драйвера Scancode для 1С от 2004 года. Там форма открывается и даже идет обработка ровно до момента передачи в ТСД, где выдает ошибку: "Терминал сбора данных: ошибка при выгрузке в базу Невозможно перевести терминал в режим загрузки!".

    Если ввести штрих-код из нашей базы вручную в ТСД при вводе количества и потом заполнить реализацию, то всё без проблем передается и товар находит! Полдела уже есть и очень хотелось бы решить проблему с выгрузкой БД в ТСД.

    Где то вычитал, что это проблема совместимости версий ТиС, типа редакция 7.70.921 не работает с драйвером последней версии Scancode.ru. Там вроде тестировалось все на 7.70.924 или 7.70.925. Но сейчас база уже работает и все переустановить проблемно. Может кто знает что нужно исправить в коде?

    Нарыл, что объект "параметры" не является списком значений в модуле Номенклатура:

    Код ( (Unknown Language)):
    Процедура ПоКнопкеПечать()

    Если ПустоеЗначение(НомерТекущейФормы) = 1 Тогда
    НомерТекущейФормы = 1;
    КонецЕсли;

    Если НомерТекущейФормы = 1 Тогда
    // ЭТИКЕТКА

    ПечатьЭтикетки();
    ИначеЕсли НомерТекущейФормы = 2 Тогда
    // ЦЕННИК

    ПечатьЦенника();
    Иначе
    // внешняя обработка

    Параметры = глВзятьКонтекст(Контекст);  
    ОткрытьФорму("Отчет", Параметры, глКаталогПечФорм + ТаблицаПечФорм.ПолучитьЗначение(НомерТекущейФормы,"Файл"));
    КонецЕсли;

    КонецПроцедуры // ПоКнопкеПечать()

    Исправил:
    Код ( (Unknown Language)):
    Параметры = глВзятьКонтекст(Контекст);  
    на
    Параметры = СоздатьОбъект("СписокЗначений");
    Параметры.ДобавитьЗначение(глВзятьКонтекст(Контекст), "Контекст");
    Но появилась новая ошибка:
    Документ.ВыбратьСтроки();
    {EXTFORMS\PRNFORMS\CIPHERLAB.ERT(15)}: Поле агрегатного объекта не обнаружено (ВыбратьСтроки)


    Вот код "CIPHERLAB.ERT" в \PRNFORMS\:

    Код ( (Unknown Language)):
    Процедура ПриОткрытии()
    Перем Данные;

    Параметры = СоздатьОбъект("СписокЗначений");
    Параметры.Установить("Процесс", "выгрузить");
    Параметры.Установить("Объект" , глТерминал);

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

    Пока Документ.ПолучитьСтроку() = 1 Цикл
    Баркод = Документ.Номенклатура.БазоваяЕдиница.Штрихкод;
    Если ПустоеЗначение(Баркод) = 1 Тогда
    Сообщить("Для " + Документ.Номенклатура.Наименование + " нет штрихкода - не выгружаем");
    Продолжить;
    КонецЕсли;

    Данные.НоваяСтрока();
    Данные.ШтрихКод = Баркод;
    Данные.Номенклатура = Документ.Номенклатура.Наименование;
    Данные.Цена = Документ.Цена;
    Данные.Количество = Документ.Количество;

    //Если ПроверитьШтрихкод(Форма.Штрихкод) = 0 Тогда

    //  Сообщить("У товара """ + Форма.Наименование + """ штрихкод не задан или имеет неверный формат!");

    //Иначе

    //     

    //

    //КонецЕсли;

    КонецЦикла;  
    Параметры.Установить("Данные" , Данные);
    Иначе
    Параметры.Установить("Данные" , "");
    КонецЕсли;
    //ааа = Форма.Параметр.Получить("Контекст");


    РезТекст = глОборудованиеКоманда("Терминал", глТерминалОбработка, Параметры);
    Если ПустоеЗначение(РезТекст) = 0 Тогда
    Сообщить(РезТекст);
    Иначе
    Если Параметры.Получить("Результат") = 0 Тогда
    Сообщить("Терминал сбора данных: ошибка при выгрузке в базу");
    Сообщить(Параметры.Получить("ОписаниеРезультата"));
    КонецЕсли;
    КонецЕсли;

    // закрываем фому

    СтатусВозврата(0);

    КонецПроцедуры // ПриОткрытии

    Заранее спасибо за помощь!
     
  2. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    * Ошибка не CIPHERLAB.ERT а в головном модуле, а именно какие параметры он дает.
    * Судя по смыслу, надо передать документ, но почему-то вложить его в СписокЗначений (может раньше список был большой)
    * Так и дайте текущий документ. Аллах его ведает, что еще делает ф-ия глВзятьКонтекст()! В урну ее!
    Код ( (Unknown Language)):
    Параметры.ДобавитьЗначение(Контекст, "Контекст");
     
  3. dimi3o

    dimi3o New Member

    Регистрация:
    19 янв 2013
    Сообщения:
    4
    Симпатии:
    0
    Ну вообще я так и сделал. Даже если написать:

    Код ( (Unknown Language)):
    Параметры = СоздатьОбъект("СписокЗначений");
    Параметры.ДобавитьЗначение(Контекст, "Контекст");
    вместо моего варианта:

    Код ( (Unknown Language)):
    Параметры = СоздатьОбъект("СписокЗначений");
    Параметры.ДобавитьЗначение(глВзятьКонтекст(Контекст), "Контекст");
    чем, в свою очередь, я заменил строку в процедуре ПоКнопкеПечать():

    Код ( (Unknown Language)):
    Параметры = глВзятьКонтекст(Контекст);
    результат получаем один и тот же:

    Документ.ВыбратьСтроки();
    {K:\ARHIV\ТОРГОВЫЕ\1C\РАБОЧАЯ_РАЗВ(ТА06.01.13)\EXTFORMS\PRNFORMS\CIPHERLAB.ERT(15)}: Поле агрегатного объекта не обнаружено (ВыбратьСтроки)
     
  4. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    А стажи- ка, мил человек! Этот чертов Контекст является документом?
    Процедура ПоКнопкеПечать() находтся в документе?


    И не надо метаться.
    В обработке стоит:
    Код ( (Unknown Language)):
    Документ = Форма.Параметр.Получить("Контекст");
    Документ.ВыбратьСтроки()
    Значит ей передается именно документ. Варианта всего 2:

    Код ( (Unknown Language)):
    Параметры = СоздатьОбъект("СписокЗначений");
    Параметры.ДобавитьЗначение(Контекст, "Контекст");
    ИЛИ
    Код ( (Unknown Language)):
    Параметры.ДобавитьЗначение(ТекщийДокумент(), "Контекст");

    При условии, что вызов иди от документа!!!
    А еще написать перед:
    Сообщить(ТипЗначенияСтр(Документ));
    Документ.ВыбратьСтроки()
     
  5. dimi3o

    dimi3o New Member

    Регистрация:
    19 янв 2013
    Сообщения:
    4
    Симпатии:
    0
    Выгрузка в ТСД - это принтформа, которая вызывается в "ФормаСписок" номенклатуры. Ну это та форма, которая появляется при нажатии кнопочки "номенклатура". Там такая стрелочка внизу со списком принтформ - что распечатать. Ну разработчики ПО Scancode туда закинулы свою принтформу "Выгрузка в ТСД", чтобы передавать всю номенклатуру или её группу в ТСД.
    Замечу, что раньше в их драйвере код принтформы выглядел следующим образом:
    Код ( (Unknown Language)):
    Процедура ПриОткрытии()
    Параметры = СоздатьОбъект("СписокЗначений");
    Параметры.Установить("Процесс", "выгрузить");
    Параметры.Установить("Объект" , глТерминал);
    //Параметры.Установить("Данные" , Данные);
    РезТекст = глОборудованиеКоманда("Терминал", глТерминалОбработка, Параметры);
    Если ПустоеЗначение(РезТекст) = 0 Тогда
    Сообщить(РезТекст);
    Иначе
    Если Параметры.Получить("Результат") = 0 Тогда
    Сообщить("Терминал сбора данных: ошибка при выгрузке в базу");
    Сообщить(Параметры.Получить("ОписаниеРезультата"));
    КонецЕсли;
    КонецЕсли;

    // закрываем фому
    СтатусВозврата(0);
    КонецПроцедуры // ПриОткрытии
    Тут нет никакого документа и ВыбратьСтроки(). Выгрузка в ТСД проходит, но я очень сомневаюсь в правильности работы процедуры. Не зря же всё-таки люди добавили эти 20 строк кода, спустя 6 лет.

    ГрупповойКонтекст - вот, что возвращает Сообщить(ТипЗначенияСтр(Документ));

    Вот картинка формы-списка номенклатуры с кнопкой "Выгрузить в ТСД" с рабочего стола:
    1.jpg
     
  6. dimi3o

    dimi3o New Member

    Регистрация:
    19 янв 2013
    Сообщения:
    4
    Симпатии:
    0
    Решение оказалось следующим. Заменить это:

    Код ( (Unknown Language)):
    Параметры = глВзятьКонтекст(Контекст);
    на это:

    Код ( (Unknown Language)):
    Параметры = СоздатьОбъект("СписокЗначений");
    Параметры.ДобавитьЗначение(ТекущийЭлемент(), "Номенклатура");
    в основном модуле номенклатуры "ФормаСписок".
    Спасибо за помощь, Дайнеко!
     
Загрузка...
Похожие Темы - Тсд Cipher 8000
  1. Allexei
    Ответов:
    1
    Просмотров:
    2.129

Поделиться этой страницей