Впервые пощупал ТСД Клеверенс
У клиента была ошибка — при чтении документа пересчета из сервера ТСД в 1С выходила ошибка:
Текст XML содержит недопустимый символ в позиции 31 :
010**************2215!uHwrrEIgoB191*******Y8=
Инвентаризация была сделана большая, терять ее не хотели. Попросили разобраться.
Ошибка происходит при передаче структуры, сформированной методом СформироватьИЗаписатьДокументВБазу1С_ПоID с сервера на клиент:
Потому что в структуру попадает марка с недопустимой строкой, которая не считывается в 1С. Структура сложная:
Чтобы решить проблему, нужно обработать колонку ШК в массиве структур Результат.ДанныеДокументаMS.СтрокиФакт.
Каждая структура содержит колонки:
ЭтоТаблицаЗначений
КолонкиТаблицыЗначений
AdditionalKey
BindingKey
PlacementKey
ProductKey
view_PackingName
view_ProductName
ДокументОснования
ИдДокумента
Качество
КодСтроки
Алко
АлкоЕстьВФормах
АлкоКод
АлкоКодВ
АлкоКрепость
АлкоМарк
АлкоНаим
АлкоОбъем
АлкоСерия
АлкоСН
ДатаРозлива
ПроверкаЧМ
Справка2
БезМарки
Марка
МаркаИСМП
МаркаСтандарт
Маркировка
ЧитаемыйШтрихкод
ДатаПервогоСкана
ДатаПоследнегоИзменения
Закончен
ИдЕдиницыИзмерения
ИдИсходногоДокумента
ИмяНеизвестного
КоличествоМест
Назначение
Сканировано
ИдПользователя
ИмяПользователя
ДатаСерии
ИдСерии
ИмяСерии
КлючСерий
НомерСерии
Серия
ИдХарактеристики
ИмяХарактеристики
КлючХарактеристик
Характеристика
Цена
ЦенаПриемки
ИННВладельца
СтатусКМ
СтатусПроверкиМарки
НовШК
ОснШК
СН
ШК
EPC
GTIN
TID
ВводитьДопПоля
ВводитьНомерСтроки
ВводитьЦену
КодТовара
ШтрихкодБлока
ИдТовара
ИдУпаковки
КоличествоПлан
КоличествоФакт
ИдПервогоМеста
ИдВторогоМеста
ДатаРегистрации
СрокГодности
Переполнение
Недобор
ЕстьНедоборИлиПереполнение
Остаток
СвязаннаяСтрока
SSCC
ФормаА
КлючСерии
НаименованиеДляПоиска
ИндексСорт
Код
Штрихкод
Номер
Ид
Дополнительно
uid
createdBy
Номенклатура
Нужно удалять недопустимые символы, для этого в конец процедуры Транзит_ВызватьГлобальныйМетодНаСервере формы ЛокальныйКонтекст добавляю код:
&НаСервере Функция Транзит_ВызватьГлобальныйМетодНаСервере(АдресХранилища,АдресаПеременных=Неопределено,КоличествоЛидирующихЗапятых=0) ... //Осипов - обработка недопустимых символов 2024-03-22 Если СтруктураВызова.ИмяМетода = "СформироватьИЗаписатьДокументВБазу1С_ПоID" Тогда ; //Для точки останова Для Каждого Эл ИЗ Результат.ДанныеДокументаMS.СтрокиФакт Цикл Если НЕ Эл.Свойство("ШК") Тогда Продолжить; КонецЕсли; ШК = СокрЛП(Эл.ШК); Если ШК = "" Тогда Продолжить; КонецЕсли; НовыйШК = Осипов_УдалитьНедопустимыеСимволыXML(ШК); Если НовыйШК <> ШК Тогда Сообщить("Встречен недопустимый символ в штрих-коде: " + ШК + " товара: " + Эл.Номеклатура + " хар-ки: " + Эл.Характеристика + " проверьте, возможно будет пропущен!"); Эл.Шк = НовыйШК; КонецЕсли; Эл.Шк = СтрЗаменить(Эл.Шк, Символ(29), Символы.Таб); //Или можно очищать ШК, если он не нужен КонецЦикла; КонецЕсли; Возврат Транзит_ПоместитьЗначениеВХранилищеНаСервере(Результат); КонецФункции
Процедура удаления недопустимого символа:
Функция Осипов_УдалитьНедопустимыеСимволыXML(Стр) //Осипов - функция по удалению недопустимых символов Позиция = НайтиНедопустимыеСимволыXML(Стр, , ); Пока Позиция <> 0 Цикл Стр = Лев(Стр, Позиция-1) + Сред(Стр, Позиция+1); Позиция = НайтиНедопустимыеСимволыXML(Стр, , ); КонецЦикла; Возврат Стр; КонецФункции
Но 1С не считает символы GS недопустимыми, и все же они вызывают ошибку при передаче с сервера на клиент:
Поэтому явно заменяю их на символы Табуляция. Не знаю, насколько это корректно, можно было бы просто очищать колонку штрих-код, у клиента она не используется.
Прошу специалистов Клеверенс, если они читают эту статью, внести необходимые защиты от подобных ошибок. Возможно, в настройках ТСД или Сервера есть опция, чтобы не передавать коды в 1С, это тоже бы решило проблему.
Впервые столкнулся с Клеверенс, общая логика работы напоминает Data Mobile.
Среда: УТ 11.5.12.222. Клеверенс обработка 1.5.1.132 Core, 09.08.2023
Свежие комментарии