Начат

Ошибка после обновления

Нексофт 8 лет назад обновлен Чухно Евгений 8 лет назад 24

День добрый.

Конфигурация была доработана, а именно в документе добавлена своя ТЧ, в которую при сканировании данных фиксировалась некоторая информация.


Сегодня обновили ПО до версии (мобильный клиент / платформа): 2.7.1.82 / 3.0.0.2667

и после этого в добавленную ТЧ ничего не заносится. В логах при этом событии появляется ошибка:


MobileSMARTS.exe; (OperationAction) "1"; 13/07/2016 16:05:38.000 ERROR

ADDITION TEXT: AssignAction.Begin
MESSAGE: (0,31): error: (0,31): '(' expected
TYPE:Cleverence.Parsing.ParsingException
[STACK TRACE]
at Cleverence.Parsing.Parser.Parse(CodeReader codeReader)
at Cleverence.Parsing.Parser.Parse(String code)
at Cleverence.Parsing.CompiledCode.Compile(String expression)
at Cleverence.Warehouse.Compact.ActionSession.EvaluateCode(String code)
at Cleverence.Warehouse.Compact.AssignAction.Begin()
at Cleverence.Warehouse.Compact.ActionsApplication.StartApplication()
[STACK TRACE]
PROBLEMS: (0,31): error: (0,31): '(' expected

У нас перед добавлением строки в ТЧ идет парсинг строки, подумал ну может синтаксис поменялся, взял просто дописал, чтобы добавлялась строка без парсинга, но все равно строка не добавляется.


Код который работал до обновления ПО, все через присвоение:

НоваяСтрокаСерии = Document.SerialTovar.Rows.AddNew()

НоваяСтрокаСерии.NSProductId=SelectedProduct.Packing.Barcode

НоваяСтрокаСерии.NSSerial=Серия.Substring(4,12)


В таком варианте все равно строку не добавляет:

НоваяСтрокаСерии = Document.SerialTovar.Rows.AddNew()НоваяСтрокаСерии.NSProductId=SelectedProduct.Packing.Barcode


Что кардинально поменялось в платформе? В чем заключается причина? Заранее спасибо!

Добрый день!

Скиньте конфигурацию на support@cleverence.ru, посмотрим.

Попробуйте так: НоваяСтрокаСерии = Document.SerialTovar.AddNew()

Почему (мобильный клиент / платформа): 2.7.1.82 / 3.0.0.2667? Клиент не обновился до версии 3?

Имелось ввиду "платформа ДО(где работало) и После(где не работает)".

Так же могу добавит, что более не работает конструкция

ТаблицаСерий = Новый COMОбъект("Cleverence.Warehouse.DocumentTable");

ТаблицаСерий.Name = "SerialTovar";
Для каждого Стр из нкСерии Цикл

СтрокаТаблицы = Новый COMОбъект("Cleverence.Warehouse.Row");

СтрокаТаблицы.SetField("NSProductId", Строка(Стр.Штрихкод));

СтрокаТаблицы.SetField("NSGUID", Строка(Стр.НомИД));
СтрокаТаблицы.SetField("NSSerialFrom", Строка(Стр.ДиапазонС));
СтрокаТаблицы.SetField("NSSerialTo", Строка(Стр.ДиапазонПо));
СтрокаТаблицы.SetField("NON", Строка(Стр.Ном));

ТаблицаСерий.Rows.Add(СтрокаТаблицы);

КонецЦикла;

Вот такая ошибка

Выгрузка таблицы выполняется так:

КомДляMS = Новый COMОбъект("AddIn.Cl.TerminalConnector");

СписБаз = Новый Массив;
СписБаз.Добавить(СтрокаПодключения);
КомДляMS.Подключить(СписБаз,""); // подключение к базе

мДанные = Новый Массив(5);

мДанные[0] = "NSProductId";

мДанные[1] = "NSGUID";

мДанные[2] = "NSSerialFrom";

мДанные[3] = "NSSerialTo";

мДанные[4] = "NON";

Если НЕ
КомДляMS.НачатьВыгрузкуТаблицы("SerialTovar", мДанные, Истина) Тогда // Начинаем выгрузку, установив массив полей
Сообщить("Ошибка при начале выгрузки");
Возврат;
КонецЕсли;


Для каждого Стр из нкСерии Цикл

мДанные[0] = Строка(Стр.Штрихкод);

мДанные[1] = Строка(Стр.НомИД);

мДанные[2] = Строка(Стр.ДиапазонС);

мДанные[3] = Строка(Стр.ДиапазонПо);

мДанные[4] = Строка(Стр.Ном);

Ответ = КомДляMS.ДобавитьВВыгрузкуТаблицы(мДанные); //Добавляем порцию данных в выгрузку
Если НЕ Ответ Тогда
Возврат;
КонецЕсли;

КонецЦикла;

Ответ = КомДляMS.ЗавершитьВыгрузкуТаблицы(); //Завершаем выгрузку
Если НЕ Ответ Тогда
Сообщить("Не удалось закончить выгрузку таблицы");
Возврат;
КонецЕсли;


Спасибо, это помогло. А есть ли где-нибудь информация о методах в новой версии? Было бы неплохо.
Плюс перестала работать выгрузка дополнительной таблицы документа


ТаблицаСерий = Новый COMОбъект("Cleverence.Warehouse.DocumentTable");

ТаблицаСерий = ДокументТСД.Таблицы.ДобавитьЭлемент();
ТаблицаСерий.Name = "SerialTovar";
СтрокаТаблицы = Новый COMОбъект("Cleverence.Warehouse.Row");
Для Каждого Стр из МассивСерий Цикл
СтрокаТаблицы = ТаблицаСерий.Строки.ДобавитьЭлемент();
СтрокаТаблицы.SetField("NSProductId", Строка(Стр.Штрихкод));
СтрокаТаблицы.SetField("NSSerial", Строка(Стр.Регион));
СтрокаТаблицы.SetField("NSMarka1", Строка(Стр.ДиапазонС));
СтрокаТаблицы.SetField("NSMarka2", Строка(Стр.ДиапазонПо));
СтрокаТаблицы.SetField("NSGUID", Строка(Стр.НомИД));
КонецЦикла;
мДрайверТСД.ВыгрузитьДопТаблицу(ТаблицаСерий);

Справка по новой версии будет готова до конца недели.

Про выгрузку таблицы см. в примере выше: НачатьВыгрузкуТаблицы("SerialTovar", мДанные, Истина), ДобавитьВВыгрузкуТаблицы(мДанные), ЗавершитьВыгрузкуТаблицы()

К сожалению с выгрузкой доп. таблицы документа не вышло по этой схеме. Всячески пытался привязать этот пример к документу(ведь я выгружаю именно ЕГО доп. таблицу, а не общую таблицу, как в первом сообщении)


КомДляMS = Новый COMОбъект("AddIn.Cl.TerminalConnector");

КомДляMS = ДокументТСД.Таблицы.ДобавитьЭлемент();
КомДляMS.Name = "SerialTovar";
СписБаз = Новый Массив;
СтрокаПодключенияКСерверу = "192.168.1.10:9500";
СписБаз.Добавить(СтрокаПодключенияКСерверу);
КомДляMS.Подключить(СписБаз,""); // подключение к базе
мДанные = Новый Массив(5);
мДанные[0] = "NSProductId";
мДанные[1] = "NSSerial";
мДанные[2] = "NSMarka1";
мДанные[3] = "NSMarka2";
мДанные[4] = "NSGUID";
Если НЕ КомДляMS.НачатьВыгрузкуТаблицы("SerialTovar", мДанные, Истина) Тогда // Начинаем выгрузку, установив массив полей
Сообщить("Ошибка при начале выгрузки");
Возврат;
КонецЕсли;
Для каждого Стр из МассивСерий Цикл
мДанные[0] = Строка(Стр.Штрихкод);
мДанные[1] = Строка(Стр.Регион);
мДанные[2] = Строка(Стр.ДиапазонС);
мДанные[3] = Строка(Стр.ДиапазонПо);
мДанные[4] = Строка(Стр.НомИД);
Ответ = КомДляMS.ДобавитьВВыгрузкуТаблицы(мДанные); //Добавляем порцию данных в выгрузку
Если НЕ Ответ Тогда
Возврат;
КонецЕсли;
КонецЦикла;
Ответ = КомДляMS.ЗавершитьВыгрузкуТаблицы(); //Завершаем выгрузку
Если НЕ Ответ Тогда
Сообщить("Не удалось закончить выгрузку таблицы");
Возврат;

КонецЕсли;
Очень хотелось бы обещанного справочника по новым методам, или скорректируйте меня, пожалуйста, где я тут ошибся

Таблицу документа нужно выгружать вместе с самим документом, ТаблицаСерий = Новый COMОбъект("Cleverence.Warehouse.DocumentTable"); должно срабатывать.

Далее как у Вас и было, создание строк через Новый COMОбъект("Cleverence.Warehouse.Row") и добавление их в таблицу.

Проверьте, требуется ли обновление Mobile SMARTS в менеджере баз:


Запустите Зарегистрировать COM.bat из C:\Program Files\Cleverence Soft\Mobile SMARTS\Connectivity

Спасибо! Новую версию скачал. Но с подсказкой не вышло :) Вот такой микс из старой и новой версии сработал. Вместо DocumentTable сделал TerminalConnector.


МассивСерий = ПолучитьТаблицуСерий(ДокСсылка);

ТаблицаСерий = Новый COMОбъект("AddIn.Cl.TerminalConnector"); //NEW

//ТаблицаСерий = Новый COMОбъект("Cleverence.Warehouse.DocumentTable"); //OLD

ТаблицаСерий = ДокументТСД.Таблицы.ДобавитьЭлемент();
ТаблицаСерий.Name = "SerialTovar";
СтрокаТаблицы = Новый COMОбъект("Cleverence.Warehouse.Row");
Для Каждого Стр из МассивСерий Цикл
СтрокаТаблицы = ТаблицаСерий.Строки.ДобавитьЭлемент();
СтрокаТаблицы.SetField("NSProductId", Строка(Стр.Штрихкод));
СтрокаТаблицы.SetField("NSSerial", Строка(Стр.Регион));
СтрокаТаблицы.SetField("NSMarka1", Строка(Стр.ДиапазонС));
СтрокаТаблицы.SetField("NSMarka2", Строка(Стр.ДиапазонПо));
СтрокаТаблицы.SetField("NSGUID", Строка(Стр.НомИД));
КонецЦикла;

мДрайверТСД.ВыгрузитьДопТаблицу(ТаблицаСерий);

Если это таблица документа, мДрайверТСД.ВыгрузитьДопТаблицу(ТаблицаСерий); не нужно. ДокументТСД.Таблицы.ДобавитьЭлемент() добавляет таблицу в таблицы документа, при выгрузке документа с помощью мДрайверТСД.ВыгрузитьДокумент(ДокументТСД) таблица выгрузится вместе с документом.

Спасибо за указанную избыточность кода. Действительно все работает. Вопрос закрыт

После обновления до последней версии, появились очень существенные проблемы. Терминал начал зависать просто в меню.



MobileSMARTS.exe; 2114965434; 23/07/2016 14:40:46.000 Loaded assembly: Cleverence.Compact.Core.Mobilebase.DS5, Version=1.0.6046.32941, Culture=neutral
MobileSMARTS.exe; 2114965434; 23/07/2016 14:41:10.000 Cleverence.Compact.Core.dll version 3.0.0.139
MobileSMARTS.exe; 1041195310; 23/07/2016 14:44:08.000 Loaded assembly: Cleverence.Compact.Core.Mobilebase.DS5, Version=1.0.6046.32941, Culture=neutral
MobileSMARTS.exe; 1041195310; 23/07/2016 14:44:22.000 Cleverence.Compact.Core.dll version 3.0.0.139
MobileSMARTS.exe; 1041195310; 23/07/2016 14:47:22.000 CreateToolhelp32Snapshot error: 6
MobileSMARTS.exe; 1041195310; 23/07/2016 14:47:23.000 CreateToolhelp32Snapshot error: 8
MobileSMARTS.exe; SDF P2PQueue handle-monitoring thread; 23/07/2016 14:47:24.000 WARNING
ADDITION TEXT: RxMonitorHandle
MESSAGE: ThreadAbortException
TYPE:System.Threading.ThreadAbortException
[STACK TRACE]
at Cleverence.WindowsCE.Messaging.P2PMessageQueue.RxMonitorHandle()
[STACK TRACE]
EXCEPTIONSTATE: null


MobileSMARTS.exe; 1555700490; 23/07/2016 14:48:47.000 Loaded assembly: Cleverence.Compact.Core.Mobilebase.DS5, Version=1.0.6046.32941, Culture=neutral
MobileSMARTS.exe; 1555700490; 23/07/2016 14:49:09.000 Cleverence.Compact.Core.dll version 3.0.0.139
MobileSMARTS.exe; Exchange; 23/07/2016 14:49:51.000 ERROR
MESSAGE: OutOfMemoryException
TYPE:System.OutOfMemoryException
[STACK TRACE]

[STACK TRACE]

Начат

Уточните какую версию в браузере сейчас показывает сервер - v.3.0.0.2732?

И какая версия на ТСД сейчас установлена?

Server : Версия: v.3.0.0.2876
Client : 3.0.0.139

Добрый день,

Попробуйте удалить полностью папку MobileSMARTS с ТСД, установить приложение на ТСД заново, если будет ошибка пришлите файл errors.log с ТСД из папки приложения.

Хорошо. В данный момент довожу зарядку ТСД до приемлемого уровня и после попытаюсь пройти весь процесс сбора с нуля и сразу отпишусь тут.

Для теста взял средний заказ на 250 бутылок. 2 раза смог собрать без единой ошибки\зависания. На третьей попытке багтеста ПО повисло между считыванием серий. Лог

MobileSMARTS.exe; -610730042; 26/07/2016 13:41:36.000 ERROR

ADDITION TEXT: (OperationAction) "ВведемСерию" AcceptScannerScan
MESSAGE: NullReferenceException
TYPE:System.NullReferenceException
[STACK TRACE]
at Cleverence.Warehouse.Compact.MultilineFieldEditAction.ProcessBarcode(String barcode, Boolean hardware)
at Cleverence.Warehouse.Compact.VisualAction.OnScannerScan(BarcodeEventArgs e)
at Cleverence.Warehouse.Compact.VisualAction.Cleverence.Warehouse.Compact.IActivityAcceptor.AcceptScannerScan(BarcodeEventArgs e)
at Cleverence.Warehouse.Compact.OperationAction.Cleverence.Warehouse.Compact.IActivityAcceptor.AcceptScannerScan(BarcodeEventArgs e)
at Cleverence.Warehouse.Compact.ActionWorkflow.Scanner_Scan(BarcodeEventArgs e)
at Cleverence.Warehouse.Compact.ActionWorkflow.Scanner_Scan(ScanArgs e)
at Cleverence.Warehouse.Compact.BarcodeScanner.OnScan(String text, BarcodeType barcodeType)
at Cleverence.Warehouse.Compact.DS5BarcodeScanner.ScannerMessageWindow.WndProc(Message& msg)
at Microsoft.WindowsCE.Forms.MessageWindow._WndProc(Message& msg)
at Microsoft.AGL.Forms.EVL.EnterMainLoop(IntPtr hwnMain)
at System.Windows.Forms.Application.Run(Form fm)
at Cleverence.Warehouse.Compact.Start.Main2(String[] args)
at Cleverence.Warehouse.Compact.Start.Main(String[] args)
[STACK TRACE]


MobileSMARTS.exe; (OperationAction) "1"; 26/07/2016 13:45:04.000 ERROR
ADDITION TEXT: Подбор заказа: Действие (OperationAction) "ВведемСерию"
MESSAGE: ThreadAbortException
TYPE:System.Threading.ThreadAbortException
[STACK TRACE]
at System.Threading.EventWaitHandle.WaitOne()
at Cleverence.Warehouse.Compact.ActionsApplication.StartApplication()
[STACK TRACE]
EXCEPTIONSTATE: null


MobileSMARTS.exe; Подбор заказа mainApp; 26/07/2016 13:45:04.000 ERROR
ADDITION TEXT: Подбор заказа: Действие (OperationAction) "1"
MESSAGE: ThreadAbortException
TYPE:System.Threading.ThreadAbortException
[STACK TRACE]
at System.Threading.EventWaitHandle.WaitOne()
at Cleverence.Warehouse.Compact.ActionsApplication.StartApplication()
[STACK TRACE]
EXCEPTIONSTATE: null


MobileSMARTS.exe; SDF P2PQueue handle-monitoring thread; 26/07/2016 13:45:05.000 WARNING
ADDITION TEXT: RxMonitorHandle
MESSAGE: ThreadAbortException
TYPE:System.Threading.ThreadAbortException
[STACK TRACE]
at Cleverence.WindowsCE.Messaging.P2PMessageQueue.RxMonitorHandle()
[STACK TRACE]
EXCEPTIONSTATE: null

----
После восстановления документа(повторное открытие) - наша доп. таблица документа с сериями не сохранилась

Ситуация неоднозначная.

Вы можете проверить на типовом решении? Действии "ВведемСерию" в типовой конфигурации нет, и что с ним связано неизвестно. Если в типовой конфигурации ошибка не повториться, нужна будет ваша конфигурация, мы передадим ее программистам и они постараются проверить и воспроизвести ошибку.

У нас конкретно переписанная конфигурация под желания заказчика. Я могу хоть сейчас сбросить конфигурацию и сразу уточню, что в подборе заказа при запросе серии - отключена(временно) уникальность(чтобы можно было одну и ту же бутылку сканировать для теста много раз). Скидываю Cleverence.Warehouse.Environment на почту support@cleverence.ru с пометкой "Для программистов" и ссылкой на данный тред, так же дам Cleverence.Warehouse.Authorization , так как в сборе есть разделение на группы(первая инстанция - Сборщик, контроль и завершение - Кладовщик)

Последовательность действий до повторения ошибки опишите. И лучше пришлите папку базы целиком.

Сейчас сделаю. Письмо перешлю повторно

Спасибо за обновление, все в работе, тестируется на предмет зависаний.

Забыл упомянуть об одном моменте(минибаг, неприятный).

Когда завершается работа с документом (через Завершить или автоматическое завершение при полном фактическом сборе), и ПО переходит в основное меню , то "фокус\курсор" не становится на это меню. То есть если в этот момент нажать ESC(к примеру для смены пользователя или для выхода вообще), то ничего не произойдет. Чтобы это сработало, приходится кликнуть по любому пункту меню(пусть тот же Подбор Заказа), и потом выйти из него - после этого ESC работает.

В старых 2.7 версиях такого не было

Сервис поддержки клиентов работает на платформе UserEcho