Расширение sqlite3_mod_csv или как быстро загрузить огромный файл csv или часть его в 1С 7.7

24.03.18

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

Расширение к sqlite3 для выполнения sqli запросов к файлам csv и не только.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
(только для физ. лиц)
sqlite3_mod_csv_20180324
.zip 34,37Kb
3 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

sqlite3_mod_csv

С csv можно работать и штатными способами 1c.

Но что случится если файл неприлично огромен? Ничего хорошего не будет...

Что делать если требуется не весь файл, а только какая то его часть по условию? Это тоже возможно, но... медленно...

А как насчет чтобы просто "select name from csv where code = 16"? Хочется? Попробуйте расширение sqlite3_mod_csv!

Оно сделано на основании модуля csv из http://www.ch-werner.de/sqliteodbc

Сделано/изменено следующее:

    - добавлены перекодировки текста из CP_OEMCP и CP_ACP;

    - расширены флаги обработки файла;

    - расширен и упрощен режим установки заголовков колонок;

    - сделан пример для 1С 7.7 чтения файла csv с использованием 1sqlite с подключенным модулем csv и отображения результата в ТабличноеПоле 1c++ через Поставщик данных SQLiteDataProvider в двух вариантах: прямое отображение файла csv и отображение через конвертацию файла csv в файл sqlite3, конвертация производится средствами sqlite3 с подключенным модулем;

Подключение расширения:
   SELECT load_extension("sqlite3_mod_csv","sqlite3_extension_init");

Подключение файла csv:
 CREATE VIRTUAL TABLE temp.csv USING csvfile(ИмяФайла,ФлагиОбработки,Кодировка,Разделители,ОграничителиСтроки,ОпределенияКолонок[*]);

Параметры подключения:
    ИмяФайла:
        в формате windows
    ФлагиОбработки:
        0 0x0000 - в файле нет заголовка
                 - имена колонок автоматически c1,c2,c3
                 - в определении колонок только типизация
        1 0x0001 - в файле есть заголовок и он не будет выведен в таблицу
        2 0x0010 - имена колонок из заголовка, если он есть
        4 0x0100 - в определении колонок имя и тип по очереди
    Кодировка:
        1 - CP_ACP
        2 - CP_OEMCP
        3 - CP_UTF8
        прочие значения - CP_UTF8
    Разделители:
        разделитель, по-умолчанию ";"
    ОграничителиСтроки:
        с этим я не очень разбирался, отрезает правую часть строки после второго появления разделителя
    ОпределенияКолонок:
        либо только типы, либо имена и типы по очереди в зависимости от флага обработки

        т.е. либо text,int,text,text либо col1,int,mycol2,text

Пример подключения журнала работы 1С 7.7:

    CREATE VIRTUAL TABLE temp.csv USING csvfile(каталог+'1cv7.mlg',0,1);

    Пример работы в обработке sqlite3_mod_csv.ert (она вложена в архив).

Требования к обработке:

     1С++, formex, 1sqlite с поддержкой загрузки расширений //infostart.ru/public/559826/

P.S. Если на каком то файле csv 1С будет вылетать или виснуть, присылайте его мне вместе со строкой подключения.

 

Вступайте в нашу телеграмм-группу Инфостарт

sqlite3 csv 1c 7.7 импорт конвертация обмен

См. также

Внешние источники данных Программист 1С v7.7 1C77 Украина Абонемент ($m)

Рабочий механизм чтения/записи строк в формате JSON для 1С 7.7. Тестировалось на релизах 7.70.25 и 27.

1 стартмани

16.12.2019    23966    66    Volvo32    33    

25

Внешние источники данных Файловый обмен (TXT, XML, DBF), FTP Программист Руководитель проекта 1С v7.7 1С:Комплексная 7.7 Оптовая торговля, дистрибуция, логистика Управленческий учет Абонемент ($m)

Обработки обмена номенклатурой (SKU), дополнительными штрихкодами (AltSku), приемкой (AdvancedShipNotice), подтверждением приема (ASNClosed), выдачей (ShipmentOrder), подтверждением выдачи (CustomerOrderLoaded) для учетной системы 1С 7.7. Здесь выгрузка и загрузка для 1C 7.7.

1 стартмани

21.10.2019    16843    1    ksnik    0    

2

Внешние источники данных Программист 1С v7.7 1C77 Абонемент ($m)

Обработка для универсальной выгрузки данных из конфигурации 7.7 в JSON. Может быть полезна для задач переноса данных из различных конфигураций в другие конфигурации, для перехода на другие версии 1С, для перехода на 8.3, для переноса данных в другие системы учета, для организации онлайн выгрузки с целью синхронизации разных систем учета. Выгрузка справочников, документов, результатов запросов, остатков по планам счетов.

2 стартмани

09.10.2019    17805    84    Malice    16    

12

Внешние источники данных Оптовая торговля Файловый обмен (TXT, XML, DBF), FTP Программист 1С v7.7 Россия Управленческий учет Абонемент ($m)

Обработка позволяет реализовать обмен данными между решением SalesWorks и 1c 7.7.

5 стартмани

16.07.2019    16344    6    vv-adm    2    

2

Внешние источники данных Программист Оперативный учет 7.7 1С:Торговля и склад 7.7 Абонемент ($m)

Обработка выгружает данные контрагентов и создает два файла: один текстовый со всеми данными, другой формата vcards.vcf для загрузки контактных данных в андроид.

1 стартмани

10.05.2019    9889    4    rid636674    1    

0

Внешние источники данных Оптовая торговля Розничная торговля Логистика, склад и ТМЦ Программист 1С v7.7 1C77 Россия Управленческий учет Абонемент ($m)

С помощью данной обработки можно осуществить API обмен информацией по POSM с системой Инском в 1С 7.7.

10 стартмани

10.04.2019    11938    2    vv-adm    0    

0
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. CheBurator 3231 26.03.18 02:33 Сейчас в теме
2. Djelf 254 26.03.18 09:51 Сейчас в теме
(1) Что так сразу капец? Оно у меня 130к строк mlg в секунду пережевывает...
И, кстати, к 7.7 оно не прибито, можно и с консольной sqlite3.exe использовать.
3. CheBurator 3231 27.03.18 01:06 Сейчас в теме
А в пакете внутрях есть все что нужно для установки поставщика данных и прочего по доп.возможностям? для неграмотных?
4. Djelf 254 27.03.18 09:28 Сейчас в теме
Скрин обработки то посмотри. Почти все в примере есть.
5. user591953 27.07.18 12:18 Сейчас в теме
Можно ли как-нибудь открыть .mlg текущего сеанса? А то валится с "unable to open input file". При том FSO.TextStream открывает.
6. user591953 27.07.18 15:21 Сейчас в теме
(5)+ Я так понимаю, что проблема в режиме доступа к файлу, который держит открытым 1С, а sqlite пытается эксклюзивно его заблокировать. Что сильно ограничивает полезность этого мода в части чтения журнала.
7. Djelf 254 27.07.18 16:22 Сейчас в теме
(5) Ага! Русские буквы в пути к названию файла?
Ну не надо русские буквы использовать ни в названиях компов, ни в именах пользователей, ни в паролях - жить будет проще.
Беда с этими русскими буквами...

Забирай исправленную версию https://cloud.mail.ru/public/7AAP/hchUi6umk
Прикрепленные файлы:
sqlite3_mod_csv_20180727.zip
user591953; +1 Ответить
8. alyuev 204 07.02.20 18:18 Сейчас в теме
Привет, Djelf. Выдает ошибку в названии колонки, если содержится символ $, например в названии RATES (US$):

DESTINATION,DESTINATION CODE,EFFECTIVE DATE,RATES (US$),STATUS,BILLING INCREMENT,DELETION DATE,
Abkhazia,7840,19-Mar-2015,0.130000,Same, 1/1,,


Ошибка:

Ошибка выполнения: Неправильная типизация в колонке: RATES (US$)

Строка подключения: 'ИмяФайла',2,3,',','','text'
9. Djelf 254 08.02.20 09:20 Сейчас в теме
Правильно, с точки зрения 1sqlite $ в имени колонки это типизация.
Можно читать без имен колонок, либо задавать из вручную без $.
10. alyuev 204 28.08.20 12:28 Сейчас в теме
Djelf, а можно сделать учет юниксовского переноса строк (LF)? Сейчас принимает только виндовый формат (CRLF).
11. alyuev 204 28.08.20 12:49 Сейчас в теме
И еще - почему-то значения типа "2,000.00" - преобразует в 2.000.00. Т.е. запятую меняет на точку.
12. Djelf 254 02.09.20 15:39 Сейчас в теме
(11) Даже когда поле объявлено как текстовое? оО

(10) Почему нельзя можно, все можно, код то открыт.
Но зачем? За два года - две загрузки, следовательно это не нужно никому.
Мне тоже: сделал, побаловался, закинул в долгий ящик.

P.S. Перепробовал много реализаций vt.csv для sqlite, эта самая адекватная.
Тут еще непонятно как "красиво" передавать все возможные параметры в vt.
А этих параметров можно придумать очень и очень много...
Оставьте свое сообщение