Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Периодически вылазит ошибка при взвешивании на весах с Keli          
yoj Подменю пользователя
сообщение 25.10.19, 15:21
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 20
Спасибо сказали: 0 раз
Рейтинг: 0

1С 8.3 (8.3.11.2867)
УПП 1.3
Весовой модуль Keli XK3118T1
На одной весовой при нажатии на кнопку взвешивания периодически выскакивает ошибка: (общийМодуль.ИНАГРО_ДирективыПрепроцессору.Модуль(933)): Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата)
Вес = ?(Вес<0, 0, Вес);
Есть 5 весовых с одинаковыми весами и с одной и той же терминальной 1С.
Поменяли ПК, индикатор весовой, кабель. Пробовали менять скорость обмена.
Подскажите куда еще можно порыть?

Код
Функция ПоказательЭлектронныхВесов(НомерВесов=1, документ = Неопределено, Организация = Неопределено, ВидСобытия = Неопределено) Экспорт    
    Перем Вес, ВО;

    Вес = Неопределено;
    МаксимальныйВес = 999999999;

    #Если Клиент Тогда
        Нашли = Ложь;
        ВО=Справочники.ИНАГРО_ВнешнееОборудование.ПустаяСсылка();
        // ищем веса  для конкретного документа :
        Если документ<> Неопределено тогда
            
            МетаданныеДок = документ.Метаданные();
            
            СписокСкладов = Новый СписокЗначений;            
            СписокСкладов.Добавить(Справочники.Склады.ПустаяСсылка());
            Если ИНАГРО_ОбщегоНазначения.ЕстьРеквизитДокумента("Склад",МетаданныеДок) Тогда
                СписокСкладов.Добавить(Документ.Склад);
            КонецЕсли;
            
            запрос= новый запрос;
            строкаМетаданых=Справочники.ИНАГРО_СтруктураМетаданных.НайтиПоРеквизиту("ИмяПоМетаданным", МетаданныеДок.Имя,Справочники.ИНАГРО_СтруктураМетаданных.Документы);
            Запрос.УстановитьПараметр("ИмяКомпьютера",ИмяКомпьютера());
            Запрос.УстановитьПараметр("Документ",СтрокаМетаданых );            
            Запрос.УстановитьПараметр("СписокСкладов",СписокСкладов);
            Запрос.Текст="ВЫБРАТЬ РАЗРЕШЕННЫЕ
                         |    Справочник.Ссылка,
                         |    Регистр.Склад
                         |ИЗ
                         |    РегистрСведений.ИНАГРО_ВнешнееОборудование КАК Регистр
                         |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ИНАГРО_ВнешнееОборудование КАК справочник
                         |        ПО Регистр.Оборудование = Справочник.Ссылка
                         |ГДЕ
                         |    Справочник.ПометкаУдаления = ЛОЖЬ
                         |    И справочник.ВидОборудования = ЗНАЧЕНИЕ(Перечисление.ИНАГРО_ВидыВнешнегоОборудования.Весы)
                         |    И справочник.ИмяКомпьютера = &ИмяКомпьютера
                         |    И Регистр.Документ = &Документ
                         |    И Регистр.Склад В(&СписокСкладов)";

            
            Выборка = Запрос.Выполнить().Выбрать();            
            Если Выборка.Количество()=0 тогда

            ИначеЕсли Выборка.Количество()=1 тогда
                Выборка.Следующий();
                ВО=Выборка.Ссылка;
                Нашли =истина;
            ИначеЕсли Выборка.Количество()>1 Тогда
                Нашли = истина;
                СписокВО = Новый СписокЗначений;
                СписокВОБезСклада = Новый СписокЗначений;     
                Пока Выборка.Следующий() Цикл
                    // Значит В выборке есть ВО с пустым и заполненым складом - ВО с пустым складом будем отбирать отдельно
                    Если ЗначениеЗаполнено(Выборка.Склад) Тогда
                        СписокВО.Добавить(Выборка.ссылка);
                    Иначе
                        СписокВОБезСклада.Добавить(Выборка.ссылка);
                    КонецЕсли;
                КонецЦикла;
                
                Если СписокВО.Количество() > 0 Тогда
                    СписокВыбора = СписокВО;
                Иначе
                    СписокВыбора = СписокВОБезСклада;
                КонецЕсли;
                Если СписокВыбора.Количество() = 1 Тогда
                    ВыбраныеВесы = СписокВыбора[0];
                Иначе                     
                    ВыбраныеВесы = СписокВыбора.ВыбратьЭлемент("Выберете весы");
                КонецЕсли;
                
                Если ВыбраныеВесы= Неопределено  тогда
                    Возврат -1;
                Иначе
                    Во=ВыбраныеВесы.Значение;
                КонецЕсли;
            КонецЕсли;    
        КонецЕсли;
        // если не находим тогда ищем всё что подключено к этому компу :
        если не Нашли тогда     
            Запрос=Новый запрос;
            Запрос.УстановитьПараметр("ИмяКомпьютера",ИмяКомпьютера());
            Запрос.Текст="ВЫБРАТЬ РАЗРЕШЕННЫЕ
            |    ИНАГРО_ВнешнееОборудование.Ссылка
            |ИЗ
            |    Справочник.ИНАГРО_ВнешнееОборудование КАК ИНАГРО_ВнешнееОборудование
            |ГДЕ
            |    ИНАГРО_ВнешнееОборудование.ПометкаУдаления = ЛОЖЬ
            |    И ИНАГРО_ВнешнееОборудование.ВидОборудования = ЗНАЧЕНИЕ(Перечисление.ИНАГРО_ВидыВнешнегоОборудования.Весы)
            |    И ИНАГРО_ВнешнееОборудование.ИмяКомпьютера = &ИмяКомпьютера";
            
            Выборка=запрос.Выполнить().Выбрать();            
            Если Выборка.Количество()=1 Тогда
                Выборка.Следующий();
                ВО=Выборка.Ссылка;            
            ИначеЕсли Выборка.Количество()>1 Тогда
                Нашли =истина;
                
                СписокВыбора= Новый СписокЗначений;     
                Пока выборка.Следующий() цикл
                    СписокВыбора.Добавить(Выборка.ссылка);
                КонецЦикла;
                ВыбраныеВесы= СписокВыбора.ВыбратьЭлемент("Выберете весы");
                Если ВыбраныеВесы= Неопределено  тогда
                    Возврат -1;
                иначе
                    Во=ВыбраныеВесы.Значение;
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
        //    если вобще ничего не нашли тогда :
        Если ВО.Пустая() Тогда
            ТекстСообщения=Локализация.СтрШаблон("К компьютеру """"¤1¤"""" не подключено внешнее оборудование",ИмяКомпьютера());
            ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения);
            Возврат -1;
        КонецЕсли;
        //  обрабатываем найденые веса
        ОбработкаВесов = Неопределено;
        Если ЗначениеЗаполнено(ВО.Файл) Тогда
            ОбработкаВесов=ВнешниеОбработки.Создать(СокрЛП(ВО.Файл));                
        Иначе
            ИмяФайла = ПолучитьИмяВременногоФайла();
            ДвоичныеДанные = ВО.ХранилищеВнешнейОбработки.Получить();
            Если НЕ ДвоичныеДанные = Неопределено Тогда
                ДвоичныеДанные.Записать(ИмяФайла);
                ОбработкаВесов=ВнешниеОбработки.Создать(ИмяФайла);
                УдалитьФайлы(ИмяФайла);    
            КонецЕсли;
        КонецЕсли;
        Если ОбработкаВесов = Неопределено Тогда
            ТекстСообщения=Локализация.СтрШаблон("Обработка чтения весов для компьютера """"¤1¤"""" не задана",ИмяКомпьютера());
            ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения);
            Возврат -1;
        КонецЕсли;
        ФормаОбработкиВесов=ОбработкаВесов.ПолучитьФорму();
        
        //---------------------- заполнение параметров внешней обработка----------------
        
        ОбработкаВесов.КвоДатчиков =  ВО.КвоДатчиков;
        ОбработкаВесов.НомерВесов = ВО.Порт2;
        ОбработкаВесов.ФайлДрайвера = ВО.ФайлДрайвера;
        ОбработкаВесов.КаталогФайлаДрайвера = ВО.КаталогФайлаДрайвера;
        // датчик 1
        Если ВО.КвоДатчиков <= 2 Тогда
            ОбработкаВесов.Порт1 = ВО.Порт1;
            ОбработкаВесов.СкоростьПорт1 = ВО.СкоростьПорт1;
            ОбработкаВесов.КвоБитДаныхВБайтеПорт1 = ВО.КвоБитДанныхВБайтеПорт1;
            ОбработкаВесов.РежимПроверкиПарностиПорт1 = ВО.РежимПроверкиПарностиПорт1;
            ОбработкаВесов.КвоКонечныхБитПорт1 = ВО.КвоКонечныхБитПорт1;
            ОбработкаВесов.КодУстройстваПорт1 = ВО.КодУстройстваПорт1;
            ОбработкаВесов.АдресКонтролераВсетиПорт1 = ВО.АдресКонтролераВСетиПорт1;
            ОбработкаВесов.КлючРеестрацииКонтролераПорт1 = ВО.КлючРеестрацииКонтролераПорт1;
        КонецЕсли;
        // датчик 2
        Если ВО.КвоДатчиков = 2 Тогда
            ОбработкаВесов.Порт2 = ВО.Порт2;
            ОбработкаВесов.СкоростьПорт2 = ВО.СкоростьПорт2;
            ОбработкаВесов.КвоБитДаныхВБайтеПорт2 = ВО.КвоБитДанныхВБайтеПорт2;
            ОбработкаВесов.РежимПроверкиПарностиПорт2 = ВО.РежимПроверкиПарностиПорт2;
            ОбработкаВесов.КвоКонечныхБитПорт2 = ВО.КвоКонечныхБитПорт2;
            ОбработкаВесов.КодУстройстваПорт2 = ВО.КодУстройстваПорт2;
            ОбработкаВесов.АдресКонтролераВсетиПорт2 = ВО.АдресКонтролераВСетиПорт2;
            ОбработкаВесов.КлючРеестрацииКонтролераПорт2 = ВО.КлючРеестрацииКонтролераПорт2;
        КонецЕсли;
        //------------------------------------------------------------------------------
        
        Попытка
            
            Если ВО.ОткрыватьМодально Тогда
                Вес = ФормаОбработкиВесов.ОткрытьМодально(2);
            Иначе
                ОбработкаВесов.Сформировать();
                Вес=ОбработкаВесов.Вес;
            КонецЕсли;
            
        Исключение
            
            Сообщить("Весы не стабилизировались");
            
        КонецПопытки;
        
        МаксимальныйВес = ВО.МаксимальныйВес;
        
    #КонецЕсли
    
933 строка    Вес = ?(Вес < 0, 0, Вес);
    // проверка на ошибку
    Если Вес = 0 Тогда
        
        Сообщить("Обнаружен нулевой вес");
        Возврат -1;
                
    ИначеЕсли Вес = Неопределено Тогда        
        
        Возврат -1;
        
    Иначе
        
        Если ИНАГРО_Элеватор.ПолучитьПараметрУчетаЭлеватора(ТекущаяДата(), "КонтролироватьМаксимальнуюГрузоподъемностьВесов", Ложь, Организация) Тогда             
            Если Вес > МаксимальныйВес тогда                 
                Сообщить("Введённый вес превышает допустимую грузоподъемность весов - "+МаксимальныйВес);
                Вес = 0;
            КонецЕсли;            
        КонецЕсли;
        Если ИНАГРО_Элеватор.ПолучитьПараметрУчетаЭлеватора(ТекущаяДата(), "ВключитьИспользованиеКамерыВТерминальномРежиме", Ложь, Организация) Тогда
            СписокВО = Новый СписокЗначений;
            Если ЗначениеЗаполнено(ВО) Тогда
                Если ТипЗнч(ВО) = Тип("СправочникСсылка.ИНАГРО_ВнешнееОборудование") Тогда
                    Для Каждого СтрВо Из ВО.Камеры Цикл
                        Если ЗначениеЗаполнено(СтрВо.Камера) Тогда
                            СписокВО.Добавить(СтрВо.Камера);
                        КонецЕсли;                              
                    КонецЦикла;    
                    ПолучитьСнимок(Документ, ВидСобытия, СписокВО);
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
        Возврат Вес;
        
    КонецЕсли;
                                                                    
КонецФункции


Если кинул не в ту ветку, исправьте пожалуйста)


Сообщение отредактировал Vofka - 28.10.19, 9:07

sava1 Подменю пользователя
сообщение 25.10.19, 16:21
Сообщение #2

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

Цитата(yoj @ 25.10.19, 16:21) *
Вес = Неопределено;


попробуйте поставить 0

а само условие завернуть в попытку
при исключении принимать =0

andr_andrey Подменю пользователя
сообщение 27.10.19, 18:52
Сообщение #3

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 626
Спасибо сказали: 166 раз
Рейтинг: 130.8

Поставьте точку останова на строке и посмотрите значение переменной "Вес".
Если там белиберда, то возможно весовой модуль не настроен на необходимую версию протокола.


Signature
#define private public
enum BOOL { FALSE, TRUE, FILENOTFOUND } is made my day

awp Подменю пользователя
сообщение 27.10.19, 19:46
Сообщение #4

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 520
Спасибо сказали: 70 раз
Рейтинг: 51.3

Цитата(yoj @ 25.10.19, 16:21) *
Поменяли ПК, индикатор весовой, кабель. Пробовали менять скорость обмена.
Подскажите куда еще можно порыть?


Цитата(yoj @ 25.10.19, 16:21) *
выскакивает ошибка: (общийМодуль.ИНАГРО_ДирективыПрепроцессору.Модуль(933)): Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата)
Вес = ?(Вес<0, 0, Вес);


Может сменить место?


Signature
Бухгалтер - это не профессия! Это диагноз!

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 24.04.24, 18:22
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!