![]() |
![]() |
![]() |
|
Загрузка из 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 кроме как СтрЗаменить? " приводить портянку? совсем лень? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |