8.х ОБМЕН Проблема с выгрузкой данных в файл xml

Тема в разделе "Обмен данными в "1С:Предприятие 8"", создана пользователем Zverrr33, 10 янв 2012.

  1. TopicStarter Overlay
    Zverrr33
    Offline

    Zverrr33

    Регистрация:
    10 янв 2012
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте, у меня такая проблема:
    Из 1С УТ 10.3 выгружаются данные в XML документы для обмена с другой информационной системой. Данные регистров и документов выгружаются нормально (их размеры не велики - до 600Kb), а вот со справочниками проблема. Файл для справочников получается кривой, теги наложены друг на друга. Размер его примерно 2,5 MB. Пару раз его удалось выгрузить как надо. Не могу понять с чем это связано. Есть ли какие либо ограничения на размер выгружаемого файла? И как можно решить данную проблему?
  2. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Подробней.
    Как выгружаете (при помощи чего).
    Что значит теги наложены друг на друга.
  3. TopicStarter Overlay
    Zverrr33
    Offline

    Zverrr33

    Регистрация:
    10 янв 2012
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Выгружаю справочники с помощью обработки (за нее я уверен, там какие-то дядьки за деньги ее
    разрабатывали, сейчас той команды уже нет и спрашивать особо не с кого) в xml документ с
    определенной структурой. Проблема еще в том, что доступ к той БД мне не дают, поэтому пытаюсь
    проблему решить заочно. БД находиться в другом городе, там есть у них программист, через которого я и
    работаю. В общем есть обработка, отвечающая за выгрузку данных. Выполняясь по регламенту она
    выдает кривой файл для справочников, примерно такой​
    Код:
     
    <references>
    <firms>
    - <firm>
    <cod0015177a4a8d11de3f85ca171d2b</code> 
    <name>ИП Иванова В.Н.</name> 
    <deleted>0</deleted>   <bankaccount>323323232323</banka<ownjuridicalpersoncode>8d090015177a4a8d11de3f85ca171d2b</ownjuridicalpersoncode> 
    </firm>
    <firm>
    <code>8d090015177a4a8d11de355c13a19134</code> 
    <name>ООО "КОР"</name> 
    <deleted>0</delete<bankaccount>121212121212</bankaccount> 
    <ownjuridicalpersoncode>8d090015177a4a8d11de355c1juridicalpersoncode> 
    NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 
    NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 
    NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 
    NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 
    NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 
    
    </firm>
    </firms>
    
    
    а должно быть вот так примерно:
    Код:
    <references>
    <firms>
    - <firm>
    <code>8d090015177a4a8d11de3f85ca171d2b</code> 
    <name>ИП Иванова В.Н.</name> 
    <deleted>0</deleted> 
    <bankaccount>323323232323</bankaccount> 
    <ownjuridicalpersoncode>8d090015177a4a8d11de3f85ca171d2b</ownjuridicalpersoncode> 
    </firm>
    <firm>
    <code>8d090015177a4a8d11de355c13a19134</code> 
    <name>ООО "КОР"</name> 
    <deleted>0</deleted> 
    <bankaccount>121212121212</bankaccount> 
    <ownjuridicalpersoncode>8d090015177a4a8d11de355c13a19134</ownjuridicalpersoncode> 
    </firm>
    </firms>
    
    
    А когда прошу сделать вручную, то все нормально выгружается. Выгрузка, что ручная, что по
    регламенту запускается на одном и том же ПК, вручную под программистом, а по регламенту - под спец.
    пользователем "обмен"
  4. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Ну так тут дело в обработке все же наверно.
    Если сказать точнее: дело скорее всего в базе данных.
    Т.е.
    вариант 1. у чего-то (какого то элемента базы данных) неверно заполнены реквизиты
    вариант 2. у пользователя под которым выполняется обмен недозаполнены (не так заполнены), какие-то настройки или права или свойства для подстановки. (Надо сравнить пользователей между собой и посмотреть, чем они различаются).
    Ну а соответственно обработка выгрузки не умеет обрабатывать (не правильно обрабатывает) эти исключительные ситуации, и выводит бред.



    Ну и естественно общий совет:
    Запускаете обработку под отладчиком и смотрите в каком месте и почему получается то, что получается.
  5. TopicStarter Overlay
    Zverrr33
    Offline

    Zverrr33

    Регистрация:
    10 янв 2012
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Дело в том, что, как оказалось, даже вручную бывает выгружается кривой файл. Как-будто что-то мешает нормальной выгрузке. У меня еще вопрос, а можно как-то проверить целостность структуры xml файла? Ну, то есть проверить совпадает ли количество открывающих тегов и закрывающих? тогда можно было бы запускать выгрузку до тех пор пока не выгрузиться нормальный файл.
  6. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    если кривой файл получается довольно часто, то рискуете зациклиться в таком случае

    а не смотрели сам код обработки, может какое-нить условие криво записано?
  7. TopicStarter Overlay
    Zverrr33
    Offline

    Zverrr33

    Регистрация:
    10 янв 2012
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Да, код вроде нареканий не вызывает. Там вроде все просто: создается COMОбъект типа MSXML2.DOMDocument, заполняется последовательно по определенной структуре и сохраняется в файл. Сначала выгружаются справочники, затем документы, а потом регистры в соответствующие xml файлы. Методы создания КОМОбъектов и их записи используются одни и те же. Документы и регистры выгружаются без нареканий, а со справочниками проблема возникает (но через раз, то выгрузятся, то нет). Выгрузка работала нормально, как мне сказали, до какого-то периода. Вот и возник вопрос, можно ли проверить правильность синтаксиса XML файла? Пока причина не установлена это бы помогло, я думаю, все равно выгрузка ночью тока запускается один раз в сутки.
  8. TopicStarter Overlay
    Zverrr33
    Offline

    Zverrr33

    Регистрация:
    10 янв 2012
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Да и еще, эти файлы, потом с помощью репликации забираются на сервер обмена. Я вот думаю, эта репликация выполняется тоже по расписанию своему, может она как-то блокировать запись этого файла, потому что она выполняется довольно часто, примерно раз в 20 мин (точнее надо у админов уточнять).
  9. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    думаю тогда вам стоит прислушаться к совету shurikvz и попробовать. Может действительно с реквизитами проблема.

    я конечно не сильна в алгоритмах выгрузки в xml, но отладчиком не пробовали посмотреть, что в переменных, что в файл идет?
  10. TopicStarter Overlay
    Zverrr33
    Offline

    Zverrr33

    Регистрация:
    10 янв 2012
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    да дело в том, что доступа к БД я не имею пока. Там начальство решает этот вопрос. Поэтому проверить, почему теги криво пишутся пока возможности нет. Вот и пытаюсь хоть какое-то решение им предложить, правда "пальцем в небо" пока получается.
  11. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    да наверное без базы трудно разобраться... Правда если обработка внешняя, то можно просто посмотреть ее "начинку", может какой "глюк" в глаза бросится, так сказать уже не пальцем в небо будет.
  12. TopicStarter Overlay
    Zverrr33
    Offline

    Zverrr33

    Регистрация:
    10 янв 2012
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Нет, ну конфигурацию то они мне прислали, к коду доступ есть, и там вроде все норм, по крайней мере принцип выгрузки для документов, регистров и справочников один и тот же. Используются одни и те же функции добавления потомков (тегов вложенных). Алгоритмы одинаковы, но справочники криво все равно выгружаются. Реквизиты в порядке, да даже если нет, теги то должны, мне кажется, нормально записываться, это же просто текст.
  13. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Не обязательно.

    У вас выгрузка идет через COM объект. Кстати сразу вопрос, почему именно через COM объект? Может я не в курсе, но что умеет MSXML2.DOMDocument чего не умеет встроенный типы 1С XMLЗапись, ДокументDOM?

    Ну так вот, запись у вас идет через COM объект. Вы передаете туда строки. Допустим (условно говорю), эта библиотека старая, и в ней допущена ошибка, в результате которой при внутреннем заполнении из-за того что переданный реквизит например имеет слишком большую длину или там какой-то левый символ затесался, неправильно считается длина строки (это уже внутри компоненты), а в компоненте используется например небезопасная функция strcpy() вместо strncpy() (в терминах С), поэтому далее внутри компоненты происходит выход за пределы массива (переполнение буфера), память оказывается повреждена, в результате в файл пишется мусор.
    Вот как-то так вот.

    Реально причину установить я думаю можно только на базе в которой это происходит с отладчиком в руках.
    Если делов этом, то хороший вариант - переписать обработку используя только родные типы данных 1С. (если конечно это возможно).

Поделиться этой страницей