### Настройка

Все добавляемые объекты включаем в подсистему **Настройка**.

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. Добавить журнал документов **ЦеныИСкидки**:
  * В качестве регистрируемых выбрать документы **УстановкаЦен** и **УстановкаСкидок**
  * Добавить графу Ответственный 

