* Создать в нем функцию СуммаНДСПоСтавке(Сумма, СтавкаНДС), возвращающую сумму НДС, рассчитанную от суммы по ставке согласно ![требованиям](diploma-b-reqs.md). Чтобы обеспечить работоспособность на клиенте, для получения значений ставок НДС используйте функцию ПредопределенноеЗначение().
* ПриИзмененииКоличества(ИзмененнаяСтрока), ПриИзмененииЦены(ИзмененнаяСтрока), в которых:
* Рассчитывать сумму по цене и количеству и вызывать ПриИзмененииСуммы
* ПриИзмененииСуммы(ИзмененнаяСтрока), ПриИзмененииСтавкиНДС(ИзмененнаяСтрока), в которых:
* Рассчитывать сумму НДС по сумме и ставке
* Переопределить обработчики событий ПриИзменении полей ввода для количества, цены, суммы и ставки НДС, и вызывать из них процедуры ПриИзменении<...>, передавая в качестве параметра ТекущиеДанные таблицы.
* При изменении количества и цены пересчитывается сумма и сумма НДС, а при изменении суммы и ставки НДС - сумма НДС
* Формируются движения по трем регистрам накопления, и сумма движения по Взаиморасчетам равна итогу по колонке Сумма и сумме движений по Товарам и Расходам.
* Добавить реквизиты Покупатель (СправочникСсылка.Контрагенты) и Сумма (ОпределяемыйТип.Сумма)
* Добавить ТЧ ТоварыИУслуги с реквизитами:
* Номенклатура (СправочникСсылка.Номенклатура)
* Количество (ОпределяемыйТип.Количество)
* СтавкаНДС (ПеречислениеСсылка.СтавкиНДС)
* Скидка (Число)
* Цена, Сумма, СуммаНДС (ОпределяемыйТип.Сумма)
* В "Движениях" выбрать регистры накопления Товары, Доходы, Расходы и Взаиморасчеты
* В модуле объекта:
* Создать обработчик события ОбработкаПроведения и формировать движения:
* По регистру Взаиморасчеты - одно движение вида "Приход" с указанием контрагента-покупателя и общей суммы
* По регистру Товары - движения вида "Расход" по каждой строке с номенклатурой типа Товары с указанием номенклатуры, количества и суммы. Сумму рассчитывать, выбрав запросом остатки по номенклатуре в табличной части, определив среднюю стоимость единицы делением суммы на количество и умножив среднюю стоимость на реализуемое количество. При нехватке остатков отказываться от проведения, выводя пользователю разумное сообщение.
* По регистру Расходы - движения по каждой строке с номенклатурой типа Товары с указанием номенклатуры и суммы, равной сумме расхода по регистру Товары.
* По регистру Доходы - движения по каждой строке с указанием номенклатуры, количества и суммы
* Создать обработчик события ПередЗаписью и сохранять в реквизит шапки Сумма итог по одноименному реквизиту табличной части для отображения в списках
* Создать форму документа, в которой:
* Разумным образом разместить элементы управления для реквизитов и табличных частей
* Создать клиентские процедуры:
* ПриИзмененииНоменклатуры(ИзмененнаяСтрока), в которой:
* Заполнять цену и скидку аналогично документам **УстановкаЦен** и **УстановкаСкидок** и вызывать процедуры ПриИзмененииЦены и ПриИзмененииСкидки
* ПриИзмененииКоличества(ИзмененнаяСтрока), ПриИзмененииЦены(ИзмененнаяСтрока), ПриИзмененииСкидки(ИзмененнаяСтрока), в которых:
* Рассчитывать сумму по цене, количеству и скидке и вызывать ПриИзмененииСуммы
* ПриИзмененииСуммы(ИзмененнаяСтрока), ПриИзмененииСтавкиНДС(ИзмененнаяСтрока), в которых:
* Рассчитывать сумму НДС по сумме и ставке
* Переопределить обработчики событий ПриИзменении полей ввода номенклатуры, количества, цены, скидки, суммы и ставки НДС, и вызывать из них процедуры ПриИзменении<...>, передавая в качестве параметра ТекущиеДанные таблицы.
* Реализовать подбор аналогично документу **УстановкаЦен**, в обработчике события **ОбработкаВыбора** вызывая процедуру ПриИзмененииНоменклатуры, чтобы обеспечить получение цен и скидок и автоматический пересчет.