Корректировка заголовка DBF-файла, сформированного в 1С, для его связи с индексным файлом для дальнейшей работы с ним из внешних приложений (FoxPro 2.6, Visual FoxPro и пр.)

18.03.13

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

Программный код, корректирующий заголовок DBF-файла, сформированного в 1С, для его связи с индексным файлом для далнейшей работы с ним из внешних приложений (FoxPro 2.6, Visual FoxPro и пр.)

Задача: необходимо передавать некоторую информацию из 1С в DBF-формате включая индексный файл (.CDX) для дальнейшего ее использования в иных информационных подсистемах предприятия.

Проблема: ПО некоторых подсистем разработано на FoxPro 2.6 или Visual FoxPro. И как оказалось эти системы не видят индексного файла идущего в паре с DBF сформированным в 1С.

Решение: после анализа DBF-файла и изучения спецификации формата (например вот здесь: http://www.dbase.com/Knowledgebase/INT/db7_file_fmt.htm) была найдена причина, а именно то, что 1С не проставляет 28-й байт заголовка DBF-файла равным 1, что свидетельствовало бы о связке с индексным файлом.

После этого осталось лишь программно проставить целевой байт в нужное значение.

Для работы с байтами заголовка была выбрана компонента Microsoft ADODB.Stream (ссылка на описание компоненты http://msdn.microsoft.com/ru-ru/library/windows/desktop/ms675032%28v=vs.85%29.aspx).

&НаСервере
Процедура Выгрузка()
   
//Создаем тестовый пример выгрузки данных в DBF с индексами на базе справочника "Номенклатура"
   
Путь = "E:\temp\";
   
БД = Новый XBase;
   
БД.Поля.Добавить("CODE", "S", 11);
   
БД.Поля.Добавить("NAME", "S", 40);
   
БД.СоздатьФайл(Путь + "start.dbf", Путь + "start.cdx");
   
БД.Индексы.Добавить("IDXCODE", "CODE");
   
БД.Индексы.Добавить("IDXNAME", "NAME");
   
ФлИБД = БД.СоздатьИндексныйФайл(Путь + "start.cdx");
   
Выборка = Справочники.Номенклатура.ВыбратьИерархически();
    Пока
Выборка.Следующий() Цикл
       
БД.Добавить();
       
БД.CODE = Выборка.Код;
       
БД.NAME = Выборка.Наименование;
       
БД.Записать();
    КонецЦикла;
   
БД.ЗакрытьФайл();
   
//Читаем DBF-файл и корректируем 28-й байт
   
Поток = Новый COMОбъект("ADODB.Stream");
   
Поток.Type = 1;
   
Поток.Mode = 3;
   
Поток.Open();
   
Поток.LoadFromFile(Путь + "start.dbf");
   
ДвоичнаяСтрока = Поток.Read(29);
   
ДвоичнаяСтрока.SetValue(28, 1);
   
Поток.Position = 0;
   
Поток.Write(ДвоичнаяСтрока);
   
Поток.SaveToFile(Путь + "start.dbf", 2);
   
Поток.Close();
 КонецПроцедуры

Вот этот несложный код корректирует 28-й байт заголовка DBF-файла и позволяет внешним приложениям увидеть и идущий в связке индексный файл.

См. также

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    134937    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    68418    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    20251    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    150725    367    375    

501
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. hogik 443 18.03.13 17:09 Сейчас в теме
(0)
Михаил (iRounder).
При использовании этого CDX файла другими "внешними приложениями" могут возникнуть проблемы с порядком сортировки вплоть до зацикливания функций "движения" по индексу при чтении. Про обновление такого индекса и говорить не хочется... ;-)
Т.е. рекомендуется создавать индексный файл средствами "внешнего приложения" заново, а не передавать готовый из 1С.
v.l.; Ёпрст; andrewks; +3 Ответить
2. andrewks 1368 18.03.13 17:18 Сейчас в теме
(1) hogik, полностью поддерживаю
3. iRounder 99 18.03.13 17:43 Сейчас в теме
(1) Вы пробовали так делать?

У меня подобных проблем не возникло.
Опишите, пжл, ситуацию когда вы столкнулись с подобной проблемой.
На какой платформе формировали таким образом индексный файл и каким "внешним приложением" с ним работали.
4. andrewks 1368 18.03.13 18:26 Сейчас в теме
(3) Вам же написали про подводные камни в ветке на мисте.
однако в публикации о них - ни слова
5. iRounder 99 18.03.13 19:14 Сейчас в теме
(4) О каких подводных камнях Вы говорите? Насколько я помню там просто было предположение, что создавать сам DBF-файл через ADO проще.

"Перечитал" мисту. Единственное, что подходит под определение "подводные камни": Тем более, что кроме заголовка там и сортировка не полностью совпадает (для экзотических знаков).

Никаких доводов или перечисления о каких экзотических символах речь не было. Что по Вашему я должен был быть указывать еще в публикации?
Ну, и если Вы заметили, публикация не в виде обработки, за которые я получаю $m, а просто "дележка" опытом. Кроме применения для замены байта в DBF эта методика показывает общий принцип работы с двоичными данными, когда нужно заменить часть файла.

Ну, и за любую критику благодарен. А если еще будут доводы или факты, которые подтвердят "глючность" метода, то я обязательно напишу об этом в описании публикации, а возможно и вообще ее закрою.
6. andrewks 1368 18.03.13 19:53 Сейчас в теме
(5) ни в коем разе не добиваюсь закрытия публикации. наоборот, нужно больше разных тайных знаний.

просто в данном случае, мне кажется, нельзя утверждать о полной совместимости индексного файла, созданного 1с, с любыми сторонними приложениями.
7. iRounder 99 18.03.13 20:02 Сейчас в теме
(6) Так поэтому ж я и прошу примеры. Потому как в моем случае все работает :)
8. hogik 443 18.03.13 20:59 Сейчас в теме
(3)
"Вы пробовали так делать?"(с)
Михаил (iRounder).
И пробовать не буду, т.к. имел "удовольствие" пялиться на исходные тексты и общаться с разработчиками. В том числе и по поводу "русификации" индексных файлов. Занимаясь вот этим: http://infostart.ru/public/14664/ И еще вот этим: http://infostart.ru/public/85748/
Вот, читайте с 31-ого сообщения тему: http://www.forum.mista.ru/topic.php?id=434036
А т.к. DBF-движки в 1С-продуктах сделаны на "платформе" ;-) разработчика
http://www.codebase.com/ ,то особенности индексов для "семерки" можно распространить и на "восьмерку".
9. iRounder 99 18.03.13 21:05 Сейчас в теме
(8) Найду время - попробую.
10. iRounder 99 19.03.13 15:19 Сейчас в теме
(8) Почитал. Создал пустой справочник. Заполнил его:
A lat
B lat
N lat
O lat
P lat
А рус
Б рус
В рус
№ рус
Показать


Дальше по описанной в публикации методике создал индексный файл и установил в DBF 28-й байт равным 1.

Открыл DBF-ку в Visual FoxPro.
Далее буду приводить команды выполненные из командного окна и полученные результаты:

SET INDEX TO start ORDER idxname
BROWSE LAST
----------------
A lat
B lat
N lat
O lat
P lat
№ рус
А рус
Б рус
В рус
Показать


SET FILTER TO UPPER(Name) > "Z"
BROWSE LAST
----------------
№ рус
А рус
Б рус
В рус



SET FILTER TO UPPER(Name) < "Z"
BROWSE LAST
----------------
A lat
B lat
N lat
O lat
P lat
Показать


Что не так с сортировкой или что я не так делаю?
11. hogik 443 19.03.13 20:04 Сейчас в теме
(10)
"... что я не так делаю?"(с)
Всё не так. :-)
Михаил (iRounder).
Даю текст на "семерке". Перепишите его на "восьмерку". Сделайте файлы.
Выполните в FoxPro команды:
USE d:\test.dbf NOUPDATE EXCLUSIVE
SET INDEX TO d:\test.cdx
SET ORDER TO NAME
BROWSE LAST
Делайте движение по списку стрелкой вниз.
Для проверки различий "семерка"/"восьмерка" прикрепил свои файлы в тему.
Отпишите о результатах. Обсудим ... ;-)


Перем DBF,Кат,Ном;   
	Кат="D:\";
	DBF=СоздатьОбъект("xBase"); 
	DBF.КодоваяСтраница(0);
	DBF.ДобавитьПоле("NAME","C",1,0);
	DBF.ДобавитьПоле("CODE","N",3,0); 
	DBF.ДобавитьИндекс("NAME","UPPER(NAME)",0,0,"");
	DBF.СоздатьФайл(Кат+"Test.dbf",Кат+"Test.cdx");   
	Для Ном=1 По 255 Цикл    
		DBF.Добавить();
		DBF.NAME=Симв(Ном);
		DBF.CODE=Ном;	   
	    DBF.Записать();
	КонецЦикла;
	DBF.ЗакрытьФайл();
Показать
Прикрепленные файлы:
Test.zip
12. iRounder 99 19.03.13 20:16 Сейчас в теме
Если Симв() в 7-ке это Символ() в 8-ке, то тогда не совсем корректный пример. Эти символы форма списка не отображает и выдает ошибку (я о тонком клиенте). Поэтому, по идее, эти символы в базе могут появиться только искусственно. Если можно - то более реальный контрольный пример?
13. hogik 443 19.03.13 20:23 Сейчас в теме
(12)
"эти символы в базе могут появиться только искусственно"(с)
Не возражаю. ;-)
Заполняйте DBF только отображаемыми символами.
14. iRounder 99 19.03.13 20:56 Сейчас в теме
(13) Приведите реальный пример появления этих символов в базе если их сама 1С не может отобразить?
Я ж не ради придраться - я хочу разобраться и благодарен за дискуссию.
15. hogik 443 19.03.13 21:58 Сейчас в теме
(14)
"я хочу разобраться "(с)
Михаил (iRounder).
А мы чем занимаемся? Спокойно разбираемся.
Вроде, уже написал в (13) сообщении. :-(
Организуйте цикл от пробела. Если есть символы в интервале от 0x20 до 0xFF которые не могут быть в "восьмерке", то поставьте условие-ограничение в цикле на их игнорирование.
16. hogik 443 19.03.13 23:07 Сейчас в теме
(14)
Михаил (iRounder).
Вот, сделал выгрузку DBF файла в формате SDF с использованием индекса.
Два варианта:
1) Сразу после создание в 1С-е.
2) После REINDEX в Visual FoxPro.
Можно глазами "отследить" большую разницу. ;-)
Понимаете. ;-) Если стоит задача только смотреть на файл в неком (логичном порядке) записей, то на различия можно не обращать внимание. А если требуется обрабатывать записи последовательным просмотром и/или поиском по ключу, то получим картину аналогичную примеру про запрос от Александра (orefkov). Т.е. приложение должно иметь возможность сравнивать байты в оперативной памяти аналогично порядку следования информации в индексе. Например, запрос от Александра получает последовательно в порядке индекса записи таблицы, а сравнение на "Z" применяется уже к полю самой таблицы. По индексу символ "№"<"Z", а по информации из поля "№">"Z". И запрос прекращает просмотр таблицы. Кроме этого само движение по индексу сУБД делает сравнением на основании таблицы, которая сидит в её кишках (разная для разных программ). Т.е. не во внешней таблице "связанной" с базой данных, а не программой. Как это сделано во взрослых СУБД.
Вот. Очень примерно - так...
Прикрепленные файлы:
Test.zip
17. iRounder 99 20.03.13 09:43 Сейчас в теме
(16) Спасибо. Буду пробовать разбираться.
18. Ленкина 17.05.13 11:44 Сейчас в теме
спасибо, возможно пригодится
Оставьте свое сообщение