Добавил решения заданий 5-7 и 5-8

Файлы, Текстовые и табличные документы
This commit is contained in:
Марычев Павел Иванович 2022-01-15 16:09:10 +04:00
parent e61470d843
commit 53345e5d63
5 changed files with 231 additions and 0 deletions

View File

@ -0,0 +1,4 @@
MS Office 2020;19999
MS Windows 10;9999
MS Windows 11;11999
Ňŕďî÷ęč;1000
1 MS Office 2020 19999
2 MS Windows 10 9999
3 MS Windows 11 11999
4 Ňŕďî÷ęč 1000

View File

@ -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);
НоваяСтрокаТЧ = ДокументЦены.Товары.Добавить();
НоваяСтрокаТЧ.Номенклатура = Номенклатура;
НоваяСтрокаТЧ.Цена = Цена;
КонецЦикла;
ДокументЦены.Записать();
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ОписаниеОшибки();
Сообщение.Сообщить();
КонецПопытки;
КонецПроцедуры
```

View File

@ -0,0 +1,115 @@
# Задание к занятию "Текстовые и табличные документы"
## Задача 1 Создать команду печати прайс-листа в справочнике Номенклатура в текстовый документ.
### Описание задачи
Добавить возможность формирования прайс-листа в справочнике Номенклатура.
### Требования к результату
Выгрузка информационной базы (.dt) с конфигурацией из предыдущих заданий, имеет возможность формировать прайс листа из формы списка номенклатуры.
Прайс формируется на основе выделенных строк в форме списка Номенклатура.
Цена номенклатуры определяется на текущую дату.
Можно выделить одну или несколько строк для формирования печатной формы.
### Процесс выполнения
1. Добавим общий макет "МакетПрайсЛист" с типом Текстовый документ.
Пример текста.
```
#Область ШапкаПрайса
#Поле ТекущаяДата
[ Дата]
#КонецОбласти
#Область ТабличнаяЧастьЗаголовок
---------------------------------
Товар | Цена, рублей
#КонецОбласти
#Область ТабличнаяЧастьСтрока
#Поле Номенклатура
#Формат "ЧЦ=12; ЧДЦ=2;ЧРД=."
#Забивать Истина
#Поле Цена
#Выравнивание Центр
---------------------------------
[Номенклатура ]|[Цена ]
```
2. В форму списка номенклатуры добавим команду "Прайс лист (в текстовый документ)".
3. Для печати добавим на клиенте процедуру на клиенте.
```bsl
&НаКлиенте
Процедура КомандаПрайсЛист(Команда)
//выделим несколько строк
МассивСтрок = Элементы.Список.ВыделенныеСтроки;
//отправим выделенные строки номенклатуры на печать
ПечатнаяФорма = ПечатнаяФормаПрайсЛистТекстовыйДокумент(МассивСтрок);
ПечатнаяФорма.Показать("Прайс-лист");
КонецПроцедуры
```
4. На сервере формируем печатную форму и возращаем на клиент для печати.
```bsl
&НаСервере
Функция ПечатнаяФормаПрайсЛистТекстовыйДокумент(МассивСтрок)
ПечатнаяФорма = Новый ТекстовыйДокумент;
Макет = ПолучитьОбщийМакет("МакетПрайсЛист");
// Получаем область шапки и макета по имени
Шапка = Макет.ПолучитьОбласть("ШапкаПрайса");
// Заполняем параметр Дата
Шапка.Параметры.Дата = ТекущаяДата();
// Выводим область в документ
ПечатнаяФорма.Вывести(Шапка);
// Получаем область заголовка
ТабличнаяЧастьЗаголовок = Макет.ПолучитьОбласть("ТабличнаяЧастьПрайсаЗаголовок");
ПечатнаяФорма.Вывести(ТабличнаяЧастьЗаголовок);
// Получаем область строк для формирования табличной части в цикле
ТабличнаяЧастьСтрока = Макет.ПолучитьОбласть("ТабличнаяЧастьПрайсаСтрока");
Для каждого СтрокаСписка из МассивСтрок Цикл
ТабличнаяЧастьСтрока.Параметры.Номенклатура = СтрокаСписка;
ТабличнаяЧастьСтрока.Параметры.Цена = 100; //Здесь необходимо получить текущую цену товара и установить ее
ПечатнаяФорма.Вывести(ТабличнаяЧастьСтрока);
КонецЦикла;
// Возвращаем печатную форму обратно на клиент
Возврат ПечатнаяФорма;
КонецФункции
```
5. Получим срез последних по регистру сведений Цены номенклатуры для заполнения цены и вставим в соответствующий параметр.
## Задача 2 Создать команду печати прайс-листа в справочнике Номенклатура в табличный документ.
### Описание задачи
Добавить возможность формирования прайс-листа в справочнике Номенклатура в табличный документ.
### Требования к результату
Выгрузка информационной базы (.dt) с конфигурацией из предыдущих заданий, имеет возможность формировать прайс листа из формы списка номенклатуры в табличный документ.
Прайс формируется на основе выделенных строк в форме списка Номенклатура.
Цена номенклатуры определяется на текущую дату.
Можно выделить одну или несколько строк для формирования печатной формы.
### Процесс выполнения
Процесс выполнения аналогичен первой задаче, но вместо текстового макета необходимо создать макет табличного документа и вывести информацию в него.