Корректировка заголовка 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! 20%

Перенос данных 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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

26280 22338 руб.

12.06.2017    141492    798    297    

419

SALE! 10%

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

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

35000 31500 руб.

15.12.2021    24003    169    51    

127

SALE! 10%

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

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

35000 31500 руб.

23.07.2020    51214    228    69    

185

SALE! 10%

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

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

53111 47800 руб.

03.12.2020    36578    94    66    

89

SALE! 10%

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

Правила переноса кадровых и расчетных данных и справочной информации из "1С:УПП1.3" или "1С:КА 1.1" в "1С:ЗУП 3.1 | Разработан в формате КД 2 (правила конвертации данных) | При выгрузке есть фильтр по организациям | Обновляется при выходе новых релизов 1С | Развитие алгоритмов | Расчетные документы переносятся в документ "Перенос данных" | Создаются документы "Начальная штатная расстановка" и "Начальная задолженность по зарплате", переносятся кадровые документы

55778 50200 руб.

29.10.2018    56201    59    105    

61

SALE! 10%

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

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

48278 43450 руб.

25.02.2015    171163    303    257    

378

SALE! 15%

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

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 2, УНФ 1.6 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

15300 13005 руб.

18.02.2016    186867    589    509    

526

SALE! 10%

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

Можно проверить до покупки, оставьте заявку! Воспользовались более 268 компаний! Перенос данных из УТ 10.3 в УТ 11 | из УТ 10.3 в КА 2 | из УТ 10.3 в ERP. Предлагаем качественное и проверенное временем решение для перехода с УТ 10.3. Можно перенести начальные остатки, нормативно-справочную информацию и все возможные документы. При выгрузке можно установить отбор по периоду, организациям и складам. При выходе новых релизов конфигураций 1C оперативно выпускаем обновление переноса данных.

55778 50200 руб.

24.04.2015    194963    150    243    

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

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

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

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

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

просто в данном случае, мне кажется, нельзя утверждать о полной совместимости индексного файла, созданного 1с, с любыми сторонними приложениями.
7. iRounder 104 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 104 18.03.13 21:05 Сейчас в теме
(8) Найду время - попробую.
10. iRounder 104 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 104 19.03.13 20:16 Сейчас в теме
Если Симв() в 7-ке это Символ() в 8-ке, то тогда не совсем корректный пример. Эти символы форма списка не отображает и выдает ошибку (я о тонком клиенте). Поэтому, по идее, эти символы в базе могут появиться только искусственно. Если можно - то более реальный контрольный пример?
13. hogik 443 19.03.13 20:23 Сейчас в теме
(12)
"эти символы в базе могут появиться только искусственно"(с)
Не возражаю. ;-)
Заполняйте DBF только отображаемыми символами.
14. iRounder 104 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 104 20.03.13 09:43 Сейчас в теме
(16) Спасибо. Буду пробовать разбираться.
18. Ленкина 17.05.13 11:44 Сейчас в теме
спасибо, возможно пригодится
Оставьте свое сообщение