Иногда приходиться работать с файлами дбф, которые могут быть связаны между собой и с данными 1с. Для этой цели была написана данная обработка.
Реализованные возможности:
- Просмотр структуры файла DBF;
- Просмотр файлов DBF (просмотр временных таблиц);
- Выгружать в таблицу значений только нужные поля DBF(когда есть необходимость работать с определенными полями DBF, чтобы не тянуть все поля в таблицу значений);
- Формировать текст пакетного запроса по умолчанию из добавленных в список файлов DBF;
- Приведение типов DBF к типу 1с (пока только к типу «Строка»);
- Указывать в структуре псевдоним поля DBF, который затем будет использоваться в запросе;
- Генерировать код на встроенном языке.
Изменено в версии 2.4 (28.09.2014):
– Добавлена возможность выбора кодировки(OEM/ANSI). По умолчанию: OEM.
– Добавлена возможность отладки запроса. Удобно использовать для переноса в консоль запросов DBF: запроса и его параметров (Пример).
– Добавлена возможность «Скопировать поле», когда необходимо в запросе использовать одновременно приведенный строковый тип и тип поля dbf (Пример).
– Добавлена возможность загружать файл dbf всегда при выполнении запроса. На форме списка файлов DBF в табличном поле добавлена колонка «Всегда загружать» (Всегда загружать:Да – файл DBF будет всегда загружаться во время выполнения запроса. Всегда загружать:Нет – файл DBF будет загружен только единожды, дальнейший вызов будет осуществляться из памяти).
– Добавлены проверки на корректность ввода имен файлов и полей dbf.
– Изменена структура сохранения файла запросов (*.sel). Данные файлов dbf теперь не хранятся в файле запросов. Старые файлы запросов поддерживаются новой версией.
– Исправлена ошибка при открытии файлов dbf, которые содержат memo поля (тип: М).
Порядок работы:
- Нажмите на кнопку «Список файлов DBF». В данной форме необходимо указать пути к файлам DBF. Также можно воспользоваться фильтром для быстрого поиска файла DBF (когда количество файлов не один десяток, а мы знаем имя нужного нам файла, то можно сначала указать имя файла, а уже затем указывать путь к файлу);
- Для любого выбранного файла нажимаем на кнопку «Структура DBF» (здесь можно указать видимые поля, псевдонимы и сделать приведение типов);
- На форме «Список файлов DBF» нажимаем на кнопку «Текст запроса по умолчанию» для формирования пакетного запроса;
- Дальнейшие действия, как и с обычной консолью запросов;
- Для того чтобы сгенерировать код на встроенном языке необходимо нажать на кнопку «Генератор кода».
Чтобы запустить консоль запросов DBF в отладке необходимо в режиме конфигуратора:
- Поставить точку останова с условием в коде;
- Прописать в условии: ВнешниеОбработки.Создать(«%ПолыйПутьКОбработке%»).ОткрытьДляОтладки(Запрос);
- Запустить отладку.
Хочу поблагодарить авторов, идеи которых использовались в данной обработке:
Найденные ошибки, замечания и пожелания приветствуются.
Обработка писалась для себя, но буду очень рад, если она кому-нибудь окажется полезной.
За красивое оформление и актуальность материала — однозначно большущий плюс!
А какого размера файлы проверялись? Ворочать в оперативке большими таблицами значений — накладно.
Прямо сейчас у меня есть задача загрузить данные из учетной системы на DBF в 1с. Обработка очень пригодится, но файлы имеют общий объем более 1 гб…
Через драйвера Windows быстрее работать не будет?
А зачем в оперативке большие таблицы воротить попробуй на ССД диске усе сделать.
(2) Nikola23, Суммарный объем файлов, с которым мне приходилось работать около 120 мб. С вашим объемом можно попробовать через ADO.
Классно сделано. Спасибо
Полезная штука. Спасибо. Не помешал бы переключатель «АДО/XBASE» И в случае АДО указывать строку подключения.
Интересная консоль, Спасибо!
отличненько в коллекцию.
Жаль только не работает с DBF-файлами у которых название полей на кириллице..
Но это уже к платформе 1С..
Плюс++
Отличная обработка, похожих невстречал!!
Можно же подключить внешний источник данных, и тянуть данные обычными запросами.
(11) puzakov, Можно, данный способ не является единственно верным. Идея обработки появилась еще задолго до релиза 8.2.14 (появление внешних источников данных), хотя даже после появления я все равно продолжаю пользоваться обработкой. Так как не нужно ничего создавать в конфигураторе, прописывать подключение, создавать поля и т.д. Как говориться на вкус и цвет все фломастеры разные :). Поэтому каждый выбирает свой инструментарий, в зависимости от задач, привычек, предпочтений…
(10) KillHunter, попробуй«Инструменты разработчика» , там есть консоль запросов с подключением к DBF по ADO
Полезная штука, но вот возможность задать кодировку DBF-файла вручную не помешала бы.
При чтении dbf возникла какая-то проблема с кодировкой.
(14) Присоеденяюсь по поводу кодировки.
Все круто, но это как ложка дегтя в бочке меда. Как всегда приходится залазить и допиливать 🙁
Ладно ловите допиленный вариант — т.к. содержимое читается при выборе файла а не при выполнении запроса, то и кодировку сделал при выборе файла и изменить ее нельзя.
Вообще непонятно почему сделано чтение файла при его выборе, а если содержимое файла поменяли? Другой кинули? Как-то нелогично
(16) CaSH_2004, Чтение файла сделано при выборе, потому что влияет на скорость выполнения запроса. При выборе dbf файл перегоняем в тз(находится в памяти) один раз и при выполнении запроса нет необходимости при каждом нажатии на кнопку «выполнить» перегонять в тз. В новой версии обработки для ситуаций когда содержимое файла меняется, реализована возможность загружать файл dbf всегда при выполнении запроса.
Изменено в версии 2.4 (28.09.2014):
– Добавлена возможность выбора кодировки(OEM/ANSI). По умолчанию: OEM.
– Добавлена возможность отладки запроса. Удобно использовать для переноса в консоль запросов DBF: запроса и его параметров.
– Добавлена возможность «Скопировать поле», когда необходимо в запросе использовать одновременно приведенный строковый тип и тип поля dbf.
– Добавлена возможность загружать файл dbf всегда при выполнении запроса. На форме списка файлов DBF в табличном поле добавлена колонка «Всегда загружать» (Всегда загружать:Да – файл DBF будет всегда загружаться во время выполнения запроса. Всегда загружать:Нет – файл DBF будет загружен только единожды, дальнейший вызов будет осуществляться из памяти).
– Добавлены проверки на корректность ввода имен файлов и полей dbf.
– Изменена структура сохранения файла запросов (*.sel). Данные файлов dbf теперь не хранятся в файле запросов. Старые файлы запросов поддерживаются новой версией.
– Исправлена ошибка при открытии файлов dbf, которые содержат memo поля (тип: М).
Добрый день!
Благодарю за инструмент. Кучу времени сэкономил на рутинную работу по переносу данных из dbf-файла в запрос.
1. Хочу добавить информацию о замеченной мною проблеме:
Я раньше пользовался обычной типовой консолью запросов от 1с и у меня там были сохранены запросы в sel-файлах. Сейчас когда открывал новую (Вашу) консоль запросов, она выдала ошибку при попытке открыть её и пыталась загрузить sel-файлы, сделанные 1с-овской версией консоли.
Думаю не лишним будет предусмотреть необходимые проверки на то, чьей версией консоли был сделан sel-файл, прежде чем его загружать.
2. Ещё хотел спросить: В текущей консоли запросов, имеется возможность сгенерировать код, и алгоритм прописан таким образом, что сначала данные из файла dbf выгружаются в таблицу значений, затем таблица значений передаётся во временную таблицу, а уже содержимое временной таблицы обрабатывается в запросе. Нельзя ли напрямую обратится запросом к dbf-файла? (ведь он по сути является внешней таблицей базы данных)
(19) ZeroDM, Очень рад, что обработка оказалась полезной. Спасибо за замечания.
1. В следующей версии, подумаю над проверкой по открытию sel-файлов.
2. Сомневаюсь, не слышал я о такой возможности.