1
0
mirror of https://github.com/netology-code/1c-homeworks.git synced 2024-11-24 08:02:20 +02:00
1c-homeworks/homework-5-7.md
2020-06-22 23:52:01 +08:00

5.0 KiB

Задание к занятию "Файлы"

Задача 1 Создать обработку для загрузки цен из файла

Описание задачи

Создадим обработку для загрузки цен из файла CSV.

Обработка создает новый документ Цены номенклатуры, в ТЧ заполняет данные из файла.

Требования к результату

Возможность выбора файла с фильтром *.CSV

В файле разделитель ";" между колонками

Возможность загрузить и создать документ Цены номенклатуры.

Поиск номенклатуры по наименованию

Если не найдена, вывести сообщение вида "Номенклатура: " + Номенклатура.Наименование + " не найдена"

Процесс выполнения

Создать файл с расширением .CSV формат: номенклатура;цена

пример строки файла: Тапочки;1000 Хлеб;40

Создать новую обработку "Загрузка прайса из файла"

Добавим поле "ПутьКФайлу" с диалогом выбора На событие "Начало выбора" добавим обработчик

	СтандартнаяОбработка = Ложь;
	Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	Диалог.Заголовок     			   = "Выберите файл: ";
	Фильтр = НСтр("ru = 'Текст'")
	    + "(*.csv)|*.csv";
	Диалог.Фильтр 		 			   = Фильтр;
	Диалог.ИндексФильтра 			   = 0;
	Диалог.ПредварительныйПросмотр     = Ложь;
	Диалог.ПроверятьСуществованиеФайла = Истина;
	Диалог.МножественныйВыбор          = Ложь; 
	Диалог.ПолноеИмяФайла              = ПутьКФайлу;
	
	Если Диалог.Выбрать() Тогда
		ПутьКФайлу = Диалог.ПолноеИмяФайла;
	КонецЕсли;

Добавим реквизит формы АдресВХранилище (Строка)

В него поместим путь к файлу

АдресВХранилище = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ПутьКФайлу));

Далее загрузим данные файла в ТЧ документ Цены номенклатуры

Создам процедуру на сервере ЗагрузитьЦеныНоменклатуры()

&НаСервере
Процедура ЗагрузитьЦеныНоменклатуры()
	Файл = ПолучитьИмяВременногоФайла("csv");
	лДвоичДанные = ПолучитьИзВременногоХранилища(АдресВХранилище);
	лДвоичДанные.Записать(Файл);
	
	ТабДок = Новый ТекстовыйДокумент;
	Разделитель = ";";
	
	Попытка	
		ТабДок.Прочитать(Файл);
		
		ДокументЦены = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
		//Прочитаем строки файла
		Для НомерСтроки=1 по ТабДок.КоличествоСтрок() Цикл
			НоваяСтрока = ТабДок.ПолучитьСтроку(НомерСтроки);
			// «парсим» строки по ";"
			// ищем позицию символа-разделителя
			Позиция = Найти(НоваяСтрока, ";");
			// создаем новый элемент справочника
			// в код записывается подстрока от первого символа до позиции
			// символа-разделителя
			Номенклатура = Сред(НоваяСтрока,1,Позиция-1);
			// за символом-резделителем – цена
			Цена = Сред (НоваяСтрока, Позиция+1);
			НоваяСтрокаТЧ = ДокументЦены.Товары.Добавить();
			НоваяСтрокаТЧ.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Номенклатура);
			НоваяСтрокаТЧ.Цена = Цена;
		КонецЦикла;	
		ДокументЦены.ПолучитьФорму().Открыть();
		ДокументЦены.Записать();
	Исключение
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = ОписаниеОшибки();
		Сообщение.Сообщить();
	КонецПопытки;
КонецПроцедуры