1
0
mirror of https://github.com/netology-code/1c-homeworks.git synced 2024-11-24 08:02:20 +02:00

Update homework-5-5.md

This commit is contained in:
StepanShipitsyn 2020-06-14 23:17:50 +08:00 committed by GitHub
parent 4198a3a6ac
commit 08891d9ef8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

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