# Задание к занятию "Файлы" ## Задача 1 Создать обработку для загрузки цен из файла ### Описание задачи Создадим обработку для загрузки цен из файла CSV. Обработка создает новый документ Цены номенклатуры, в ТЧ заполняет данные из файла. ### Требования к результату Возможность выбора файла с фильтром *.CSV В файле разделитель ";" между колонками Возможность загрузить и создать документ Цены номенклатуры. Поиск номенклатуры по наименованию Если не найдена, вывести сообщение вида "Номенклатура: " + НаименованиеНоменклатуры + " не найдена" ### Процесс выполнения Создать файл с расширением .CSV формат: номенклатура;цена пример строки файла: Тапочки;1000 Хлеб;40 Создать новую обработку "Загрузка прайса из файла" Добавим поле "ПутьКФайлу" с диалогом выбора На событие "Начало выбора" добавим обработчик ```bsl СтандартнаяОбработка = Ложь; Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Диалог.Заголовок = "Выберите файл: "; Фильтр = НСтр("ru = 'Текст'") + "(*.csv)|*.csv"; Диалог.Фильтр = Фильтр; Диалог.ИндексФильтра = 0; Диалог.ПредварительныйПросмотр = Ложь; Диалог.ПроверятьСуществованиеФайла = Истина; Диалог.МножественныйВыбор = Ложь; Диалог.ПолноеИмяФайла = ПутьКФайлу; Если Диалог.Выбрать() Тогда ПутьКФайлу = Диалог.ПолноеИмяФайла; КонецЕсли; ``` Добавим реквизит формы АдресВХранилище (Строка) В него поместим путь к файлу ```bsl АдресВХранилище = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ПутьКФайлу)); ``` Далее загрузим данные файла в ТЧ документ Цены номенклатуры Создам процедуру на сервере ЗагрузитьЦеныНоменклатуры() ```bsl &НаСервере Процедура ЗагрузитьЦеныНоменклатуры() Файл = ПолучитьИмяВременногоФайла("csv"); ФайлХранилища = ПолучитьИзВременногоХранилища(АдресВХранилище); ФайлХранилища.Записать(Файл); ТекстовыйФайлЗагрузки = Новый ТекстовыйДокумент; Разделитель = ";"; Попытка ТекстовыйФайлЗагрузки.Прочитать(Файл); ДокументЦены = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент(); //Прочитаем строки файла Для НомерСтроки=1 по ТекстовыйФайлЗагрузки.КоличествоСтрок() Цикл НоваяСтрока = ТекстовыйФайлЗагрузки.ПолучитьСтроку(НомерСтроки); // «парсим» строки по ";" // ищем позицию символа-разделителя Позиция = Найти(НоваяСтрока, ";"); НаименованиеНоменклатуры = Сред(НоваяСтрока,1,Позиция-1); Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(НаименованиеНоменклатуры); Если Не ЗначениеЗаполнено(Номенклатура) Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Номенклатура: " + НаименованиеНоменклатуры + " не найдена"; Сообщение.Сообщить(); Продолжить; КонецЕсли; // за символом-резделителем – цена Цена = Сред (НоваяСтрока, Позиция+1); НоваяСтрокаТЧ = ДокументЦены.Товары.Добавить(); НоваяСтрокаТЧ.Номенклатура = Номенклатура; НоваяСтрокаТЧ.Цена = Цена; КонецЦикла; ДокументЦены.Записать(); Исключение Сообщение = Новый СообщениеПользователю; Сообщение.Текст = ОписаниеОшибки(); Сообщение.Сообщить(); КонецПопытки; КонецПроцедуры ```