diff --git a/05. Документы и файлы/07. Файлы/CSVfile.csv b/05. Документы и файлы/07. Файлы/CSVfile.csv new file mode 100644 index 0000000..35ba4b8 --- /dev/null +++ b/05. Документы и файлы/07. Файлы/CSVfile.csv @@ -0,0 +1,4 @@ +MS Office 2020;19999 +MS Windows 10;9999 +MS Windows 11;11999 +�������;1000 \ No newline at end of file diff --git a/05. Документы и файлы/07. Файлы/homework-5-7.dt b/05. Документы и файлы/07. Файлы/homework-5-7.dt new file mode 100644 index 0000000..36144d4 Binary files /dev/null and b/05. Документы и файлы/07. Файлы/homework-5-7.dt differ diff --git a/05. Документы и файлы/07. Файлы/homework-5-7.md b/05. Документы и файлы/07. Файлы/homework-5-7.md new file mode 100644 index 0000000..66b554b --- /dev/null +++ b/05. Документы и файлы/07. Файлы/homework-5-7.md @@ -0,0 +1,112 @@ +# Задание к занятию "Файлы" + +## Задача 1 Создать обработку для загрузки цен из файла + +### Описание задачи + +Создадим обработку для загрузки цен из файла CSV. + +Обработка создает новый документ Цены номенклатуры, +в ТЧ заполняет данные из файла. + +### Требования к результату + +Выгрузка информационной базы (.dt), csv-файл содержащий список номенклатуры с ценами. + +Возможность выбора файла с фильтром *.CSV + +В файле разделитель ";" между колонками + +Возможность загрузить и создать документ Цены номенклатуры. + +Поиск номенклатуры по наименованию + +Если не найдена, вывести сообщение вида +"Номенклатура: " + НаименованиеНоменклатуры + " не найдена" + +### Процесс выполнения + +Создать файл с расширением .CSV +формат: номенклатура;цена + +пример строки файла: +Тапочки;1000 +Хлеб;40 + +Создать новую обработку "Загрузка прайса из файла" + +Добавим поле "ПутьКФайлу" с диалогом выбора +На событие "Начало выбора" добавим обработчик +```bsl + Режим = РежимДиалогаВыбораФайла.Открытие; + Диалог = Новый ДиалогВыбораФайла(Режим); //Создаем диалог в режиме открвтия файла и заплняем свойства + Фильтр = НСтр("ru = 'Текст'; en = 'Text'") + + "(*.txt)|*.txt"; + Диалог.Фильтр = Фильтр; + Диалог.МножественныйВыбор = Ложь; + Диалог.Заголовок = "Выберите файл"; + Оповещение = Новый ОписаниеОповещения("ВыборФайлаЗавершение", ЭтотОбъект); //Процедура, которая запустится после закрытия диалога + Диалог.Показать(Оповещение); //Открываем диалог +``` +В этом же модуле нужно объявить процедуру-обработчик закрытия диалога: +```bsl +Процедура ВыборФайлаЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт + Если ВыбранныеФайлы = Неопределено Тогда //Если пользователь ничего не выбрал, ничего не делаем + Возврат; + КонецЕсли; + ПутьКФайлу = ВыбранныеФайлы[0]; +КонецПроцедуры +``` +Добавим реквизит формы +АдресВХранилище (Строка) +На форму его отображать не нужно + +В реквизит поместим путь к файлу +```bsl +АдресВХранилище = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ПутьКФайлу)); +``` +Далее загрузим данные файла в ТЧ документ Цены номенклатуры + +Создам процедуру на сервере ЗагрузитьЦеныНоменклатуры() +```bsl +&НаСервере +Процедура ЗагрузитьЦеныНоменклатуры() + Файл = ПолучитьИмяВременногоФайла("csv"); + ФайлХранилища = ПолучитьИзВременногоХранилища(АдресВХранилище); + ФайлХранилища.Записать(Файл); + + ТекстовыйФайлЗагрузки = Новый ТекстовыйДокумент; + Разделитель = ";"; + + Попытка + ТекстовыйФайлЗагрузки.Прочитать(Файл); + + ДокументЦены = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент(); + //Прочитаем строки файла + Для НомерСтроки=1 по ТекстовыйФайлЗагрузки.КоличествоСтрок() Цикл + НоваяСтрока = ТекстовыйФайлЗагрузки.ПолучитьСтроку(НомерСтроки); + // «парсим» строки по ";" + // ищем позицию символа-разделителя + Позиция = Найти(НоваяСтрока, ";"); + НаименованиеНоменклатуры = Сред(НоваяСтрока,1,Позиция-1); + Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(НаименованиеНоменклатуры); + Если Не ЗначениеЗаполнено(Номенклатура) Тогда + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = "Номенклатура: " + НаименованиеНоменклатуры + " не найдена"; + Сообщение.Сообщить(); + Продолжить; + КонецЕсли; + // за символом-резделителем – цена + Цена = Сред (НоваяСтрока, Позиция+1); + НоваяСтрокаТЧ = ДокументЦены.Товары.Добавить(); + НоваяСтрокаТЧ.Номенклатура = Номенклатура; + НоваяСтрокаТЧ.Цена = Цена; + КонецЦикла; + ДокументЦены.Записать(); + Исключение + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = ОписаниеОшибки(); + Сообщение.Сообщить(); + КонецПопытки; +КонецПроцедуры +``` diff --git a/05. Документы и файлы/08. Текстовые и табличные документы/homework-5-8.dt b/05. Документы и файлы/08. Текстовые и табличные документы/homework-5-8.dt new file mode 100644 index 0000000..c83d127 Binary files /dev/null and b/05. Документы и файлы/08. Текстовые и табличные документы/homework-5-8.dt differ diff --git a/05. Документы и файлы/08. Текстовые и табличные документы/homework-5-8.md b/05. Документы и файлы/08. Текстовые и табличные документы/homework-5-8.md new file mode 100644 index 0000000..6c64479 --- /dev/null +++ b/05. Документы и файлы/08. Текстовые и табличные документы/homework-5-8.md @@ -0,0 +1,115 @@ +# Задание к занятию "Текстовые и табличные документы" + +## Задача 1 Создать команду печати прайс-листа в справочнике Номенклатура в текстовый документ. + +### Описание задачи + +Добавить возможность формирования прайс-листа в справочнике Номенклатура. + +### Требования к результату + +Выгрузка информационной базы (.dt) с конфигурацией из предыдущих заданий, имеет возможность формировать прайс листа из формы списка номенклатуры. + +Прайс формируется на основе выделенных строк в форме списка Номенклатура. + +Цена номенклатуры определяется на текущую дату. + +Можно выделить одну или несколько строк для формирования печатной формы. + +### Процесс выполнения + +1. Добавим общий макет "МакетПрайсЛист" с типом Текстовый документ. + +Пример текста. +``` +#Область ШапкаПрайса +#Поле ТекущаяДата + [ Дата] +#КонецОбласти + +#Область ТабличнаяЧастьЗаголовок +--------------------------------- +Товар | Цена, рублей +#КонецОбласти + +#Область ТабличнаяЧастьСтрока +#Поле Номенклатура + #Формат "ЧЦ=12; ЧДЦ=2;ЧРД=." + #Забивать Истина +#Поле Цена +#Выравнивание Центр +--------------------------------- +[Номенклатура ]|[Цена ] +``` +2. В форму списка номенклатуры добавим команду "Прайс лист (в текстовый документ)". + +3. Для печати добавим на клиенте процедуру на клиенте. +```bsl +&НаКлиенте +Процедура КомандаПрайсЛист(Команда) + + //выделим несколько строк + МассивСтрок = Элементы.Список.ВыделенныеСтроки; + //отправим выделенные строки номенклатуры на печать + ПечатнаяФорма = ПечатнаяФормаПрайсЛистТекстовыйДокумент(МассивСтрок); + ПечатнаяФорма.Показать("Прайс-лист"); + +КонецПроцедуры +``` +4. На сервере формируем печатную форму и возращаем на клиент для печати. + +```bsl +&НаСервере +Функция ПечатнаяФормаПрайсЛистТекстовыйДокумент(МассивСтрок) + + ПечатнаяФорма = Новый ТекстовыйДокумент; + + Макет = ПолучитьОбщийМакет("МакетПрайсЛист"); + + // Получаем область шапки и макета по имени + Шапка = Макет.ПолучитьОбласть("ШапкаПрайса"); + // Заполняем параметр Дата + Шапка.Параметры.Дата = ТекущаяДата(); + // Выводим область в документ + ПечатнаяФорма.Вывести(Шапка); + + // Получаем область заголовка + ТабличнаяЧастьЗаголовок = Макет.ПолучитьОбласть("ТабличнаяЧастьПрайсаЗаголовок"); + ПечатнаяФорма.Вывести(ТабличнаяЧастьЗаголовок); + + // Получаем область строк для формирования табличной части в цикле + ТабличнаяЧастьСтрока = Макет.ПолучитьОбласть("ТабличнаяЧастьПрайсаСтрока"); + + Для каждого СтрокаСписка из МассивСтрок Цикл + ТабличнаяЧастьСтрока.Параметры.Номенклатура = СтрокаСписка; + ТабличнаяЧастьСтрока.Параметры.Цена = 100; //Здесь необходимо получить текущую цену товара и установить ее + ПечатнаяФорма.Вывести(ТабличнаяЧастьСтрока); + КонецЦикла; + + // Возвращаем печатную форму обратно на клиент + Возврат ПечатнаяФорма; + +КонецФункции +``` + +5. Получим срез последних по регистру сведений Цены номенклатуры для заполнения цены и вставим в соответствующий параметр. + +## Задача 2 Создать команду печати прайс-листа в справочнике Номенклатура в табличный документ. + +### Описание задачи + +Добавить возможность формирования прайс-листа в справочнике Номенклатура в табличный документ. + +### Требования к результату + +Выгрузка информационной базы (.dt) с конфигурацией из предыдущих заданий, имеет возможность формировать прайс листа из формы списка номенклатуры в табличный документ. + +Прайс формируется на основе выделенных строк в форме списка Номенклатура. + +Цена номенклатуры определяется на текущую дату. + +Можно выделить одну или несколько строк для формирования печатной формы. + +### Процесс выполнения + +Процесс выполнения аналогичен первой задаче, но вместо текстового макета необходимо создать макет табличного документа и вывести информацию в него.