2022-02-05 22:59:16 +02:00
|
|
|
# Задание к занятию "Табличные и текстовые документы"
|
2020-05-31 18:38:56 +02:00
|
|
|
|
2022-02-05 22:59:16 +02:00
|
|
|
Результат выполнения двух задач вышлите одним файлом (.dt)
|
|
|
|
|
|
|
|
## Задача 1 Создать команду печати прайс-листа в справочнике Номенклатура в табличный документ.
|
2020-06-23 18:09:00 +02:00
|
|
|
|
|
|
|
### Описание задачи
|
|
|
|
|
2020-06-24 10:56:21 +02:00
|
|
|
Добавить возможность формирования прайс-листа в справочнике Номенклатура.
|
2020-06-23 18:09:00 +02:00
|
|
|
|
|
|
|
### Требования к результату
|
|
|
|
|
2021-01-24 11:41:12 +02:00
|
|
|
Выгрузка информационной базы (.dt) с конфигурацией из предыдущих заданий, имеет возможность формировать прайс листа из формы списка номенклатуры.
|
2020-06-24 09:24:25 +02:00
|
|
|
|
2020-06-24 10:55:31 +02:00
|
|
|
Прайс формируется на основе выделенных строк в форме списка Номенклатура.
|
2020-06-24 09:24:25 +02:00
|
|
|
|
|
|
|
Цена номенклатуры определяется на текущую дату.
|
2020-06-23 18:09:00 +02:00
|
|
|
|
2020-06-24 09:24:25 +02:00
|
|
|
Можно выделить одну или несколько строк для формирования печатной формы.
|
2020-06-23 19:40:49 +02:00
|
|
|
|
2020-06-23 18:09:00 +02:00
|
|
|
### Процесс выполнения
|
|
|
|
|
2022-02-05 22:59:16 +02:00
|
|
|
1. Добавим общий макет "МакетПрайсЛист" с типом Табличный документ.
|
2020-06-23 18:09:00 +02:00
|
|
|
|
2022-02-05 22:59:16 +02:00
|
|
|
Создадим в нем области:
|
|
|
|
- "ШапкаПрайса" с полем Дата;
|
|
|
|
- "ТабличнаяЧастьЗаголовок" с именами колонок, которые будут выводится на печать;
|
|
|
|
- "ТабличнаяЧастьСтрока" и полями Дата и Цена.
|
|
|
|
|
|
|
|
2. В форму списка номенклатуры добавим команду "Прайс лист".
|
2020-06-23 19:37:07 +02:00
|
|
|
|
2020-06-24 09:24:25 +02:00
|
|
|
3. Для печати добавим на клиенте процедуру на клиенте.
|
2020-06-23 19:37:07 +02:00
|
|
|
```bsl
|
|
|
|
&НаКлиенте
|
|
|
|
Процедура КомандаПрайсЛист(Команда)
|
|
|
|
|
|
|
|
//выделим несколько строк
|
2021-04-11 16:04:06 +02:00
|
|
|
МассивСтрок = Элементы.Список.ВыделенныеСтроки;
|
2020-06-23 19:37:07 +02:00
|
|
|
//отправим выделенные строки номенклатуры на печать
|
2022-02-05 22:59:16 +02:00
|
|
|
ПечатнаяФорма = ПечатнаяФормаПрайсЛист(МассивСтрок);
|
2020-06-23 19:37:07 +02:00
|
|
|
ПечатнаяФорма.Показать("Прайс-лист");
|
|
|
|
|
|
|
|
КонецПроцедуры
|
|
|
|
```
|
2020-06-24 11:01:44 +02:00
|
|
|
4. На сервере формируем печатную форму и возращаем на клиент для печати.
|
2020-06-23 19:37:07 +02:00
|
|
|
|
|
|
|
```bsl
|
|
|
|
&НаСервере
|
2022-02-05 22:59:16 +02:00
|
|
|
Функция ПечатнаяФормаПрайсЛист(МассивСтрок)
|
2020-06-23 19:37:07 +02:00
|
|
|
|
2022-02-05 22:59:16 +02:00
|
|
|
ПечатнаяФорма = Новый ТабличныйДокумент;
|
|
|
|
ПечатнаяФорма.ОтображатьСетку = Ложь;
|
|
|
|
ПечатнаяФорма.ОтображатьЗаголовки = Ложь;
|
2020-06-23 19:37:07 +02:00
|
|
|
|
|
|
|
Макет = ПолучитьОбщийМакет("МакетПрайсЛист");
|
|
|
|
|
|
|
|
// Получаем область шапки и макета по имени
|
|
|
|
Шапка = Макет.ПолучитьОбласть("ШапкаПрайса");
|
|
|
|
// Заполняем параметр Дата
|
|
|
|
Шапка.Параметры.Дата = ТекущаяДата();
|
|
|
|
// Выводим область в документ
|
|
|
|
ПечатнаяФорма.Вывести(Шапка);
|
|
|
|
|
|
|
|
// Получаем область заголовка
|
2022-02-05 22:59:16 +02:00
|
|
|
ТабличнаяЧастьЗаголовок = Макет.ПолучитьОбласть("ТабличнаяЧастьЗаголовок");
|
2020-06-23 19:37:07 +02:00
|
|
|
ПечатнаяФорма.Вывести(ТабличнаяЧастьЗаголовок);
|
|
|
|
|
|
|
|
// Получаем область строк для формирования табличной части в цикле
|
2022-02-05 22:59:16 +02:00
|
|
|
ТабличнаяЧастьСтрока = Макет.ПолучитьОбласть("ТабличнаяЧастьСтрока");
|
2020-06-23 19:37:07 +02:00
|
|
|
|
|
|
|
Для каждого СтрокаСписка из МассивСтрок Цикл
|
2021-04-11 16:04:06 +02:00
|
|
|
ТабличнаяЧастьСтрока.Параметры.Номенклатура = СтрокаСписка;
|
|
|
|
ТабличнаяЧастьСтрока.Параметры.Цена = 100; //Здесь необходимо получить текущую цену товара и установить ее
|
2020-06-23 19:37:07 +02:00
|
|
|
ПечатнаяФорма.Вывести(ТабличнаяЧастьСтрока);
|
|
|
|
КонецЦикла;
|
|
|
|
|
|
|
|
// Возвращаем печатную форму обратно на клиент
|
|
|
|
Возврат ПечатнаяФорма;
|
|
|
|
|
|
|
|
КонецФункции
|
|
|
|
```
|
2020-06-23 18:09:00 +02:00
|
|
|
|
2020-06-24 11:01:44 +02:00
|
|
|
5. Получим срез последних по регистру сведений Цены номенклатуры для заполнения цены и вставим в соответствующий параметр.
|
2021-04-11 16:04:06 +02:00
|
|
|
|
2022-02-05 22:59:16 +02:00
|
|
|
Примерный внешний вид печатной формы, которая должна получится:
|
|
|
|
|
|
|
|
![Пример печатной формы](img/homework-5-8-1.png)
|
|
|
|
|
|
|
|
## Задача 2 Создать обработку для загрузки прайса из файла Excel (*.xlsx)
|
2021-04-11 16:04:06 +02:00
|
|
|
|
|
|
|
### Описание задачи
|
|
|
|
|
2022-02-05 22:59:16 +02:00
|
|
|
Создадим обработку для загрузки цен из файла xlsx.
|
|
|
|
|
|
|
|
Обработка создает новый документ Цены номенклатуры, в табличной части заполняет данные из файла.
|
2021-04-11 16:04:06 +02:00
|
|
|
|
|
|
|
### Требования к результату
|
|
|
|
|
2022-02-05 22:59:16 +02:00
|
|
|
Выгрузка информационной базы (.dt)
|
2021-04-11 16:04:06 +02:00
|
|
|
|
2022-02-05 22:59:16 +02:00
|
|
|
Файл для тестирования загрузки: [homework-5-8-price](reference-data/homework-5-8-price.xlsx)
|
2021-04-11 16:04:06 +02:00
|
|
|
|
2022-02-05 22:59:16 +02:00
|
|
|
Возможность выбора файла с фильтром *.xlsx, обработка файла должна выполняться на сервере.
|
2021-04-11 16:04:06 +02:00
|
|
|
|
2022-02-05 22:59:16 +02:00
|
|
|
Возможность загрузить и создать документ Цены номенклатуры.
|
|
|
|
|
|
|
|
Поиск номенклатуры по наименованию
|
|
|
|
|
|
|
|
Если не найдена, вывести сообщение вида
|
|
|
|
"Номенклатура: " + НаименованиеНоменклатуры + " не найдена"
|
2021-04-11 16:04:06 +02:00
|
|
|
|
|
|
|
### Процесс выполнения
|
|
|
|
|
2022-02-05 22:59:16 +02:00
|
|
|
Создать новую обработку "Загрузка прайса из файла xlsx"
|
|
|
|
|
|
|
|
Добавим команду Загрузить, вынесем в командную панель формы и назначим кнопкой по умолчанию
|
|
|
|
Назначим обработчик команды со следующим алгоритмом:
|
|
|
|
```bsl
|
|
|
|
ПараметрыПомещенияФайла = Новый ПараметрыДиалогаПомещенияФайлов;
|
|
|
|
ПараметрыПомещенияФайла.Фильтр = НСтр("ru = 'Файл xlsx'; en = 'File xlsx'")
|
|
|
|
+ "(*.xlsx)|*.xlsx";
|
|
|
|
ОписаниеФайла = Ждать ПоместитьФайлНаСерверАсинх(,,, ПараметрыПомещенияФайла, УникальныйИдентификатор);
|
|
|
|
|
|
|
|
Если ОписаниеФайла = Неопределено Тогда
|
|
|
|
Возврат;
|
|
|
|
КонецЕсли;
|
|
|
|
|
|
|
|
Если ОписаниеФайла.ПомещениеФайлаОтменено Тогда
|
|
|
|
Возврат;
|
|
|
|
КонецЕсли;
|
|
|
|
|
|
|
|
ВыполнитьЗагрузкуНаСервере(ОписаниеФайла.Адрес);
|
|
|
|
```
|
|
|
|
Так как в обработчике используется ключевое слово Ждать перед словом Процедура добавим **Асинх**
|
|
|
|
|
|
|
|
Далее на сервере сохраним данные во временный файл, прочитаем и обработаем данные с помощью табличного документа
|
|
|
|
```bsl
|
|
|
|
&НаСервере
|
|
|
|
Процедура ВыполнитьЗагрузкуНаСервере(Адрес)
|
|
|
|
|
|
|
|
Данные = ПолучитьИзВременногоХранилища(Адрес);
|
|
|
|
ИмяПромежуточногоФайла = ПолучитьИмяВременногоФайла("xlsx");
|
|
|
|
Данные.Записать(ИмяПромежуточногоФайла);
|
|
|
|
|
|
|
|
ТабличныйДокумент = Новый ТабличныйДокумент;
|
|
|
|
ТабличныйДокумент.Прочитать(ИмяПромежуточногоФайла);
|
|
|
|
|
|
|
|
// Создадим новый документ - реализуйте здесь соответствующий алгоритм
|
|
|
|
|
|
|
|
// Начинаем со 2 строки т.к. в 1-й заголовки колонок
|
|
|
|
Для Сч = 2 По ТабличныйДокумент.ВысотаТаблицы Цикл
|
|
|
|
ИмяНоменклатуры = ТабличныйДокумент.Область(Сч, 1).Текст;
|
|
|
|
Цена = ТабличныйДокумент.Область(Сч, 2).Текст;
|
|
|
|
|
|
|
|
Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(ИмяНоменклатуры);
|
|
|
|
|
|
|
|
Если Не ЗначениеЗаполнено(Номенклатура) Тогда
|
|
|
|
|
|
|
|
ШаблонСообщения = НСтр("ru = 'Номенклатура: %1 не найдена'");
|
|
|
|
|
|
|
|
Сообщение = Новый СообщениеПользователю;
|
|
|
|
Сообщение.Текст = СтрШаблон(ШаблонСообщения, ИмяНоменклатуры);
|
|
|
|
Сообщение.Сообщить();
|
|
|
|
|
|
|
|
Продолжить;
|
|
|
|
|
|
|
|
КонецЕсли;
|
|
|
|
|
|
|
|
// Добавим в документ новую строку табличной части - реализуйте здесь соответствующий алгоритм
|
|
|
|
|
|
|
|
КонецЦикла;
|
|
|
|
|
|
|
|
// Запишем документ - реализуйте здесь соответствующий алгоритм
|
|
|
|
|
|
|
|
УдалитьФайлы(ИмяПромежуточногоФайла);
|
|
|
|
|
|
|
|
КонецПроцедуры
|
|
|
|
```
|
|
|
|
|
|
|
|
Реализуем в процедуре ВыполнитьЗагрузкуНаСервере алгоритм по созданию, заполнению и записи документа на основании данных табличного документа.
|