75 / 71 / 21 Регистрация: 21.08.2015 Сообщений: 335 |
|
1 |
|
10.10.2016, 20:27. Показов 17211. Ответов 3
Доброго времени. Есть конфигурация управление торговлей, есть обработка ВыгрузкаЗагрузкаДанныхXML(Стандартная). Все прекрасно работало и тут не с того не с сего при выгрузке начала выдавать ошибку: {Обработка.УниверсальныйОбменДаннымиXML(11563)}: Ошибка при вызове метода контекста (Прочитать) База скульная.
__________________
0 |
Заблокирован |
|
13.10.2016, 17:08 |
2 |
Extra content at the end of the document проверьте этот документ на валидность или просто откройте его чем -либо и посмотрите что в нем не так Добавлено через 2 минуты
Extra content at the end of the document проверьте этот документ на валидность или просто откройте его чем -либо и посмотрите что в нем не так
0 |
75 / 71 / 21 Регистрация: 21.08.2015 Сообщений: 335 |
|
15.10.2016, 13:07 [ТС] |
3 |
РешениеПроблему решил, как оказалось обработка была не совсем стандартной. Пришлось ее всю разобрать по кирпичикам и оказалось, что правила подтягиваются не из программы, а из макета, где они просто текстом написаны. Нашел типовые правила, подправил их в КД и все заработало.
2 |
0 / 0 / 0 Регистрация: 27.02.2017 Сообщений: 5 |
|
06.02.2018, 14:46 |
4 |
MonteKristo, не поделитесь пожалуйста исправленной обработкой переноса?
0 |
Содержание:
1. XML – расширяемый язык разметки
2. Устранение Ошибки разбора XML в 1С
3. «Обход» Ошибки разбора XML в 1С
1. XML – расширяемый язык разметки
В данной статье речь пойдёт о причинах возникновения фатальной ошибки «Ошибка разбора XML» и способах устранения данной неполадки. Также будет дана инструкция не по устранению, но «обходу» ошибки, то есть действиям на опережение.
XML (с английского – extensible markup language – расширяемый язык разметки) – это язык разметки, который рекомендует Консорциум Всемирной паутины. Обычно язык разметки XML служит для описания документации, соответствующего типа, а также описывает действия соответствующих процессоров. Расширяемый язык разметки имеет довольно простой синтаксис, поэтому используется по всему миру, чтобы создавать и обрабатывать документацию программным способом. Он создавался именно для использования в Интернете. XML назвали именно расширяемым языком разметки, так как в нём нет фиксации разметки, которая содержится внутри документа, а именно: программист может создавать любую разметку, а ограничения будут встречаться лишь в синтаксисе.
2. Устранение Ошибки разбора XML в 1С
«Ошибка разбора XML» возникает исключительно в тонком клиенте 1С. Также стоит отметить, что «Ошибка разбора XML» также довольна схожа с ошибкой по формату потока, которая возникает в толстом клиенте. Обычно в 1С «Ошибка разбора XML» возникает по причине наличия кэша метаданных. И если очистить кэш, то ошибка будет устранена. Выглядит окно с ошибкой, а также окно с комментариями от технической поддержки следующим образом:
Рис. 1 Окно Ошибки разбора XML в 1С
XML данные читаются по потокам, так что в каждый из моментов времени объект «сосредоточен» в некотором узле XML. Из-за этого также может возникать фатальная ошибка «Ошибка разбора XML». Для того чтобы её устранить, можно вызвать функцию «ИсключениеЧтенияXml», как показано на скриншоте примера ниже:
Рис. 2 Вызов функции ИсключениеЧтенияXML для устранения Ошибки разбора XML в 1С
3. «Обход» Ошибки разбора XML в 1С
Данные два способа (очистка кэша метаданных и функция «ИсключениеЧтенияXml») – не все возможные варианты устранения ошибки разбора XML. Далее рассмотрим нестандартный подход, который позволит избежать ошибки еще до её возникновения.
Для наглядности будем работать в конфигурации 1С:Бухгалтерия предприятия, одной из наиболее распространенных программ фирмы 1С. У многих людей, которые пользуются программой 1С:Отчётность появляются неполадки при попытках открыть данные/файлы от налоговой. Чтобы открыть такой файл повторяем следующие действия:
· Переходим по пути: «Настройки 1С:Отчётности → Журнал обмена с контролирующими органами», как показано на скриншоте ниже:
Рис. 3 Настройка 1С Отчетности
· Далее кликаем на «Запросы» и выделяем ту выписку, которую не было возможности открыть из-за ошибки, как продемонстрировано на скриншоте ниже:
Рис. 4 Выбор выписки с Ошибкой разбора XML в 1С
· Обращаем внимание на стадию отправки, которая располагается внизу этого сообщения, и кликаем два раза на зелёный круг:
Рис. 5 Стадия отправки документа с Ошибкой разбора XML в 1С
· Появляется транспортное сообщение, в нём кликаем на «Выгрузить» и выбираем папку, куда необходимо провести выгрузку, после чего сохраняем данный файл. Пробуем открыть его, при помощи любого из графических редакторов, который может поддерживать формат PDF, как показано на скриншоте ниже:
Рис. 6 Результат обхода Ошибки разбора XML в 1С
· Всё успешно открылось, а ошибка даже не успела возникнуть.
Специалист компании «Кодерлайн»
Айдар Фархутдинов
Даже на примере общедоступного вебсервиса. По легко получаю описание в xml в браузере. Если пытаюсь на основании этого wsdl создать WSСсылка получаю от 1С-ки отлуп: Ошибка разбора XML: — [1,1] Фатальная ошибка extra content at the end of the document SystemID: Если создавать WSСсылку на основании xml, сохраненного из браузера, то создается, все читаемо. Далее все что можно сделать используя это описание — делается: прокси создается, типы параметров для разных функций определяются, т.е. xml рабочий. Но как только следует обращение к самому вебсервису — то фигвам. Ошибка разбора XML: — [1,1] Фатальная ошибка: Document is empty 1С 8.2.19.130 Интернеты читал, схожие, а то и идентичные случае описываются, решения увы не на нашел.
Вобщем, вылечил. Если кому-то интересно — ниже описание. Изначальная проблема была с проксей. После отключения прокси — получилось импортировать wsdl в 1С-ку напрямую, без использования файла. Но дальше, интереснее… Использовал следующий код: (честно спертый отсюда: ) До последней строчки все отрабатывало, на последней дропалось, со знакомой ошибкой: Ошибка разбора XML: — [1,1] Фатальная ошибка: Document is empty Разбор пакетов, перехваченных фидлером натолкнул на мысль упростить код до: И о чудо! Оно заработало. Т.е. когда я отдавал вебсервису в качестве аргумента функции параметр, созданный в рамках объектной модели вебсервиса, 1С создавало кривой пакет, когда начал передавать просто сериализуемый тип данных — все заработало. Отлично, только вопрос, что делать если придется передавать в качестве аргумента тип данных, создать который в 1с нельзя (ну или как выше создать можно, но только в объектной модели вебсервиса)? О сколько нам открытий чудных готовит просвещенья дух.. Готов к конструктивной и не очень критике)
Импортировать WSDL-описание в конфигурацию — не айс. Не будешь же ты каждый раз при изменении этого описания обновлять конфигурацию. Лучше используй создание WS-определения по веб-адресу файла с WSDL-описанием
зато можно структуру типов посмотреть
Нуу… ты, наверное, имел в виду _в удобном виде_ посмотреть (и без лишних телодвижений). Если конфу не жалко снимать с замка (или иметь под рукой отдельную для этого дела) — не спорю. Но также есть и всевозможные xml-просмотрщики, помогающие с просмотром структуры. Да и в отладке щелкать по «плюсикам» объектов XDTO никто не отменял
ты параметр смотри как у функции называется и его ищи
Тэги:
Комментарии доступны только авторизированным пользователям
Я уже как-то писал о муках разработки web service (веб сервисов) на C# (.NET) для 1С. Продолжаем разбираться с проблемами.
При разработке веб сервиса на C# под MS Visual Studio для 1С 8.2 столкнулись с невразумительной ошибкой. В качестве сервера — Microsoft-IIS/8.5. Поиск решения занял немало времени. 🙁 Но обо всем по порядку.
Название вызываемого метода веб сервиса — BarcodeFontIsInstalled. В качестве единственного аргумента передается строка. Ошибка выглядит так:
{Форма.Форма.Форма(22)}: Ошибка при вызове метода контекста (BarcodeFontIsInstalled)
НоваяСтрока = Прокси.BarcodeFontIsInstalled(WSПараметр);
по причине:
http://tempuri.org/Ошибка вызова операции сервиса: {
}:BarcodeWebService:BarcodeFontIsInstalled()
по причине:
Неизвестная ошибка. Ошибка разбора XML: - [1,1]
Фатальная ошибка:
Extra content at the end of the document
по причине:
Ошибка разбора XML: - [1,1]
Она ни о чем не говорит, поскольку 1С безбожно переврала то, что вернул IIS.
Обращение из 1С к web service (веб сервису)
Вызов метода из 1С производился как описано в статье. Код веб сервиса в C#:
using
System.Web;
using
System.Web.Services;
using
System.Xml.Serialization;
namespace
BarcodeWebService
{
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(
false
)]
public
class
BarcodeWebService : System.Web.Services.WebService
{
[WebMethod]
public
bool
BarcodeFontIsInstalled(
string
fontName)
{
return
BarcodeUtils.IsFontInstalled(fontName);
}
}
}
Замечу, что вызов проходил через BarcodeWebServiceSoap — т.е. SOAP версии 1.1. BarcodeWebServiceSoap12 — соотвественно для работы через SOAP 1.2. 1C действительно меняет обращение к сервису, если вместо BarcodeWebServiceSoap указать BarcodeWebServiceSoap12, проверено опытным путем. 🙂
Вызов в 1С выглядел таким образом:
Прокси = WSСсылки.WSBarcodeService.СоздатьWSПрокси(
http://tempuri.org/"
"
,
"BarcodeWebService"
,
"BarcodeWebServiceSoap"
);
ТипWSПараметра = Прокси.ФабрикаXDTO.Пакеты.Получить(
http://tempuri.org/"
"
).Получить(
"BarcodeFontIsInstalled"
);
WSПараметр = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра);
WSПараметр.fontName =
"Code 128"
;
НоваяСтрока = Прокси.BarcodeFontIsInstalled(WSПараметр);
Все делаем «по учебнику» но так не работает. 🙁
Отладка обращений 1С к web service (веб сервису)
Поскольку в 1С не понятно как отлаживать что-то в части работы с веб-сервисами, обращаемся за помощью к Fiddler, который покажет как-же 1С обращается к разработанному на C# web service:
Бросается в глаза странный кусок XML:
Зачем 1С сгенерировал для такого простого аргумента такую вложенную иерархию fontName не понятно. Ответ веб сервиса (MS IIS) на такую конструкцию:
HTTP/1.1 400 Bad Request
Cache-Control: private
Content-Type: text/xml; charset=utf-8
Server: Microsoft-IIS/8.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Wed, 14 Oct 2015 10:19:14 GMT
Content-Length: 0
Как видно по ответу, ошибка выдаваемая 1С рядом не лежала с тем, что на самом деле вернул IIS, а он вообще не вернул XML, сообщив, что запрос «кривой» (HTTP/1.1 400 Bad Request).
Чтобы узнать какой request должен быть, пишем пару строк на C#:
BarcodeWebService.BarcodeWebService svc =
new
BarcodeWebService.BarcodeWebService();
checkBox1.Checked = svc.BarcodeFontIsInstalled(
"Code 128"
);
и запустив Fiddler видим какой простой и красивый request получается:
Расстраиваемся, поскольку ситуация выглядит тупиковой, но пытаемся найти решение.
Перехват обращений из 1С к web service (веб сервису) cbr.ru
Обратимся к исходной статье и посмотрим как выглядит request к web service (веб сервису) www.cbr.ru. Код 1С описан в статье, а request будет таким:
В данном случае все красиво, как при обращении из кода C#:
CBRWebService.DailyInfo info =
new
CBRWebService.DailyInfo();
DataSet ds = info.GetCursOnDate(DateTime.Now);
Разбираться в WSDL, который генерирует веб сервис «Центробанка» и разработанный мною на .NET — дело неблагодарное, тем более, что даже поняв ошибку в генерации 1С request к внешнему веб сервису, повлиять на это нельзя, нужно ждать обновления платформы. Чтобы проверить одну мысль я сделал простой метод в веб сервисе:
[WebMethod]
public
DateTime Checker(DateTime date)
{
return
date;
}
У меня была мысль, что проблема связана с тем, что string аргумент может быть null, соответственно, в WSDL minOccurs=»0″, в отличие от DateTime (который передавался cbr.ru методу GetCursOnDate), для которого minOccurs=»1″ . Однако, даже для такого варианта 1С сформировал столь же «кривой» запрос, т.е. дело не в этом.
Решение
Поиск решения заняло немало времени, как обычно, оно оказалось очень простым. Спасибо моим 1С разработчикам с которыми мы вымучивали столь красивое и столь многострадальное решение. 🙂
Итак, фанфары, рабочий код на 1С при обращении к внешнему веб сервису (web service) написанному на C# (.NET) и работающему под IIS выглядит следующим образом:
Прокси = WSСсылки.WSBarcodeService.СоздатьWSПрокси(
http://tempuri.org/"
"
,
"BarcodeWebService"
,
"BarcodeWebServiceSoap"
);
Результат = Прокси.BarcodeFontIsInstalled(
"Code 128"
);
И это всё! 🙂 Предельно кратко и очень похоже на обращение к web service в C#. В этом случае перехваченный Fiddler-ом запрос 1С к веб сервису выглядит следующим образом:
При таком вызове web service (веб сервис) возвращает корректное значение. Ошибка исчезла. В качестве аргумента в метод веб сервиса из 1С передавали бинарные данные (фотографии), массивы, ну и простые типы, вроде даты, строки и пр.
Полезные ссылки
- Fiddler — перехват http траффика для анализа обмена данными
- WireShark — мощный сниффер для перехвата и анализа различных протоколов переадчи данных.
Форум консультаций по прикладным решениям и программам фирмы «1С».
Онлайн консультации, вопросы и ответы, бесплатная регистрация, личная страница, twitter и facebook каналы и многое другое ждут Вас здесь.
Зарегистрироваться ← Ваш выбор → Войти на форум
-
Кто встречался ред.3.0.19.15 платформа2.8.17.143 возникает ошибка разбора xml, фатальная ошибка, базу тестировала всеми известными способами, поставила последний парсек. Что еще можно сделать?
-
Реклама на форуме
Чтобы убрать:
-
В чем заключается «фатальная ошибка»?
-
Ошибка разбора XML:-3,41
Фатальная ошибка:
Extra content at the end of the document -
А почему Вы считаете что сам файл имеет корректную структуру? И база данных тут не причем.
-
Быть может и база нипричем, вопрос в общем звучит так — Что еще можно сделать вообще? Приответах всегда предлагают сделать стандартные процедуры — все сделала!
-
Сделать с чем? С файлом, базой данных или еще с чем-то? Вы даже проблему не описали. Что хотите сделать, что делаете, что происходит, на каком этапе появляется фатальная ошибка?
-
В справочнике физических лиц при создании нового элемента или при обращении к редактированию элемента вылетает окно с вышеописанной ранее ошибкой. Невозможно отредектировать или создать новый элемент. В этом заключается проблема.
-
После этой ошибки программа работает или закрывается? Попробуйте почистить кеш и отключить аппаратное ускорения у драйвера монитора.
-
Реклама на форуме
Чтобы убрать:
-
Делала- программа продолжет работать, докуметы проводятся, регламентные получаются..
-
Ищите того кто приедет и на месте посмотрит. Через форум это не решить.