Всем доброе утро!
извиняюсь за глупый вопрос.загрузил txt в табличное поле.а теперь туплю как каждую строку записать как элемент спр.?
Создаем элемент справочника и в наименование кидем строку... записываем...
и еще зачем промежуточный элемент.. почсему нельзя сразу читая файлик создавать элементы справочника
а можно пример?
Ниже код, который загружает запчасти в справочник из текстового файла вида:
TOKICO A3091 АМОРТИЗАТОР ПОДВЕСКИ 1 1699.76 VOLVO 973444 ДЕТАЛЬ 1 223.46 VOLKSWAGEN 1U6809605G ДЕТАЛЬ 1 6919.89 Knecht OC606 ФИЛЬТР МАСЛЯНЫЙ 1 184.47 CHERY A212909060 ДЕТАЛЬ 2 190.23 DEPO 2121654L3AE УКАЗАТЕЛЬ ПОВОРОТА 1 157.74 FEBEST 0223K12F СТАБИЛИЗАТОР 1 300.37 FEBEST MAB023 ДЕТАЛЬ 2 171.48 FEBEST MAB051 ДЕТАЛЬ 4 311.55 FEBEST TAB326 ДЕТАЛЬ 2 380.28 FEBEST TMB13 ДЕТАЛЬ 1 326.44 HONDA 13343RNAA01 ДЕТАЛЬ 1 346.61 HONDA 14721PG6000 КЛАПАН ВЫПУСКНОЙ ГРМ 1 987.08 HONDA 14781PV1004 КЛАПАНА СУХАРЬ 2 51.99 HONDA 16010SAA000 ФИЛЬТР ТОПЛИВНЫЙ 2 1013.17
коды загрузки из txt файла и импорта в справочник
Процедура КнопкаВыполнитьНажатие(Кнопка) // Загружаем ВсегоКол = ТаблицаДокумента.Количество(); н=0; шаг=50; ТекШаг = шаг; для каждого стр из ТаблицаДокумента Цикл н=н+1; //Проверка Производитель Производитель = Справочники.Производитель.НайтиПоНаименованию(СокрЛП(стр.Производитель)); Если Производитель = Справочники.Производитель.ПустаяСсылка() Тогда НовЭлем = Справочники.Производитель.СоздатьЭлемент(); НовЭлем.Наименование = СокрЛП(стр.Производитель); НовЭлем.Записать(); Производитель = НовЭлем.Ссылка; КонецЕсли; //Проверка Запчасти Наим = СокрЛП(стр.Производитель)+"-"+СокрЛП(стр.КодАртикул); Номенк = Справочники.Номенклатура.НайтиПоНаименованию(Наим); Если Номенк = Справочники.Номенклатура.ПустаяСсылка() Тогда НовЭлем = Справочники.Номенклатура.СоздатьЭлемент(); НовЭлем.Наименование = Наим; НовЭлем.Производитель = Производитель; НовЭлем.Поставщик = Поставщик; НовЭлем.ВидТовара = ВидТовара; НовЭлем.КодАртикул = СокрЛП(стр.КодАртикул); НовЭлем.Описание = ""; НовЭлем.Цена = Число(стр.Цена); НовЭлем.Остаток = Число(стр.Остаток); НовЭлем.НаименованиеТекст = СокрЛП(стр.Наименование); НовЭлем.Записать(); Номенк = НовЭлем.Ссылка; Иначе //Исправим Цены и Остаток НовЭлем = Номенк.ПолучитьОбъект(); Если СтрДлина(НовЭлем.Наименование)< СтрДлина(Наим) Тогда НовЭлем.Наименование = Наим; КонецЕсли; НовЭлем.Производитель = Производитель; НовЭлем.Цена = Число(стр.Цена); НовЭлем.Остаток = Число(стр.Остаток); НовЭлем.Записать(); КонецЕсли; Если н = ТекШаг Тогда ТекШаг = ТекШаг+шаг; Состояние("Обработано "+Строка(н)+" из "+Строка(ВсегоКол)); КонецЕсли; КонецЦикла; Предупреждение("Загружено!"); КонецПроцедуры Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт МассивСтрок = Новый Массив(); Если Разделитель = " " Тогда Стр = СокрЛП(Стр); Пока 1=1 Цикл Поз = Найти(Стр,Разделитель); Если Поз=0 Тогда МассивСтрок.Добавить(Стр); Возврат МассивСтрок; КонецЕсли; МассивСтрок.Добавить(Лев(Стр,Поз-1)); Стр = СокрЛ(Сред(Стр,Поз)); КонецЦикла; Иначе ДлинаРазделителя = СтрДлина(Разделитель); Пока 1=1 Цикл Поз = Найти(Стр,Разделитель); Если Поз=0 Тогда МассивСтрок.Добавить(Стр); Возврат МассивСтрок; КонецЕсли; МассивСтрок.Добавить(Лев(Стр,Поз-1)); Стр = Сред(Стр,Поз+ДлинаРазделителя); КонецЦикла; КонецЕсли; КонецФункции Процедура ИмяФайлаНачалоВыбора(Элемент, СтандартнаяОбработка) // Отключение стандартной обработки СтандартнаяОбработка = Ложь; // Выбор файла Microsoft Excel ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ВыборФайла.Фильтр = "Документы (*.*)|*.*"; ВыборФайла.ПроверятьСуществованиеФайла = Истина; ВыборФайла.ПолноеИмяФайла = ИмяФайла; Выбор = ВыборФайла.Выбрать(); Если НЕ Выбор Тогда Возврат; КонецЕсли; ИмяФайла = ВыборФайла.ВыбранныеФайлы[0]; ТолькоИмяФайла = СтрЗаменить(ВыборФайла.ПолноеИмяФайла,ВыборФайла.Каталог,""); Выборка = Справочники.Поставщики.Выбрать(); Пока Выборка.Следующий() Цикл Если СокрЛП(Выборка.Файл)=СокрЛП(ТолькоИмяФайла) Тогда Поставщик=Выборка.Ссылка; ВидТовара = Перечисления.ВидТовара.parts; Прервать; КонецЕсли; КонецЦикла; КонецПроцедуры Процедура ЧтениеТХТФайла(Элемент) // Проверка на наличие имени файла Если ПустаяСтрока(ИмяФайла) Тогда Предупреждение("Для запуска обработки необходимо предварительно выбрать файл данных."); Возврат; КонецЕсли; // Открыть файл, создать текстовый документ, прочитать ПотокСтрок = ПолучитьПотокЧтенияСтрок(ИмяФайла); // Очистить предыдущие значения ТаблицаДокумента.Очистить(); ТаблицаДокумента.Колонки.Очистить(); // Создать колонки табличного документа ТаблицаДокумента.Колонки.Добавить("Номер",,"Номер"); ТаблицаДокумента.Колонки.Добавить("Производитель",,"Производитель"); ТаблицаДокумента.Колонки.Добавить("КодАртикул",,"КодАртикул"); ТаблицаДокумента.Колонки.Добавить("Наименование",,"Наименование"); ТаблицаДокумента.Колонки.Добавить("Остаток",,"Остаток"); ТаблицаДокумента.Колонки.Добавить("Цена",,"Цена"); // Последовательное чтение строк текстового файла КоличествоСтрок = ПотокСтрок.КоличествоСтрок(); н=0; Для Строка = 1 По КоличествоСтрок Цикл // Обработка нажатия Ctrl + Break ОбработкаПрерыванияПользователя(); // Чтение строки из файла тхт / csv СтрокаИзФайла = ПотокСтрок.ПолучитьСтроку(Строка); // Разбор строки в массив, используя в качествен символа-разделителя "|" СтрокаИзФайла = СтрЗаменить(СтрокаИзФайла, Символы.Таб,";"); МассивСтрок = РазложитьСтрокуВМассивПодстрок(СтрокаИзФайла,";"); // Добавить данные в табличную часть экранной формы Стр=ТаблицаДокумента.Добавить(); Стр.Номер = Строка; Стр.Производитель = МассивСтрок[0]; Стр.КодАртикул = МассивСтрок[1]; Стр.Наименование = МассивСтрок[2]; Стр.Остаток = МассивСтрок[3]; Стр.Цена = МассивСтрок[4]; // Отобразить информацию о ходе выполнения обработки Если н=100 Тогда Состояние("Обработка строки файла : " + "строка " + Строка + " из " + КоличествоСтрок); н=0; КонецЕсли; н=н+1; КонецЦикла; // Отобразить результаты загрузки в форме элемента ЭлементыФормы.ТаблицаДокумента.Значение = ТаблицаДокумента; ЭлементыФормы.ТаблицаДокумента.СоздатьКолонки(); КонецПроцедуры // ЧтениеTXTФайла(Элемент)
СПАСИБО ВАМ БОЛЬШОЕ
Получить Поток Чтения Строк ?
Вот
Функция ПолучитьПотокЧтенияСтрок(Файл) Попытка // Используется для доступа к параметрам файлов или каталогов. ТекстовыйФайл = Новый Файл(Файл); Если ТекстовыйФайл.Существует() = Ложь Тогда Сообщить("Файла "+Файл+" не существует!"); Возврат Неопределено; КонецЕсли; // Текстовый документ предназначен для работы с текстами. // Объект позволяет получать и сохранять текст в файле, // работать со строками ПотокЧтенияСтрок = Новый ТекстовыйДокумент(); ПотокЧтенияСтрок.Прочитать(Файл); Исключение Сообщить("Файл не прочитан.", СтатусСообщения.Внимание); Сообщить(ОписаниеОшибки()); Возврат Неопределено; КонецПопытки; // Возвращает текст, извлеченный из файла Возврат ПотокЧтенияСтрок; КонецФункции