Добавил решение блока 06

This commit is contained in:
2022-03-17 16:24:33 +04:00
parent 2ae226e9ec
commit b9228a2a93
27 changed files with 788 additions and 0 deletions

View File

@@ -0,0 +1,34 @@
# Задание к занятию "Конструктор запросов"
## Задача "Обновление цен в документе Реализация"
### Описание задачи
Добавить команду и соответственно кнопку "Обновить цены" в командную панель табличной части документа Реализация. При нажатии на кнопку присходит обновление цен номенклатуры в табличной части на дату документа.
### Требования к результату
Выгрузка информационной базы (.dt) с конфигурацией из задания https://github.com/netology-code/1c-homeworks/blob/master/homework-5-5.md в котором реализовать алгоритм обновления цен в табличной части документа Реализация.
### Процесс выполнения
1. Взять конфигурацию из файла https://github.com/netology-code/1c-homeworks/blob/master/homework-5-5.md.
2. Периодичность регистра сведений Цены номенклатуры должна быть установлена в значение в Пределах дня.
3. В форме документа Реализация - создать команду ОбновитьЦены и перетащить в командную панель табличной части.
4. Перекрыть действие команды и выбрать пункт "Создать на клиенте и процедуру на сервере".
5. В процедуре на сервере реализовать процесс обновления цен следующим образом:
* Добавить проверку на заполненность табличной части Товары;
* Сформировать массив элементов, который содержит в себе перечень всей номенклатуры из табличной части;
* Из контекстного меню выбрать Конструктор запроса с обработкой результата, в котором выбрать Тип обработки = Обход результата;
* На закладке Таблицы и поля конструктора добавить в Таблицы ЦеныНоменклатуры.СрезПоследних;
* В параметрах виртуальной таблицы укажите параметр периода и условие Номенклатура в (&СписокНоменклатуры);
* Выбираем поля - Номенклатура и Цена и нажимаем на кнопку Ок;
* Для запроса устанавливаем значения параметров такие как дата объекта и заполненный массив элементов номенклатуры табличной части;
* Выполняем запрос и проверяем чтобы результат был не пустой. Иначе возврат;
* Если запрос не пустой - делаем выборку и обходим в цикле все записи результата выполнения запроса;
* В табличной части документа находим строки и в цикле подставляем цену из текущей записи результата запроса.
Поиск строк табличной части осуществляем через НайтиСтроки(). В качестве параметра заполняем структуру значением номенклатуры из
записи результата запроса.
* Если цена новая отличается от старой то пересчитываем сумму найденной строки;

View File

@@ -0,0 +1,60 @@
# Задание к занятию "Условия и подзапросы"
## Задача № 1 "Отбор номенклатуры при обновлении цен в документе Реализация"
### Описание задачи
Изменить процедуру для команды "Обновить цены" документа Реализация. Перечень номенклатуры получать не передачей элементов массива, а используя вложенный запрос к табличной части текущего документа.
### Требования к результату
Выгрузка информационной базы (.dt) с конфигурацией из прошлого задания в котором внести изменения для получения перечня элементов номенклатуры вложенным запросом к табличной части документа Реализация.
### Процесс выполнения
1. Использовать файл *.cf конфигурацию из прошлого задания.
2. В форме документа Реализация для серверной процедуры команды Обновить цены внести следующие изменения:
* Убрать заполнение массива элементов номенклатуры;
* Для запроса получения цен убрать заполнение параметра СписокНоменклатуры;
* В конструкторе запроса в параметрах виртуальной таблицы в поле условие удалить предыдущее условие и вместо него -
- вызвать конструктор запроса в поле условие;
- построить запрос к табличной части документа Реализация с выборкой одного поля Номенклатура.Ссылка;
- В операторе ГДЕ указать параметр для отбора определенной ссылки документа реализация;
- Нажать на ОК. Полученый текст запроса использовать для условия отбора измерения Номенклатура;
* Для запроса добавить установку параметра документа реализации текущей ссылкой, при этом проверять чтобы ссылка была не пустая;
* Если ссылка пустая то Возврат;
3. Проверить заполнение цен для всех товаров из табличной части документа Реализация нажатием на кнопку Обновить цены.
## Задача № 2 "Заполнение строк табличной части по отбору в документе Реализация"
### Описание задачи
Добавить команду "Заполнить строки" в табличной части документа Реализация. При заполнении добавить возможность отбора по номенклатурной группе и диапазону цен. Заполнять номенклатуру и цены из регистра Цены номенклатуры.
### Требования к результату
Прикрепить .dt файл с внесенными изменениями по реализации заполнения табличной части документа Реализация из регистра сведений Цены номенклатура по отбору.
### Процесс выполнения
* В Конфигураторе добавить обработку ЗаполнениеНоменклатуры. В обработке -
- создать форму и реквизиты формы ГруппаТовара - тип справочник Номенклатура с возможностью выбора только групп,
ЦенаС, ЦенаПо - тип такой же как у реквизита Цена в регистре сведений Цены номенклатуры;
- Разместить реквизиты на форме;
- Cоздать серверную функцию ПриЗакрытииНаСервере();
- В функции ПриЗакрытииНаСервере - создать запрос. Текст запроса выбирает последние цены на дату документа Реализация из регистра сведений Цены номенклатуры. Условие в срезе
текста запроса формировать динамически в зависимости от значений реквизитов - ГруппаТовара, ЦенаС, ЦенаПо. При этом возможны варианты - заполнена или не заполнена группа
номенклатуры. ЦенаС должна быть меньше чем ЦенаПо, иначе не формировать запрос и вывести соответствующее сообщение. Если не заполнена группа товара, то отбирать цены
для всего товара без привязки к группе.
Так же в зависимости от этих условий устанавливать необходимые параметры запроса.
Создать структуру с элементами Номенклатура, Цена. В цикле заполнить массив структур из результата выборки запроса;
- Добавить команду Заполнить и соответственно кнопку на форму. При нажатии на кнопку вызвать последовательно - команду Закрыть(), серверную функцию ПриЗакрытииНаСервере(),
которая возвращает заполненный массив структур. Далее вызвать команду ОповеститьОВыборе() с передачей массива структур в качестве параметра;
* Для командной панели табличной части документа Реализация добавить команду ЗаполнитьСтроки и соответственно кнопку;
* Переопределить событие для команды ЗаполнитьСтроки в котором реализовать открытие формы обработки ЗаполнениеНоменклатуры. В команде ОткрытьФорму() передавать в качестве владельца форму текущего документа;
* Для формы документа перекрыть событие ОбработкаВыбора на клиенте и реализовать заполнение табличной части документа из полученного массива структур в параметре
ВыбранноеЗначение. Заполнять значения для реквизитов Номенклатура и Цена;
* Протестировать - заполнить в регистр сведений строки и проверить заполнение строк ТЧ документа Реализация нажатием на кнопку ЗаполнитьСтроки и установкой различных вариантов значений реквизитов формы обработки ЗаполнениеНоменклатуры.

View File

@@ -0,0 +1,41 @@
# Задание к занятию "Итоги и группировки"
## Задача "Реестр документов Поступление"
### Описание задачи
Создать внешнюю обработку РеестрДокументовПоступление. Обработка формирует и выводит на экран Табличный документ с перечнем документов Поступление за указанный период. Возможные итоги регулируются настройками обработки.
### Требования к результату
Прикрепить .epf файл внешней обработки для формирования реестра документов Поступление. Выгрузить базу в .dt файл и прикрепить в качестве результата.
### Процесс выполнения
1. Использовать файл *.cf конфигурацию из прошлого задания.
2. Создать общий макет РеестрДокументовПоступление. Тип макета - табличный документ. В макете добавить области:
* Для вывода периода формирования реестра;
* Для вывода детальных записей по документам Поступление. Выводить данные по ссылке документа, контрагенту и сумме документа;
* Для возможности отображения итогов по контрагенту и общих итогов. Итоги выводить после детальных записей. Если в обработке указана возможность выводить итоги по контрагенту
и детальные записи, то в детальных записях по документам должен контрагент отсутствовать. Общие итоги выводятся в конце отчета
3. Создать внешнюю обработку РеестрДокументвоПоступление, в которой:
* Добавить реквизиты формы:
- ДатаС и ДатаПо - тип дата. Разместить на форме в виде полей для выбора даты;
- ДетальныеЗаписи, ИтогиПоКонтрагенту и ОбщиеИтоги - тип булево и разместить на форме в виде флажков;
* Добавить команду Реестр и соответствующую кнопку разместить на форме;
* Для команды определить действие в котором реализовать:
- если на форме не выбран ни один из флажков, то возврат и вывести подходящее сообщение;
- создать объект Запрос;
- анализировать значения реквизитов периода для формирования строки условия запроса. Например если ДатаС не заполнена, а ДатаПо заполнена записываем в строковую
переменную "ГДЕ Документ.Дата <=&ДатаПо". Также рассмотреть варианты когда обе даты не заполнены, обе даты заполнены или заполнена только ДатаС. Строку условия
записываем в переменную для указания в качестве параметра в тексте основного запроса;
- в этой же проверке устанавливаем используемые параметры для запроса. Например - для случая выше устанавливаем параметр для формирования условия
и для ДатаПо - Запрос.УстановитьПараметр("ДатаПо", КонецДня(ДатаПо));
- формировать строку для итогов.Если установлен флажок ОбщиеИтоги то записывать в переменную строку по общим итогам. Например - СтрокаИтоги = "ИТОГИ Сумма(СуммаДокумента)
ПО ОБЩИЕ". Проверять если устовлен флажок детальные записи то в строку итогов добавлять итоги по контрагенту (при установленном флажке ИтогиПоКонтрагенту) и итоги по
детальным записям. Передавать сформированную строку в качестве параметра в запрос.
- создать текст запроса, который может быть в двух вариантах. Проверяем условием. Если не установлен флажок ДетальныеЗаписи, а установлен ИтогиПоКонтрагенту, то
формировать текст запроса в виде группировки по контрагенту. Иначе формируем текст запроса в виде итогов по детальным записям. При установленном флажке
ИтогиПоКонтрагенту добавляем во второй вариант текст запроса итогов по контрагенту. Добавить в запрос необходимые параметры для периода, формирования итогов и условий;
- выполнить обработку данных и вывод в макет;
- создать документы Поступление в системе различными датами и протестировать корректный вывод макета на экран;

View File

@@ -0,0 +1,37 @@
# Задание к занятию "Соединения"
## Задача "Информация по контрагенту"
### Описание задачи
Создать внешнюю обработку ИнформацияПоКонтрагенту. Обработка формирует и выводит на экран Табличный документ с информацией по контрагенту. В обработке выбирается контрагент для формирования информации.
### Требования к результату
Прикрепить .epf файл внешней обработки для формирования информации по контрагенту и .dt выгруженной базы с данными.
### Процесс выполнения
1. Сформировать внешнюю обработку ИнформацияПоКонтрагенту.epf.
2. В обработку добавить реквизит формы Контрагент с типом Справочники.Контрагенты.
3. В конфигурацию добавить общий макет ИнформацияПоКонтрагенту типа табличный документ.
4. Создать команду Вывести информацию и соответствующую кнопку на форму.
5. Перекрыть действие команды и реализовать следующее:
* Если реквизит Контрагент не заполнен, выдавать соответствующее сообщение и дальше не продолжать;
* Создать текст запроса который будет посекционно выводить информацию по выбранному контрагенту в общий макет ИнформацияПоКонтрагенту;
* В первую секцию выводить наименование контрагента, ИНН, и КПП из справочника Контрагенты;
* Во вторую секцию выводить контактную информацию по контрагенту из табличной части КонтактнаяИнформация из справочника Контрагенты;
* Будем считать что контрагент является и поставщиком и покупателем. Поэтому в третью секцию выводить Товар, Количество проданного товара и Количество поступившего
товара из документов Поступление и Реализация;
* При формировании текста запроса учитывать следующие особенности:
- использовать один запрос;
- для получения контактной информации использовать ЛЕВОЕ СОЕДИНЕНИЕ, чтобы получить сведения о контрагентах и без контактной информации;
- товар в запросе должен быть объединен в одну колонку как для продажи так и для поступления;
- для получения количества проданного и поступившего товара использовать ПОЛНОЕ СОЕДИНЕНИЕ в подзапросе по товару;
- При полном соединении не должны присутствовать значения Null;
- Правильно использовать группировки и агрегатные функции в подзапросе;
- для соединения с подзапросом установить связь со справочником Контрагенты используя ВНУТРЕННЕЕ СОЕДИНЕНИЕ;
- Результат запроса можно обрабатывать только на свертку через выгрузку в таблицу значений;
6. Создать примеры в справочниках и документах. Протестировать формирование табличный документа.
7. Для реализации и поступления тестировать на нескольких документах. Товары в табличной части должны отличаться.

View File

@@ -0,0 +1,28 @@
# Задание к занятию "Временные таблицы и пакетные запросы"
## Задача "Скидки для Реализации"
### Описание задачи
Создать простой механизм подстановки скидки в табличную часть документа Реализация. Сумму рассчитывать с учетом скидки.
### Требования к результату
Прикрепить .dt выгруженной базы с данными.
### Процесс выполнения
1. Создать простой справочник Номенклатурная группа без иерархии.
2. В справочник номенклатура добавить реквизит Номенклатурная группа.
3. Создать документ "Скидки номенклатуры". В шапку вывести дату и номер документа.
4. Добавить табличную часть документа с реквизитами - Объект - составного типа (Номенклатурная группа, Номенклатура), Процент скидки - тип числовой.
5. Добавить периодический регистр сведений Скидки номенклатуры с измерением Объект (тип как в документе) и ресурсом Процент скидки.
6. Делать движения в регистр при проведении документа Скидки номенклатуры;
7. В табличную часть документа Реализация добавить реквизит Автоматическая скидка.
8. В табличную часть добавить команду Применить скидку. В этом случае реализовать:
* Если для номенклатуры из табличной части документа, установлена скидка в регистре сведений на дату документа, то заполнять ее в поле
Автоматическая скидка и пересчитывать сумму с учетом скидки;
* Если для номенклатуры не установлена скидка, а установлена для номенклатурной группы то применять скидку для номенклатурной группы.
Имеется ввиду значение скидки для реквизита Номенклатурная группа Номенклатуры в табличной части документа;
* Поиск скидок осуществлять через временные таблицы пакетного запроса с использованием менеджера временных таблиц;

View File

@@ -0,0 +1,23 @@
# Задание к занятию "Введение в СКД"
## Задача "Отчет Продажи по контрагентам"
### Описание задачи
Создать отчет Продажи по контрагентам на СКД.
### Требования к результату
Прикрепить файл внешнего отчета и выгрузку информационной базы (.dt)
### Процесс выполнения
1. Создать внешний отчет.
2. В свойстве отчета Основная схема компоновки данных нажать на кнопку Открыть схему компоновки данных.
3. Добавить источник запрос и в нем реализовать отбор данных по табличной части документа реализация. Данные по реализации получать на определенную дату включительно.
4. В отчет вывести группировку по полю Контрагент.
5. Для контрагентов вывести среднюю цену продажи из документа и общее количество.
6. Для каждого контрагента показать строки по номенклатуре.
7. В этих строках отобразить поле: Номенклатура, и для каждой номенклатуры вывести количество, среднюю цену и сумму продажи.

View File

@@ -0,0 +1,36 @@
# Задание к занятию "Работа с СКД"
## Задача "Отчет Продажи по контрагентам"
### Описание задачи
Создать отчет Продажи по контрагентам на СКД. Запрос используем из предыдущего задания. Добавляем набор данных - объект. Имя набора данных - ОтчетПоПродажам.
Из модуля отчета организовать заполнение отчета из таблицы значений с возможностью выполнения расшифровки.
### Требования к результату
В отчете вместо набора данных Запрос использовать набор данных Объект. Перекрыть событие ПриКомпоновкеРезультата модуля объекта отчета для передачи ТЗ в СКД. Прикрепить файл внешнего отчета и выгрузку информационной базы (.dt).
### Процесс выполнения
1. Изменяем внешний отчета из прошлого задания;
2. Перекрыть событие ПриКомпоновкеРезультата() в модуле отчета. Убрать стандартную обработку;
3. Создать запрос с текстом из предыдущего задания с параметром ограничения по дате;
3. Получаем настройки компоновщика настроек. Создаем объект - ПараметрКомпоновкиДанных и из коллекции ПараметрыДанных
из полученных настроек функцией НайтиЗначениеПараметра() возвращаем объект ЗначениеПараметраКомпоновкиДанных и устанавливаем значение параметра для запроса
свойством Значение;
4. Выгружаем результат запроса в таблицу значений;
5. Для доступа к расшифровке в отчете - использовать параметр события ДанныеРасшифровки() при вызвове метода Выполнить() компоновщика макета
и Инициализировать() процессора компоновки данных.
6. Создаем объект КомпоновщикМакетаКомпоновкиДанных и функцией Выполнить() возвращаем результат в переменную.
7. Создаем структуру - Название объекта в СКД и таблица значений с данными;
8. Создаем и инициализируем объект ПроцессорКомпоновкиДанных;
9. Очищаем параметр ДокументРезультат;
10. Через объект ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент устанавливаем ДокументРезультат и выводим объект ПроцессорКомпоновкиДанных;
11. В схеме компоновки данных добавляем набор данных - объект;
12. Задаем имя объекта которое совпадает с наименованием ключа структуры с ТЗ;
13. Создаем поля на вкладке Наборы данных - количество и имена полей должны совпадать с колонками переданной таблицы значений;
14. Определяем правильный тип полей;
15. Делаем настройки для полей как в прошлом задании;
16. Проверяем формирование отчета в пользовательском режиме.

Binary file not shown.