Имя: Пароль:
1C
1С v8
Загрузка из csv
0 Константин199
 
27.03.19
02:09
&НаКлиенте
Процедура ВыбратьФайл(Команда)
    
    ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогВыбора.Заголовок = "Выберите файл";
    
    Если ДиалогВыбора.Выбрать() Тогда
        Объект.ПутьКФайлу = ДиалогВыбора.ПолноеИмяФайла;
    КонецЕсли;

    //ВыбратьФайлНаСервере();
КонецПроцедуры


&НаСервере
Процедура ИмпортироватьНаСервере()
    Разделитель = ";";
    //очищаем таблицу и удаляем колонки
    Таблица = Новый ТаблицаЗначений;
    Таблица.Очистить();
    Таблица.Колонки.Очистить();
    //ЭлементыФормы.Таблица.Колонки.Очистить();
    
    // чтение файла
    ЗагружаемыйФайл = Новый ТекстовыйДокумент;
    ЗагружаемыйФайл.Прочитать(Объект.ПутьКФайлу);
    
    //шапка по умолчанию 1 строка, из первой строки делаем колонки таблицы
    Шапка = ЗагружаемыйФайл.ПолучитьСтроку(1);
    
    //раскладываем строку в массив
    МассивКолонок = РазложитьСтрокуВМассивПодстрок(Шапка,Разделитель);
    
    //генерируем колонки    
    Для Каждого ИмяКолонки Из МассивКолонок Цикл
        
        ИмяБезПробелов = СтрЗаменить(ИмяКолонки," ",""); // убираем из имени колонок пробелы
        ИмяБезПробелов = СтрЗаменить(ИмяБезПробелов,"№","Номер");
        ИмяБезПробелов = СтрЗаменить(ИмяБезПробелов,"-","");
        ИмяБезПробелов = СтрЗаменить(ИмяБезПробелов,")","");
        ИмяБезПробелов = СтрЗаменить(ИмяБезПробелов,"(","");
        ИмяБезПробелов = СтрЗаменить(ИмяБезПробелов,".","");
        ИмяБезПробелов = СтрЗаменить(ИмяБезПробелов,"$","");
        Таблица.Колонки.Добавить(ИмяБезПробелов,,ИмяКолонки);         
        //НоваяКолонка = ЭлементыФормы.Таблица.Колонки.Добавить(ИмяБезПробелов, ИмяКолонки);
        //НоваяКолонка.Данные = ИмяБезПробелов;
        
    КонецЦикла;
    
    
    Для НомерСтроки=2 по ЗагружаемыйФайл.КоличествоСтрок() Цикл
        
        //Состояние("Обрабатывается "+Строка(Формат(?(ЗагружаемыйФайл.КоличествоСтрок()=0,0,((100*НомерСтроки)/ЗагружаемыйФайл.КоличествоСтрок())),"ЧЦ=3; ЧДЦ=0"))+" %");
        //ОбработкаПрерыванияПользователя(); //указав данный оператор, цикл можно прервать в любой момент нажатие ctrl+break
        
        // получить строку файла с указанным номером и преобразуем её в массив
        Строка = ЗагружаемыйФайл.ПолучитьСтроку(НомерСтроки);
        МассивКолонок = РазложитьСтрокуВМассивПодстрок(Строка,Разделитель);
        НоваяСтрока = Таблица.Добавить();
        
        Если МассивКолонок.Количество() <> Таблица.Колонки.Количество() Тогда
            Сообщить("Ошибка со строкой " + Строка);
            Продолжить; // скорее всего в тексте содержит разделитель
        КонецЕсли;
        
        Для НомерКолонки = 1 по МассивКолонок.Количество() Цикл
            //заполняем строку значениями
            ТекущееЗначение = МассивКолонок[НомерКолонки-1];
            ИмяКолонки = Таблица.Колонки[НомерКолонки-1].Имя;             
            НоваяСтрока[ИмяКолонки] = ТекущееЗначение;            
        КонецЦикла;           
        
    КонецЦикла;  
    
КонецПроцедуры

&НаКлиенте
Процедура ПоКнопкеНовыйКонтрагент(Команда)
       // Вставить содержимое обработчика.
        Перем НовыйКонтрагент;

        НовыйКонтрагент = Новый Структура("Наименование, ПолноеНаименование, ИНН");
        НовыйКонтрагент.Наименование = "РиК ООО";
        НовыйКонтрагент.ПолноеНаименование = "ООО Рога и копыта";
        НовыйКонтрагент.ИНН =  "123456789012";


        Если СоздатьНовогоКонтрагента(НовыйКонтрагент) = 0 Тогда
                Сообщить("Не удалось создать нового контрагента");
        КонецЕсли;

КонецПроцедуры


&НаСервере
Функция СоздатьНовогоКонтрагента(СтруктураСправочника)

        Перем НовыйКонтрагент,СпрПользователи;

        СпрКонтрагенты = Справочники.Контрагенты;
        НовыйКонтрагент = СпрКонтрагенты.СоздатьЭлемент();
        НовыйКонтрагент.Наименование = СтруктураСправочника.Наименование;
        НовыйКонтрагент.ПолноеНаименование = СтруктураСправочника.ПолноеНаименование;
        НовыйКонтрагент.ИНН = СтруктураСправочника.ИНН;
        Попытка
                НовыйКонтрагент.Записать();
                Возврат 1;
        Исключение
                Возврат 0;
        КонецПопытки;

КонецФункции    

&НаКлиенте
Процедура Импортировать(Команда)
    ИмпортироватьНаСервере();
КонецПроцедуры

// Функция "расщепляет" строку на подстроки, используя заданный
//        разделитель. Разделитель может иметь любую длину.
//        Если в качестве разделителя задан пробел, рядом стоящие пробелы
//        считаются одним разделителем, а ведущие и хвостовые пробелы параметра Стр
//        игнорируются.
//        Например,
//        РазложитьСтрокуВМассивПодстрок(",ку,,,му", ",") возвратит массив значений из пяти элементов,
//        три из которых - пустые строки, а
//        РазложитьСтрокуВМассивПодстрок(" ку   му", " ") возвратит массив значений из двух элементов
//
//    Параметры:
//        Стр -             строка, которую необходимо разложить на подстроки.
//                        Параметр передается по значению.
//        Разделитель -     строка-разделитель, по умолчанию - запятая.
//
//
//    Возвращаемое значение:
//        массив значений, элементы которого - подстроки
//
Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",")
    
    МассивСтрок = Новый Массив();
    Если Разделитель = " " Тогда
        Стр = СокрЛП(Стр);
        Пока Истина Цикл
            Поз = Найти(Стр,Разделитель);
            Если Поз=0 Тогда
                МассивСтрок.Добавить(Стр);
                Возврат МассивСтрок;
            КонецЕсли;
            МассивСтрок.Добавить(Лев(Стр,Поз-1));
            Стр = СокрЛ(Сред(Стр,Поз));
        КонецЦикла;
    Иначе
        ДлинаРазделителя = СтрДлина(Разделитель);
        Пока Истина Цикл
            Поз = Найти(Стр,Разделитель);
            Если Поз=0 Тогда
                МассивСтрок.Добавить(Стр);
                Возврат МассивСтрок;
            КонецЕсли;
            МассивСтрок.Добавить(Лев(Стр,Поз-1));
            Стр = Сред(Стр,Поз+ДлинаРазделителя);
        КонецЦикла;
    КонецЕсли;
    
КонецФункции
1 Константин199
 
27.03.19
02:14
Есть ли какой то другой способ приведения данных к одному типу при загрузке из csv  кроме как СтрЗаменить?
2 Fram
 
27.03.19
03:03
(1) а какое отношение "приведения данных к одному типу" имеет к функции СтрЗаменить?
попробуй сформулировать свой вопрос еще раз.
3 Chameleon1980
 
27.03.19
04:24
и нахера ради вопроса
"    
Есть ли какой то другой способ приведения данных к одному типу при загрузке из csv  кроме как СтрЗаменить?
"

приводить портянку?

совсем лень?
Закон Брукера: Даже маленькая практика стоит большой теории.