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

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

27660 руб.

12.06.2017    143843    830    297    

430

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.20.x), также подходят для релиза 11.5 (11.5.19.x).

35000 31500 руб.

23.07.2020    54066    239    73    

194

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    37530    101    68    

96

SALE! 10%

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

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

35000 31500 руб.

15.12.2021    25104    175    51    

133

SALE! 10%

Перенос данных 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 | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой

55778 50200 руб.

15.04.2019    73078    188    152    

127

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    172284    308    259    

385

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    196223    155    244    

284

SALE! 10%

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

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:ERP Управление предприятием 2.5 и 1С:Комплексную автоматизацию 2.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.237.x), ERP 2.5 (2.5.20.x), КА 2.5 (2.5.20.x), также подходят для релиза ERP 2.5 (2.5.19.x), КА 2.5 (2.5.19.x).

35000 31500 руб.

24.06.2020    64275    62    27    

89
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. hogik 444 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 444 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 444 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 444 19.03.13 20:23 Сейчас в теме
(12)
"эти символы в базе могут появиться только искусственно"(с)
Не возражаю. ;-)
Заполняйте DBF только отображаемыми символами.
14. iRounder 104 19.03.13 20:56 Сейчас в теме
(13) Приведите реальный пример появления этих символов в базе если их сама 1С не может отобразить?
Я ж не ради придраться - я хочу разобраться и благодарен за дискуссию.
15. hogik 444 19.03.13 21:58 Сейчас в теме
(14)
"я хочу разобраться "(с)
Михаил (iRounder).
А мы чем занимаемся? Спокойно разбираемся.
Вроде, уже написал в (13) сообщении. :-(
Организуйте цикл от пробела. Если есть символы в интервале от 0x20 до 0xFF которые не могут быть в "восьмерке", то поставьте условие-ограничение в цикле на их игнорирование.
16. hogik 444 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 Сейчас в теме
спасибо, возможно пригодится
Оставьте свое сообщение