diff --git a/06. Запросы и отчеты/01. Конструктор запросов/homework-6-1.dt b/06. Запросы и отчеты/01. Конструктор запросов/homework-6-1.dt new file mode 100644 index 0000000..a05e4bf Binary files /dev/null and b/06. Запросы и отчеты/01. Конструктор запросов/homework-6-1.dt differ diff --git a/06. Запросы и отчеты/01. Конструктор запросов/homework-6-1.md b/06. Запросы и отчеты/01. Конструктор запросов/homework-6-1.md new file mode 100644 index 0000000..86309c5 --- /dev/null +++ b/06. Запросы и отчеты/01. Конструктор запросов/homework-6-1.md @@ -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. В процедуре на сервере реализовать процесс обновления цен следующим образом: + + * Добавить проверку на заполненность табличной части Товары; + * Сформировать массив элементов, который содержит в себе перечень всей номенклатуры из табличной части; + * Из контекстного меню выбрать Конструктор запроса с обработкой результата, в котором выбрать Тип обработки = Обход результата; + * На закладке Таблицы и поля конструктора добавить в Таблицы ЦеныНоменклатуры.СрезПоследних; + * В параметрах виртуальной таблицы укажите параметр периода и условие Номенклатура в (&СписокНоменклатуры); + * Выбираем поля - Номенклатура и Цена и нажимаем на кнопку Ок; + * Для запроса устанавливаем значения параметров такие как дата объекта и заполненный массив элементов номенклатуры табличной части; + * Выполняем запрос и проверяем чтобы результат был не пустой. Иначе возврат; + * Если запрос не пустой - делаем выборку и обходим в цикле все записи результата выполнения запроса; + * В табличной части документа находим строки и в цикле подставляем цену из текущей записи результата запроса. + Поиск строк табличной части осуществляем через НайтиСтроки(). В качестве параметра заполняем структуру значением номенклатуры из + записи результата запроса. + * Если цена новая отличается от старой то пересчитываем сумму найденной строки; + diff --git a/06. Запросы и отчеты/02. Условия и подзапросы/homework-6-2.dt b/06. Запросы и отчеты/02. Условия и подзапросы/homework-6-2.dt new file mode 100644 index 0000000..4d45af2 Binary files /dev/null and b/06. Запросы и отчеты/02. Условия и подзапросы/homework-6-2.dt differ diff --git a/06. Запросы и отчеты/02. Условия и подзапросы/homework-6-2.md b/06. Запросы и отчеты/02. Условия и подзапросы/homework-6-2.md new file mode 100644 index 0000000..bf626f3 --- /dev/null +++ b/06. Запросы и отчеты/02. Условия и подзапросы/homework-6-2.md @@ -0,0 +1,60 @@ +# Задание к занятию "Условия и подзапросы" + +## Задача № 1 "Отбор номенклатуры при обновлении цен в документе Реализация" + +### Описание задачи + +Изменить процедуру для команды "Обновить цены" документа Реализация. Перечень номенклатуры получать не передачей элементов массива, а используя вложенный запрос к табличной части текущего документа. + +### Требования к результату + +Выгрузка информационной базы (.dt) с конфигурацией из прошлого задания в котором внести изменения для получения перечня элементов номенклатуры вложенным запросом к табличной части документа Реализация. + +### Процесс выполнения + +1. Использовать файл *.cf конфигурацию из прошлого задания. +2. В форме документа Реализация для серверной процедуры команды Обновить цены внести следующие изменения: + + * Убрать заполнение массива элементов номенклатуры; + * Для запроса получения цен убрать заполнение параметра СписокНоменклатуры; + * В конструкторе запроса в параметрах виртуальной таблицы в поле условие удалить предыдущее условие и вместо него - + - вызвать конструктор запроса в поле условие; + - построить запрос к табличной части документа Реализация с выборкой одного поля Номенклатура.Ссылка; + - В операторе ГДЕ указать параметр для отбора определенной ссылки документа реализация; + - Нажать на ОК. Полученый текст запроса использовать для условия отбора измерения Номенклатура; + * Для запроса добавить установку параметра документа реализации текущей ссылкой, при этом проверять чтобы ссылка была не пустая; + * Если ссылка пустая то Возврат; +3. Проверить заполнение цен для всех товаров из табличной части документа Реализация нажатием на кнопку Обновить цены. + +## Задача № 2 "Заполнение строк табличной части по отбору в документе Реализация" + +### Описание задачи + +Добавить команду "Заполнить строки" в табличной части документа Реализация. При заполнении добавить возможность отбора по номенклатурной группе и диапазону цен. Заполнять номенклатуру и цены из регистра Цены номенклатуры. + +### Требования к результату + +Прикрепить .dt файл с внесенными изменениями по реализации заполнения табличной части документа Реализация из регистра сведений Цены номенклатура по отбору. + +### Процесс выполнения + +* В Конфигураторе добавить обработку ЗаполнениеНоменклатуры. В обработке - + - создать форму и реквизиты формы ГруппаТовара - тип справочник Номенклатура с возможностью выбора только групп, + ЦенаС, ЦенаПо - тип такой же как у реквизита Цена в регистре сведений Цены номенклатуры; + - Разместить реквизиты на форме; + - Cоздать серверную функцию ПриЗакрытииНаСервере(); + - В функции ПриЗакрытииНаСервере - создать запрос. Текст запроса выбирает последние цены на дату документа Реализация из регистра сведений Цены номенклатуры. Условие в срезе + текста запроса формировать динамически в зависимости от значений реквизитов - ГруппаТовара, ЦенаС, ЦенаПо. При этом возможны варианты - заполнена или не заполнена группа + номенклатуры. ЦенаС должна быть меньше чем ЦенаПо, иначе не формировать запрос и вывести соответствующее сообщение. Если не заполнена группа товара, то отбирать цены + для всего товара без привязки к группе. + Так же в зависимости от этих условий устанавливать необходимые параметры запроса. + Создать структуру с элементами Номенклатура, Цена. В цикле заполнить массив структур из результата выборки запроса; + - Добавить команду Заполнить и соответственно кнопку на форму. При нажатии на кнопку вызвать последовательно - команду Закрыть(), серверную функцию ПриЗакрытииНаСервере(), + которая возвращает заполненный массив структур. Далее вызвать команду ОповеститьОВыборе() с передачей массива структур в качестве параметра; + +* Для командной панели табличной части документа Реализация добавить команду ЗаполнитьСтроки и соответственно кнопку; +* Переопределить событие для команды ЗаполнитьСтроки в котором реализовать открытие формы обработки ЗаполнениеНоменклатуры. В команде ОткрытьФорму() передавать в качестве владельца форму текущего документа; +* Для формы документа перекрыть событие ОбработкаВыбора на клиенте и реализовать заполнение табличной части документа из полученного массива структур в параметре + ВыбранноеЗначение. Заполнять значения для реквизитов Номенклатура и Цена; +* Протестировать - заполнить в регистр сведений строки и проверить заполнение строк ТЧ документа Реализация нажатием на кнопку ЗаполнитьСтроки и установкой различных вариантов значений реквизитов формы обработки ЗаполнениеНоменклатуры. + diff --git a/06. Запросы и отчеты/03. Итоги и группировки/homework-6-3.md b/06. Запросы и отчеты/03. Итоги и группировки/homework-6-3.md new file mode 100644 index 0000000..b04d419 --- /dev/null +++ b/06. Запросы и отчеты/03. Итоги и группировки/homework-6-3.md @@ -0,0 +1,41 @@ +# Задание к занятию "Итоги и группировки" + +## Задача "Реестр документов Поступление" + +### Описание задачи + +Создать внешнюю обработку РеестрДокументовПоступление. Обработка формирует и выводит на экран Табличный документ с перечнем документов Поступление за указанный период. Возможные итоги регулируются настройками обработки. + +### Требования к результату + +Прикрепить .epf файл внешней обработки для формирования реестра документов Поступление. Выгрузить базу в .dt файл и прикрепить в качестве результата. + +### Процесс выполнения + +1. Использовать файл *.cf конфигурацию из прошлого задания. +2. Создать общий макет РеестрДокументовПоступление. Тип макета - табличный документ. В макете добавить области: + * Для вывода периода формирования реестра; + * Для вывода детальных записей по документам Поступление. Выводить данные по ссылке документа, контрагенту и сумме документа; + * Для возможности отображения итогов по контрагенту и общих итогов. Итоги выводить после детальных записей. Если в обработке указана возможность выводить итоги по контрагенту + и детальные записи, то в детальных записях по документам должен контрагент отсутствовать. Общие итоги выводятся в конце отчета +3. Создать внешнюю обработку РеестрДокументвоПоступление, в которой: + * Добавить реквизиты формы: + - ДатаС и ДатаПо - тип дата. Разместить на форме в виде полей для выбора даты; + - ДетальныеЗаписи, ИтогиПоКонтрагенту и ОбщиеИтоги - тип булево и разместить на форме в виде флажков; + * Добавить команду Реестр и соответствующую кнопку разместить на форме; + * Для команды определить действие в котором реализовать: + - если на форме не выбран ни один из флажков, то возврат и вывести подходящее сообщение; + - создать объект Запрос; + - анализировать значения реквизитов периода для формирования строки условия запроса. Например если ДатаС не заполнена, а ДатаПо заполнена записываем в строковую + переменную "ГДЕ Документ.Дата <=&ДатаПо". Также рассмотреть варианты когда обе даты не заполнены, обе даты заполнены или заполнена только ДатаС. Строку условия + записываем в переменную для указания в качестве параметра в тексте основного запроса; + - в этой же проверке устанавливаем используемые параметры для запроса. Например - для случая выше устанавливаем параметр для формирования условия + и для ДатаПо - Запрос.УстановитьПараметр("ДатаПо", КонецДня(ДатаПо)); + - формировать строку для итогов.Если установлен флажок ОбщиеИтоги то записывать в переменную строку по общим итогам. Например - СтрокаИтоги = "ИТОГИ Сумма(СуммаДокумента) + ПО ОБЩИЕ". Проверять если устовлен флажок детальные записи то в строку итогов добавлять итоги по контрагенту (при установленном флажке ИтогиПоКонтрагенту) и итоги по + детальным записям. Передавать сформированную строку в качестве параметра в запрос. + - создать текст запроса, который может быть в двух вариантах. Проверяем условием. Если не установлен флажок ДетальныеЗаписи, а установлен ИтогиПоКонтрагенту, то + формировать текст запроса в виде группировки по контрагенту. Иначе формируем текст запроса в виде итогов по детальным записям. При установленном флажке + ИтогиПоКонтрагенту добавляем во второй вариант текст запроса итогов по контрагенту. Добавить в запрос необходимые параметры для периода, формирования итогов и условий; + - выполнить обработку данных и вывод в макет; + - создать документы Поступление в системе различными датами и протестировать корректный вывод макета на экран; diff --git a/06. Запросы и отчеты/03. Итоги и группировки/homework-6-3/homework-6-3.dt b/06. Запросы и отчеты/03. Итоги и группировки/homework-6-3/homework-6-3.dt new file mode 100644 index 0000000..f443423 Binary files /dev/null and b/06. Запросы и отчеты/03. Итоги и группировки/homework-6-3/homework-6-3.dt differ diff --git a/06. Запросы и отчеты/03. Итоги и группировки/homework-6-3/РеестрДокументовПоступление.epf b/06. Запросы и отчеты/03. Итоги и группировки/homework-6-3/РеестрДокументовПоступление.epf new file mode 100644 index 0000000..f4a64b7 Binary files /dev/null and b/06. Запросы и отчеты/03. Итоги и группировки/homework-6-3/РеестрДокументовПоступление.epf differ diff --git a/06. Запросы и отчеты/04. Соединения/homework-6-4.md b/06. Запросы и отчеты/04. Соединения/homework-6-4.md new file mode 100644 index 0000000..08c39fd --- /dev/null +++ b/06. Запросы и отчеты/04. Соединения/homework-6-4.md @@ -0,0 +1,37 @@ +# Задание к занятию "Соединения" + +## Задача "Информация по контрагенту" + +### Описание задачи + +Создать внешнюю обработку ИнформацияПоКонтрагенту. Обработка формирует и выводит на экран Табличный документ с информацией по контрагенту. В обработке выбирается контрагент для формирования информации. + +### Требования к результату + +Прикрепить .epf файл внешней обработки для формирования информации по контрагенту и .dt выгруженной базы с данными. + + +### Процесс выполнения + +1. Сформировать внешнюю обработку ИнформацияПоКонтрагенту.epf. +2. В обработку добавить реквизит формы Контрагент с типом Справочники.Контрагенты. +3. В конфигурацию добавить общий макет ИнформацияПоКонтрагенту типа табличный документ. +4. Создать команду Вывести информацию и соответствующую кнопку на форму. +5. Перекрыть действие команды и реализовать следующее: + * Если реквизит Контрагент не заполнен, выдавать соответствующее сообщение и дальше не продолжать; + * Создать текст запроса который будет посекционно выводить информацию по выбранному контрагенту в общий макет ИнформацияПоКонтрагенту; + * В первую секцию выводить наименование контрагента, ИНН, и КПП из справочника Контрагенты; + * Во вторую секцию выводить контактную информацию по контрагенту из табличной части КонтактнаяИнформация из справочника Контрагенты; + * Будем считать что контрагент является и поставщиком и покупателем. Поэтому в третью секцию выводить Товар, Количество проданного товара и Количество поступившего + товара из документов Поступление и Реализация; + * При формировании текста запроса учитывать следующие особенности: + - использовать один запрос; + - для получения контактной информации использовать ЛЕВОЕ СОЕДИНЕНИЕ, чтобы получить сведения о контрагентах и без контактной информации; + - товар в запросе должен быть объединен в одну колонку как для продажи так и для поступления; + - для получения количества проданного и поступившего товара использовать ПОЛНОЕ СОЕДИНЕНИЕ в подзапросе по товару; + - При полном соединении не должны присутствовать значения Null; + - Правильно использовать группировки и агрегатные функции в подзапросе; + - для соединения с подзапросом установить связь со справочником Контрагенты используя ВНУТРЕННЕЕ СОЕДИНЕНИЕ; + - Результат запроса можно обрабатывать только на свертку через выгрузку в таблицу значений; +6. Создать примеры в справочниках и документах. Протестировать формирование табличный документа. +7. Для реализации и поступления тестировать на нескольких документах. Товары в табличной части должны отличаться. diff --git a/06. Запросы и отчеты/04. Соединения/homework-6-4/homework-6-4.dt b/06. Запросы и отчеты/04. Соединения/homework-6-4/homework-6-4.dt new file mode 100644 index 0000000..cf6804e Binary files /dev/null and b/06. Запросы и отчеты/04. Соединения/homework-6-4/homework-6-4.dt differ diff --git a/06. Запросы и отчеты/04. Соединения/homework-6-4/ИнформацияПоКонтрагенту.epf b/06. Запросы и отчеты/04. Соединения/homework-6-4/ИнформацияПоКонтрагенту.epf new file mode 100644 index 0000000..5adab3d Binary files /dev/null and b/06. Запросы и отчеты/04. Соединения/homework-6-4/ИнформацияПоКонтрагенту.epf differ diff --git a/06. Запросы и отчеты/05. Временные таблицы и пакетные запросы/homework-6-5.dt b/06. Запросы и отчеты/05. Временные таблицы и пакетные запросы/homework-6-5.dt new file mode 100644 index 0000000..796b358 Binary files /dev/null and b/06. Запросы и отчеты/05. Временные таблицы и пакетные запросы/homework-6-5.dt differ diff --git a/06. Запросы и отчеты/05. Временные таблицы и пакетные запросы/homework-6-5.md b/06. Запросы и отчеты/05. Временные таблицы и пакетные запросы/homework-6-5.md new file mode 100644 index 0000000..80e90f9 --- /dev/null +++ b/06. Запросы и отчеты/05. Временные таблицы и пакетные запросы/homework-6-5.md @@ -0,0 +1,28 @@ +# Задание к занятию "Временные таблицы и пакетные запросы" + +## Задача "Скидки для Реализации" + +### Описание задачи + +Создать простой механизм подстановки скидки в табличную часть документа Реализация. Сумму рассчитывать с учетом скидки. + +### Требования к результату + +Прикрепить .dt выгруженной базы с данными. + + +### Процесс выполнения + +1. Создать простой справочник Номенклатурная группа без иерархии. +2. В справочник номенклатура добавить реквизит Номенклатурная группа. +3. Создать документ "Скидки номенклатуры". В шапку вывести дату и номер документа. +4. Добавить табличную часть документа с реквизитами - Объект - составного типа (Номенклатурная группа, Номенклатура), Процент скидки - тип числовой. +5. Добавить периодический регистр сведений Скидки номенклатуры с измерением Объект (тип как в документе) и ресурсом Процент скидки. +6. Делать движения в регистр при проведении документа Скидки номенклатуры; +7. В табличную часть документа Реализация добавить реквизит Автоматическая скидка. +8. В табличную часть добавить команду Применить скидку. В этом случае реализовать: + * Если для номенклатуры из табличной части документа, установлена скидка в регистре сведений на дату документа, то заполнять ее в поле + Автоматическая скидка и пересчитывать сумму с учетом скидки; + * Если для номенклатуры не установлена скидка, а установлена для номенклатурной группы то применять скидку для номенклатурной группы. + Имеется ввиду значение скидки для реквизита Номенклатурная группа Номенклатуры в табличной части документа; + * Поиск скидок осуществлять через временные таблицы пакетного запроса с использованием менеджера временных таблиц; diff --git a/06. Запросы и отчеты/06. Введение в СКД/homework-6-6.md b/06. Запросы и отчеты/06. Введение в СКД/homework-6-6.md new file mode 100644 index 0000000..f71f026 --- /dev/null +++ b/06. Запросы и отчеты/06. Введение в СКД/homework-6-6.md @@ -0,0 +1,23 @@ +# Задание к занятию "Введение в СКД" + +## Задача "Отчет Продажи по контрагентам" + +### Описание задачи + +Создать отчет Продажи по контрагентам на СКД. + +### Требования к результату + +Прикрепить файл внешнего отчета и выгрузку информационной базы (.dt) + + +### Процесс выполнения + +1. Создать внешний отчет. +2. В свойстве отчета Основная схема компоновки данных нажать на кнопку Открыть схему компоновки данных. +3. Добавить источник запрос и в нем реализовать отбор данных по табличной части документа реализация. Данные по реализации получать на определенную дату включительно. +4. В отчет вывести группировку по полю Контрагент. +5. Для контрагентов вывести среднюю цену продажи из документа и общее количество. +6. Для каждого контрагента показать строки по номенклатуре. +7. В этих строках отобразить поле: Номенклатура, и для каждой номенклатуры вывести количество, среднюю цену и сумму продажи. + diff --git a/06. Запросы и отчеты/06. Введение в СКД/homework-6-6/homework-6-6.dt b/06. Запросы и отчеты/06. Введение в СКД/homework-6-6/homework-6-6.dt new file mode 100644 index 0000000..4398fda Binary files /dev/null and b/06. Запросы и отчеты/06. Введение в СКД/homework-6-6/homework-6-6.dt differ diff --git a/06. Запросы и отчеты/06. Введение в СКД/homework-6-6/ПродажиПоКонтрагентам.erf b/06. Запросы и отчеты/06. Введение в СКД/homework-6-6/ПродажиПоКонтрагентам.erf new file mode 100644 index 0000000..f731dc2 Binary files /dev/null and b/06. Запросы и отчеты/06. Введение в СКД/homework-6-6/ПродажиПоКонтрагентам.erf differ diff --git a/06. Запросы и отчеты/07. Работа с СКД/homework-6-7.md b/06. Запросы и отчеты/07. Работа с СКД/homework-6-7.md new file mode 100644 index 0000000..707c398 --- /dev/null +++ b/06. Запросы и отчеты/07. Работа с СКД/homework-6-7.md @@ -0,0 +1,36 @@ +# Задание к занятию "Работа с СКД" + +## Задача "Отчет Продажи по контрагентам" + +### Описание задачи + +Создать отчет Продажи по контрагентам на СКД. Запрос используем из предыдущего задания. Добавляем набор данных - объект. Имя набора данных - ОтчетПоПродажам. +Из модуля отчета организовать заполнение отчета из таблицы значений с возможностью выполнения расшифровки. + +### Требования к результату + +В отчете вместо набора данных Запрос использовать набор данных Объект. Перекрыть событие ПриКомпоновкеРезультата модуля объекта отчета для передачи ТЗ в СКД. Прикрепить файл внешнего отчета и выгрузку информационной базы (.dt). + + +### Процесс выполнения + +1. Изменяем внешний отчета из прошлого задания; +2. Перекрыть событие ПриКомпоновкеРезультата() в модуле отчета. Убрать стандартную обработку; +3. Создать запрос с текстом из предыдущего задания с параметром ограничения по дате; +3. Получаем настройки компоновщика настроек. Создаем объект - ПараметрКомпоновкиДанных и из коллекции ПараметрыДанных + из полученных настроек функцией НайтиЗначениеПараметра() возвращаем объект ЗначениеПараметраКомпоновкиДанных и устанавливаем значение параметра для запроса + свойством Значение; +4. Выгружаем результат запроса в таблицу значений; +5. Для доступа к расшифровке в отчете - использовать параметр события ДанныеРасшифровки() при вызвове метода Выполнить() компоновщика макета + и Инициализировать() процессора компоновки данных. +6. Создаем объект КомпоновщикМакетаКомпоновкиДанных и функцией Выполнить() возвращаем результат в переменную. +7. Создаем структуру - Название объекта в СКД и таблица значений с данными; +8. Создаем и инициализируем объект ПроцессорКомпоновкиДанных; +9. Очищаем параметр ДокументРезультат; +10. Через объект ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент устанавливаем ДокументРезультат и выводим объект ПроцессорКомпоновкиДанных; +11. В схеме компоновки данных добавляем набор данных - объект; +12. Задаем имя объекта которое совпадает с наименованием ключа структуры с ТЗ; +13. Создаем поля на вкладке Наборы данных - количество и имена полей должны совпадать с колонками переданной таблицы значений; +14. Определяем правильный тип полей; +15. Делаем настройки для полей как в прошлом задании; +16. Проверяем формирование отчета в пользовательском режиме. diff --git a/06. Запросы и отчеты/07. Работа с СКД/homework-6-7/homework-6-7.dt b/06. Запросы и отчеты/07. Работа с СКД/homework-6-7/homework-6-7.dt new file mode 100644 index 0000000..5e7900c Binary files /dev/null and b/06. Запросы и отчеты/07. Работа с СКД/homework-6-7/homework-6-7.dt differ diff --git a/06. Запросы и отчеты/07. Работа с СКД/homework-6-7/ОтчетПоПродажам.erf b/06. Запросы и отчеты/07. Работа с СКД/homework-6-7/ОтчетПоПродажам.erf new file mode 100644 index 0000000..ac87d55 Binary files /dev/null and b/06. Запросы и отчеты/07. Работа с СКД/homework-6-7/ОтчетПоПродажам.erf differ diff --git a/06. Запросы и отчеты/certificate.pdf b/06. Запросы и отчеты/certificate.pdf new file mode 100644 index 0000000..bcd8263 Binary files /dev/null and b/06. Запросы и отчеты/certificate.pdf differ diff --git a/07. Интеграция и обмен данными/01. XML и JSON/homework-7-1.md b/07. Интеграция и обмен данными/01. XML и JSON/homework-7-1.md new file mode 100644 index 0000000..ef50f7c --- /dev/null +++ b/07. Интеграция и обмен данными/01. XML и JSON/homework-7-1.md @@ -0,0 +1,128 @@ +# Задание к занятию "XML и JSON" + +## Стандартная сериализация объектов ИБ + +### Описание задачи + +Записать в файл XML объект справочника и прочитать его в другой информационной базе. +Повторить операцию, но использовать для обмена формат JSON. + +### Требования к результату + +Выгрузка информационной базы (.dt) с Внешней обработкой, позволяющей выбрать элемент справочника и сохранить (сериализовать) его в файл данных. Эта же обработка должна позволять выбрать файл на диске и создать на основании его содержимго элемент справочника (десериализовать). Внешняя обработка должна обеспечивать обмен записями справочника между несколькими информационными базами идентичной структуры. + +### Процесс выполнения + +1. Возьмите чистую конфигурацию и создайте в ней справочник "Товары". Создайте реквизиты справочника "Цена (Число 18.2)", "Артикул (Строка 15)", "Брэнд Строка (50)" +2. Создайте внешнюю обработку с двумя закладками "Запись в файл" и "Чтение из файла" +3. На закладке "Запись в файл" разместите поле выбора "Товар" для выбора элемента из справочника Товары, а также кнопку "Сохранить в файл" +4. В обработчике нажатия кнопки "Сохранить в файл" вызовите диалог выбора файла с фильтром по расширению XML +5. Добавьте в модуль формы метод "Сохранение" с одним параметром - `ВыбранныйПуть` +6. После выбора файла пользователем должен быть вызван метод "Сохранение" с передачей в него параметром выбранного пользователем имени файла +7. Реализуйте метод "Сохранение" с использованием объекта ЗаписьXML. В файл должен быть записан СправочникОбъект той записи, которая выбрана в поле "Товар". Обратите внимание, в файл должна быть записана не ссылка, а именно СправочникОбъект, т.е. необходимо вызвать метод ПолучитьОбъект у ссылки в поле "Товар" +8. Для записи объекта используйте СериализаторXDTO и его метод `ЗаписатьXML`. Изучите содержимое полученного файла. +9. На закладке "Чтение из файла" разместите кнопку "Прочитать файл" +10. В обработчике нажатия кнопки откройте диалог выбора файла и дайте пользователю возможность выбрать XML файл для загрузки +11. После выбора файла напишите алгоритм чтение файла с помощью объекта ЧтениеXML +12. Для чтения из файла в СправочникОбъект используйте СериализаторXDTO и его метод `ПрочитатьXML`. Не забудьте вторым параметром метода указать тип, в который нужно прочитать (десериализовать) объект справочника. + +В результате, должна получиться внешняя обработка, которая позволит передать запись справочника "Товары" между двумя одинаковыми информационными базами через файл XML. + +13. Скопируйте получившуюся обработку и модифицируйте ее таким образом, чтобы вместо объектов ЧтениеXML и ЗаписьXML использовались объекты ЧтениеJSON и ЗаписьJSON соответственно. Не забудьте так же изменить метод СериализатораXDTO на Прочитать/ЗаписатьJson + +# Задание "Ручное формирование XML" + +## Описание задачи + +Довольно часто требуется не просто записать данные базы в XML-файл, а соблюсти определенную структуру файла, имена полей и их формат. Для этих целей используется ручное поэлементное формирование документа XML. + +### Требования к результату + +Выгрузка информационной базы (.dt) с Внешней обработкой, создающей документ передачи данных о бронировании в гипотетический отель. +Результат записи XML обработка должна выводить в поле текстового документа, расположенное на форме этой обработки. + +### Процесс выполнения + +1. Создайте внешнюю обработку с кнопкой, нажатие на которую формирует документ следующего содержания, используя методы объекта `ЗаписьXML` + +```xml + + + + + double + true + + + + + + single + true + + + + +``` + +Вам потребуются методы: + +* ЗаписатьОбъявлениеXML +* ЗаписатьНачалоЭлемента +* ЗаписатьКонецЭлемента +* ЗаписатьАтрибут +* ЗаписатьТекст + +2. Выведите XML в виде строки в поле текстового документа, размещенное на форме обработки. + +# Задача "Формирование JSON" + +## Описание задачи + +Формат JSON является более легковесным, и на практике чаще всего является текстовым представлением того или иного объекта (например, Структуры) +Ручное формирование JSON поэлементно используется редко, поэтому в данном задании будет применена методика создания JSON из готового объекта, как наиболее частая. + +## Требования к результату + +Выгрузка информационной базы (.dt) с Внешней обработкой, выводящая в поле текстового документа содержимое коллекции для передачи в гипотетический отель для бронирования + +Результат должен иметь вид: + +```json +[ + { + "name": "Иван", + "arrives": "2020-08-25", + "room": { + "type": "double", + "withShower": true + }, + "meals": [ + "brealfast" + ] + }, + { + "name": "Петр", + "arrives": "2020-09-10", + "room": { + "type": "single", + "withShower": true + }, + "meals": [ + "brealfast", + "dinner", + "supper" + ] + } +] +``` + +Обратите внимание, что в JSON существуют Структуры (Объекты) обозначенные фигурными скобками, и Массивы, обозначенные квадратными скобками. Каждый тип 1С:Предприятия при записи в JSON отображается именно в эти элементы JSON. Иными словами, для списков в квадратных скобках применяются Массивы 1С, для объектов в фигурных скобках - Структуры 1С или Соответствия. + +## Процесс выполнения + +1. Разместите на форме внешней ообработки поле текстового документа и кнопку "Создать JSON" +2. В обработчике нажатия кнопки создайте структуру для "Гостя", в качестве имен свойств структуры используйте именно такие названия, как в требуемом примере документа "name, arrives" и т.д. Для "комнат" и "питания" также используйте коллекции 1С. +3. Создайте Массив таких "гостей", как в примере (2 записи-структуры) в Массиве +4. С помощью метода глобального контекста `ЗаписатьJSON` и объекта `ЗаписьJSON` запишите массив гостей в виде JSON +5. Результат записи, в виде строки, отобразите в поле текстового документа на форме обработки. diff --git "a/Дипломный блок профессии 1С-разработчик/Дипломная работа \"Блока \"Прикладная разработка\"/diploma-b-howto-cash.md" "b/Дипломный блок профессии 1С-разработчик/Дипломная работа \"Блока \"Прикладная разработка\"/diploma-b-howto-cash.md" new file mode 100644 index 0000000..4aa3378 --- /dev/null +++ "b/Дипломный блок профессии 1С-разработчик/Дипломная работа \"Блока \"Прикладная разработка\"/diploma-b-howto-cash.md" @@ -0,0 +1,19 @@ +### Деньги + +Все добавляемые объекты включаем в новую подсистему **Деньги** + +1. Добавить документ **ПоступлениеДенежныхСредств**: + * Добавить реквизиты Плательщик (СправочникСсылка.Контрагенты) и Сумма (ОпределяемыйТип.Сумма) + * Создать форму документа, в которой разумным образом разместить элементы управления для реквизитов + * В "Движениях" выбрать регистр накопления **ВзаиморасчетыСКонтрагентами** + * В модуле объекта создать обработчик события ОбработкаПроведения и формировать движение по регистру Взаиморасчеты вида "Расход" с указанием контрагента-плательщика и общей суммы + +2. Добавить документ **СписаниеДенежныхСредств** (или скопировать и переименовать **ПоступлениеДенежныхСредств**): + * Добавить реквизиты Получатель (СправочникСсылка.Контрагенты) и Сумма (ОпределяемыйТип.Сумма) + * Создать форму документа, в которой разумным образом разместить элементы управления для реквизитов + * В "Движениях" выбрать регистр накопления **ВзаиморасчетыСКонтрагентами** + * В модуле объекта создать обработчик события ОбработкаПроведения и формировать движение по регистру Взаиморасчеты вида "Приход" с указанием контрагента-получателя и общей суммы + +3. Добавить журнал документов **Деньги**: + * В качестве регистрируемых выбрать документы **ПоступлениеДенежныхСредств** и **СписаниеДенежныхСредств** + * Добавить графы Контрагент (Плательщик из Поступления и Получатель из Списания), Ответственный и Сумма diff --git "a/Дипломный блок профессии 1С-разработчик/Дипломная работа \"Блока \"Прикладная разработка\"/diploma-b-howto-deals.md" "b/Дипломный блок профессии 1С-разработчик/Дипломная работа \"Блока \"Прикладная разработка\"/diploma-b-howto-deals.md" new file mode 100644 index 0000000..f7b529f --- /dev/null +++ "b/Дипломный блок профессии 1С-разработчик/Дипломная работа \"Блока \"Прикладная разработка\"/diploma-b-howto-deals.md" @@ -0,0 +1,94 @@ +### Сделки + +Все добавляемые объекты включаем в новую подсистему **Сделки** + +1. Добавить регистр накопления **Товары** вида "Остатки": + * Добавить измерение Номенклатура (СправочникСсылка.Номенклатура) и ресурсы Сумма (ОпределяемыйТип.Сумма) и Количество (ОпределяемыйТип.Количество) + +2. Добавить регистр накопления **ВзаиморасчетыСКонтрагентами** вида "Остатки": + * Добавить измерение Контрагент (СправочникСсылка.Контрагенты) и ресурс Сумма (ОпределяемыйТип.Сумма) + +3. Добавить регистр накопления **Доходы** вида "Обороты": + * Добавить измерение Номенклатура (СправочникСсылка.Номенклатура) и ресурсы Сумма (ОпределяемыйТип.Сумма) и Количество (ОпределяемыйТип.Количество) + +4. Добавить регистр накопления **Расходы** вида "Обороты": + * Добавить измерение Номенклатура (СправочникСсылка.Номенклатура) и ресурс Сумма (ОпределяемыйТип.Сумма) + +5. Добавить общий модуль НДСКлиентСервер: + * С флагами "Клиент" и "Сервер" + * Создать в нем функцию СуммаНДСПоСтавке(Сумма, СтавкаНДС), возвращающую сумму НДС, рассчитанную от суммы по ставке согласно [требованиям](diploma-b-reqs.md). Чтобы обеспечить работоспособность на клиенте, для получения значений ставок НДС используйте функцию ПредопределенноеЗначение(). + +6. Добавить документ **ПоступлениеТоваровИУслуг**: + * Добавить реквизиты Поставщик (СправочникСсылка.Контрагенты) и Сумма (ОпределяемыйТип.Сумма) + * Добавить ТЧ ТоварыИУслуги с реквизитами: + * Номенклатура (СправочникСсылка.Номенклатура) + * Количество (ОпределяемыйТип.Количество) + * СтавкаНДС (ПеречислениеСсылка.СтавкиНДС) + * Цена, Сумма, СуммаНДС (ОпределяемыйТип.Сумма) + * В "Движениях" выбрать регистры накопления Товары, Расходы и ВзаиморасчетыСКонтрагентами + * Создать форму документа, в которой: + * Разумным образом разместить элементы управления для реквизитов и табличных частей + * В таблице товаров и услуг включить отображение подвала и вывести в него итог по колонкам "Сумма" и "Сумма НДС", поставив флаг "Отображать в подвале" и задав путь к данным подвала. + * Создать клиентские процедуры: + * ПриИзмененииКоличества(ИзмененнаяСтрока), ПриИзмененииЦены(ИзмененнаяСтрока), в которых: + * Рассчитывать сумму по цене и количеству и вызывать ПриИзмененииСуммы() + * ПриИзмененииСуммы(ИзмененнаяСтрока), ПриИзмененииСтавкиНДС(ИзмененнаяСтрока), в которых: + * Рассчитывать сумму НДС по сумме и ставке вызовом НДСКлиентСервер.СуммаНДСПоСтавке() + * Переопределить обработчики событий ПриИзменении полей ввода для количества, цены, суммы и ставки НДС, и вызывать из них процедуры ПриИзменении<...>, передавая в качестве параметра ТекущиеДанные таблицы. + * Форма может выглядеть, например, так: +![Форма документа ПоступлениеТоваровИУслуг](diploma-b-purchase.png) + * В модуле объекта: + * Создать обработчик события ОбработкаПроведения и формировать движения (выбрав предварительно запросом табличную часть с типами номенклатуры): + * По регистру ВзаиморасчетыСКонтрагентами - одно движение вида "Расход" с указанием контрагента-поставщика и общей суммы + * По регистру Товары - движения вида "Приход" по каждой строке с номенклатурой типа Товары с указанием номенклатуры, количества и суммы + * По регистру Расходы - движения по каждой строке с номенклатурой типа Услуги с указанием номенклатуры и суммы + * Создать обработчик события ПередЗаписью и сохранять в реквизит шапки Сумма итог по одноименному реквизиту табличной части для отображения в списках + * Проверить документ, убедившись в том, что: + * При изменении количества и цены пересчитывается сумма и сумма НДС, а при изменении суммы и ставки НДС - сумма НДС + * Формируются движения по трем регистрам накопления, и сумма движения по Взаиморасчетам равна итогу по колонке Сумма и сумме движений по Товарам и Расходам. Пример движений для документа со снимка выше: +![Движения документа ПоступлениеТоваровИУслуг по регистру ВзаиморасчетыСКонтрагентами](diploma-b-purchase-1.png) +![Движения документа ПоступлениеТоваровИУслуг по регистру Расходы](diploma-b-purchase-2.png) +![Движения документа ПоступлениеТоваровИУслуг по регистру Товары](diploma-b-purchase-3.png) + +7. Добавить документ **РеализацияТоваровИУслуг** (или скопировать и переименовать **ПоступлениеТоваровИУслуг**): + * Добавить реквизиты Покупатель (СправочникСсылка.Контрагенты) и Сумма (ОпределяемыйТип.Сумма) + * Добавить ТЧ ТоварыИУслуги с реквизитами: + * Номенклатура (СправочникСсылка.Номенклатура) + * Количество (ОпределяемыйТип.Количество) + * СтавкаНДС (ПеречислениеСсылка.СтавкиНДС) + * Скидка (Число) + * Цена, Сумма, СуммаНДС (ОпределяемыйТип.Сумма) + * В "Движениях" выбрать регистры накопления Товары, Доходы, Расходы и ВзаиморасчетыСКонтрагентами + * Создать форму документа, в которой: + * Разумным образом разместить элементы управления для реквизитов и табличных частей + * В таблице товаров и услуг включить отображение подвала и вывести в него итог по колонкам "Сумма" и "Сумма НДС". + * Создать клиентскую функцию СуммаПоСтроке(Строка), которая возвращает сумму с учетом количества, цены и скидки + * Создать клиентские процедуры: + * ПриИзмененииНоменклатуры(ИзмененнаяСтрока), в которой: + * Заполнять цену и скидку аналогично документам **УстановкаЦен** и **УстановкаСкидок**, а также заполнять ставку НДС и вызывать процедуры ПриИзмененииЦены, ПриИзмененииСкидки и ПриИзмененииСтавкиНДС + * ПриИзмененииКоличества(ИзмененнаяСтрока), ПриИзмененииЦены(ИзмененнаяСтрока), ПриИзмененииСкидки(ИзмененнаяСтрока), в которых: + * Рассчитывать сумму вызовом СуммаПоСтроке() и вызывать ПриИзмененииСуммы() + * ПриИзмененииСуммы(ИзмененнаяСтрока), ПриИзмененииСтавкиНДС(ИзмененнаяСтрока), в которых: + * Рассчитывать сумму НДС по сумме и ставке вызовом НДСКлиентСервер.СуммаНДСПоСтавке() + * Переопределить обработчики событий ПриИзменении полей ввода номенклатуры, количества, цены, скидки, суммы и ставки НДС, и вызывать из них процедуры ПриИзменении<...>, передавая в качестве параметра ТекущиеДанные таблицы. + * Реализовать подбор аналогично документу **УстановкаЦен**, передавая в качестве владельца открываемой формы таблицу ТоварыИУслуги, а в обработчике события ОбработкаВыбора вызывая процедуру ПриИзмененииНоменклатуры, чтобы обеспечить получение цен и скидок и автоматический пересчет сумм. + * Форма может выглядеть, например, так: +![Форма документа РеализацияТоваровИУслуг](diploma-b-sale.png) + * В модуле объекта: + * Создать обработчик события ОбработкаПроведения и формировать движения, выбрав предварительно запросом данные табличной части документа с типами номенклатуры и соединив с виртуальной таблицей Остатки регистра Товары по номенклатуре: + * По регистру ВзаиморасчетыСКонтрагентами - одно движение вида "Приход" с указанием контрагента-покупателя и общей суммы + * По регистру Товары - движения вида "Расход" по каждой строке с номенклатурой типа Товары с указанием номенклатуры, количества и суммы. Сумму рассчитывать, определив среднюю стоимость единицы делением суммы остатка на количество остатка и умножив среднюю стоимость на реализуемое количество. При нехватке остатков отказываться от проведения, выводя пользователю разумное сообщение. + * По регистру Расходы - движения по каждой строке с номенклатурой типа Товары с указанием номенклатуры и суммы, равной сумме расхода по регистру Товары. + * По регистру Доходы - движения по каждой строке с указанием номенклатуры, количества и суммы + * Создать обработчик события ПередЗаписью и сохранять в реквизит шапки Сумма итог по одноименному реквизиту табличной части для отображения в списках + * Проверить документ, убедившись в том, что: + * При изменении количества, цены и скидки пересчитывается сумма и сумма НДС, а при изменении суммы и ставки НДС - сумма НДС + * Формируются движения по четырем регистрам накопления, и сумма движения по Взаиморасчетам равна итогу по колонке Сумма и сумме движений по Доходам, а суммы движений по Расходам и Товарам совпадают. Пример движений для документа со снимка выше: +![Движения документа РеализацияТоваровИУслуг по регистру ВзаиморасчетыСКонтрагентами](diploma-b-sale-1.png) +![Движения документа РеализацияТоваровИУслуг по регистру Доходы](diploma-b-sale-2.png) +![Движения документа РеализацияТоваровИУслуг по регистру Расходы](diploma-b-sale-3.png) +![Движения документа РеализацияТоваровИУслуг по регистру Товары](diploma-b-sale-4.png) + +8. Добавить журнал документов **Сделки**: + * В качестве регистрируемых выбрать документы **ПоступлениеТоваровИУслуг** и **РеализацияТоваровИУслуг** + * Добавить графы Контрагент (Поставщик из Поступления и Покупатель из Реализации), Ответственный и Сумма diff --git "a/Дипломный блок профессии 1С-разработчик/Дипломная работа \"Блока \"Прикладная разработка\"/diploma-b-howto-reports.md" "b/Дипломный блок профессии 1С-разработчик/Дипломная работа \"Блока \"Прикладная разработка\"/diploma-b-howto-reports.md" new file mode 100644 index 0000000..1daa7c2 --- /dev/null +++ "b/Дипломный блок профессии 1С-разработчик/Дипломная работа \"Блока \"Прикладная разработка\"/diploma-b-howto-reports.md" @@ -0,0 +1,43 @@ +### Отчеты + +1. Добавляем отчет **Взаиморасчеты с контрагентами**: + * Включаем в подсистему **Сделки** + * Создаем основную схему компоновки данных + * Добавляем набор данных-запрос, в котором выбираем контрагента, сумму (начальный остаток, приход, расход и конечный остаток) из виртуальной таблицы ОстаткиИОбороты регистра Взаиморасчеты без параметров + * Даем полям сумм нормальные заголовки ("Начальный остаток" вместо "Сумма начальный остаток" и т.д.) + * На закладке "Ресурсы" добавляем все суммы (начальный остаток, приход, расход и конечный остаток) с настройками по умолчанию + * В настройках: + * Добавляем группировку по контрагенту. + * На закладке "Выбранные поля" выбираем поле Контрагент и все суммы + * На закладке "Отбор" добавляем поле Контрагент и включаем быстрый доступ + * Проверяем: отчет должен выглядеть примерно так: +![Отчет ВзаиморасчетыСКонтрагентами](diploma-b-reports-1.png) + +1. Добавляем отчет **Движение товаров**: + * Включаем в подсистему **Сделки** + * Создаем основную схему компоновки данных + * Добавляем набор данных-запрос, в котором выбираем номенклатуру, сумму и количество (начальный остаток, приход, расход и конечный остаток) из виртуальной таблицы ОстаткиИОбороты регистра Товары без параметров + * На закладке "Ресурсы" добавляем все суммы и количества (начальный остаток, приход, расход и конечный остаток). В колонке "Рассчитывать по..." для количеств оставляем только расчет по номенклатуре без иерархии, чтобы не складывать разнородные количества. + * В настройках: + * Добавляем группировку по номенклатуре с иерархией. + * На закладке "Параметры" включаем использование автоматически добавленных параметров Начало периода и Конец периода; включаем их в пользовательские настройки с быстрым доступом + * На закладке "Выбранные поля" выбираем поле Номенклатура, все суммы и количества. Суммы и количества объединяем в группы "Начальный остаток", "Приход", "Расход", "Конечный остаток". Суммам и количествам, выбрав в контекстном меню команду "Заголовок", даем краткие заголовки, достаточные в контексте группы ("Количество", "Сумма"). + * На закладке "Отбор" добавляем поле Номенклатура и включаем быстрый доступ + * Проверяем: отчет должен выглядеть примерно так: +![Отчет ВзаиморасчетыСКонтрагентами](diploma-b-reports-2.png) + +3. Добавляем отчет **ДоходыИРасходы**: + * Включаем в подсистему **Сделки** + * Создаем основную схему компоновки данных + * Добавляем набор данных-запрос, в котором конструкцией ОБЪЕДИНИТЬ ВСЕ объединяем два подзапроса: + * В первом получаем номенклатуру, оборот по сумме (с псевдонимом Доходы) и 0 (с псевдонимом Расходы) из виртуальной таблицы Обороты регистра Доходы + * Во втором получаем номенклатуру, 0 (с псевдонимом Доходы) и оборот по сумме (с псевдонимом Расходы) из виртуальной таблицы Обороты регистра Расходы: +![Отчет ДоходыИРасходы Конструктор запроса](diploma-b-reports-master.png) + * Добавляем вычисляемое поле Прибыль с выражением "Доходы - Расходы" + * На закладке "Ресурсы" добавляем все Доходы, Расходы и Прибыль с настройками по умолчанию. + * В настройках: + * Добавляем группировку по номенклатуре (с иерархией). + * На закладке "Параметры" включаем использование автоматически добавленных параметров Начало периода и Конец периода; включаем их в пользовательские настройки с быстрым доступом + * Выбираем поля Номенклатура, Доходы, Расходы, Прибыль + * Проверяем: отчет должен выглядеть примерно так: +![Отчет Доходы и расходы](diploma-b-reports-3.png) diff --git "a/Дипломный блок профессии 1С-разработчик/Дипломная работа \"Блока \"Прикладная разработка\"/diploma-b-howto-settings.md" "b/Дипломный блок профессии 1С-разработчик/Дипломная работа \"Блока \"Прикладная разработка\"/diploma-b-howto-settings.md" new file mode 100644 index 0000000..f18abb2 --- /dev/null +++ "b/Дипломный блок профессии 1С-разработчик/Дипломная работа \"Блока \"Прикладная разработка\"/diploma-b-howto-settings.md" @@ -0,0 +1,74 @@ +### Настройка + +Все добавляемые объекты включаем в подсистему **Настройка**. + +1. Добавить перечисление **ТипыНоменклатуры** со значениями Товар и Услуга. + +2. Добавить перечисление **СтавкиНДС** со значениями БезНДС ("Без НДС"), НДС10 ("10%"), НДС20 ("20%"). + +3. Добавить справочник **НоменклатурныеГруппы**: + * Синоним - "Номенклатурные группы", представление объекта - "Номенклатурная группа" + * Убрать код, дать разумную длину наименованию + +4. Добавить справочник **Номенклатура**: + * Убрать код, дать разумную длину наименованию + * Включить иерархию групп и элементов + * Добавить реквизиты, включив в "Проверке заполнения" вариант "Выдавать ошибку", и поставив флаг "Заполнять из данных заполнения": + * Тип - ПеречислениеСсылка.ТипыНоменклатуры + * НоменклатурнаяГруппа - СправочникСсылка.НоменклатурныеГруппы + * СтавкаНДС - ПеречислениеСсылка.СтавкиНДС + * В модуле объекта переопределить событие ОбработкаЗаполнения, заполнив тип и ставку НДС значениями по умолчанию (Товар, НДС20). Заполнять только для элемента (для группы эти реквизиты не определены). + * Создать форму элемента, расположив элементы разумным образом, например, такую: + ![Форма элемента справочника Номенклатура](diploma-b-productserviceform.png) + +5. Добавить регистр сведений **Цены**: + * Установить режим записи "Подчинение регистратору" и периодичность "По позиции регистратора" + * Добавить измерение Номенклатура (СправочникСсылка.Номенклатура) с флагом "Ведущее" и ресурс Цена (ОпределяемыйТип.Сумма) + * Роли "Базовые права" дать права на просмотр и чтение, роли "Полные права" - на добавление, изменение и запись. + * Добавить общий модуль ЦеныСервер с флажком "Сервер", и создать в нем экспортную функцию ЦенаНаДату(Номенклатура, Дата), которая получит запросом срез последних на указанную дату с отбором по номенклатуре и вернет цену. + * Добавить общий модуль ЦеныВызовСервера с флажками "Сервер", "Внешнее соединение" и "Вызов сервера", и создать в нем функцию ЦенаНаДату для вызова из клиентского кода форм, которая вызовет одноименную функцию из модуля ЦеныСервер. + +6. Добавить документ **УстановкаЦен**: + * Добавить ТЧ Цены с реквизитами Номенклатура (СправочникСсылка.Номенклатура) и Цена (ОпределяемыйТип.Сумма) + * В "Движениях" выбрать регистр сведений "Цены" + * Роли "Базовые права" дать права на просмотр и чтение, роли "Полные права" - на добавление, изменение и запись. + * В модуле объекта: + * Переопределить событие ОбработкаПроведения, формируя движения по регистру сведений Цены датой документа + * Создать форму документа, в которой: + * Разумным образом разместить элементы управления для реквизитов и табличных частей + * Создать клиентскую процедуру ПриИзмененииНоменклатуры с параметром ИзмененнаяСтрока (ДанныеФормыЭлементКоллекции), в которой, если Номенклатура заполнена, вызвать ЦеныВызовСервера.ЦенаНаДату и заполнить цену. + * Переопределить событие ПриИзменении поля ввода номенклатуры и вызвать в нем процедуру ПриИзмененииНоменклатуры с передачей текущих данных таблицы цен. + * Добавить команду Подбор, разместив ее в командной панели таблицы цен. В обработчике команды открыть форму выбора справочника Номенклатура с параметром ЗакрыватьПриВыборе = Ложь, указав в качестве владельца таблицу цен. + * Переопределить событие ОбработкаВыбора таблицы цен. В обработчике отказаться от стандартной обработки и, если в таблице еще нет выбранного значения - добавить строку и вызвать процедуру ПриИзмененииНоменклатуры, передав добавленную строку. + * Форма может выглядеть, например, так: +![Форма документа УстановкаЦен](diploma-b-pricesetting.png) + * Проверить документ, убедившись в том, что: + * Введенные цены после проведения появляются в регистре. + * Выбор и подбор номенклатуры в последующих документах автоматически подставляют цены из предыдущих документов. + +7. Добавить регистр сведений **Скидки** (или скопировать и переименовать **Цены**): + * Установить режим записи "Подчинение регистратору" и периодичность "По позиции регистратора" + * Добавить измерение НоменклатураНоменклатурнаяГруппа (СправочникСсылка.Номенклатура, СправочникСсылка.НоменклатурныеГруппы) с флагом "Ведущее" и ресурс Скидка (Число) + * Роли "Базовые права" дать права на просмотр и чтение, роли "Полные права" - на добавление, изменение и запись. + * В общий модуль ЦеныСервер добавить экспортную функцию СкидкаНаДату(Номенклатура, Дата), которая получит запросом срез последних на указанную дату с отбором по номенклатуре и номенклатурной группе и вернет скидку, установленную для номенклатурной группы, если нет скидки для конкретной номенклатуры. В общий модуль ЦеныВызовСервера добавить одноименную функцию-обертку. + +8. Добавить документ **УстановкаСкидок** (или скопировать и переименовать **УстановкаЦен**): + * Добавить ТЧ Скидки с реквизитами НоменклатураНоменклатурнаяГруппа (СправочникСсылка.Номенклатура, СправочникСсылка.НоменклатурныеГруппы) и Скидка (Число) + * В "Движениях" выбрать регистр сведений "Скидки" + * Роли "Базовые права" дать права на просмотр и чтение, роли "Полные права" - на добавление, изменение и запись. + * В модуле объекта: + * Переопределить событие ОбработкаПроведения, формируя движения по регистру сведений Скидки датой документа + * Создать форму документа, в которой: + * Разумным образом разместить элементы управления для реквизитов и табличных частей + * Создать клиентскую процедуру ПриИзмененииНоменклатурыНоменклатурнойГруппы с параметром ИзмененнаяСтрока (ДанныеФормыЭлементКоллекции), в которой, если НоменклатураНоменклатурнаяГруппа заполнена, вызвать ЦеныВызовСервера.СкидкаНаДату и заполнить скидку. + * Переопределить событие ПриИзменении поля ввода номенклатуры / номенклатурной группы и вызвать в нем процедуру ПриИзмененииНоменклатурыНоменклатурнойГруппы с передачей текущих данных таблицы скидок. + * Форма может выглядеть, например, так: +![Форма документа УстановкаСкидок](diploma-b-discountsetting.png) + * Проверить документ, убедившись в том, что: + * Введенные скидки после проведения появляются в регистре. + * Выбор в последующих документах автоматически подставляет скидки из предыдущих. + +9. Добавить журнал документов **ЦеныИСкидки**: + * В качестве регистрируемых выбрать документы **УстановкаЦен** и **УстановкаСкидок** + * Добавить графу Ответственный + diff --git "a/Дипломный блок профессии 1С-разработчик/Дипломная работа \"Блока \"Прикладная разработка\"/diploma-b-howto.md" "b/Дипломный блок профессии 1С-разработчик/Дипломная работа \"Блока \"Прикладная разработка\"/diploma-b-howto.md" new file mode 100644 index 0000000..8079edc --- /dev/null +++ "b/Дипломный блок профессии 1С-разработчик/Дипломная работа \"Блока \"Прикладная разработка\"/diploma-b-howto.md" @@ -0,0 +1,24 @@ +## Порядок выполнения + +### Общий подход + +* Диплом является развитием предыдущего и включает многие механизмы, реализованные в ходе выполнения домашних заданий. +* Во все создаваемые документы добавляем реквизит Ответственный (СправочникСсылка.Сотрудники). В модулях объектов переопределяем событие ОбработкаЗаполнения, заполняя реквизит Ответственный сотрудником текущего пользователя (функция реализована в рамках диплома А). +* В формах документов, на на закладке "Командный интерфейс", включаем видимость команд перехода к движениям по соответствующим регистрам, чтобы они появились в панели навигации: это сильно упростит отладку и проверку. +* Все добавляемые объекты, за исключением регистров и документов, управляющих ценами и скидками, включаем в роль "Базовые права", разрешая все действия, кроме интерактивного удаления. Запрещаем интерактивное удаление и в роли "Полные права". + +[Подсистема "Настройка"](diploma-b-howto-settings.md) + +Номенклатура, цены, скидки. + +[Подсистема "Сделки"](diploma-b-howto-deals.md) + +Поступление и реализация товаров и услуг. + +[Подсистема "Деньги"](diploma-b-howto-cash.md) + +Поступление и списание денежных средств. + +[Отчеты](diploma-b-howto-reports.md) + +Отчеты по взаиморасчетам, движению товаров, доходам и расходам. diff --git "a/Дипломный блок профессии 1С-разработчик/Дипломная работа \"Блока \"Прикладная разработка\"/diploma-b-reqs.md" "b/Дипломный блок профессии 1С-разработчик/Дипломная работа \"Блока \"Прикладная разработка\"/diploma-b-reqs.md" new file mode 100644 index 0000000..d2d58dd --- /dev/null +++ "b/Дипломный блок профессии 1С-разработчик/Дипломная работа \"Блока \"Прикладная разработка\"/diploma-b-reqs.md" @@ -0,0 +1,136 @@ +## Требования к результату + +Конфигурация с именем "УправлениеИТФирмой" из диплома блока А, дополненная: + +В существующей подсистеме Настройки: + +* Перечислением **ТипыНоменклатуры** (Товар, Услуга) + +* Перечислением **СтавкиНДС** (БезНДС, НДС10, НДС20) + +* Справочником **НоменклатурныеГруппы** + * Без иерархии, с наименованием разумной длины + +* Справочником **Номенклатура**, который: + * Имеет наименование разумной длины и неограниченную иерархию групп и элементов + * Содержит реквизиты Тип, СтавкаНДС и НоменклатурнаяГруппа, используемые для элементов и обязательные к заполнению + +* Документом **УстановкаЦен**, который: + * Содержит реквизит шапки Ответственный и табличную часть Цены с реквизитами Номенклатура и Цена + * Имеет форму, в которой реализованы: + * Выбор и подбор номенклатуры с автоматическим назначением цен согласно срезу последних регистра сведений Цены + * Формирует движения по регистру сведений **Цены** + +* Регистром сведений **Цены**, который: + * Содержит измерение Номенклатура и ресурс Цена + * Является периодическим с подчинением регистратору (документу **УстановкаЦен**) + +* Документом **УстановкаСкидок**, который: + * Содержит реквизит шапки Ответственный и табличную часть Скидки с реквизитами НоменклатураНоменклатурнаяГруппа и Скидка + * Имеет форму, в которой реализованы: + * Выбор номенклатуры и номенклатурных групп с автоматическим назначением скидок согласно срезу последних регистра сведений Скидки + * Формирует движения по регистру сведений **Скидки** + +* Регистром сведений **Скидки**, который: + * Содержит измерение НоменклатураНоменклатурнаяГруппа и ресурс Скидка + * Является периодическим с подчинением регистратору (документу **УстановкаСкидок**) + +* Журналом документов **ЦеныИСкидки**, который: + * Содержит документы **УстановкаЦен** и **УстановкаСкидок** и графу Ответственный + +Подсистемой **Сделки**, а в ней: + +* Документом **ПоступлениеТоваровИУслуг**, который: + * Содержит реквизиты шапки Поставщик, Ответственный, Сумма и табличную часть ТоварыИУслуги с реквизитами Номенклатура, Количество, Цена, Сумма, СтавкаНДС, СуммаНДС + * Имеет форму, в которой реализован выбор и подбор номенклатуры с автоматическим пересчетом числовых колонок по правилам: + * При изменении реквизитов Количество и Цена пересчитывается Сумма и СуммаНДС (см. ниже "Правила расчета НДС") + * При изменении реквизита Сумма пересчитывается Цена и СуммаНДС + * При изменении реквизита СтавкаНДС пересчитывается СуммаНДС + * Перед записью заполняет реквизит шапки Сумма итогом по одноименной колонке табличной части + * Формирует движения: + * Расход по регистру накопления **ВзаиморасчетыСКонтрагентами** с указанием поставщика в сумме общего итога по реквизиту ТЧ Сумма + * Приход по регистру накопления **Товары** в разрезе номенклатуры типа Товар согласно реквизитам ТЧ Количество и Сумма + * Движения по регистру накопления **Расходы** в разрезе номенклатуры типа Услуга согласно реквизиту ТЧ Сумма + +* Документом **РеализацияТоваровИУслуг**, который: + * Содержит реквизит шапки Покупатель, Ответственный, Сумма и табличную часть ТоварыИУслуги с реквизитами Номенклатура, Количество, Скидка, Цена, Сумма, СтавкаНДС, СуммаНДС + * Имеет форму, в которой реализован выбор и подбор номенклатуры с автоматическим назначением цены и скидки, а также пересчетом числовых колонок по правилам: + * При изменении реквизитов Количество и Цена пересчитывается Сумма (с учетом скидки) и СуммаНДС (см. ниже "Правила расчета НДС") + * При изменении реквизита Скидка пересчитывается Сумма и СуммаНДС (см. ниже "Применение скидок") + * При изменении реквизита Сумма пересчитывается СуммаНДС + * При изменении реквизита СтавкаНДС пересчитывается СуммаНДС + * Перед записью заполняет реквизит шапки Сумма итогом по одноименной колонке табличной части + * Формирует движения: + * Приход по регистру накопления **ВзаиморасчетыСКонтрагентами** с указанием покупателя в сумме общего итога по реквизиту ТЧ Сумма + * Расход по регистру накопления **Товары** в разрезе номенклатуры типа Товар согласно реквизиту ТЧ Количество и сумме, определенной согласно средней стоимости остатков этого товара. В отсутствие достаточного остатка проведение не выполняется. + * Движения по регистру накопления **Расходы** в разрезе номенклатуры типа Товар в сумме себестоимости продаж (сумме расхода по регистру Товары) + * Движения по регистру накопления **Доходы** в разрезе номенклатуры всех типов согласно реквизиту ТЧ Сумма + +* Журналом документов **Сделки**, который: + * Содержит документы **ПоступлениеТоваровИУслуг** и **РеализацияТоваровИУслуг** с графами Контрагент, Ответственный и Сумма + +Подсистемой **Деньги**, а в ней: + +* Документом **ПоступлениеДенежныхСредств**, который: + * Содержит реквизиты Плательщик и Сумма + * Формирует движение: расход по регистру накопления **ВзаиморасчетыСКонтрагентами** с указанием плательщика и суммы + +* Документом **СписаниеДенежныхСредств**, который: + * Содержит реквизиты Получатель и Сумма + * Формирует движение: приход по регистру накопления **ВзаиморасчетыСКонтрагентами** с указанием получателя и суммы + +* Журналом документов **Деньги**, который: + * Содержит документы **ПоступлениеДенежныхСредств** и **СписаниеДенежныхСредств** с графами Контрагент, Ответственный и Сумма + +* Регистром накопления **ВзаиморасчетыСКонтрагентами**, который: + * Имеет вид Остатки + * Содержит измерение Контрагент и ресурс Сумма + * Подчинен регистраторам **ПоступлениеТоваровИУслуг**, **РеализацияТоваровИУслуг**, **ПоступлениеДенежныхСредств**, **РасходованиеДенежныхСредств** + * Положительные остатки по нему означают дебиторскую задолженность (нам должны), отрицательные - кредиторскую (мы должны) + +* Регистром накопления **Товары**, который: + * Имеет вид Остатки + * Содержит измерение Номенклатура и ресурсы Количество, Сумма + * Подчинен регистраторам **ПоступлениеТоваровИУслуг** и **РеализацияТоваровИУслуг** + * Хранит текущие остатки товаров и их себестоимость с учетом НДС + +* Регистром накопления **Доходы**, который: + * Имеет вид Обороты + * Содержит измерение Номенклатура и ресурсы Количество, Сумма + * Подчинен регистратору **РеализацияТоваровИУслуг** + * Хранит доходы (выручку) от реализации товаров и услуг с учетом НДС + +* Регистром накопления **Расходы**, который: + * Имеет вид Обороты + * Содержит измерение Номенклатура и ресурсы Количество, Сумма + * Подчинен регистраторам **ПоступлениеТоваровИУслуг**, **РеализацияТоваровИУслуг** + * Хранит расходы по приобретенным услугам и себестоимость реализованных товаров с учетом НДС + +* Отчетом **ДоходыИРасходы**, который: + * Выводит, соединяя, данные регистров **Доходы** и **Расходы** в три колонки ("Доходы", "Расходы", "Прибыль") + * Содержит группировку по номенклатуре с учетом иерархии и общие итоги + +* Отчетом **ДвижениеТоваров**, который: + * Выводит данные регистра **Товары**: остатки и обороты по количеству и сумме + * Содержит группировку по номенклатуре с учетом иерархии и общие итоги + * Не суммирует количества в общем итоге и по иерархии номенклатуры + +* Отчетом **ВзаиморасчетыСКонтрагентами**, который: + * Выводит данные регистра **ВзаиморасчетыСКонтрагентами**: остатки и обороты + * Содержит группировку по контрагентам и общие итоги + +Ценообразование должно быть доступно только роли **ПолныеПрава**. + +### Применение скидок + +Скидки определяются по срезу последних регистра сведений Скидки. Если скидка установлена и на конкретный элемент справочника **Номенклатура**, и на номенклатурную группу, приоритет имеет скидка для конкретного элемента. + +Цена определяется по данным регистра сведений Цены и не пересчитывается при изменении скидки. Сумма определяется по цене с учетом скидки как: + Сумма = Количество * Цена * (100 - Скидка) / 100 +При изменении суммы изменяется скидка, но не цена, по обратной формуле: + Скидка = 100 * (1 - Сумма / Количество / Цена) + +### Правила расчета НДС + +НДС рассчитывается по ставкам, определяемым по значению перечисления **СтавкиНДС** (БезНДС - 0%, НДС10 - 10%, НДС20 - 20%). Сумма НДС определяется умножением суммы на ставку (т.е. НДС рассчитывается по схеме "в том числе", например, для ставки 20% и суммы 120 р сумма НДС будет равна 120 * 0.2 / (1 + 0.2) = 20. + diff --git "a/Дипломный блок профессии 1С-разработчик/Дипломная работа \"Блока \"Прикладная разработка\"/diploma-b.md" "b/Дипломный блок профессии 1С-разработчик/Дипломная работа \"Блока \"Прикладная разработка\"/diploma-b.md" new file mode 100644 index 0000000..25bba1c --- /dev/null +++ "b/Дипломный блок профессии 1С-разработчик/Дипломная работа \"Блока \"Прикладная разработка\"/diploma-b.md" @@ -0,0 +1,11 @@ +# Диплом блока Б "Сделки и деньги" + +## Описание задачи + +Развить созданную в блоке А конфигурацию "Управление ИТ-фирмой", обеспечив возможность учета хозяйственных операций по приобретению и реализации товаров и услуг и движению денежных средств с базовым механизмом ценообразования и набором простых отчетов. + +Итогом станет конфигурация, содержащая главные элементы управленческих учетных систем на платформе 1С:Предприятие. + +[Требования к результату](diploma-b-reqs.md) + +[Порядок выполнения](diploma-b-howto.md)