Автор: yoj 25.10.19, 15:21
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;
КонецЕсли;
КонецЕсли;
Если ИНАГРО_Элеватор.ПолучитьПараметрУчетаЭлеватора(ТекущаяДата(), "ВключитьИспользованиеКамерыВТерминальномРежиме", Ложь, Организация) Тогда
СписокВО = Новый СписокЗначений;
Если ЗначениеЗаполнено(ВО) Тогда
Если ТипЗнч(ВО) = Тип("СправочникСсылка.ИНАГРО_ВнешнееОборудование") Тогда
Для Каждого СтрВо Из ВО.Камеры Цикл
Если ЗначениеЗаполнено(СтрВо.Камера) Тогда
СписокВО.Добавить(СтрВо.Камера);
КонецЕсли;
КонецЦикла;
ПолучитьСнимок(Документ, ВидСобытия, СписокВО);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат Вес;
КонецЕсли;
КонецФункции
Если кинул не в ту ветку, исправьте пожалуйста)
Автор: sava1 25.10.19, 16:21
Цитата(yoj @ 25.10.19, 16:21)
Вес = Неопределено;
попробуйте поставить 0
а само условие завернуть в попытку
при исключении принимать =0
Автор: andr_andrey 27.10.19, 18:52
Поставьте точку останова на строке и посмотрите значение переменной "Вес".
Если там белиберда, то возможно весовой модуль не настроен на необходимую версию протокола.
Автор: awp 27.10.19, 19:46
Цитата(yoj @ 25.10.19, 16:21)
Поменяли ПК, индикатор весовой, кабель. Пробовали менять скорость обмена.
Подскажите куда еще можно порыть?
Цитата(yoj @ 25.10.19, 16:21)
выскакивает ошибка: (общийМодуль.ИНАГРО_ДирективыПрепроцессору.Модуль(933)): Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата)
Вес = ?(Вес<0, 0, Вес);
Может сменить место?