Доступ к DBF/memo FoxPro/DOS через "внешние источники данных" 1С тонкого клиента. Возможность решения проблем за несколько шагов

14.06.24

Интеграция - Внешние источники данных

Импорт данных из DBF/memo FoxPro/DOS прямо из 1С через "внешние источники данных" за несколько шагов. Понадобится небольшая программка под Fox/32 или на 1С/32, настройка ODBC/32 и некоторые хитрости при работе. Практический опыт работы в 1С по СКД/консоль_запросов с DBF/memo - без проблем!

Я часто использовал статьи из ИнфоСтарт в своей работе. Теперь и мне есть чем поделиться с сообществом 1С.

Мне была поставлена задача перевода на платформу «1С: Предприятие» (конфигурация местная и не имеет значения) программы «Зарплата» (тоже местная разработка), написанная на FoxPro 2.x /32 с файлами DBF/FPT.

Fox я знаю давно и не понаслышке. Писал серьезные проекты на нем. Ну а в 1С разработчики внедрили отличный механизм «Внешние источники данных». Вот и решил я поработать с DBF/FPT через данный механизм.

Замечание: для работы с ODBC/32 требуется именно 1C/32. И без вариантов.

Для работы нужно найти и скачать драйвер ODBC/32 для VFP версии 6.01.8629.01 (похоже подойдет любая версия 6.*):

 

 

64-х-разрядного драйвера я не нашел. Похоже, его «Майк» не разрабатывал ввиду существующих косяков в уже написанных версиях драйвера ODBC/32.

Наиболее известная из них:

  1. Ошибка при открытии DBF с полями, внутри которых имеется символ/ы подчеркивания, типа: «fld_1».

    1. Драйвер VFP 6.* ODBC/32 при открытии такого файла дает ошибку (я перепробовал все версии и до 6.*, которые только удалось найти за сутки):

 

 

И как только убираем из запроса поля с подчеркиваниями, - вуаля – результат с мемо-полями:

 

 

Но ведь когда-то я писал на Fox-е. И писал даже библиотеки *.fll/16 на Watcom/С (x16).

Поэтому я задумался над возникшей проблемой…

Многое уже под/забылось и решил я «пошариться» в Сети.

Вот очень нужная статья:

https://independent-software.com/dbase-dbf-dbt-file-format.html

Самое важное из нее:

  • Описание заголовка DBF (нам нужен нулевой байт, Version byte)

 

 

  • Таблица типов DBF-файлов (нулевой байт):

 

 

  • И абзац:

 

 

В переводе:

 

 

Хочу особо подчеркнуть:

Файлы memo-полей FPT (FoxPro/DOS) и DBT (dBase3+) полностью одинаковые внутри до версии Visual FoxPro!

Вот она, ВОЗМОЖНОCТЬ работать через драйвер dBase ODBC/32!

Осознав данность, мне оставалось только надеяться, что у dBase ODBC/32 не будет косяков:

  • с полями с подчеркиванием

  • с memo-полями

Из моего опыта разработок (Fox, 1С и других платформ), уже существующие базы данных можно смело модифицировать в сторону добавления нужных полей (как и для промежуточных XLS-файлов, которые используются при обмене с другими системами; да… еще и такое имеется).

Теперь мне для опыта нужен был файл, сделанный в старом dBase3+ с memo-полем.

Опять «пошарил» Сеть.

Остановился на «Sdbf 4.5.exe» по причине его бесплатности и возможностей:

 

 

Создал в нем файл dBase3+ «test.dbf»:

 

 

Данный файл прекрасно открывался в VFP 6.0 (под который «Майк» и написал драйвер VFP ODBC/32):

 

 

Версия VFP:

 

 

Данный файл также прекрасно открывался и работал в нужной мне «Зарплате» под FoxPro/DOS:

 

 

Теперь нужно было проверить работу с данным файлом через «Внешние источники данных» «1С: Предприятие».

  1. Настройка драйвера ODBC/32 dBase3+:

 

 

  1. Создание конфигурации управляемого приложения «1С: Предприятие» (в «Толстом клиенте» сервис «очень куцый», хотя мне нужно получать инфу именно для конфига 1С в «Толстом клиенте»; вариант: реализация обмена через http-сервис 1С).

Замечание: добавляю описываемый пример в уже частично разработанную свою конфигурацию без удаления объектов 1С, не мешающих для раскрытия темы данной статьи.

  1. Буду использовать подсистему «Администрирование»

 

 

  1. «Внешний источник данных» dBase:

 

 

  1. Далее командами (по Конфигуратору 1С):

    1. На элементе дерева «Таблицы» => «Правая мышь» => «Добавить»:

 

 

  1. «Далее» => +заполняем:

 

 

  1. «ОК» => +выбираем:

 

 

Обязательно нужно ставить галочку на «Только чтение» на всю таблицу DBF, так как стандартные индексные файлы CDX/foxpro использовать не будем и даже никак не рекомендую при любом раскладе через ODBC/32 – получите разрушение индекса CDX если не сразу, то, как пить дать (!), во время совместной работы FoxPro + ODBC/1C.

Примечание: информацию по типу «Внешние источники данных» ищите в Сети самостоятельно.

Примечание: «Поле ключа» лучше не заполнять. Тогда всегда открывается стандартный просмотр 1С по внешнему источнику данных (для работы он не нужен).
Иначе, при указании полей, может возникнуть проблема дублирования при отображении стандартного списка 1С:

 

 

  1. «Готово» => +добавляю в подсистему «Администрирование»:

  2. По Конфигуратору 1С всё.

  1. Запускаем «1С: Предприятие» и выбираем «Администрирование».

  2. Параметры подключения к dBase3+ ODBC/32 приходится вводить заново:

  3. Доступ к данной форме можно получить в любой момент через «Функции для технического специалиста» => «Стандартные» «Управление внешними источниками данных» (при наличии определенных прав доступа):

 

 

 

  1. После настройки «Системного DSN» жмем «Подключиться» и «Оп ля!» - полностью доступная таблица test.dbf + test.dbt с полями с подчеркиванием и memo-полем с подчеркиванием:

 

 

Параметр подключения выбирайте такой (все пустое):

 

 

 

Простейший запрос на агрегатную функцию «Количество» работает без проблем:

 

 

Итак, проверка на совместимость DBF+DBT по ODBC/32/1С + FoxPro/DOS + FoxPro/Win завершена.

Все в тесте работает великолепно!

Теперь это нужно применить к реальным файлам старой «Зарплаты» и решить поставленную задачу, сохранив возможность работоспособности «и старого и нового».

В первую очередь нужно составить список таблиц, которые содержат:

  • Поля с подчеркиванием

  • Memo-поля

Ну, с мемами – все ясно – по расширению FPT.

Их у меня оказалось 15 штук.

Общий размер таких файлов DBF+FPT оказался небольшим – всего 308 Mb.

Время копирования таких файлов в отдельную папку (под отдельные имена) – всего 1 сек.

FoxPro открывает файлы «в шаринге», значит копирование (без блокировки) может осуществляться свободно.

Создал подкаталог «copyfpt» и сунул туда данные файлы.

Один из вариантов реализации уже начинает вырисовываться… Отлично…

Еще 4 dbf-файла оказались с именами полей через «подчеркивание» (проверял через VFP).

Стоп! А будет ли работать dBase/3+ ODBC/32 для файлов без memo-полей?

Делаю тесты и, о Чудо! – нахожу вариант, где с последними 4-мя файлами (без memo, с подчеркиванием в именах полей) не нужно вообще ничего делать! И запросы 1С работают!

Расскажу «как это сделать» (для файлов FoxPro/DOS без memo-полей):

  1. Настраиваете «Системный DSN» по оригинальному драйверу «Microsoft FoxPro VFP Driver»:

 

 

  1. Открываете в Конфигураторе 1С нужный «Внешний источник данных» и подключаетесь к нему по «DSN = Fox».

    1. Через данный драйвер будут видны все поля таблицы DBF-файла

    2. Через драйвер dBase поля таблицы недоступны!

  2. При работе в режиме тонкого клиента «1С: Предприятие» подключаетесь к нужным файлам уже через драйвер «DSN=dBase».

  3. Всё! Запросы 1С (по файлам dbf без memo-полей) работают «на ура!»:

 

 

 

Та-а-ак…

Мне осталось получить доступ через dBase/3+ ODBC/32 к остальным 15 файлам с «мемами».

В первую очередь нужно «скормить» драйверу dBase/3+ ODBC/32 файлы DBF/FPT, созданные в FoxPro/DOS.

Через 16-ти-ричный редактор смотрю заголовок одного оригинального файла с «мемами»:

 

 

По таблице в начале статьи это:

 

 

Запишем вместо «0xF5» символ «0x83»:

 

 

Ведь в нашем первом файле test.dbf + test.dbt:

 

 

Ну и, конечно, переименуем расширение файла FPT на DBT.

С переименованием проблем нет ни в FoxPro:

 

 

Ни в 1С (пример):

 

 

Осталось подменить нулевой байт заголовка DBF-файла.

Процедура для FoxPro (адаптирована из другой):

 

 

Аналогичная функция для 1С:

 

 

Проверяю работу файла с подмененным заголовком и переименованным расширением memo-файла с FPT на DBT и «вуаля» - работает без проблем:

 

 

 

Осталось сделать полуавтоматическую работу в «1С: Предприятие» по варианту:

  1. Перед каждым запросом (продолжительность порядка 1 сек):

    1. Копирование по списку DBF/DBT с переименованием в тот же каталог «Зарплаты» в имена с префиксом «подчеркивание» (или конкретного файла, который используется в запросе, время снизится до миллисекунд).

    2. Подмена нулевого байта заголовков DBF на 0x83 (за мгновение).

  2. Публикация внутреннего http-сервиса 1С по данной конфигурации для возможности работы из толстого клиента нужной мне конфигурации 1С.

Сказано – сделано.

Проверка – и 100% результат доступа через драйвер dBase/3+ ODBC/32 ко всем файлам старой зарплаты из 1С через «Внешние источники данных».

Стандартный «просмотрщик» для таких объектов не всегда работает, так как для стандартного отображения в 1С нужна сортировка по уникальному полю без дублирования. А этого стандарт DBF не обеспечивает от слова «совсем». Реализуется необходимая уникальность программистом FoxPro только на этапе проектирования таблиц. И то не всегда и не для всех таблиц.

Но мне нужна только выборка по запросам 1С, которые прекрасно работают. Так что…

Проблема решена.

Но у такого Решения есть недостаток.

Это – дополнительное копирование.

Благо, у меня общий размер файлов небольшой.

Ну а вдруг – огромный у кого-то!

И есть ли «Вариант без копирования файлов»?

Вариант имеется.

И вот основания данного Утверждения (по моему опыту и знаниям синтаксиса FoxPro).

  1. Файлы в FoxPro обычно открываются «в коде FoxPro» по ИмениФайла либо «без», либо «с» расширением DBF.

    1. Memo-файл открывается исходя из управляющего нулевого байта заголовка DBF-файла.

  2. FoxPro 2+ прекрасно работает с файлами DBF/DBT формата dBASE/3+.

    1. Проверил на FoxPro/DOS и на VFP/Win.

  3. Удивительно, но FoxPro прекрасно открывает автоматически файлы DBF/DBT и индексы CDX(!):

 

 

Открытие в FoxPro/DOS:

 

 

Открытие его же в VFP/Win:

 

 

 

Этого от Fox-а я и сам не ожидал. Вау…

  1. Индексы CDX через ODBC/32 не используем и таблицы - «Только чтение».

Поэтому, сделав предварительно полный архив для последующего восстановления всей системы, можно пробовать вариант полной подмены файлов с memo-полями по приведенному варианту.

Но для меня и предыдущий вариант полностью подходит (по времени исполнения запросов).

А времени на полную замену и последующую проверку работоспособности старой «Зарплаты» с подмененными файлами у меня нет. Но если кому-то будет нужно – вариант описан.

Так что – «Стоп машина!»

Итого:

  1. 1С-ке я «скормил» все файлы от FoxPro/DOS

  2. Все «скульные» запросы 1С работают без проблем

  3. Можно работать в 1С не отвлекаясь на FoxPro/DOS «на лету»

Статья вышла большая, но как смог, так и написал.

Мониторить «коменты» и отвечать не будет времени. Простите заранее.

Так что – дерзайте далее самостоятельно…

Ну а вибрациям в словах благодарности буду только рад.

С уважением ко всем вам,
Ваш Коллега 1С-ник.

См. также

Внешние источники данных Программист Бизнес-аналитик Пользователь Платформа 1С v8.3 Управляемые формы Анализ и прогнозирование Конфигурации 1cv8 Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

15.11.2022    16400    15    SQV0    48    

35

Производство готовой продукции (работ, услуг) Внешние источники данных Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 Лесное и деревообрабатывающее хозяйство Россия Управленческий учет Платные (руб)

Обработка предназначена для загрузки файлов, выгруженных из системы Базис-мебельщик, в справочник 1С "Спецификации" для последующих процессов учета и диспетчирования полуфабрикатов и изделий.

10200 руб.

24.06.2021    19764    54    53    

31

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

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

24000 руб.

24.04.2017    49412    97    165    

87
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Cерый 26 04.06.24 22:09 Сейчас в теме
Песочница на локальной машинке, с админскими правами, монопольно, внешние источники с изменением конфигурации, которые не взлетают без драйверов ODBC, кто-нибудь включает их в конфигурации?
2. user723422 8 05.06.24 10:10 Сейчас в теме
Эх, Коллега… Не работали вы в «весях», где слово «рендеринг» и не слыхивали…
Надеюсь, и публикацию, и http-сервис вы, как и я, используете в своей работе.
Смотрите прикрепленный скриншот внимательно и, прошу вас, будьте в следующий раз корректны в своих высказываниях.
Прикрепленные файлы:
3. Cерый 26 05.06.24 11:37 Сейчас в теме
Приношу извинения за некорректность.
Ваша статья очень интересна, стандартный Xbase не поддерживает Memo, читать dbf придется драйвером ODBC - зачем Внешние источники, если можно использовать технику ODBC без них?
4. user723422 8 05.06.24 13:14 Сейчас в теме
Уважаемый Коллега, еще раз внимательно прочтите анонс вначале статьи.
5. aleksey2 87 07.06.24 19:35 Сейчас в теме
Оставьте свое сообщение