Добавил решения заданий 5-7 и 5-8
Файлы, Текстовые и табличные документы
This commit is contained in:
parent
e61470d843
commit
53345e5d63
4
05. Документы и файлы/07. Файлы/CSVfile.csv
Normal file
4
05. Документы и файлы/07. Файлы/CSVfile.csv
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
MS Office 2020;19999
|
||||||
|
MS Windows 10;9999
|
||||||
|
MS Windows 11;11999
|
||||||
|
Ňŕďî÷ęč;1000
|
|
BIN
05. Документы и файлы/07. Файлы/homework-5-7.dt
Normal file
BIN
05. Документы и файлы/07. Файлы/homework-5-7.dt
Normal file
Binary file not shown.
112
05. Документы и файлы/07. Файлы/homework-5-7.md
Normal file
112
05. Документы и файлы/07. Файлы/homework-5-7.md
Normal 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);
|
||||||
|
НоваяСтрокаТЧ = ДокументЦены.Товары.Добавить();
|
||||||
|
НоваяСтрокаТЧ.Номенклатура = Номенклатура;
|
||||||
|
НоваяСтрокаТЧ.Цена = Цена;
|
||||||
|
КонецЦикла;
|
||||||
|
ДокументЦены.Записать();
|
||||||
|
Исключение
|
||||||
|
Сообщение = Новый СообщениеПользователю;
|
||||||
|
Сообщение.Текст = ОписаниеОшибки();
|
||||||
|
Сообщение.Сообщить();
|
||||||
|
КонецПопытки;
|
||||||
|
КонецПроцедуры
|
||||||
|
```
|
Binary file not shown.
@ -0,0 +1,115 @@
|
|||||||
|
# Задание к занятию "Текстовые и табличные документы"
|
||||||
|
|
||||||
|
## Задача 1 Создать команду печати прайс-листа в справочнике Номенклатура в текстовый документ.
|
||||||
|
|
||||||
|
### Описание задачи
|
||||||
|
|
||||||
|
Добавить возможность формирования прайс-листа в справочнике Номенклатура.
|
||||||
|
|
||||||
|
### Требования к результату
|
||||||
|
|
||||||
|
Выгрузка информационной базы (.dt) с конфигурацией из предыдущих заданий, имеет возможность формировать прайс листа из формы списка номенклатуры.
|
||||||
|
|
||||||
|
Прайс формируется на основе выделенных строк в форме списка Номенклатура.
|
||||||
|
|
||||||
|
Цена номенклатуры определяется на текущую дату.
|
||||||
|
|
||||||
|
Можно выделить одну или несколько строк для формирования печатной формы.
|
||||||
|
|
||||||
|
### Процесс выполнения
|
||||||
|
|
||||||
|
1. Добавим общий макет "МакетПрайсЛист" с типом Текстовый документ.
|
||||||
|
|
||||||
|
Пример текста.
|
||||||
|
```
|
||||||
|
#Область ШапкаПрайса
|
||||||
|
#Поле ТекущаяДата
|
||||||
|
[ Дата]
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область ТабличнаяЧастьЗаголовок
|
||||||
|
---------------------------------
|
||||||
|
Товар | Цена, рублей
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область ТабличнаяЧастьСтрока
|
||||||
|
#Поле Номенклатура
|
||||||
|
#Формат "ЧЦ=12; ЧДЦ=2;ЧРД=."
|
||||||
|
#Забивать Истина
|
||||||
|
#Поле Цена
|
||||||
|
#Выравнивание Центр
|
||||||
|
---------------------------------
|
||||||
|
[Номенклатура ]|[Цена ]
|
||||||
|
```
|
||||||
|
2. В форму списка номенклатуры добавим команду "Прайс лист (в текстовый документ)".
|
||||||
|
|
||||||
|
3. Для печати добавим на клиенте процедуру на клиенте.
|
||||||
|
```bsl
|
||||||
|
&НаКлиенте
|
||||||
|
Процедура КомандаПрайсЛист(Команда)
|
||||||
|
|
||||||
|
//выделим несколько строк
|
||||||
|
МассивСтрок = Элементы.Список.ВыделенныеСтроки;
|
||||||
|
//отправим выделенные строки номенклатуры на печать
|
||||||
|
ПечатнаяФорма = ПечатнаяФормаПрайсЛистТекстовыйДокумент(МассивСтрок);
|
||||||
|
ПечатнаяФорма.Показать("Прайс-лист");
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
```
|
||||||
|
4. На сервере формируем печатную форму и возращаем на клиент для печати.
|
||||||
|
|
||||||
|
```bsl
|
||||||
|
&НаСервере
|
||||||
|
Функция ПечатнаяФормаПрайсЛистТекстовыйДокумент(МассивСтрок)
|
||||||
|
|
||||||
|
ПечатнаяФорма = Новый ТекстовыйДокумент;
|
||||||
|
|
||||||
|
Макет = ПолучитьОбщийМакет("МакетПрайсЛист");
|
||||||
|
|
||||||
|
// Получаем область шапки и макета по имени
|
||||||
|
Шапка = Макет.ПолучитьОбласть("ШапкаПрайса");
|
||||||
|
// Заполняем параметр Дата
|
||||||
|
Шапка.Параметры.Дата = ТекущаяДата();
|
||||||
|
// Выводим область в документ
|
||||||
|
ПечатнаяФорма.Вывести(Шапка);
|
||||||
|
|
||||||
|
// Получаем область заголовка
|
||||||
|
ТабличнаяЧастьЗаголовок = Макет.ПолучитьОбласть("ТабличнаяЧастьПрайсаЗаголовок");
|
||||||
|
ПечатнаяФорма.Вывести(ТабличнаяЧастьЗаголовок);
|
||||||
|
|
||||||
|
// Получаем область строк для формирования табличной части в цикле
|
||||||
|
ТабличнаяЧастьСтрока = Макет.ПолучитьОбласть("ТабличнаяЧастьПрайсаСтрока");
|
||||||
|
|
||||||
|
Для каждого СтрокаСписка из МассивСтрок Цикл
|
||||||
|
ТабличнаяЧастьСтрока.Параметры.Номенклатура = СтрокаСписка;
|
||||||
|
ТабличнаяЧастьСтрока.Параметры.Цена = 100; //Здесь необходимо получить текущую цену товара и установить ее
|
||||||
|
ПечатнаяФорма.Вывести(ТабличнаяЧастьСтрока);
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
// Возвращаем печатную форму обратно на клиент
|
||||||
|
Возврат ПечатнаяФорма;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
```
|
||||||
|
|
||||||
|
5. Получим срез последних по регистру сведений Цены номенклатуры для заполнения цены и вставим в соответствующий параметр.
|
||||||
|
|
||||||
|
## Задача 2 Создать команду печати прайс-листа в справочнике Номенклатура в табличный документ.
|
||||||
|
|
||||||
|
### Описание задачи
|
||||||
|
|
||||||
|
Добавить возможность формирования прайс-листа в справочнике Номенклатура в табличный документ.
|
||||||
|
|
||||||
|
### Требования к результату
|
||||||
|
|
||||||
|
Выгрузка информационной базы (.dt) с конфигурацией из предыдущих заданий, имеет возможность формировать прайс листа из формы списка номенклатуры в табличный документ.
|
||||||
|
|
||||||
|
Прайс формируется на основе выделенных строк в форме списка Номенклатура.
|
||||||
|
|
||||||
|
Цена номенклатуры определяется на текущую дату.
|
||||||
|
|
||||||
|
Можно выделить одну или несколько строк для формирования печатной формы.
|
||||||
|
|
||||||
|
### Процесс выполнения
|
||||||
|
|
||||||
|
Процесс выполнения аналогичен первой задаче, но вместо текстового макета необходимо создать макет табличного документа и вывести информацию в него.
|
Loading…
x
Reference in New Issue
Block a user