1
0
mirror of https://github.com/netology-code/1c-homeworks.git synced 2024-12-12 08:23:44 +02:00
1c-homeworks/homework-5-7.md

103 lines
5.0 KiB
Markdown
Raw Normal View History

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
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-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
// «парсим» строки по ";"
// ищем позицию символа-разделителя
Позиция = Найти(НоваяСтрока, ";");
// создаем новый элемент справочника
// в код записывается подстрока от первого символа до позиции
// символа-разделителя
Номенклатура = Сред(НоваяСтрока,1,Позиция-1);
// за символом-резделителем – цена
Цена = Сред (НоваяСтрока, Позиция+1);
НоваяСтрокаТЧ = ДокументЦены.Товары.Добавить();
НоваяСтрокаТЧ.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Номенклатура);
НоваяСтрокаТЧ.Цена = Цена;
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
```