Меню

Ошибка преобразования данных xdto текст xml содержит недопустимый символ

Просмотров 12к. Опубликовано 24 октября, 2018 Обновлено 24 октября, 2018

Ошибка преобразования данных XDTO: Текст XML содержит недопустимый символ.

На самом деле ошибка преобразования XDTO является не какой-то определенной ошибкой, а является большим семейством ошибок возникающих при работе одного из базовых механизмов платформы 1С. Этот механизм обеспечивает передачу данных между различными подсистемами платформы, при этом данные из внутреннего представления одной подсистемы преобразуются в текстовый формат XML, передаются в другую подсистему, и там  опять преобразуются во внутреннее представление. Ошибка преобразования XDTO говорит, что прямом или обратном преобразовании обнаружено какое-то несоответствие, из-за которого оно не может быть выполнено.

Частные причины ошибки

Существует очень много частных причин ошибки преобразования XDTO.  Сведения  доступные под кнопкой Подробно могут помочь в понимании частной причины, но далеко не всегда.

Прежде чем приступить к диагностике причины ошибки XDTO, следует выполнить стандартные профилактические операции над ИБ: очистить кэш, проверить состояния файла, выполнить тестирование ИБ.

Взаимодействие Клиента и Сервера

При запуске 1С в режиме Тонкий клиент взаимодействие клиента с ИБ происходит с использование преобразования XDTO, и если оно приводит к ошибке, то в тех случаях, когда это возможно, следует воспользоваться режим Толстый клиент.

Сырые и Неоригинальные решения

Если ошибка преобразования XDTO возникает в неоригинальной конфигурации или неоригинальной обработке, то возможно, причина в неоригинальном коде, который не был должным образом оттестирован. Это возможно и в оригинальных решения от 1С после установки сырых обновлений.

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

   Demon73

03.08.20 — 14:22

Столкнулись тут с проблемой при подключении сканера 2d и использовании его для «Честного знака». При сканировании выдаётся такое вот окошко с сообщением

Текст XML содержит недопустимый символ в позиции 31 :

010290000044725721agM%ssr<KkWNd91003A92wCLW0MHStmVDBEr6UQCj/ArKhJeMauq8N8AnGScx9l+WsENooD3GAXDhxkEe1X2Lia3GHG8nzmgJsswgYB0gog==;;

{ОбщийМодуль.ШтрихкодированиеИСКлиент.Модуль(87)}:    РезультатОбработкиШтрихкода = ШтрихкодированиеИСВызовСервера.ОбработатьШтрихкод(

{ОбщийМодуль.СобытияФормИСКлиент.Модуль(435)}:        ШтрихкодированиеИСКлиент.ОбработатьДанныеШтрихкода(

{Обработка.ПроверкаИПодборПродукцииИСМП.Форма.ПроверкаИПодбор.Форма(168)}:        Данные, ПараметрыСканированияКодовМаркировки());

по причине:

Ошибка при вызове серверного метода.

по причине:

Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.

по причине:

Ошибка преобразования данных XDTO:

Запись значения свойства ‘ret’:

    форма: Элемент

    имя: {http://v8.1c.ru/8.2/managed-application/modules}ret

по причине:

Ошибка преобразования данных XDTO:

Запись значения свойства ‘Value’:

    форма: Элемент

    имя: {http://v8.1c.ru/8.1/data/core}Value

по причине:

Ошибка при записи XDTO

по причине:

Текст XML содержит недопустимый символ в позиции 31 :

010290000044725721agM%ssr<KkWNd91003A92wCLW0MHStmV

Правда иногда он всё же сканирует нормально, а потом снова не может сканировать те же коды. Может кто-нибудь сталкивался?

https://sun9-52.userapi.com/c858524/v858524379/1eef11/gWFRD6NMw8s.jpg

   johnnik

1 — 03.08.20 — 14:27

Переключите сканер в режим COM-порта и обновите 1С до актуального релиза (не помешает)

   lodger

2 — 03.08.20 — 14:44

(0) 1с, со своими прирученными писателями драйверов для сканеров, не были готовы к спец.символам.

свежие костыли в свежих релизах есть. но в сущности, вам полный код с 31го знака и не нужон — можно его просто «потерять» по пути.

   Demon73

3 — 03.08.20 — 14:58

(1) Сканер работает в режиме COM-порта.

1С:Управление торговлей обновлена до последнего на данный момент релиза 11.4.12.81.

   Garykom

4 — 03.08.20 — 15:10

Найди проблеммные ШК, выясни что там за символы «в позиции 31» и проверь что в сканере стоит по заменам «непечатных».

Мануал от сканера найти с кучей настроечных ШК

   hhhh

5 — 03.08.20 — 15:12

(3) посмотрите отладчиком, какой конкретно символ ей не нравится, потом принимайте решение.

   Garykom

6 — 03.08.20 — 15:12

(4)+ Заменять символы можно аппаратно сканером или настройками драйвера, глянь их из 1C.

И да какой драйвер используется в 1С ? Я очень надеюсь что типовой 1С а не изврат от атол

   Demon73

7 — 03.08.20 — 16:24

(6) Можно подробнее про замену символов аппаратно сканером? Драйвер типовой от 1С.

   Garykom

8 — 03.08.20 — 17:28

(7) «Мануал от сканера найти с кучей настроечных ШК»

   Bad_Aleks

9 — 04.08.20 — 06:56

(0) У тебя в конце кода видишь точки с запятой? Скорее всего CSV-файл с кодами перед распечаткой открывали в Excel, после этого там такие символы появляются…

У нас на такие же коды ругается.

Пробуй заново распечатать. Из CSV файла почистить в конце строк эти символы (;;).

   Demon73

10 — 04.08.20 — 07:02

Переместился домой. С той же базой, но дома всё работает. Странно. Настройки те же.

   PDV64_

11 — 04.08.20 — 08:56

Добрый день.

У меня точно такая же проблема.

Розница 2.2., подчиненный узел РИБ.

Проанализировал код программы, неверный символ 29 (Символы(29)) — пустой символ.

Исключать недопустимые символы исправляя типовой код — не вариант.

У кого-нибудь возникли по этой проблеме мысли. Если на другом компе работает, может дело в настройках системы или, скажем в разрядности?

   Garykom

12 — 04.08.20 — 09:06

Мысль что драйвер 1С старый стоит, который пустые (по факту служебные) символы не выкидывает

   Garykom

13 — 04.08.20 — 09:08

   PDV64_

14 — 04.08.20 — 10:47

(12) (13) Жонглирование драйверами ничего не дало, может какой с Интернета качнуть?

Только какой?

У меня стоит драйвер по технологии 1С — Рарус. при этом драйвер не выбирается, если выбрать драйве стандарта 1С Совместимо — сканер не видится ни в сом ни в NativApi.

   Bad_Aleks

15 — 04.08.20 — 11:16

(14) Марка то точно корректна? Проверь через приложение  «Честный знак».

   trad

16 — 04.08.20 — 11:17

Символ(29) — это GS (group separator) в databar.

Передать этот символ в составе строки между клиентом и сервером не получается.

Я оборачиваю строку штрихкода в двоичные данные при передаче с клиента на сервер.

ПолучитьДвоичныеДанныеИзСтроки/ПолучитьСтрокуИзДвоичныхДанных

   trad

17 — 04.08.20 — 11:19

другой вариант:

разобрать ШК по GS еще на клиенте и передавать на сервер кусками

   Garykom

18 — 04.08.20 — 11:55

(16) Все там передается просто надо обернуть XMLСтрока

   Demon73

19 — 04.08.20 — 12:04

Самое интересное, что у меня сегодня всё работает даже на складе, хотя я ничего не делал, драйвера не менял, конфу не правил. Я уж половину склада отсканировал. Вчера пытался добраться, где ошибка возникает в конфигураторе, но контора закрылась и всех выгнали. Помню, что вроде строка со сканера не проходит проверку с имеющимися шаблонами кодов по длине.

   trad

20 — 04.08.20 — 12:16

(18) ну или так обернуть

факт, что строка не передается, поэтому не надо писать «Все там передается»

   Гений 1С

21 — 18.10.20 — 13:44

вот мне тоже интересно, код марки у меня сканером считывается 01…., а надо (01)….

Я конечно, напишу расширение, но как это делается вообще по-нормальному?

  

DrZombi

22 — 18.10.20 — 14:59

(10) Дома база локальная? Попробуй серверную развернуть 🙂

ИСТОЧНИК ОШИБОК:

Ситуации, когда возможно появление этой проблемы:
— Обмен в распределенной базе данных.
— Обновление конфигурации 1С.
— Импорт из внешних источников в 1С.

ПРОБЛЕМА:

{Форма.Управляемая.Форма(1000)}: Ошибка при вызове метода контекста (ПолучитьСписокНаСервере)
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства ‘v’:
форма: Элемент
имя: {http://v8.1c.ru/8.2/uobjects}v
по причине:
Текст XML содержит недопустимый символ в позиции 5 :
?{?{?U

ВАРИАНТЫ РЕШЕНИЯ:

&НаСервере
Перем RegExp;

&НаКлиенте
Процедура Старт(Команда)

АнализируемыйТекст = «§ | §§ «» | a86;a87;♥♦♣♠•88;75;89;a92;b34;b35;a88;58;68;U97;R52;¶§44;V16;↑↓→←W35;↔50;60; !
| ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
| АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя
| ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψω
| 0123456789
| ~!@#$%^&*(){}[]_-=+|/*:;.<>?,№ !
| ' | © | ® | µ | «» | ¤¢€£¥ | § | ½¼¾ | ¹²³ | °±×÷؃§ µ";

ТекстРезультат = СтартНаСервере(АнализируемыйТекст);

Сообщить(""+АнализируемыйТекст+"
|"+ТекстРезультат);

КонецПроцедуры

&НаСервере
Функция СтартНаСервере(Знач Текст)

RegEXP_Инициализация();

Если RegExp = Неопределено Тогда
Value = ИсключитьНеЧитаемыеСимволыИзСтроки(Текст);                 // Вариант "НЕТИПОВОЙ 1С".
Иначе
Value = ИсключитьНеЧитаемыеСимволыИзСтроки_REGEXP(Текст);    // Вариант "НЕТИПОВОЙ RegExp".
КонецЕсли;
//Value = ЗаменитьНедопустимыеСимволыXML(Value);                           // Вариант "ТИПОВОЙ 1С".

Возврат Value;

КонецФункции

ВАРИАНТ РЕШЕНИЯ "ТИПОВОЙ 1С":

// Функция (ТИПОВАЯ 1С), оставляющая в строке только допустимые для XML символы и цифры.
//
// Возвращаемое значение:
//    Строка.
//
&НаСервере
Функция ЗаменитьНедопустимыеСимволыXML(Знач Текст, СимволЗамены = " ")

Позиция = НайтиНедопустимыеСимволыXML(Текст);
Пока Позиция > 0 Цикл
ТекущийСимвол = Сред(Текст, Позиция, 1);
Если КодСимвола(ТекущийСимвол) = 21 Тогда    // Параграф.
Текст = СтрЗаменить(Текст, ТекущийСимвол, Символ(167));
Позиция = НайтиНедопустимыеСимволыXML(Текст);
Продолжить;
КонецЕсли;
Текст = СтрЗаменить(Текст, ТекущийСимвол, СимволЗамены);
Позиция = НайтиНедопустимыеСимволыXML(Текст);
КонецЦикла;

Возврат Текст;

КонецФункции

Достоинства:
- Максимально возможное сохранение содержимого исходной строки.
Исключаются только недопустимые для XML символы.
- Самая быстрая функция.
Недостатки:
- В итоговой строке могут присутствовать нечитаемье символы ("аброказаябры").

ВАРИАНТ РЕШЕНИЯ "НЕТИПОВОЙ RegExp":

// Функция (RegExp), инициализация.
//
// Возвращаемое значение:
//    Строка.
//
&НаСервере
Функция RegEXP_Инициализация()

// Читаемые символы.
// Латиница = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
// Кирилица = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя";
// Греческие = "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψω";
// Цифры = "0123456789";
// СпециальныеСимволы = "~
!@#$%^&*(){}[]_-=+|/*:;.<>?,№«» «;
ДвойнаяКавычка = «^»»»;
ОдинарнаяКавычка = «^’»;
АпострофОбратный = «^» + Символ(769);    // КодСимвола 769. Обратный для символа на букве «Ё».
АвторскоеПраво = «^©»;                             // КодСимвола 169. «Copyright» — латинская буква C в окружности — авторское право.
Зарезервировано = «^®»;                           // КодСимвола 174. «Registered» — латинская буква R в окружности — товарный знак.
ТоварныйЗнак = «^™»;                               // Верхний  индекс ТМ.
ШирокоеТире = «^—»;                                // КодСимвола 8212.
ДенежныеСимволы = «^¤^¢^€^£^¥»;         // Денежная единица, Цент, Евро, Фунт стерлингов, Иена или юань.
ДробныеСимволы = «^½^¼^¾»;                // Дроби: 1/2, 1/4, 3/4.
СимволыСтепени = «^¹^²^³»;                    // Степени: 1, 2, 3.
ПрочиеСимволы = «^°^±^×^÷^Ø^ƒ^µ^»+Символ(167);    // Градус, Плюс/Минус, Знак умножения, Знак деления, Диаметр, Знак функции, Микро, Параграф.

ЧитаемыеСимволы = «[«;
ЧитаемыеСимволы = ЧитаемыеСимволы + «^a-z^A-Z^а-я^А-Я^0-9^Ё^ё^Α-Ω^α-ω»;    // Латиница + Кирилица + Цифры + Греческие.
ЧитаемыеСимволы = ЧитаемыеСимволы + «^~^^!^@^#^$^%^^^&^*^(^)^{^}^[^]^_^-^=^+^\^|^/^*^:^;^.^^?^,^№^«^»^ ";    // СпециальныеСимволы.
ЧитаемыеСимволы = ЧитаемыеСимволы + ДвойнаяКавычка + ОдинарнаяКавычка + АпострофОбратный + АвторскоеПраво + Зарезервировано +ТоварныйЗнак;
ЧитаемыеСимволы = ЧитаемыеСимволы + ШирокоеТире + ДенежныеСимволы + ДробныеСимволы + СимволыСтепени + ПрочиеСимволы;
ЧитаемыеСимволы = ЧитаемыеСимволы + "]";

ПолучитьCOMОбъектREGEXP(ЧитаемыеСимволы, Ложь, Истина, Ложь);

КонецФункции

// СПАСИБО Evg-Lylyk: http://infostart.ru/public/64222/
//
&НаСервере
Процедура ПолучитьCOMОбъектREGEXP(Шаблон, ИскатьДоПервогоСовпадения = Истина, МногоСтрок = Истина, ИгнорироватьРегистр = Истина)

Если RegExp = Неопределено Тогда   // Нужна инициализация.
Попытка
RegExp = Новый COMОбъект("VBScript.RegExp");    // Создаем объект для работы с регулярными выражениями.
Исключение
RegExp = Неопределено;
Возврат;
КонецПопытки;
КонецЕсли;

// Заполняем данные.
RegExp.MultiLine = МногоСтрок;                              // Истина — текст многострочный, Ложь — одна строка.
RegExp.Global = НЕ ИскатьДоПервогоСовпадения;   // Истина — поиск по всей строке, Ложь — до первого совпадения.
RegExp.IgnoreCase = ИгнорироватьРегистр;           // Истина — игнорировать регистр строки при поиске.
RegExp.Pattern = Шаблон;                                     // Шаблон (регулярное выражение).

КонецПроцедуры

// Функция (НЕТИПОВАЯ REGEXP), оставляющая в строке только читаемые(допустимые) для XML символы и цифры.
//
// Возвращаемое значение:
//    Строка.
//
&НаСервере
Функция ИсключитьНеЧитаемыеСимволыИзСтроки_REGEXP(Знач АнализируемыйТекст, ЗаменятьСимволы = Истина, СимволЗамены = " ")

Если НЕ RegExp.Test(АнализируемыйТекст) Тогда
Возврат АнализируемыйТекст;
КонецЕсли;

// Формирование результирующей строки.
ИтоговаяСтрока = АнализируемыйТекст;

РезультатАнализаСтроки = RegExp.Execute(АнализируемыйТекст);

Для Каждого Результат ИЗ РезультатАнализаСтроки Цикл
ТекущийСимвол = Результат.Value;
Если КодСимвола(ТекущийСимвол) = 21 Тогда    // Параграф.
ИтоговаяСтрока = СтрЗаменить(ИтоговаяСтрока, ТекущийСимвол, Символ(167));
Продолжить;
КонецЕсли;
Если ЗаменятьСимволы Тогда
// Замена символа в строке.
ИтоговаяСтрока = СтрЗаменить(ИтоговаяСтрока, ТекущийСимвол, СимволЗамены);
Иначе
// Сокращение строки на символ.
ИтоговаяСтрока = СтрЗаменить(ИтоговаяСтрока, ТекущийСимвол, "");
КонецЕсли;
КонецЦикла;

Возврат ИтоговаяСтрока;

КонецФункции

Достоинства:
- Остаются только визуализируемые, понятно читаемые допустимые для XML символы.
- Сопоставима по скорости с функцией ЗаменитьНедопустимыеСимволыXML (~ 0.5%).
Недостатки:
- Отдельные, возможно, необходимые символы могут исключаться.
(необходимо дополнить переменную ЧитаемыеСимволы).

ВАРИАНТ РЕШЕНИЯ "НЕТИПОВОЙ 1С":

// Функция (НЕТИПОВАЯ 1С), оставляющая в строке только читаемые(допустимые) для XML символы и цифры.
//
// Возвращаемое значение:
//    Строка.
//
&НаСервере
Функция ИсключитьНеЧитаемыеСимволыИзСтроки(Знач АнализируемыйТекст, ЗаменятьСимволы = Истина, СимволЗамены = " ")

// Читаемые символы.
Латиница = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
Кирилица = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя";
Греческие = "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψω";
Цифры = "0123456789";
СпециальныеСимволы = "~
!@#$%^&*(){}[]_-=+|/*:;.<>?,№«» «;
ДвойнаяКавычка = «»»»;
ОдинарнаяКавычка = «‘»;
АпострофОбратный = «L9;»;           // КодСимвола 769. Обратный для символа на букве «Ё».
АвторскоеПраво = «©»;             // КодСимвола 169. «Copyright» — латинская буква C в окружности — авторское право.
Зарезервировано = «®»;           // КодСимвола 174. «Registered» — латинская буква R в окружности — товарный знак.
ТоварныйЗнак = «™»;               // Верхний  индекс ТМ.
ШирокоеТире = «—»;                // КодСимвола 8212.
ДенежныеСимволы = «¤¢€£¥»;  // Денежная единица, Цент, Евро, Фунт стерлингов, Иена или юань.
ДробныеСимволы = «½¼¾»;    // Дроби: 1/2, 1/4, 3/4.
СимволыСтепени = «¹²³»;         // Степени: 1, 2, 3
ПрочиеСимволы = «°±×÷؃µ»+Символ(167);    // Градус, Плюс/Минус, Знак умножения, Знак деления, Диаметр, Знак функции, Микро, Параграф.

ЧитаемыеСимволы = Латиница + Кирилица + Греческие + Цифры + СпециальныеСимволы + ШирокоеТире
+ ДвойнаяКавычка + ОдинарнаяКавычка + АпострофОбратный + АвторскоеПраво + Зарезервировано + ТоварныйЗнак
+ ДенежныеСимволы + ДробныеСимволы + СимволыСтепени + ПрочиеСимволы;

// Формирование результирующей строки.
ИтоговаяСтрока = «»;
Для НомерСимвола = 1 ПО СтрДлина(АнализируемыйТекст) Цикл
ТекущийСимвол = Сред(АнализируемыйТекст, НомерСимвола, 1);
// Заменяемые символы. Системный набор значений: «Символы»:
Если ТекущийСимвол = Символы.ВК ИЛИ ТекущийСимвол = Символы.ВТаб ИЛИ ТекущийСимвол = Символы.НПП
ИЛИ ТекущийСимвол = Символы.ПС ИЛИ ТекущийСимвол = Символы.ПФ ИЛИ ТекущийСимвол = Символы.Таб Тогда
ТекущийСимвол = СимволЗамены;
КонецЕсли;
Если КодСимвола(ТекущийСимвол) = 21 Тогда    // Параграф.
ТекущийСимвол = Символ(167);
КонецЕсли;
Если Найти(ЧитаемыеСимволы, ТекущийСимвол) > 0 Тогда
ИтоговаяСтрока = ИтоговаяСтрока + ТекущийСимвол;
Иначе
Если ЗаменятьСимволы Тогда
ИтоговаяСтрока = ИтоговаяСтрока + СимволЗамены;
Иначе
// Сокращение строки на символ.
КонецЕсли;
КонецЕсли;
КонецЦикла;

Возврат ИтоговаяСтрока;

КонецФункции

Достоинства:
— Остаются только визуализируемые, понятно читаемые допустимые для XML символы.
Недостатки:
— Отдельные, возможно, необходимые символы могут исключаться.
(необходимо дополнить переменную ЧитаемыеСимволы).
— Медленнее предыдущих на 30 %.

В целях недопущения искажений текста в ссылках на скачивание находится обработка с текстом функций.

Автор nataliya_vl, 07 ноя 2017, 12:12

0 Пользователей и 1 гость просматривают эту тему.

На клиенте имею информацию о документе, в том числе строку — содержимое файла, формат файла не ограничен.
При попытке создать документ информационной базы и загрузить файл в хранилище возникает ошибка ( обычно для PDF):
«Ошибка при записи XDTO
по причине:
Текст XML содержит недопустимый символ в позиции».
Я знаю, что символ недопустимый для XML, но изменить содержимое файла не могу, как обойти ограничение?
На сервере строку преобразую в двоичные данные и сохраняю в хранилище как файл.


Есть разные варианты. Все зависит от того, зачем вам содержимое.
Можно:

  • Использовать base64
  • Экранировать символы, например, заменой «<» на «&lt;»

Тип поля XDTO какой? 


Вопрос решился преобразование в двоичные данные на клиенте и передачей их на сервер.


Можно было сделать поле типа base64binary в XDTO.


Теги:

  • Форум 1С

  • Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4

  • Конфигурирование, программирование в 1С Предприятие 8

  • Передать на сервер строку с недопустимым символом (для XML) как?

Похожие темы (5)

Рейтинг@Mail.ru

Rambler's Top100

Поиск

Перейти к содержимому

Настройка 1С

Решения по использованию программ 1С. Техподдержка. Сопровождение. Услуги программистов.

Ситуация у клиента: при сканировании QR-кода ЧестныйЗнак программа 1С показывает ошибку. Конфигурация 1С УНФ 1.6.25.166, сканер Mertech CL-2210. Текст ошибки:

«Текст XML содержит недопустимый символ в позиции 31 :<считываемый_код>».

Ошибка при сканировании

Было сделано несколько подходов для поиска решения. В том числе проверили обновление конфигурации УНФ до актуального релиза — но дело было не в этом.

Также была гипотеза, что со сканером ШК все хорошо, а проблема в символе конкретного кода. Неа, мимо.

При проверке оказалось — ошибка возникала при сканировании любых штрихкодов. Именно в этом была причина.

Решение для частного случая

Для учетной системы требуется, чтобы передаваемый ШК был не длиннее 31-го символа. Поэтому решение заключается в настройке сканера — обрезке передаваемого кода до 31 символа.

Применительно к сканеру Mertech CL-2210 P2D необходимо активировать настройку с картинки:

31 символ

✅ Таким образом, указанная ошибка решается ограничением 31 символа.

__________
Если не получается или требуется дополнительная поддержка, наши программисты 1С готовы помочь → +7-911-500-10-11

<?php // Полная загрузка сервисных книжек, создан 2023-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='

Related Posts

  • Получение логина и пароля техподдержки 1С из базы
  • Класс для вывода отчета в ExcelКласс для вывода отчета в Excel
  • Счет-фактура для УПП
  • Библиотека классов для создания внешней компоненты 1С на C#
  • Акт об оказании услуг (со скидками) — внешняя печатная форма для Управление торговлей 11.1.10.86Акт об оказании услуг (со скидками) — внешняя печатная форма для Управление торговлей 11.1.10.86
  • Прайс-лист с артикулом в отдельной колонке

25 Comments

  1. (1) CagoBHuK,

    На мой взгляд — воспользоваться типовым вариантом предложенным в статье.

    Reply

  2. (1) Соглашусь. Для больших объёмов регулярные выражения быстрее будут, чем посимвольный обход.

    Reply

  3. (2) Видимо, Вы не работали с большими объемами данных. При файлах более 100 мегабайт Ваша обработка встанет колом.

    Reply

  4. (4) CagoBHuK,

    Да. Если база большая и «шерстить» все — это медленно, но верно.

    Издержки посимвольного обхода.

    Reply

  5. (5) А с каких пор регулярные выражения — это неверно?

    Reply

  6. (6) CagoBHuK,

    Регулярные выражения не рассматривал, надо попробовать.

    Reply

  7. (6) CagoBHuK,

    СПАСИБО. ТОЖЕ ВЕРНО!

    Reply

  8. (8) Не за что. Приятно, когда люди прислушиваются к твоим словам.

    Reply

  9. (9) CagoBHuK,

    Еще раз спасибо. Добавил функцию на RegExp.

    Reply

  10. У меня такие ошибки выпадали после импорта из 1С 7.7

    Как правило, в процессе работы вываливались конкретные справочники и элементы, в которых ошибка.

    И вываливалось при поиске или отборах. Если тупо колесиком до нужного пункта докрутить, то не вываливалось.

    Открывал карточку, видел в поле среди букв какой-нибудь спецсимвол. Ручками исправлял, и удалял файл индексации.

    После этого вопрос решался.

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

    Reply

  11. Спабсибо! Полезная информация!

    Reply

  12. (11) OrsoBear,

    СПАСИБО.

    Да, в семерке при экспорте-импорте из ТиС в Бухгалтерию неоднократно встречалась проблема с недопустимыми символами XML. И тоже ручками исправлял.

    На 8-ке решил, что надо по-другому …

    Reply

  13. Вопрос — для вебсервисов, если передаются наименования — нужно ли их проверять на недопустимые символы ?

    И как со знаками «<«, «>» ?

    Reply

  14. (14) kiruha,

    По опыту работы с 1С 7.7, а теперь и 1С 8.Х, я пришел к такому выводу:

    Все, что приходит из внешнего источника данных в рабочую базу обязательно должно проходить проверку.

    В данном случае речь идет о чистке строковых значений для реквизитов 1С.

    Символы «<» (меньше) или «>» (больше) — в строковом реквизите это вполне допустимый символ, если это не запрещено в конкретной конфигурации.

    Reply

  15. Спасибо большое — буду проверять.

    Знак «>» в xml знак тэга. Я так понял — не влияет при экспорте ?

    Reply

  16. «Если звезды зажигают, значит это кому-нибудь нужно»

    А что если недопустимые символы очень даже нужны? А мы их просто берем и удаляем…

    Столкнулись с ситуацией при обмене. Строковый реквизит стандартным средством СоздатьЗаписьСообщения выдает ошибку из-за символов с кодом 01. В базе таковых 2000+ записей. Можно, конечно, все это просмотреть и принять решение по каждому. Но дальше же снова будут появляться такие документы. Нет уверенности, что удаление будет показано всем.

    Проблемы можно было бы избежать, кодируй 1С значение банальным base64. Но нет, версия 8.2 лепит как есть.

    Кто и как ходил путем «неудаления»?

    Reply

  17. (16) kiruha, вроде как нормально конвертирует, ошибок нет

    Данные реквизита:

    Сообщение обмена:

    <ДругоеНазвание>выапвыапвы<style>[]{}</ДругоеНазвание>

    Reply

  18. Спасибо,очень полезная штука, а главное актуальная

    Reply

  19. что то у меня не запускается эта обработка, под тонким вот такое сообщаение и все., а под толстым вообще не открывается. что может быть. Управление торговлей, редакция 11.1 (11.1.2.6)

    § | §§ » | ☺☻♥♦♣♠•◘○◙♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !

    ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

    АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщ­ъыьэюя

    ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψω

    0123456789

    ~`!@#$%#k8SjZc9Dxk&*(){}[]_-=+|/*:;.<>?,№ !

    ‘ | © | ® | µ | «» | ¤¢€£¥ | § | ½¼¾ | ¹²³ | °±×÷؃§ µ

    § | §§ » | § ! ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщ­ъыьэюя ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψω 0123456789 ~`!@#$%#k8SjZc9Dxk&*(){}[]_-=+|/*:;.<>?,№ ! ‘ | © | ® | µ | «» | ¤¢€£¥ | § | ½¼¾ | ¹²³ | °±×÷؃§ µ

    Reply

  20. Спасибо за код помогло.

    Reply

  21. Подскажите по 7.7 есть аналогичный вариант?

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Ошибка преобразования данных xdto текст false
  • Ошибка при активации виндовс 10 0xc004e016