Элегантное чтение больших XML файлов

02.10.14

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

В статье показано как элегантно производить чтение больших XML файлов

Скачать файлы

Наименование Файл Версия Размер
ЭлегантноеЧтениеXML.cf
.cf 25,33Kb
26
.cf 25,33Kb 26 Скачать

Введение.

При необходимости прочитать XML файл можно применять один из подходов: полная загрузка в DOM и последовательное чтение. Полная загрузка XML файла в DOM реализована в 1C c помощью объекта ДокументDOM. DOM - это классно, но говорить о нем сегодня не буду, так как речь идет об относительно больших файлах XML, и тут DOM не подходит. Последовательное чтение XML файлов реализовано в 1С с помощью такого объекта как ЧтениеXML. Есть и другие объекты в 1С для работы с XML, но сегодня, опять же, не о них.

Объект ЧтениеXML - яркий представитель подхода последовательного чтения XML файла. Я уверен, что вы представляете как выглядит код с использованием объекта ЧтениеXML. В нем есть циклы и много условий на сравнение типа и имени узла. Мне не нравится такой код и я не люблю его писать. Если вы не представляете как выглядит такой код, то решите описанную ниже демонстрационную задачу с использованием объекта ЧтениеXML и вам станет понятнее о чем я говорю.

Я же хочу показать как можно читать XML файл элегантно. А пока сформулирую демонстрационную задачу.

Демонстрационная задача

На входе файл Контрагенты.xml следующей структуры и содержания:

<?xml version="1.0"?>
<Контрагенты>
    <Контрагент Наименование="Контрагент 1" Код="000000001">
        <Телефон>333-33-33</Телефон>
    </Контрагент>
    <Контрагент Наименование="Контрагент 2" Код="000000002"/>
    <Контрагент Наименование="Контрагент 3" Код="000000003">
        <Телефон>111-11-11</Телефон>
        <Телефон>222-22-22</Телефон>
    </Контрагент>
</Контрагенты>

Требуется загрузить данные файла в справочник "Контрагенты", который имеет реквизит "Телефоны". Подразумевается, что в реквизите "Телефоны" указано несколько телефонов. При загрузке необходимо производить поиск контрагента по коду и только если контрагент не найден, то создавать нового.

Реализация

Реализуем загрузку контрагентов в обработке "Загрузка контрагентов". При нажатии на кнопку "Загрузить" выполняется следующий код:

ЭлегантноеЧтениеXML = Обработки.ЭлегантноеЧтениеXML.Создать();
ЗагруженныеКонтрагенты = ЭлегантноеЧтениеXML.Прочитать(Файл, ЭтотОбъект);
	
Для Каждого ТекущийКонтрагент Из ЗагруженныеКонтрагенты Цикл
	Сообщить(ТекущийКонтрагент);		
КонецЦикла;

Сначала создается универсальная обработка ЭлегантноеЧтениеXML и вызывается метод Прочитать. Первым аргументом передается имя XML файла. Вторым аргументом передается специальный объект-делегат. Обработка, читая последовательно файл XML, запускает методы объекта-делегата при начале чтения узла, завершении чтения узла и некоторых других случаях.

Объект-делегат должен реализовывать следующие методы:

1. Процедура Начало(ЧтениеXML) Экспорт - данная процедура запускается при начале обработки XML файла, в ней можно инициировать какие-нибудь переменные и настроить объект ЧтениеXML

2. Функция Завершение() Экспорт - данная функция запускается самой последней, и должна вернуть результат обработки файла, может вернуть и неопределено - это нормально

3. Функция УзелНачало(ЧтениеXML, Узел) Экспорт - данная функция запускается каждый раз, когда начинает обрабатываться новый узел. В параметре Узел находится уже считанная информация об узле: локальное имя, URI пространства имен, таблица атрибутов и так далее. Параметр ЧтениеXML передается для того, чтобы вы могли самостоятельно дополнить Узел нужными незаполненными свойствами. Ключевой момент - функция должна вернуть Истина, если узел был обработан в этой функции, и ложь если не обрабатывался. В случае если узел не обрабатывался, то будет вызван метод Узел{Тег}Начало(ЧтениеXML, Узел), иначе не будет

4. Функция УзелЗавершение(Узел) Экспорт - данная функция запускается каждый раз, когда заканчивает обрабатываться узел. В параметре Узел находится вся необходимая информация об узле. Ключевой момент - функция должна вернуть Истина, если узел был обработан в этой функции, и ложь если не обрабатывался. В случае если узел не обрабатывался, то будет вызван метод Узел{Тег}Завершение(Узел), иначе не будет.

5. Процедура Узел{Тег}Начало(ЧтениеXML, Узел) Экспорт - данная процедура запускается каждый раз, когда начинает обрабатываться узел с локальным именем Тег, если конечно до этого узел не был обработан при вызове УзелНачало(ЧтениеXML, Узел)

6. Процедура Узел{Тег}Завершение(Узел) Экспорт - данная процедура запускается каждый раз, когда заканчивает обрабатываться узел с локальным именем Тег, если конечно до этого узел не был обработан при вызове УзелЗавершение(Узел)

Параметр Узел помимо того, что содержит информацию о текущем узле, он еще ссылается на родительский узел. Родительские узлы существуют пока обрабатываются все его дочерние узлы. Иными словами получить доступ к родительским узлам вы можете всегда.

Дедушка = Узел.Родитель.Родитель;

В нашем примере в качестве объекта-делегата передан текущий экземпляр обработки "Загрузка контрагентов", модуль объекта которой выглядит следующим образом:

Перем ЗагруженныеКонтрагенты;

Процедура Начало(ЧтениеXML) Экспорт
	ЗагруженныеКонтрагенты = Новый Массив;
КонецПроцедуры

Функция Завершение() Экспорт
	Возврат ЗагруженныеКонтрагенты;
КонецФункции

Функция УзелНачало(ЧтениеXML, Узел) Экспорт
	Обработано = Ложь;
	Возврат Обработано;
КонецФункции

Функция УзелЗавершение(Узел) Экспорт
	Обработано = Ложь;
	Возврат Обработано;
КонецФункции

Процедура УзелКонтрагентыНачало(ЧтениеXML, Узел) Экспорт
КонецПроцедуры

Процедура УзелКонтрагентыЗавершение(Узел) Экспорт
КонецПроцедуры

Процедура УзелКонтрагентНачало(ЧтениеXML, Узел) Экспорт
	Код = Узел.Атрибуты.Найти("Код", "ЛокальноеИмя").Значение;
	Наименование = Узел.Атрибуты.Найти("Наименование", "ЛокальноеИмя").Значение;
	КонтрагентСсылка = Справочники.Контрагенты.НайтиПоКоду(Код);
	Если ЗначениеЗаполнено(КонтрагентСсылка) Тогда
		КонтрагентОбъект = КонтрагентСсылка.ПолучитьОбъект();
		КонтрагентОбъект.Наименование = Наименование;
		КонтрагентОбъект.Телефоны = "";
	Иначе
		КонтрагентОбъект = Справочники.Контрагенты.СоздатьЭлемент();
		КонтрагентОбъект.Код = Код;
		КонтрагентОбъект.Наименование = Наименование;
	КонецЕсли;
	Узел.ДопСвойства.Вставить("КонтрагентОбъект", КонтрагентОбъект);
КонецПроцедуры

Процедура УзелКонтрагентЗавершение(Узел) Экспорт
	Узел.ДопСвойства.КонтрагентОбъект.Записать();
	ЗагруженныеКонтрагенты.Добавить(Узел.ДопСвойства.КонтрагентОбъект.Ссылка);
КонецПроцедуры

Процедура УзелТелефонНачало(ЧтениеXML, Узел) Экспорт
КонецПроцедуры

Процедура УзелТелефонЗавершение(Узел) Экспорт
	КонтрагентОбъект = Узел.Родитель.ДопСвойства.КонтрагентОбъект;
	КонтрагентОбъект.Телефоны = КонтрагентОбъект.Телефоны + Узел.Значение + ";";	
КонецПроцедуры

Обратите внимание, что в приведенном коде нет ни циклов, ни условий на сравнение типа и имени узла. На мой взгляд, он читается очень легко.

Замечания

Мне пришлось указывать теги в квадратных скобках, так как угловые "проглатываются" инфостартом.

Замечание 1:  Разметка XML регистрозависима, язык программирования 1С регистронезависим, поэтому если в XML файле встречаются теги [Телефон] и [телефон], то обрабатывать их будет один и тот же метод УзелТелефонНачало(ЧтениеXML, Узел).  Для того чтобы их различать нужно использовать Узел.ЛокальноеИмя.

Замечание 2: В файле XML может быть два тега [Телефон] из разных URI пространства имен. Обрабатывать оба тега будет один и тот же метод УзелТелефонНачало(ЧтениеXML, Узел). Для того чтобы их различать нужно использовать Узел.URIПространстваИмен

Замечание 3: Согласно спецификации XML имя тега может содержать не только буквы, цифры и знак подчеркивания, а еще и другие символы, например "-" или ".". В XML допустим, например, такой тег [a-b.c]. Поэтому все недопустимые для идентификатора 1С символы игнорируются, так, для примера выше, тег будет обработан методом УзелABCНачало(ЧтениеXML, Узел). 

Замечание 4: Один и тот же тег может быть дочерним для разных родительских тегов. Так, например, родительским тегом для [Телефон] может быть и [Контрагент] и [КонтактноеЛицо]. Обрабатывать тег всегда будет УзелТелефонНачало(ЧтениеXML, Узел). Если обработка тега зависит от родительского тега, то вы можете ориентироваться на Узел.Родитель.

Замечание 5: Значение узла, т.е. текст который находится между открывающим и закрывающим тегами, можно получить как Узел.Значение, но сделать это можно только при завершении обработки узла, т.е. в методе УзелЗавершение(Узел) или Узел{Тег}Завершение(Узел).

Помимо описанных особенностей наверняка есть и другие.

Заключение

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

Если остались вопросы, то скачивайте ЭлегантноеЧтениеXML.cf

Спасибо за внимание.


См. также

SALE! 15%

[ED3] Обмен для ERP 2.5, КА 2.5, УТ 11.5 БП 3.0, Розница, УНФ и других с EnterpriseData (универсальный формат обмена), правила обмена

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

25080 22572 руб.

12.06.2017    134940    723    291    

388

SALE! 20%

Перенос данных из ERP 2 / КА 2 / УТ 11 в БП 3.0. Переносятся документы, начальные остатки и справочники

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | В продаже с 2019г. | Воспользовались более 176 предприятий! | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой, обращайтесь!

34650 27720 руб.

15.04.2019    68420    178    138    

111

SALE! 20%

Перенос данных из ERP 2 / КА 2 в ЗУП 3. Переносятся остатки, документы и справочники

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Воспользовались более 79 предприятий! | Предлагаем приобрести готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | В продаже с 2020г. | Оперативно обновляем правила до актуальных релизов 1С | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

43450 34760 руб.

03.12.2020    34169    80    58    

78

SALE! 10%

Перенос данных из УТ 10.3 в УТ 11.5. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 1С:Управление торговлей 11 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.87.x) и УТ 11.5 (11.5.16.x).

28000 25200 руб.

23.07.2020    46301    196    64    

158

Перенос данных из Парус 10 в ЗГУ ред.3

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9208    9    8    

10

SALE! 10%

Перенос данных из УПП 1.3 в БП 3.0. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.223.x) и БП 3.0 (3.0.149.x). Правила подходят для версии ПРОФ и КОРП.

28000 25200 руб.

15.12.2021    20252    132    38    

90

SALE! 10%

Перенос данных из БП 3.0 в УНФ 3.0 / УНФ 1.6. Переносятся остатки, документы и справочная информация

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

В продаже с 2018г. | Воспользовались более 41 предприятия! | Правила конвертации (КД 2) для переноса данных из БП 3 в УНФ | Переносятся все виды документов, начальные остатки и вся возможная справочная информация | Есть фильтр по организациям | Оперативно обновляем на новые релизы | Оказываем техподдержку | В комплект файлов входит инструкция, авторская версия обработки "Универсальный обмен...", актуальные правила переноса данных и архив старых версий переноса | Учет в БП 3 должен быть корректным, некорректные данные не переносятся | Можно бесплатно проверить на вашем сервере до покупки!

50722 45650 руб.

10.07.2018    67445    41    122    

46

Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 11.12.2023, версия 9.5 - 9.9)

13200 руб.

20.11.2015    150727    367    375    

501
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Yashazz 4709 02.10.14 11:06 Сейчас в теме
Может, я торможу, но я правильно понял, что это просто насадка на то же самое последовательное чтение?
2. yku 372 02.10.14 11:09 Сейчас в теме
А что с процедурой "Прочитать"? Я как понимаю, там и циклы и условия?
3. kapustinag 02.10.14 15:39 Сейчас в теме
(0) Мне нравится. Да, это насадка, но красивая.
4. Evil Beaver 8107 02.10.14 18:22 Сейчас в теме
Поздравляю, вы изобрели XDTO.
vladimirmatancev; zeegin; Turn123; PhoenixAOD; veretennikoff; Tangram; Redokov; delete; Den_D; shalimski; +10 Ответить
5. rtnm 614 07.10.14 12:05 Сейчас в теме
(4) Evil Beaver, А минус то за что? Расскажешь?
11. Evil Beaver 8107 08.10.14 18:47 Сейчас в теме
(5) минус за велосипед, выданный за некое элегантное чтение. Минус за то, что этот подход пропагандируется среди сообщества, вместо того, чтобы подталкивать новичков к изучению менее велосипедных решений.

Короче, сделан костыль и костыль отрекламирован. Теперь 1С-ник Вася вместо изучения XDTO будет лепить вот такие-вот обходные горы кода, вместо существующего, более автоматизированного и типобезопасного способа чтения XML.
Технически решение красивое, пожалуй, но на прикладную ценность не тянет. Разумеется, это чисто мое скромное мнение, вы можете с ним не соглашаться.
AsKorysti; LordKim; vladimirmatancev; zeegin; budunovmv; alexscamp; Ivon; YPermitin; нормальный такой; IvanBoychuk123; dmpas; zqzq; DrAku1a; 1cWin; rtnm; +15 Ответить
6. a1ex4ndr 5 08.10.14 13:11 Сейчас в теме
А на каком размере файла тестировалось? А то в тесте файл из трех строчек.....
7. rtnm 614 08.10.14 13:13 Сейчас в теме
(6) a1ex4ndr, Дело не в размере файла, а в подходе - последовательное чтение. Никаких чудес не будет, все сопоставимо с ЧтениеXML.
8. DJDUH 17 08.10.14 13:46 Сейчас в теме
Интересно, а как же он элегантно читает телефоны?

,,,,,,,,,,,,,,,,,,,,,,,,,,,
        <Телефон>111-11-11</Телефон>
        <Телефон>222-22-22</Телефон>
,,,,,,,,,,,,,,,,,,,,,,,,,,,



9. rtnm 614 08.10.14 14:01 Сейчас в теме
(8) DJDUH, Не уверен что я правильно понял вопрос, но вот так он читает телефоны:

Процедура УзелТелефонЗавершение(Узел) Экспорт
    КонтрагентОбъект = Узел.Родитель.ДопСвойства.КонтрагентОбъект;
    КонтрагентОбъект.Телефоны = КонтрагентОбъект.Телефоны + Узел.Значение + ";";    
КонецПроцедуры
10. DAnry 8 08.10.14 15:38 Сейчас в теме
Мне тоже нравится. Плюсанул...
12. Mogidin 130 09.10.14 13:27 Сейчас в теме
а можно воспользоваться Msxml2.DOMDocument
ФайлXML = Новый COMОбъект("MSXML2.DOMDocument.4.0");
и вперед
http://msdn.microsoft.com/en-us/library/aa923288.aspx

то же ЧтениеXML, но гораздо быстрее
jobkostya1c_ERP; +1 Ответить
15. jobkostya1c_ERP 100 23.10.14 10:23 Сейчас в теме
(12) Mogidin, там уже не к 1С относится, а общее описание стандарта DOM-технологии. Еще и на английском. Придется искать уже переработанное и на русском для 1С 8, но за идейку большой плюс.
Для маленьких и средних технология "проглатывания" разом большого документа в какой-то объект в ОЗУ очень хорошо: и прочитали все сразу и разобрали, и, возможно, запрещенные символы самим объектом удалось обработать. Еще может и надежнее, раз прочитали весь объект то видим все взаимосвязанные ссылки по всему объекту, а вот при последовательном чтении только какую-то часть большого файла. Свыше 2 Гб XML вообще не эффективен. Тут уже и DOMDocument не поможет. Любой сервер загнется.
Технологию описанную автором статьи, наверное, стоит применять если структура XML-файла простая (типа таблица ФИО, год рождения, адрес...), однотипная, без глубинных вложений, взаимосвязанных ссылок. Или если это остаток древней технологии старых решений.
Если можно, то приведите примеры ссылок на уже готовые простые решения DOM чтения и обработки.
16. Evil Beaver 8107 28.10.14 17:01 Сейчас в теме
(12) Mogidin, че, прям гораздо? А цифры есть?
13. aximo 2027 09.10.14 19:17 Сейчас в теме
Кстати, Вы реально работали с большими XML-файлами? Дело в том, что при сохранение текста разметки на УФ больше 10 мб (по опыту) платформа 8.2 может выдавать ошибку сохранения файла.
14. rtnm 614 09.10.14 22:48 Сейчас в теме
(13) aximo, с большими XML-файлами вместе с УФ не работал
17. DrZombi 286 05.11.14 15:52 Сейчас в теме
Автор, без обид, но отстой :)
Сколько не писал обмены на XML... но самый лучший прирост мне дал обычный DBF файл :)
...а XML - это файл для организации мелких обменов, которые и тем же DBF файлами будут работать куда приятней :)

...
п.с. на DBF тоже можно организовывать древа, но накой оно надо ;)
vladimirmatancev; +1 Ответить
18. rtnm 614 05.11.14 17:08 Сейчас в теме
(17) DrZombi, в следующий раз так и скажи заказчику: "Ваш XML отстой. Дайте мне DBF, мне с ним куда приятней работать" :)
19. jobkostya1c_ERP 100 14.11.14 20:47 Сейчас в теме
Самое неприятное в формате DBF это длинна текстового поля (боюсь ошибиться) 254 символа и потом уже средствами 1С приходится склеивать строки или при выгрузке в DBF дробить на части. Причем сам формат DBF последних редакций может и поддерживать поле МЕМО (строка неограниченной длины), а вот в 1С объект XBase уже нет.
Смысл использовать dbf если только сторонняя АИС типа paradox (foxPro, 1С 7.7 в файловом режиме) его генерирует для обмена (или загружают в нее) или это и есть внешний источник данных.
Оставьте свое сообщение