diff --git a/Examples/img/example-6-1-1.png b/Examples/img/example-6-1-1.png new file mode 100644 index 0000000..28b366d Binary files /dev/null and b/Examples/img/example-6-1-1.png differ diff --git a/Examples/img/example-6-1-2.png b/Examples/img/example-6-1-2.png new file mode 100644 index 0000000..aa27b78 Binary files /dev/null and b/Examples/img/example-6-1-2.png differ diff --git a/Examples/img/example-6-2-1.png b/Examples/img/example-6-2-1.png new file mode 100644 index 0000000..038dc2e Binary files /dev/null and b/Examples/img/example-6-2-1.png differ diff --git a/README.md b/README.md index 85e4601..d1ee976 100644 --- a/README.md +++ b/README.md @@ -54,12 +54,12 @@ 5.9 [Двоичные данные](homework-5-9.md) ## Запросы и отчеты -6.1 [Конструктор запросов](homework-6-1.md) -6.2 [Условия и подзапросы](homework-6-2.md) -6.3 [Итоги и группировки](homework-6-3.md) -6.4 [Соединения](homework-6-4.md) +6.1 [Основы запросов](homework-6-1.md) +6.2 [Группировка и итоги](homework-6-2.md) +6.3 [Соединения](homework-6-3.md) +6.4 [Объединения и подзапросы](homework-6-4.md) 6.5 [Временные таблицы и пакетные запросы](homework-6-5.md) -6.6 [Введение в СКД](homework-6-6.md) +6.6 [Основы СКД](homework-6-6.md) 6.7 [Работа в СКД](homework-6-7.md) ## :trophy: Диплом блока Б diff --git a/homework-6-1.md b/homework-6-1.md index ec1e027..cc5dd22 100644 --- a/homework-6-1.md +++ b/homework-6-1.md @@ -1,35 +1,53 @@ -# Задание к занятию "Конструктор запросов" +# Задание к занятию "Основы запросов" -## Задача "Обновление цен в документе Реализация" +Данное задание является самостоятельным. Проверка автоматическая в тренажере. +Любые вопросы по решению задач задавайте в чате учебной группы. + +## Цель задания + +1. Научиться применять базовые конструкции языка при написании запросов. + +Данная практика научит вас указывать какие поля должны быть в результирующей таблице запроса, выбирать источник данных, упорядочивать строки результата запроса, выбирать часть записей и накладывать простые отборы. + +## Чеклист готовности к домашнему заданию + +- [ ] Установить платформу 1С:Предприятие версии 8.3.22 или больше. + +## Инструкция к заданию + +1. Изучите структуру конфигурации в конфигураторе. Какие есть справочники, документы, регистры. Как они друг с другом связаны. +2. Запустите пользовательский режим и для задач 1.1 - 1.9 составьте текст запроса, удовлетворяющий условиям. +3. Проверьте текст запроса через встроенный механизм проверки. + +## Задача 1 "Решение задач 1.1 - 1.9 самоучителя запросов" ### Описание задачи - -Добавить команду и соответственно кнопку "Обновить цены" в командную панель табличной части документа Реализация. При нажатии на кнопку присходит обновление цен номенклатуры в табличной части на дату документа. +Составьте тексты запросов, удовлетворящих условиям задач в тренажере. ### Требования к результату - -Выгрузка информационной базы (.dt) с конфигурацией из задания https://github.com/netology-code/1c-homeworks/blob/master/homework-5-5.md в котором реализовать алгоритм обновления цен в табличной части документа Реализация. +В поле статуса каждой задачи должно быть указано "Решение верно". ### Процесс выполнения +1. Создайте новую информационную базу. +2. Загрузите в нее [выгрузку тренажера](/simulator/queries.dt) +3. Запустите базу в пользовательском режиме. +4. Подготовьте текст запроса, удовлетворяющий заданию, в поле "Решение" + - Условие задания выводится справа от поля "Решение" + - Для подготовки текста запроса можно воспользоваться конструктором запросов +5. Проверьте решение с помощью команды "Проверить" +6. Перейдите к следующей задаче с помощью команды "Далее >>" + - Можно перейти к произвольному заданию, нажав на название текущего задания -1. Взять конфигурацию из файла https://github.com/netology-code/1c-homeworks/blob/master/homework-5-5.md. -2. Периодичность регистра сведений Цены номенклатуры должна быть установлена в значение в Пределах дня. -3. В форме документа Реализация - создать команду ОбновитьЦены и перетащить в командную панель табличной части. -4. Перекрыть действие команды и выбрать пункт "Создать на клиенте и процедуру на сервере". -5. В процедуре на сервере реализовать процесс обновления цен следующим образом: - - * Добавить проверку на заполненность табличной части Товары; - * Сформировать массив элементов, который содержит в себе перечень всей номенклатуры из табличной части; - * Из контекстного меню выбрать Конструктор запроса с обработкой результата, в котором выбрать Тип обработки = Обход результата; - * На закладке Таблицы и поля конструктора добавить в Таблицы Цены.СрезПоследних; - * В параметрах виртуальной таблицы укажите параметр периода и условие Номенклатура в (&СписокНоменклатуры); - * Выбираем поля - Номенклатура и Цена и нажимаем на кнопку Ок; - * Для запроса устанавливаем значения параметров такие как дата объекта и заполненный массив элементов номенклатуры табличной части; - * Выполняем запрос и проверяем чтобы результат был не пустой. Иначе возврат; - * Если запрос не пустой - делаем выборку и обходим в цикле все записи результата выполнения запроса; - * В табличной части документа находим строки и в цикле подставляем цену из текущей записи результата запроса. - Поиск строк табличной части осуществляем через НайтиСтроки(). В качестве параметра заполняем структуру значением номенклатуры из - записи результата запроса. - * Если цена новая отличается от старой то пересчитываем сумму найденной строки; - -### Подсказка: [результат выполнения домашнего задания](Examples/homework-6-1-example.md) \ No newline at end of file +## Критерии оценки + +Данное домашнее задание предназначено для самостоятельной практики. Проверка экспертом не предусмотрена. + +Успешным выполнением считается появление статуса "Решение верно" для всех задач из диапазона 1.1. - 1.9. + +Пример решенного задания: + +![Пример списка задач](/Examples/img/example-6-1-2.png) + +Для проверки статуса выполнения можно перейти в список заданий в разделе Главное. Примерный вид списка после выполнения задач: + +![Пример решенного задания](/Examples/img/example-6-1-1.png) diff --git a/homework-6-2.md b/homework-6-2.md index 1033044..e59d4de 100644 --- a/homework-6-2.md +++ b/homework-6-2.md @@ -1,60 +1,64 @@ -# Задание к занятию "Условия и подзапросы" +# Задание к занятию "Группировка и итоги" -## Задача № 1 "Отбор номенклатуры при обновлении цен в документе Реализация" +Данное задание является самостоятельным. Проверка автоматическая в тренажере. +Любые вопросы по решению задач задавайте в чате учебной группы. + +Любые вопросы по решению задач задавайте в чате учебной группы. + +## Цель задания + +1. Научиться применять базовые конструкции языка при написании запросов. + +Данная практика научит вас указывать какие поля должны быть в результирующей таблице запроса, выбирать источник данных, упорядочивать строки результата запроса, выбирать часть записей и накладывать простые отборы. + +## Чеклист готовности к домашнему заданию + +- [ ] Установить платформу 1С:Предприятие версии 8.3.22 или больше. + +## Инструкция к заданию + +1. Изучите структуру конфигурации в конфигураторе. Какие есть справочники, документы, регистры. Как они друг с другом связаны. +2. Запустите пользовательский режим и для задач 2.1 - 2.5 составьте текст запроса, удовлетворяющий условиям. +3. Проверьте текст запроса через встроенный механизм проверки. +4. Реализуйте алгоритм для работы обработки "2.6. Динамический текст запроса" + +## Задача 1 "Решение задач 2.1 - 2.5 самоучителя запросов" ### Описание задачи - -Изменить процедуру для команды "Обновить цены" документа Реализация. Перечень номенклатуры получать не передачей элементов массива, а используя вложенный запрос к табличной части текущего документа. +Составьте тексты запросов, удовлетворящих условиям задач в тренажере. ### Требования к результату - -Выгрузка информационной базы (.dt) с конфигурацией из прошлого задания в котором внести изменения для получения перечня элементов номенклатуры вложенным запросом к табличной части документа Реализация. +В поле статуса каждой задачи должно быть указано "Решение верно". ### Процесс выполнения +1. Используйте базу, полученную по итогам предыдущего задания. +3. Запустите базу в пользовательском режиме. +4. Подготовьте текст запроса, удовлетворяющий заданию, в поле "Решение" + - Условие задания выводится справа от поля "Решение" + - Для подготовки текста запроса можно воспользоваться конструктором запросов +5. Проверьте решение с помощью команды "Проверить" +6. Перейдите к следующей задаче с помощью команды "Далее >>" + - Можно перейти к произвольному заданию, нажав на название текущего задания -1. Использовать файл *.cf конфигурацию из прошлого задания. -2. В форме документа Реализация для серверной процедуры команды Обновить цены внести следующие изменения: - - * Убрать заполнение массива элементов номенклатуры; - * Для запроса получения цен убрать заполнение параметра СписокНоменклатуры; - * В конструкторе запроса в параметрах виртуальной таблицы в поле условие удалить предыдущее условие и вместо него - - - вызвать конструктор запроса в поле условие; - - построить запрос к табличной части документа Реализация с выборкой одного поля Номенклатура.Ссылка; - - В операторе ГДЕ указать параметр для отбора определенной ссылки документа реализация; - - Нажать на ОК. Полученый текст запроса использовать для условия отбора измерения Номенклатура; - * Для запроса добавить установку параметра документа реализации текущей ссылкой, при этом проверять чтобы ссылка была не пустая; - * Если ссылка пустая то Возврат; -3. Проверить заполнение цен для всех товаров из табличной части документа Реализация нажатием на кнопку Обновить цены. - -## Задача № 2 "Заполнение строк табличной части по отбору в документе Реализация" +## Задача 2 "Динамический текст запроса" ### Описание задачи - -Добавить команду "Заполнить строки" в табличной части документа Реализация. При заполнении добавить возможность отбора по родителю (с учетом иерархии) и диапазону цен. Заполнять номенклатуру и цены из регистра Цены номенклатуры. +Реализуйте алгоритм, составляющий динамический текст запроса в зависимости от установленных пользователем флажков в группе Поля и заполненных отборов. ### Требования к результату - -Прикрепить .dt файл с внесенными изменениями по реализации заполнения табличной части документа Реализация из регистра сведений Цены номенклатура по отбору. +В обработке должен формироваться корректный табличный документ в зависимости от установленных флажков. ### Процесс выполнения +1. Используйте базу из предыдущего задания +2. Откройте в конфигураторе форму обработки Задание_2_6 и реализуйте в процедуре "ЗаполнитьТекстИПараметрыЗапроса" алгоритм формирования текста запроса и установки параметров в зависимости от введенных пользователем данных. Подсказки для реализации содержатя в комментарии внутри процедуры. +3. Запустите приложение в пользовательском режиме, перейдите в раздел "Дополнительные задания" и нажмите на ссылку "2.6. Динамический текст запроса". Попробуйте 5 разных комбинаций флажков и отборов, убедитесь, что каждый сформированный отчет соответствует установленным настройкам. -* В Конфигураторе добавить обработку ЗаполнениеНоменклатуры. В обработке - - - создать форму и реквизиты формы ГруппаТовара - тип справочник Номенклатура с возможностью выбора только групп, - ЦенаС, ЦенаПо - тип такой же как у ресурса Цена в регистре сведений Цены номенклатуры; - - Разместить реквизиты на форме; - - Cоздать серверную функцию ПриЗакрытииНаСервере(); - - В функции ПриЗакрытииНаСервере - создать запрос. Текст запроса выбирает последние цены на дату документа Реализация из регистра сведений Цены номенклатуры. Условие в срезе - текста запроса формировать динамически в зависимости от значений реквизитов - ГруппаТовара, ЦенаС, ЦенаПо. При этом возможны варианты - заполнена или не заполнена группа - номенклатуры. ЦенаС должна быть меньше чем ЦенаПо, иначе не формировать запрос и вывести соответствующее сообщение. Если группа товара заполнена, то выбирать только товары, которые расположены в иерархии выбранной группы (выбранная группа является родителем или цепочка родителей ведет к выбранной группе). Если не заполнена группа товара, то отбирать цены для всего товара без привязки к группе. - Так же в зависимости от этих условий устанавливать необходимые параметры запроса. - Создать структуру с элементами Номенклатура, Цена. В цикле заполнить массив структур из результата выборки запроса; - - Добавить команду Заполнить и соответственно кнопку на форму. При нажатии на кнопку вызвать последовательно - команду Закрыть(), серверную функцию ПриЗакрытииНаСервере(), - которая возвращает заполненный массив структур. Далее вызвать команду ОповеститьОВыборе() с передачей массива структур в качестве параметра; - -* Для командной панели табличной части документа Реализация добавить команду ЗаполнитьСтроки и соответственно кнопку; -* Переопределить событие для команды ЗаполнитьСтроки в котором реализовать открытие формы обработки ЗаполнениеНоменклатуры. В команде ОткрытьФорму() передавать в качестве владельца форму текущего документа; -* Для формы документа перекрыть событие ОбработкаВыбора на клиенте и реализовать заполнение табличной части документа из полученного массива структур в параметре - ВыбранноеЗначение. Заполнять значения для реквизитов Номенклатура и Цена; -* Протестировать - заполнить в регистр сведений строки и проверить заполнение строк ТЧ документа Реализация нажатием на кнопку ЗаполнитьСтроки и установкой различных вариантов значений реквизитов формы обработки ЗаполнениеНоменклатуры. - -### Подсказка: [результат выполнения домашнего задания](Examples/homework-6-2-example.md) \ No newline at end of file +## Критерии оценки + +Данное домашнее задание предназначено для самостоятельной практики. Проверка экспертом не предусмотрена. + +Успешным выполнением считается появление статуса "Решение верно" для всех задач из диапазона 2.1. - 2.5 и самостоятельной проверки корректной работы обработки "2.6. Динамический текст запроса". + +Примерный вид результата работы обработки "2.6. Динамический текст запроса": + +![Пример работы обработки](/Examples/img/example-6-2-1.png) diff --git a/homework-6-3.md b/homework-6-3.md index f7954fe..7f2407b 100644 --- a/homework-6-3.md +++ b/homework-6-3.md @@ -1,43 +1,60 @@ -# Задание к занятию "Итоги и группировки" +# Задание к занятию "Соединения" -## Задача "Реестр документов Поступление" +Все задачи обязательны к выполнению. +Любые вопросы по решению задач задавайте в чате учебной группы. + +## Цель задания + +1. Научиться соединять таблицы в запросах + +## Чеклист готовности к домашнему заданию + +- [ ] Установить платформу 1С:Предприятие версии 8.3.22 или больше. + +## Инструкция к заданию + +1. Изучите структуру конфигурации в конфигураторе. Какие есть справочники, документы, регистры. Как они друг с другом связаны. +2. Запустите пользовательский режим и для задач 3.1 - 3.4 составьте текст запроса, удовлетворяющий условиям. +3. Проверьте текст запроса через встроенный механизм проверки. +4. Реализуйте алгоритм для работы обработки "3.5. Ежемесячные документы" + +## Задача 1 "Решение задач 3.1 - 3.4 самоучителя запросов" ### Описание задачи - -Создать внешнюю обработку РеестрДокументовПоступление. Обработка формирует и выводит на экран Табличный документ с перечнем документов Поступление за указанный период. Возможные итоги регулируются настройками обработки. +Составьте тексты запросов, удовлетворящих условиям задач в тренажере. ### Требования к результату - -Прикрепить .epf файл внешней обработки для формирования реестра документов Поступление. Выгрузить базу в .dt файл и прикрепить в качестве результата. +В поле статуса каждой задачи должно быть указано "Решение верно". ### Процесс выполнения +1. Используйте базу, полученную по итогам предыдущего задания. +3. Запустите базу в пользовательском режиме. +4. Подготовьте текст запроса, удовлетворяющий заданию, в поле "Решение" + - Условие задания выводится справа от поля "Решение" + - Для подготовки текста запроса можно воспользоваться конструктором запросов +5. Проверьте решение с помощью команды "Проверить" +6. Перейдите к следующей задаче с помощью команды "Далее >>" + - Можно перейти к произвольному заданию нажав на название текущего задания -1. Использовать файл *.cf конфигурацию из прошлого задания. -2. Создать общий макет РеестрДокументовПоступление. Тип макета - табличный документ. В макете добавить области: - * Для вывода периода формирования реестра; - * Для вывода детальных записей по документам Поступление. Выводить данные по ссылке документа, контрагенту и сумме документа; - * Для возможности отображения итогов по контрагенту и общих итогов. Итоги выводить после детальных записей. Если в обработке указана возможность выводить итоги по контрагенту - и детальные записи, то в детальных записях по документам должен контрагент отсутствовать. Общие итоги выводятся в конце отчета -3. Создать внешнюю обработку РеестрДокументвоПоступление, в которой: - * Добавить реквизиты формы: - - ДатаС и ДатаПо - тип дата. Разместить на форме в виде полей для выбора даты; - - ДетальныеЗаписи, ИтогиПоКонтрагенту и ОбщиеИтоги - тип булево и разместить на форме в виде флажков; - * Добавить команду Реестр и соответствующую кнопку разместить на форме; - * Для команды определить действие в котором реализовать: - - если на форме не выбран ни один из флажков, то возврат и вывести подходящее сообщение; - - создать объект Запрос; - - анализировать значения реквизитов периода для формирования строки условия запроса. Например если ДатаС не заполнена, а ДатаПо заполнена записываем в строковую - переменную "ГДЕ Документ.Дата <=&ДатаПо". Также рассмотреть варианты когда обе даты не заполнены, обе даты заполнены или заполнена только ДатаС. Строку условия - записываем в переменную для указания в качестве параметра в тексте основного запроса; - - в этой же проверке устанавливаем используемые параметры для запроса. Например - для случая выше устанавливаем параметр для формирования условия - и для ДатаПо - Запрос.УстановитьПараметр("ДатаПо", КонецДня(ДатаПо)); - - формировать строку для итогов.Если установлен флажок ОбщиеИтоги то записывать в переменную строку по общим итогам. Например - СтрокаИтоги = "ИТОГИ Сумма(СуммаДокумента) - ПО ОБЩИЕ". Проверять если устовлен флажок детальные записи то в строку итогов добавлять итоги по контрагенту (при установленном флажке ИтогиПоКонтрагенту) и итоги по - детальным записям. Передавать сформированную строку в качестве параметра в запрос. - - создать текст запроса, который может быть в двух вариантах. Проверяем условием. Если не установлен флажок ДетальныеЗаписи, а установлен ИтогиПоКонтрагенту, то - формировать текст запроса в виде группировки по контрагенту. Иначе формируем текст запроса в виде итогов по детальным записям. При установленном флажке - ИтогиПоКонтрагенту добавляем во второй вариант текст запроса итогов по контрагенту. Добавить в запрос необходимые параметры для периода, формирования итогов и условий; - - выполнить обработку данных и вывод в макет; - - создать документы Поступление в системе различными датами и протестировать корректный вывод макета на экран; +## Задача 2 "Ежемесячный документы" -### Подсказка: [результат выполнения домашнего задания](Examples/homework-6-3-example.md) \ No newline at end of file +### Описание задачи +Необходимо реализовать алгоритм заполнения списка договоров с абонентской платой, для последующего ежемесячного выставления документов продажи. + +### Требования к результату +В обработке "3.5. Ежемесячные документы" из раздела "Дополнительный задания" по команде Заполнить в командной панели табличной части должна заполняться табличная часть в соответствии с выбранным периодом и установленным отбором. + +### Процесс выполнения +1. Используйте базу из предыдущего задания +2. Откройте в конфигураторе модуль объекта обработки Задание_3_5 и реализуйте в процедуре "ЗаполнитьСписокДоговоров" алгоритм заполнения табличной части обработки. Подсказки для реализации содержатся в комментарии внутри процедуры: + 1. Необходимо выбрать все договоры с типом Абонентская плата. Если заполнено поле ОтборОтветственный, то необходимо выбирать только те договоры, в которых этот сотрудник указан ответственным. + 2. Если в месяце, указанном в поле Период была создана продажа с предопределенной номенклатурой Абонентская плата, то в поле Продажа вывести ссылку на эту продажу. Если продаж несколько, то договоры не должны дублироваться, в поле продажа можно вывести любой документ из введенных по этому договору за этот период. + 3. Если продажи нет или если в продаже сумма отличается от суммы в константе "Размер абонентской платы", то поставить флажок Создать продажу + 4. Вся подготовка данных должна выполняться в одном запросе. Не следует реализовывать постобработку, например, получать значение константы или расчитывать алгоритмом на встроенном языке значение флажка СоздатьПродажу +3. Запустите приложение в пользовательском режиме, перейдите в раздел "Дополнительные задания" и нажмите на ссылку "3.5. Ежемесячные документы". Протестируйте работу обработки на данных июня 2023г. Убедитесь, что если для договора в указанном периоде создана продажа с корректной суммой, то флажок СоздатьПродажу не устанавливается. + +## Критерии оценки + +Домашнее задание проверяется экспертом. + +Успешным выполнением считается появление статуса "Решение верно" для всех задач из диапазона 3.1. - 3.4 и корректная работа алгоритма заполнения списка договоров в обработке "3.5. Ежемесячные документы" diff --git a/homework-6-4.md b/homework-6-4.md index 43532b7..cd8b9ba 100644 --- a/homework-6-4.md +++ b/homework-6-4.md @@ -1,39 +1,44 @@ -# Задание к занятию "Соединения" +# Задание к занятию "Объединения и подзапросы" -## Задача "Информация по контрагенту" +Все задачи обязательны к выполнению. Любые вопросы по решению задач задавайте в чате учебной группы. + +## Цель задания + +1. Научиться применять объединения и подзапросы. +2. Научиться обращаться к виртуальным таблицам регистров. + +## Чеклист готовности к домашнему заданию + +- [ ] Установить платформу 1С:Предприятие версии 8.3.22 или больше. + +## Инструкция к заданию + +1. Изучите структуру конфигурации в конфигураторе. Какие есть справочники, документы, регистры. Как они друг с другом связаны. +2. Запустите пользовательский режим и для задач 4.1 - 4.8 составьте текст запроса, удовлетворяющий условиям. +3. Проверьте текст запроса через встроенный механизм проверки. + +## Задача 1 "Решение задач 4.1 - 4.8 самоучителя запросов" ### Описание задачи - -Создать внешнюю обработку ИнформацияПоКонтрагенту. Обработка формирует и выводит на экран Табличный документ с информацией по контрагенту. В обработке выбирается контрагент для формирования информации. +Составьте тексты запросов, удовлетворящих условиям задач в тренажере. ### Требования к результату - -Прикрепить .epf файл внешней обработки для формирования информации по контрагенту и .dt выгруженной базы с данными. - +В поле статуса каждой задачи должно быть указано "Решение верно". ### Процесс выполнения +1. Используйте базу, полученную по итогам предыдущего задания. +3. Запустите базу в пользовательском режиме. +4. Подготовьте текст запроса, удовлетворяющий заданию, в поле "Решение" + - Условие задания выводится справа от поля "Решение" + - Для подготовки текста запроса можно воспользоваться конструктором запросов +5. Проверьте решение с помощью команды "Проверить" +6. Перейдите к следующей задаче с помощью команды "Далее >>" + - Можно перейти к произвольному заданию, нажав на название текущего задания -1. Сформировать внешнюю обработку ИнформацияПоКонтрагенту.epf. -2. В обработку добавить реквизит формы Контрагент с типом Справочники.Контрагенты. -3. В конфигурацию добавить общий макет ИнформацияПоКонтрагенту типа табличный документ. -4. Создать команду Вывести информацию и соответствующую кнопку на форму. -5. Перекрыть действие команды и реализовать следующее: - * Если реквизит Контрагент не заполнен, выдавать соответствующее сообщение и дальше не продолжать; - * Создать текст запроса который будет посекционно выводить информацию по выбранному контрагенту в общий макет ИнформацияПоКонтрагенту; - * В первую секцию выводить наименование контрагента, ИНН, и КПП из справочника Контрагенты; - * Во вторую секцию выводить контактную информацию по контрагенту из табличной части КонтактнаяИнформация из справочника Контрагенты; - * Будем считать что контрагент является и поставщиком и покупателем. Поэтому в третью секцию выводить Товар, Количество проданного товара и Количество поступившего - товара из документов Поступление и Реализация; - * При формировании текста запроса учитывать следующие особенности: - - использовать один запрос; - - для получения контактной информации использовать ЛЕВОЕ СОЕДИНЕНИЕ, чтобы получить сведения о контрагентах и без контактной информации; - - товар в запросе должен быть объединен в одну колонку как для продажи так и для поступления; - - для получения количества проданного и поступившего товара использовать ПОЛНОЕ СОЕДИНЕНИЕ в подзапросе по товару; - - При полном соединении не должны присутствовать значения Null; - - Правильно использовать группировки и агрегатные функции в подзапросе; - - для соединения с подзапросом установить связь со справочником Контрагенты используя ВНУТРЕННЕЕ СОЕДИНЕНИЕ; - - Результат запроса можно обрабатывать только на свертку через выгрузку в таблицу значений; -6. Создать примеры в справочниках и документах. Протестировать формирование табличный документа. -7. Для реализации и поступления тестировать на нескольких документах. Товары в табличной части должны отличаться. +При решении задач учитывайте, что необходимо максимально использовать параметры виртуальных таблиц регистров. Использование отбора в секции ГДЕ вместо параметров виртуальной таблицы будет считаться ошибкой. -### Подсказка: [результат выполнения домашнего задания](Examples/homework-6-4-example.md) \ No newline at end of file +## Критерии оценки + +Домашнее задание проверяется экспертом. + +Успешным выполнением считается появление статуса "Решение верно" для всех задач из диапазона 4.1. - 4.8 diff --git a/homework-6-5.md b/homework-6-5.md index 1863814..81829ad 100644 --- a/homework-6-5.md +++ b/homework-6-5.md @@ -1,29 +1,63 @@ # Задание к занятию "Временные таблицы и пакетные запросы" -## Задача "Скидки для Реализации" +Все задачи обязательны к выполнению. +Любые вопросы по решению задач задавайте в чате учебной группы. + +## Цель задания + +1. Научиться использовать временные таблицы и пакеты запросов + +## Чеклист готовности к домашнему заданию + +- [ ] Установить платформу 1С:Предприятие версии 8.3.22 или больше. + +## Инструкция к заданию + +1. Изучите структуру конфигурации в конфигураторе. Какие есть справочники, документы, регистры. Как они друг с другом связаны. +2. Реализуйте алгоритм расчета себестоимости при продаже товаров. +3. Запустите пользовательский режим и для задач 5.1 - 5.3 составьте текст запроса, удовлетворяющий условиям. +4. Проверьте текст запроса через встроенный механизм проверки. + +## Задача 1 "Расчет себестоимости товаров" ### Описание задачи - -Создать простой механизм подстановки скидки в табличную часть документа Реализация. Сумму рассчитывать с учетом скидки. +Необходимо реализовать возможность хранения и расчета себестоимости для остатков товаров ### Требования к результату - -Прикрепить .dt выгруженной базы с данными. +В регистре сведений Остатки товаров добавлен ресурс Сумма. В документах Покупка и Продажа реализован алгоритм заполнения этого ресурса при проведении. ### Процесс выполнения +1. Используйте базу, полученную по итогам предыдущего задания. +2. Добавить в регистр накопления Остатки товаров ресурс Сумма - Число (15, 2), Неотрицательное. +3. Добавить в обработку проведения документа Покупка заполнение ресурса Сумма при проведении. Сумма заполняется соответствующим значением из табличной части. +4. Переработать обработку проведения документа Продажа: + - Перед выполнением запроса к базе данных необходимо записать пустой набор движений в регистр Остатки товаров. + - В запросе необходимо получить остатки на дату документа по количеству и сумме. + - Если товара не хватает, то не даем проводить документ. Пользователю выводим сообщение с информацией о том какого товара в каком количестве не хватает. Сообщение должно быть привязано к ячейке таблицы, в которую введено количество недостающего товара. + - При формировании движений необходимо рассчитывать себестоимость как "СуммаОстаток / КоличествоОстаток * Количество". + - Необходимо учитывать, что в документе может быть несколько строк с одним и тем же товаров. + - Необходимо учитывать проблему копеек при расчете себестоимости, то есть если количество товара в документе равно остатку, то списываемую сумму не вычисляем математически, а просто списываем полный остаток. + - В ресурс Сумма записываем рассчитанную себестоимость товара, который продаем. -1. Создать простой справочник Номенклатурная группа без иерархии. -2. В справочник номенклатура добавить реквизит Номенклатурная группа. -3. Создать документ "Скидки номенклатуры". В шапку вывести дату и номер документа. -4. Добавить табличную часть документа с реквизитами - Объект - составного типа (Номенклатурная группа, Номенклатура), Процент скидки - тип числовой. -5. Добавить периодический регистр сведений Скидки номенклатуры с измерением Объект (тип как в документе) и ресурсом Процент скидки. -6. Делать движения в регистр при проведении документа Скидки номенклатуры; -7. В табличную часть документа Реализация добавить реквизит Автоматическая скидка. -8. В табличную часть добавить команду Применить скидку. В этом случае реализовать: - * Если для номенклатуры из табличной части документа, установлена скидка в регистре сведений на дату документа, то заполнять ее в поле - Автоматическая скидка и пересчитывать сумму с учетом скидки; - * Если для номенклатуры не установлена скидка, а установлена для номенклатурной группы то применять скидку для номенклатурной группы. - Имеется ввиду значение скидки для реквизита Номенклатурная группа Номенклатуры в табличной части документа; - * Поиск скидок осуществлять через временные таблицы пакетного запроса с использованием менеджера временных таблиц; +## Задача 2 (со звёздочкой) "Решение задач 5.1 - 5.3 самоучителя запросов" -### Подсказка: [результат выполнения домашнего задания](Examples/homework-6-5-example.md) \ No newline at end of file +### Описание задачи +Составьте тексты запросов, удовлетворяющих условиям задач в тренажере. + +### Требования к результату +В поле статуса каждой задачи должно быть указано "Решение верно". + +### Процесс выполнения +1. Запустите базу в пользовательском режиме. +2. Подготовьте текст запроса, удовлетворяющий заданию, в поле "Решение" для задание 5.1 - 5.3 + - Условие задания выводится справа от поля "Решение" + - Для подготовки текста запроса можно воспользоваться конструктором запросов +3. Проверьте решение с помощью команды "Проверить" +4. Перейдите к следующей задаче с помощью команды "Далее >>" + - Можно перейти к произвольному заданию нажав на название текущего задания + +## Критерии оценки + +Домашнее задание проверяется экспертом. + +Успешным выполнением считается появление статуса "Решение верно" для всех задач из диапазона 5.1. - 5.3 и корректная работа алгоритма работы с себестооимостью. diff --git a/homework-6-6.md b/homework-6-6.md index 3a0d9c3..e109f75 100644 --- a/homework-6-6.md +++ b/homework-6-6.md @@ -1,23 +1,58 @@ -# Задание к занятию "Введение в СКД" +# Задание к занятию "Основы СКД" -## Задача "Отчет Продажи по контрагентам" +Все задачи обязательны к выполнению. +Любые вопросы по решению задач задавайте в чате учебной группы. + +## Цель задания + +1. Научиться формировать отчеты с использованием СКД + +## Чек-лист готовности к домашнему заданию + +- [ ] Установить платформу 1С: Предприятие версии 8.3.22 или больше. + +## Инструкция к заданию + +1. Изучите структуру конфигурации в конфигураторе. Какие есть справочники, документы, регистры. Как они друг с другом связаны. +2. Реализуйте отчет + +## Задача 1 "Отчет Маржинальность продаж товаров за период" ### Описание задачи - -Создать отчет Продажи по контрагентам на СКД. +Необходимо реализовать возможность хранения и расчета себестоимости для остатков товаров ### Требования к результату - -Прикрепить файл внешнего отчета и выгрузку информационной базы (.dt) +В регистре сведений Остатки товаров добавлен ресурс Сумма. В документах Покупка и Продажа реализован алгоритм заполнения этого ресурса при проведении. ### Процесс выполнения +1. Используйте базу, полученную по итогам предыдущего задания. Убедитесь, что в регистре Остатки товаров и Продажи есть движения, и что в регистре Остатки товаров корректно рассчитана себестоимость. При необходимости перепроведите документы. +2. Создайте новый отчет и включите его в подсистему Дополнительные задания. +3. Создайте основную схему компоновки данных отчета. +4. Реализуйте запрос, который будет получать информацию о себестоимости продаж товаров и количестве проданного из виртуальной таблицы Обороты регистра накопления Остатки товаров и информацию о сумме продаж из виртуальной таблицы Обороты регистра накопления Продажи +5. Добавьте вычисляемые поля Прибыль и Маржинальная рентабельности. Прибыль расcчитывается как "СуммаПродаж - Себестоимость". Маржинальная рентабельность рассчитывается как "Прибыль / СуммаПродаж * 100" и учитывается в процентах. В формуле реализуйте проверку на 0 в делителе. -1. Создать внешний отчет. -2. В свойстве отчета Основная схема компоновки данных нажать на кнопку Открыть схему компоновки данных. -3. Добавить источник запрос и в нем реализовать получение данных из табличной части документа реализация. Данные по реализации получать за определенный период. -4. В отчет вывести группировку по полю Контрагент. -5. Для контрагентов вывести общую сумму продажи. -6. Для каждого контрагента показать строки по номенклатуре. -7. В этих строках отобразить поле: Номенклатура, и для каждой номенклатуры вывести количество, среднюю цену и сумму продажи. +
+ Подсказка -### Подсказка: [результат выполнения домашнего задания](Examples/homework-6-6-example.md) \ No newline at end of file +*Маржинальность — это показатель рентабельности реализуемой продукции, который определяется числовым выражением - маржой. Маржинальность услуги, товара или иного проекта — это разница между стоимостью готовой продукции и себестоимостью, то есть затратами на их производство.*  + +
+ +6. Настройте ресурсы: + - Прибыль, Себестоимость, Сумму продаж и Количество можно просто суммировать + - Маржинальную рентабельность необходимо рассчитывать по формуле "Сумма(Прибыль) / Сумма(СуммаПродаж) * 100" +7. Добавьте параметр Период с типом Стандартный период. Настройте расчет параметров НачалоПериода и КонецПериода по выражению от Периода и ограничьте их использование. +8. На закладке настройки: + - Добавьте группировку по Номенклатуре с учетом Иерархии + - Добавьте в состав пользовательских настроек параметр Период + - Добавьте в выбранные поля Количество, Себестоимость, СуммуПродаж, Прибыль и Маржинальную рентабельность. + - С помощью условного оформления выделите красным фоном строки отчета, где маржинальная рентабельность менее 20%, а также ограничьте количество символов после запятой в колонке Маржинальная рентабельность двумя. + +### Пример внешнего вида отчета +![Пример внешнего вида отчета](img/homework-6-6-1.png) + +## Критерии оценки + +Домашнее задание проверяется экспертом. + +Успешным выполнением считается корректно реализованный отчет "Маржинальность продаж товаров за период" diff --git a/homework-6-7.md b/homework-6-7.md index 4cff405..c9fd0fc 100644 --- a/homework-6-7.md +++ b/homework-6-7.md @@ -1,38 +1,54 @@ # Задание к занятию "Работа с СКД" -## Задача "Отчет Продажи по контрагентам" +Данное задание со звездочкой и не является обязательным. Вы можете его выполнить, чтобы лучше разобраться в работе с СКД. +Любые вопросы по решению задач задавайте в чате учебной группы. + +## Цель задания + +1. Научиться формировать отчеты с использованием СКД + +## Чеклист готовности к домашнему заданию + +- [ ] Установить платформу 1С:Предприятие версии 8.3.22 или больше. + +## Задача 1 (со звёздочкой) Анализ выгрузки ### Описание задачи - -Создать отчет Продажи по контрагентам на СКД. Запрос используем из предыдущего задания. Добавляем набор данных - объект. Имя набора данных - ОтчетПоПродажам. -Из модуля отчета организовать заполнение отчета из таблицы значений с возможностью выполнения расшифровки. +Партнер передает информацию о продажах наших товаров за период в виде архива. Необходимо реализовать отчет для анализа данных архива, предоставленных партнером. ### Требования к результату - -В отчете вместо набора данных Запрос использовать набор данных Объект. Переопределить событие (создать обработку события) ПриКомпоновкеРезультата модуля объекта отчета для передачи ТЗ в СКД. Прикрепить файл внешнего отчета и выгрузку информационной базы (.dt). - +Внешний отчет, который позволяет выбрать архив, получает из него данные и формирует отчет. ### Процесс выполнения +1. Скачайте и изучите [Пример архива](reference-data/export.zip), который отправляет поставщик +2. Создайте внешний отчет, добавьте реквизит отчета АдресДанных, тип - строка. +3. Создайте форму внешнего отчета, добавьте на форму команду Загрузить данные. При выполнении команды необходимо предлагать пользователю выбрать zip-файл, когда файл выбрать - сохранять его во временном хранилище. Адрес временного хранилища необходимо сохранить в реквизите отчета АдресДанных. +4. Назначьте обработчик события ПриКомпоновкеРезультата в модуле объекта отчета и реализуйте алгоритм: + - Отключите стандартную обработку + - Проверьте заполнения АдресаДанных - если он пустой необходимо показать ошибку "Для формирования отчета необходимо выбрать файл архива" + - Получите архив из временного хранилища + - Получите имя временного файла и создайте новый каталог с этим именем с помощью методов ПолучитьИмяВременногоФайла() и СоздатьКаталог() + - Распакуйте архив в новый каталог с помощью объекта ЧтениеZipФайла + - Создайте таблицу значений для хранения данных файлов, добавьте колонки исходя из содержимого файлов и целевого внешнего вида отчета + - Найдите все файлы в каталоге с помощью метода НайтиФайлы() + - Прочитайте данные каждого файла с помощью Табличного документа и добавьте эти данные в таблицу значений + - Удалите временные файлы + - Сформируйте отчет программно вызывая объекты СКД с передачей сформированной таблицы значений как внешнего набора данных +5. Создайте Основную схему компоновки данных + - Добавьте в качества источника НаборДанных: Объект + - Заполните колонки набора данных исходя из целевого внешнего вида отчета + - Заполните ресурсы исходя из целевого внешнего вида отчета + - Заполните настройки отчета исходя из целевого внешнего вида +6. Проотестируйте работу отчета + - Откройте отчет в любой информационной базе + - Выберите в качестве файла [Пример архива](reference-data/export.zip) + - Сформируйте отчет и сравните с примеров внешнего вида отчета -1. Изменяем внешний отчета из прошлого задания; -2. Перекрыть событие ПриКомпоновкеРезультата() в модуле отчета. Убрать стандартную обработку; -3. Создать запрос с текстом из предыдущего задания с параметром ограничения по дате; -3. Получаем настройки компоновщика настроек. Создаем объект - ПараметрКомпоновкиДанных и из коллекции ПараметрыДанных - из полученных настроек функцией НайтиЗначениеПараметра() возвращаем объект ЗначениеПараметраКомпоновкиДанных и устанавливаем значение параметра для запроса - свойством Значение; -4. Выгружаем результат запроса в таблицу значений; -5. Для доступа к расшифровке в отчете - использовать параметр события ДанныеРасшифровки() при вызвове метода Выполнить() компоновщика макета - и Инициализировать() процессора компоновки данных. -6. Создаем объект КомпоновщикМакетаКомпоновкиДанных и функцией Выполнить() возвращаем результат в переменную. -7. Создаем структуру - Название объекта в СКД и таблица значений с данными; -8. Создаем и инициализируем объект ПроцессорКомпоновкиДанных; -9. Очищаем параметр ДокументРезультат; -10. Через объект ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент устанавливаем ДокументРезультат и выводим объект ПроцессорКомпоновкиДанных; -11. В схеме компоновки данных добавляем набор данных - объект; -12. Задаем имя объекта которое совпадает с наименованием ключа структуры с ТЗ; -13. Создаем поля на вкладке Наборы данных - количество и имена полей должны совпадать с колонками переданной таблицы значений; -14. Определяем правильный тип полей; -15. Делаем настройки для полей как в прошлом задании; -16. Проверяем формирование отчета в пользовательском режиме. +### Пример внешнего вида отчета +![Пример внешнего вида отчета](img/homework-6-7-1.png) -### Подсказка: [результат выполнения домашнего задания](Examples/homework-6-7-example.md) +## Критерии оценки + +Домашнее задание проверяется экспертом. + +Успешным выполнением считается корректно реализованный отчет "Анализ выгрузки" diff --git a/img/homework-6-6-1.png b/img/homework-6-6-1.png new file mode 100644 index 0000000..ab086d8 Binary files /dev/null and b/img/homework-6-6-1.png differ diff --git a/img/homework-6-7-1.png b/img/homework-6-7-1.png new file mode 100644 index 0000000..eb101cc Binary files /dev/null and b/img/homework-6-7-1.png differ diff --git a/reference-data/export.zip b/reference-data/export.zip new file mode 100644 index 0000000..07d7f6b Binary files /dev/null and b/reference-data/export.zip differ diff --git a/simulator/queries.dt b/simulator/queries.dt new file mode 100644 index 0000000..c2a6160 Binary files /dev/null and b/simulator/queries.dt differ