Имя: Пароль:
1C
1С v8
баг в работе 1С с ОбъектXML
,
0 ugroblin
 
04.05.12
17:08
Обмен с веб-сайтом на основе битрикса. Формируется XML, в коде такие строчки

   ОбъектXML.ЗаписатьНачалоЭлемента(Имя);
   ОбъектXML.ЗаписатьТекст(СтрокаЗаписи);
   ОбъектXML.ЗаписатьКонецЭлемента();


Результат: файл обрывается на строчке <СопутствующийТовар>2ead9036-8817-11e0-a09e-940c6d895f0b</Сопутств

и все! т.е. даже элемент "СопутствующийТовар" до конца не записывается.
Включил отладку, ставлю точку останова с условием, дохожу до нужного товара, прохожу пошагово и... - все ОК! ошибок не выдает. Зажимаю shift+F11, опять зависает. Смотрю в ХМЛ - файл так же обрывается строчкой <СопутствующийТовар>2ead9036-8817-11e0-a09e-940c6d895f0b</Сопутств...

Я так понимаю, что метод ЗаписатьКонецЭлемента дает сбой, после чего в файл физически уже ничего не пишется, однако ошибки 1С не выдает.
1 andrewks
 
04.05.12
17:09
потрясающе
2 Vladuha
 
04.05.12
17:21
(0) на радостях забыл даже версию платформы написать )
3 ugroblin
 
04.05.12
17:27
(1) Вам то потрясающе, а мне надо выяснить причину и устранить. Раньше то все работало, да и товар этот в выгрузке не первый.
(2) 8.2.15.294, конфа Управление торговым предприятием для Казахстана(1.0.17.12) с доработками.

Если кто сталкивался с подобной проблемой, помогите найти из-за чего так происходит. Может не там ищу? ЗаписьXML.ЗаписатьКонецЭлемента() пишет в файл сразу же или через какой-то буфер?
4 Kreont
 
04.05.12
17:30
(0) Куда пишешь файл? Локально или напрямую через фтп/...?
5 Лоботряс
 
04.05.12
17:31
Может место кончилось? Так, внезапно:)
6 КМ155
 
04.05.12
17:35
(3)[СопутствующийТовар]
и ведь сидит в название не читаемый символ и гадит
7 andrewks
 
04.05.12
17:36
(4) "или напрямую через фтп" а это как?
8 andrewks
 
04.05.12
17:36
(3) 1. ну це ж очевидно, что у тебя где-то ошибка в алгоритме, или в данных
9 Лоботряс
 
04.05.12
17:36
(6)А почему тогда Начало элемента записалось?
10 Kreont
 
04.05.12
17:38
(7) указав фтп-адрес/папку/логин/пароль )

+(4) Просто если через фтп/ и т.п., а "раньше работало", возможно провайдер менял MTU, и могут быть глюки с передачей/обрывы. Попробуй файл создать локально и проверить его.
11 ugroblin
 
04.05.12
17:40
(4) Локально.
(5) Места валом. Разрешения есть, файл создается.

Посмотрел, потестил. ЗаписьХМЛ пишет блоками. Фактически записывается на диск либо методом Закрыть(), либо по достижении какого-то объема. Видимо где-то в новом формируемом блоке оказываются неверные данные, и при попытке записать их платформа тихо умирает.
(8) В алгоритме вряд ли. там мало вносилось изменений. Видимо дело в данных.
12 andrewks
 
04.05.12
17:41
(10) чё ты мне втираешь? ну-ка покажи пример, может, я чё не знаю
13 andrewks
 
04.05.12
17:42
сделай трассировку, чтобы видеть, какой последний элемент записался
14 andrewks
 
04.05.12
17:45
(11) 3. да запросто. просто некоторые участки алгоритма могли не отрабатывать на одних данных, но оказались задействованы при другом наборе данных. или, наоборот, оказался не выполненным некоторый код
15 Kreont
 
04.05.12
17:56
(12) ну не знаю у меня есть такое:
Конф.Бух.: Обмен по организации: настройки обмена: Обмен через FTP ресурс.
и там поля: путь,порт, пасс режим и т.п. и как ни странно работало.
16 andrewks
 
04.05.12
17:58
(15) и что? и где ты там запись файла на фтп кусками нашёл?
17 Kreont
 
04.05.12
18:04
(16) На ФТП кусками не пробовал (хотя вот вижу еще есть поле макс.размер, надо будет посмотреть что там:), о таком и не вспоминал, я вот о чем
при изменение MTU провайдером -> очень часто следуют глюки при передаче записи файла через фтп.

Но у ТС локально, тогда или (6) или вирус.

(0) еще для теста выгрузку сделай без указанного товара.
18 andrewks
 
04.05.12
18:11
а я, всё-таки, поставлю на прерывание выполнения алгоритма записи хмл из-за ошибки. ибо (6) слишком узко, и не уверен, что из-за этого будет вылетать. хотя, конечно, смотря какой символ попадётся
19 Kreont
 
04.05.12
18:24
я поставлю на символ "&" в наименовании :)
20 ugroblin
 
04.05.12
18:24
Теперь я просто в шоке.

Ставлю точку останова, начиная с нее через f10 пробегаю до самого конца - все ОК. Запускаю заново, после попадания на точку останова жму shift F11 - зависает. Явно где-то не успевает очиститься стек.
21 ugroblin
 
04.05.12
18:27
(20) ждал 15 минут для обработки. При том, что через Ф10 минут за 7 пробежал.
22 andrewks
 
04.05.12
18:36
(19) ты проиграл заранее
23 ugroblin
 
04.05.12
18:39
Надо же, такая засада в вечер пятницы. Ушел домой думать о тех кто писал платформу.
24 andrewks
 
04.05.12
18:41
(23) у них и так много грехов. не надо им приписывать ещё и несуществующие
25 etc
 
04.05.12
21:25
(0)
пиши в строку и потом отладчиком посмотришь че там получилось:

ОбъектXML.УстановитьСтроку();

ОбъектXML.ЗаписатьНачалоЭлемента(Имя);
ОбъектXML.ЗаписатьТекст(СтрокаЗаписи);
ОбъектXML.ЗаписатьКонецЭлемента();

ТекстXML = ОбъектXML.Закрыть();

Файл = Новый ЗаписьXML;
Файл.ОткрытьФайл("someshit.xml", "windows-1251");
Файл.ЗаписатьОбъявлениеXML();
Файл.ЗаписатьБезОбработки(ТекстXML);
26 ugroblin
 
07.05.12
15:24
Причина была в данных. ХТМЛ вставки (некорректные) в описании товара, причем не того на котором обрывалась запись, а через десяток товаров. Если бы методы у ЗаписьXML реально записывали бы данные в файл в момент совершения, то отыскать было бы намного легче.
Основная теорема систематики: Новые системы плодят новые проблемы.