Бухгалтер і комп'ютер.П`ятниця, 23.02.2018, 18:06

Вітаю Вас Гість | RSS
Головна | Статті | Вхід
Меню сайту

Категорії каталога
Бухгалтер і комп'ютер [8]
Все що потрібно бухгалтерам для роботи за комп'ютером
Програмування на 1С [9]
Все що стосується програмування бухгалтерських програм "1С" версій 7.7 і 8.1.

Друзі сайту

Головна » Статті » Програмування на 1С


Універсальний імпорт CSV файлів для 1С8.
З реалізаціє імпорту як в таблицю значень, так і кожного рядка формату dsv в масив значень.
Зручно використовувати для імпорту файлів вивантаження клієнт-банків, табличної частини файлів формату mmo, так і будь-яких даних з
правильною структурою і розділювачем.

Для тесту написав обробку гарно оформлену з практичним використанням всіх функцій (текст звичайно що відкритий):
http://commerce.at.ua/load/fajli_dlja_skachuvannja/import_csv_fajliv_v_1s_dsv_csv/1-1-0-3

Код для 1С 8-ки:

// Основна функція №1 !!!
// При копіювання в інші модулі, для роботи необхідно ще ф-ї: ОтриматиСтрічку() + ОчисткаСтрічки()
// На вхід: рядок формату csv
// На виході: масив зі значеннями
// Для "розділювачПолів" звичайно що можна задавати будь-яке значення, популярні: ";", "Символы.Таб"
Функция ПарсингCSVрядкаВМасив(Знач Рядок,РозділювачПолів = ",",РозділювачТексту = """")
   
    МасивРезультат = Новый Массив;
   
    СтрічкаНаПарсинг = Рядок;
   
    Если Прав(СтрічкаНаПарсинг,1) <> РозділювачПолів Тогда
        СтрічкаНаПарсинг = СтрічкаНаПарсинг + РозділювачПолів;// Екрануємо на всякий випадок остатній символ розділювачем
    КонецЕсли;
   
    і = СтрДлина(СтрічкаНаПарсинг);
    Пока і > 1 Цикл
        Кусок = ОтриматиСтрічку(СтрічкаНаПарсинг,РозділювачПолів,РозділювачТексту);
        МасивРезультат.Добавить(ОчисткаСтрічки(Кусок,РозділювачПолів,РозділювачТексту));
        СтрічкаНаПарсинг  = Сред(СтрічкаНаПарсинг,СтрДлина(Кусок)+1);
        і = СтрДлина(СтрічкаНаПарсинг);
    КонецЦикла;
   
    Возврат МасивРезультат;
КонецФункции

// Основна функція №2 !!!
// При копіювання в інші модулі, для роботи необхідно ще ф-ї: ОтриматиСтрічку() + ОчисткаСтрічки()
// На вхід: тип "ТекстовийДокумент" (прямо зачитаний з файлу потрібного)
// На виході: таблиця значень на основі CSV файлу
// Для "розділювачПолів" звичайно що можна задавати будь-яке значення, популярні: ";", "Символы.Таб"
Функция ПарсингCSVрядкаВТаблицюЗначень(Знач Текст,РозділювачПолів = ",",РозділювачТексту = """")
   
    ТЗ = Новый ТаблицаЗначений;
   
    // Зачитуєм по черзі рядки з файлу і "проганяєм" їх через парсер, для отримання ТЗ
    КстьРядків = Текст.КоличествоСтрок();
    Для і_рядків = 1 По КстьРядків Цикл
       
        СтрічкаНаПарсинг = Текст.ПолучитьСтроку(і_рядків);
       
        Если Прав(СтрічкаНаПарсинг,1) <> РозділювачПолів Тогда
            СтрічкаНаПарсинг = СтрічкаНаПарсинг + РозділювачПолів;// Екрануємо на всякий випадок остатній символ розділювачем
        КонецЕсли;
       
        СтрокаТЗ = ТЗ.Добавить();
       
        ТЗКолонка = -1;
       
        і_перебор = СтрДлина(СтрічкаНаПарсинг);
        Пока і_перебор > 1 Цикл
           
            ТЗКолонка = ТЗКолонка + 1;
           
            Если і_рядків = 1 Тогда
                // Для першого рядка формуємо потрібну кількість колонок в ТЗ.
                ТЗ.Колонки.Добавить();
            КонецЕсли;   

            Кусок = ОтриматиСтрічку(СтрічкаНаПарсинг,РозділювачПолів,РозділювачТексту);
            СтрокаТЗ[ТЗКолонка] = ОчисткаСтрічки(Кусок,РозділювачПолів,РозділювачТексту);
            СтрічкаНаПарсинг  = Сред(СтрічкаНаПарсинг,СтрДлина(Кусок)+1);
            і_перебор = СтрДлина(СтрічкаНаПарсинг);
        КонецЦикла;
       
    КонецЦикла;   
   
    Возврат ТЗ;
   
КонецФункции


// Призначення: Вертає стрічку першу до розділювача полів для стрічки вхідної в стандарті csv
// РозділювачПолів  - для тексту csv, стандартно = ,
// РозділювачТексту - для стрічок в csv, стандартно = "
Функция ОтриматиСтрічку(СтрічкаВхідна,РозділювачПолів = ",",РозділювачТексту = """")
    Результат = "";
    і = 1;
    Пока і < СтрДлина(СтрічкаВхідна) Цикл
        Если Сред(СтрічкаВхідна,і,1) = РозділювачПолів Тогда
            Результат = Результат + РозділювачПолів;
            Прервать;
        ИначеЕсли Сред(СтрічкаВхідна,і,1) = РозділювачТексту Тогда
            ЧастковийРезультат = Сред(СтрічкаВхідна,і,1) + ОтриматиСтрічку(Сред(СтрічкаВхідна,і+1),РозділювачТексту,РозділювачТексту);
            Результат = Результат + ЧастковийРезультат;
            і = і + СтрДлина(ЧастковийРезультат);
        Иначе
            Результат = Результат + Сред(СтрічкаВхідна,і,1);
            і = і + 1;
        КонецЕсли;
    КонецЦикла;   
    Возврат Результат;
КонецФункции

// Вертає для стрічки отриманої з файлу csv
// відфільтровану гарну без всіх розділювачів
Функция ОчисткаСтрічки(Знач СтрічкаВхідна,РозділювачПолів = ",",РозділювачТексту = """")
    Если Прав(СтрічкаВхідна,1) = РозділювачПолів Тогда
        СтрічкаВхідна = Сред(СтрічкаВхідна,1,СтрДлина(СтрічкаВхідна)-1);// Забираєм остатній розділювач полів
    КонецЕсли;
    Если Сред(СтрічкаВхідна,0,1) = РозділювачТексту Тогда
        СтрічкаВхідна = Сред(СтрічкаВхідна,2,СтрДлина(СтрічкаВхідна)-2);// Забираєм крайні з обох сторін розділювачі тексту
        СтрічкаВхідна = СтрЗаменить(СтрічкаВхідна,РозділювачТексту+РозділювачТексту,РозділювачТексту);// Зменшуєм внутрішні розділювачі тексту в 2-рази
    КонецЕсли;
    Возврат СтрічкаВхідна;
КонецФункции
Категорія: Програмування на 1С | Додав: Admin (04.01.2012)
Переглядів: 5002 | Рейтинг: 5.0/3 |
Всього коментарів: 0
Ім`я *:
Email *:
Код *:

Статистика


Copyright MyCorp © 2018