Группа: Пользователи
Сообщений: 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); Иначе ОбработкаВесов.Сформировать(); Вес=ОбработкаВесов.Вес; КонецЕсли;
Исключение
Сообщить("Весы не стабилизировались");
КонецПопытки;
МаксимальныйВес = ВО.МаксимальныйВес;
#КонецЕсли
933 строка Вес = ?(Вес < 0, 0, Вес); // проверка на ошибку Если Вес = 0 Тогда
Сообщить("Обнаружен нулевой вес"); Возврат -1;
ИначеЕсли Вес = Неопределено Тогда
Возврат -1;
Иначе
Если ИНАГРО_Элеватор.ПолучитьПараметрУчетаЭлеватора(ТекущаяДата(), "КонтролироватьМаксимальнуюГрузоподъемностьВесов", Ложь, Организация) Тогда Если Вес > МаксимальныйВес тогда Сообщить("Введённый вес превышает допустимую грузоподъемность весов - "+МаксимальныйВес); Вес = 0; КонецЕсли; КонецЕсли; Если ИНАГРО_Элеватор.ПолучитьПараметрУчетаЭлеватора(ТекущаяДата(), "ВключитьИспользованиеКамерыВТерминальномРежиме", Ложь, Организация) Тогда СписокВО = Новый СписокЗначений; Если ЗначениеЗаполнено(ВО) Тогда Если ТипЗнч(ВО) = Тип("СправочникСсылка.ИНАГРО_ВнешнееОборудование") Тогда Для Каждого СтрВо Из ВО.Камеры Цикл Если ЗначениеЗаполнено(СтрВо.Камера) Тогда СписокВО.Добавить(СтрВо.Камера); КонецЕсли; КонецЦикла; ПолучитьСнимок(Документ, ВидСобытия, СписокВО); КонецЕсли; КонецЕсли; КонецЕсли; Возврат Вес;
Группа: Местный
Сообщений: 626
Спасибо сказали: 166 раз
Рейтинг: 130.8
Поставьте точку останова на строке и посмотрите значение переменной "Вес". Если там белиберда, то возможно весовой модуль не настроен на необходимую версию протокола.
#define private public enum BOOL { FALSE, TRUE, FILENOTFOUND } is made my day
Группа: Местный
Сообщений: 520
Спасибо сказали: 70 раз
Рейтинг: 51.3
Цитата(yoj @ 25.10.19, 16:21)
Поменяли ПК, индикатор весовой, кабель. Пробовали менять скорость обмена. Подскажите куда еще можно порыть?
Цитата(yoj @ 25.10.19, 16:21)
выскакивает ошибка: (общийМодуль.ИНАГРО_ДирективыПрепроцессору.Модуль(933)): Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата) Вес = ?(Вес<0, 0, Вес);
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!