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