diff --git a/homework-5-5.md b/homework-5-5.md index 8b13789..735f62b 100644 --- a/homework-5-5.md +++ b/homework-5-5.md @@ -1 +1,139 @@ +# Задание к занятию "Виртуальные таблицы" +## Задача 1 Добавить контроль остатков в проведение документа Реализация + +### Описание задачи + +Добавляем контроль остатков товара при проведении документа Реализация. + +Продавать можно товар, который есть наличии. + +Для этого сначала его необходимо оприходововать товар или иметь в остатках. + +### Требования к результату + +При проведении реализации система контролирует наличие остатков. + +Если товара нет в наличии, система не формирует движения, отказ на проведение и сообщает о причине пользователю. + +В сообщении указывается какого товара и в каком количестве не хватает. + +### Процесс выполнения + +в процедуру ОбработкаПроведения добавить запрос на проверку наличия остатка по номенклатуре из ТЧ документа + +Если не хватает, то возвращаем Отказ = Истина + +Иначе даем возможность системе провести документ + +Процедура ОбработкаПроведения(Отказ, РежимПроведения) +    +```bsl +    //  1. Получение запросом данных документа +    Запрос = Новый Запрос; +    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; +    Запрос.Текст = +        "ВЫБРАТЬ +        |   Товары.Номенклатура КАК Номенклатура, +        |   СУММА(Товары.Количество) КАК Количество +        |ПОМЕСТИТЬ Товары +        |ИЗ +        |   Документ.Реализация.Товары КАК Товары +        |ГДЕ +        |   Товары.Ссылка = &Ссылка +        | +        |СГРУППИРОВАТЬ ПО +        |   Товары.Номенклатура +        | +        |ИНДЕКСИРОВАТЬ ПО +        |   Номенклатура +        |; +        | +        |//////////////////////////////////////////////////////////////////////////////// +        |ВЫБРАТЬ +        |   Товары.Номенклатура КАК Номенклатура, +        |   Товары.Количество КАК Количество +        |ИЗ +        |   Товары КАК Товары"; +    Запрос.УстановитьПараметр("Ссылка", Ссылка); +    РезультатЗапроса = Запрос.Выполнить(); +    +    //  2. Формирование движений-расход регистра +    Движения.ДвиженияТовара.Очистить(); +    ВыборкаТовары = РезультатЗапроса.Выбрать(); +    Пока ВыборкаТовары.Следующий() Цикл +        Движение = Движения.ДвиженияТовара.ДобавитьРасход(); +        Движение.Период = Дата; +        Движение.Номенклатура = ВыборкаТовары.Номенклатура; +        Движение.Количество = ВыборкаТовары.Количество; +    КонецЦикла; +    +    //  3. Запись движений в БД +    Движения.ДвиженияТовара.Записывать = Истина; +    Движения.Записать(); +    +    //  4. Запрос, получающий отрицательные остатки из регистра +    Запрос.Текст = +        "ВЫБРАТЬ +        |   Остатки.Номенклатура КАК Номенклатура, +        |   ПРЕДСТАВЛЕНИЕССЫЛКИ(Остатки.Номенклатура) КАК НоменклатураПредставление, +        |   -Остатки.КоличествоОстаток КАК Дефецит +        |ИЗ +        |   РегистрНакопления.ДвиженияТовара.Остатки( +        |           &МоментВремени, +        |           Номенклатура В +        |               (ВЫБРАТЬ +        |                   Товары.Номенклатура КАК Номенклатура +        |               ИЗ +        |                   Товары КАК Товары)) КАК Остатки +        |ГДЕ +        |   Остатки.КоличествоОстаток < 0"; +    +    ГраницаКонтроля = Новый Граница(МоментВремени(), ВидГраницы.Включая); +    Запрос.УстановитьПараметр("МоментВремени", ГраницаКонтроля); +    РезультатЗапроса = Запрос.Выполнить(); +    +    //  5. Вывод сообщений о недостатке товаров +    Если Не РезультатЗапроса.Пустой() Тогда +        Отказ = Истина; +        ВыборкаОшибки = РезультатЗапроса.Выбрать(); +        Пока ВыборкаОшибки.Следующий() Цикл +            Сообщение = Новый СообщениеПользователю; +            Сообщение.Текст = "Товара "+ВыборкаОшибки.НоменклатураПредставление+" недостаточно в количестве "+ВыборкаОшибки.Дефецит+" шт."; +            Сообщение.Сообщить(); +        КонецЦикла; +    КонецЕсли; +    +КонецПроцедуры +``` +## Задача 2 Создать отчет СКД "Остатки товаров" + +### Описание задачи + +Создадим отчет для формирования остатков товаров + +### Требования к результату + +Остатки формируются на указанную дату + +Можно выбрать дату, отбор по номенклатуре + +### Процесс выполнения + +0. Удобнее будет отладить отчет как внешний и далее загрузить в конфигурацию уже рабочий. Можно сразу в конфигурации. + +1. Создадим новый отчет - нажмем "Открыть схему компановки данных" - добавить Набор данных запрос - из Регистра накопления ДвиженияТовара + +добавим +- Номенклатура +- Количество + +2. Количество добавим в ресурсы, выражение Сумма + +3. вкладка Настройки - добавим новую группировку, пустую + +4. выбранные поля - добавим номенклатуру и количество + +5. отбор - добавим Номенклатура. Правой кнопкой мыши нажмем на нее - откроем Свойства элемента пользовательских настроек - поставим галочку Включать пользовательские настройки + +## Задача 3 (опциональная, можно не делать) Перенесем все в расширение