2020-06-21 19:03:26 +02:00
|
|
|
# Задание к занятию "Файлы"
|
2020-05-31 18:38:46 +02:00
|
|
|
|
2020-06-22 16:54:30 +02:00
|
|
|
## Задача 1 Создать обработку для загрузки цен из файла
|
2020-06-21 19:03:26 +02:00
|
|
|
|
|
|
|
### Описание задачи
|
|
|
|
|
2020-06-22 16:54:30 +02:00
|
|
|
Создадим обработку для загрузки цен из файла CSV.
|
2020-06-21 19:03:26 +02:00
|
|
|
|
2020-06-22 16:54:30 +02:00
|
|
|
Обработка создает новый документ Цены номенклатуры,
|
|
|
|
в ТЧ заполняет данные из файла.
|
2020-06-21 19:03:26 +02:00
|
|
|
|
2020-06-22 16:54:30 +02:00
|
|
|
### Требования к результату
|
2020-06-21 19:03:26 +02:00
|
|
|
|
2021-01-24 11:40:19 +02:00
|
|
|
Выгрузка информационной базы (.dt), csv-файл содержащий список номенклатуры с ценами.
|
|
|
|
|
2020-06-22 16:54:30 +02:00
|
|
|
Возможность выбора файла с фильтром *.CSV
|
2020-06-21 19:03:26 +02:00
|
|
|
|
2020-06-22 16:54:30 +02:00
|
|
|
В файле разделитель ";" между колонками
|
2020-06-21 19:03:26 +02:00
|
|
|
|
2020-06-22 16:54:30 +02:00
|
|
|
Возможность загрузить и создать документ Цены номенклатуры.
|
2020-06-21 19:03:26 +02:00
|
|
|
|
2020-06-22 16:54:30 +02:00
|
|
|
Поиск номенклатуры по наименованию
|
2020-06-21 19:03:26 +02:00
|
|
|
|
2020-06-22 16:54:30 +02:00
|
|
|
Если не найдена, вывести сообщение вида
|
2020-12-14 19:06:58 +02:00
|
|
|
"Номенклатура: " + НаименованиеНоменклатуры + " не найдена"
|
2020-06-21 19:03:26 +02:00
|
|
|
|
|
|
|
### Процесс выполнения
|
|
|
|
|
2020-06-22 16:54:30 +02:00
|
|
|
Создать файл с расширением .CSV
|
|
|
|
формат: номенклатура;цена
|
|
|
|
|
|
|
|
пример строки файла:
|
|
|
|
Тапочки;1000
|
|
|
|
Хлеб;40
|
|
|
|
|
|
|
|
Создать новую обработку "Загрузка прайса из файла"
|
|
|
|
|
|
|
|
Добавим поле "ПутьКФайлу" с диалогом выбора
|
|
|
|
На событие "Начало выбора" добавим обработчик
|
2020-06-22 16:56:50 +02:00
|
|
|
```bsl
|
|
|
|
СтандартнаяОбработка = Ложь;
|
2020-06-22 16:54:30 +02:00
|
|
|
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
|
|
|
|
Диалог.Заголовок = "Выберите файл: ";
|
|
|
|
Фильтр = НСтр("ru = 'Текст'")
|
|
|
|
+ "(*.csv)|*.csv";
|
|
|
|
Диалог.Фильтр = Фильтр;
|
|
|
|
Диалог.ИндексФильтра = 0;
|
|
|
|
Диалог.ПредварительныйПросмотр = Ложь;
|
|
|
|
Диалог.ПроверятьСуществованиеФайла = Истина;
|
|
|
|
Диалог.МножественныйВыбор = Ложь;
|
|
|
|
Диалог.ПолноеИмяФайла = ПутьКФайлу;
|
|
|
|
|
|
|
|
Если Диалог.Выбрать() Тогда
|
|
|
|
ПутьКФайлу = Диалог.ПолноеИмяФайла;
|
|
|
|
КонецЕсли;
|
2020-06-22 16:56:50 +02:00
|
|
|
```
|
2020-06-22 17:46:32 +02:00
|
|
|
Добавим реквизит формы
|
|
|
|
АдресВХранилище (Строка)
|
|
|
|
|
|
|
|
В него поместим путь к файлу
|
|
|
|
```bsl
|
|
|
|
АдресВХранилище = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ПутьКФайлу));
|
|
|
|
```
|
2020-06-22 16:54:30 +02:00
|
|
|
Далее загрузим данные файла в ТЧ документ Цены номенклатуры
|
2020-06-22 17:46:32 +02:00
|
|
|
|
|
|
|
Создам процедуру на сервере ЗагрузитьЦеныНоменклатуры()
|
|
|
|
```bsl
|
2020-06-22 17:52:01 +02:00
|
|
|
&НаСервере
|
|
|
|
Процедура ЗагрузитьЦеныНоменклатуры()
|
2020-06-22 17:46:32 +02:00
|
|
|
Файл = ПолучитьИмяВременногоФайла("csv");
|
2020-06-23 14:59:20 +02:00
|
|
|
ФайлХранилища = ПолучитьИзВременногоХранилища(АдресВХранилище);
|
|
|
|
ФайлХранилища.Записать(Файл);
|
2020-06-22 17:46:32 +02:00
|
|
|
|
2020-06-23 14:59:20 +02:00
|
|
|
ТекстовыйФайлЗагрузки = Новый ТекстовыйДокумент;
|
2020-06-22 17:46:32 +02:00
|
|
|
Разделитель = ";";
|
|
|
|
|
|
|
|
Попытка
|
2020-06-23 14:59:20 +02:00
|
|
|
ТекстовыйФайлЗагрузки.Прочитать(Файл);
|
2020-06-22 17:46:32 +02:00
|
|
|
|
|
|
|
ДокументЦены = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
|
|
|
|
//Прочитаем строки файла
|
2020-06-23 14:59:20 +02:00
|
|
|
Для НомерСтроки=1 по ТекстовыйФайлЗагрузки.КоличествоСтрок() Цикл
|
|
|
|
НоваяСтрока = ТекстовыйФайлЗагрузки.ПолучитьСтроку(НомерСтроки);
|
2020-06-22 17:46:32 +02:00
|
|
|
// «парсим» строки по ";"
|
|
|
|
// ищем позицию символа-разделителя
|
|
|
|
Позиция = Найти(НоваяСтрока, ";");
|
2020-12-14 19:06:58 +02:00
|
|
|
НаименованиеНоменклатуры = Сред(НоваяСтрока,1,Позиция-1);
|
|
|
|
Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(НаименованиеНоменклатуры);
|
|
|
|
Если Не ЗначениеЗаполнено(Номенклатура) Тогда
|
|
|
|
Сообщение = Новый СообщениеПользователю;
|
|
|
|
Сообщение.Текст = "Номенклатура: " + НаименованиеНоменклатуры + " не найдена";
|
|
|
|
Сообщение.Сообщить();
|
|
|
|
Продолжить;
|
|
|
|
КонецЕсли;
|
2020-06-22 17:46:32 +02:00
|
|
|
// за символом-резделителем – цена
|
|
|
|
Цена = Сред (НоваяСтрока, Позиция+1);
|
|
|
|
НоваяСтрокаТЧ = ДокументЦены.Товары.Добавить();
|
2020-12-14 19:06:58 +02:00
|
|
|
НоваяСтрокаТЧ.Номенклатура = Номенклатура;
|
2020-06-22 17:46:32 +02:00
|
|
|
НоваяСтрокаТЧ.Цена = Цена;
|
2020-06-22 17:52:01 +02:00
|
|
|
КонецЦикла;
|
2020-06-22 17:46:32 +02:00
|
|
|
ДокументЦены.Записать();
|
|
|
|
Исключение
|
|
|
|
Сообщение = Новый СообщениеПользователю;
|
|
|
|
Сообщение.Текст = ОписаниеОшибки();
|
|
|
|
Сообщение.Сообщить();
|
|
|
|
КонецПопытки;
|
2020-06-22 17:52:01 +02:00
|
|
|
КонецПроцедуры
|
2020-06-22 17:46:32 +02:00
|
|
|
```
|