Сборник лабораторных работ для студентов учебных заведений, изучающих программирование в системе С: Предприятие


ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(&ДатаОтчета, "ДЕНЬ"),"СЕКУНДА",1)



бет48/63
Дата18.12.2022
өлшемі36,29 Mb.
#57878
түріЛабораторная работа
1   ...   44   45   46   47   48   49   50   51   ...   63
Байланысты:
Сборник лабораторных работ для студентов учебных заведений (1)

ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(&ДатаОтчета, "ДЕНЬ"),"СЕКУНДА",1)
Сначала берется последний момент дня, указанного в параметре «ДатаОтчета», а затем прибавляется еще одна секунда, чтобы учитывались даже документы, проведенные за эту последнюю секунду.

Последняя подзадача, связанная с отчетом, – настроить его внешний вид. Переходим на вкладку «Настройки» и воспользуемся конструктором настроек отчета.



После выбора нужных полей нажмите на кнопку «ОК».
Чтобы у пользователя была возможность выбирать требуемый день, вам нужно включить параметр «ДатаОтчета» в пользовательские настройки. Это можно сделать в нижней части вкладки «Настройки».

Проверьте работоспособность системы, заполнив тестовыми данными справочник, документы «ЗакупкаТоваров» и «ПродажаТоваров», а также построив отчет.
Чтобы в дальнейшем убедиться в корректности вывода информации о документах, проведенных в конце дня, создавайте документы за предыдущие числа. Это необходимо, поскольку созданные вами документы имеют оперативный режим проведения.
Для наглядности постройте отчет до проведения документа «ПродажаТоваров» и после.







Если в документе «Продажа товаров» указать количество больше, чем имеется на складе, то будут получены отрицательные остатки.
Контроль отрицательных остатков является заключительным и самым важным этапом выполнения данной работы.
Проверять остатки товаров будем следующим образом:
1. Сделаем движение данных из документа в регистр накопления.
2. Проверим, появились ли в регистре остатки, значение которых меньше нуля (то есть отрицательные).
3. Если есть отрицательные остатки, то отменим сделанное движение в регистр накопления и выведем пользователю сообщение об ошибке.
Контроль отрицательных остатков должен происходить в момент проведения документа «ПродажаТоваров». Откроем модуль объекта данного документа.

Чтобы сделать движение данных из документа в регистр накопления, допишем после окончания цикла строку «Движения.Записать();». Метод записывает только те движения документа, у которых установлен флаг «Записывать», при этом флаг в итоге снимается, что не приводит к повторной записи движений по окончании транзакции проведения.
И главное, «Движения.Записать();» всегда записывают движения в том порядке, в котором таблицы указаны в дереве метаданных, что на порядок уменьшает шансы взаимных блокировок, ведь все транзакции в одинаковом порядке блокируют таблицы.

Теперь, когда движение было сделано, можно обратиться к данным регистра накопления.
Чтобы это сделать, воспользуемся конструктором запроса с обработкой результата. Этот конструктор можно открыть из контекстного меню, открывающегося щелчком правой кнопки мыши по области модуля. Данный конструктор обязательно должен быть вызван внутри процедуры «ОбработкаПроведения».

Соглашаемся с созданием нового запроса. Открывается окно конструктора запроса с обработкой результата. Переходим на вкладку «Таблицы и поля».

Открывшееся окно имеет три части:

  • Часть слева отображает все объекты конфигурации, имеющиеся в нашей базе данных. Нужно выбрать лишь те объекты, из которых мы хотим получать данные.

  • Посередине находятся таблицы – это выбранные нами объекты, откуда мы хотим получать данные для конкретного запроса.

  • Справа поля – это те значения (поля), которые мы хотим получить.

Данные будем брать не из регистра накопления напрямую, а из виртуальной таблицы, которую создает этот регистр автоматически. Данная виртуальная таблица способна обработать основную таблицу и самостоятельно посчитать остатки товаров.
Чтобы перенести данные из одного окна в другое, просто перетащите нужные поля с помощью мыши либо воспользуйтесь стрелочками, расположенными между окнами.
В результате данное окно должно быть заполнено следующим образом:

Переходим на вкладку «Условие» и добавим новое условие. Пусть в запрос попадут только данные с отрицательными остатками.

По окончании работы с данным конструктором нажимаем на кнопку «ОК». Конструктор выдаст предупреждение об ошибке, которое нужно проигнорировать. Для корректной работы запроса следует удалить знак амперсанта (&) перед нулем в условии. Запрос должен выглядеть следующим образом:

С помощью данного запроса из базы данных можно получить отрицательные остатки по всем товарам. Но нам нет необходимости получать такую большую выборку, нужно сузить запрос до перечня товаров, перечисленных в табличной части.
Откроем конструктор запроса. Для этого следует щелкнуть в любом месте самого запроса (черный текст в двойных кавычках) правой кнопкой мыши и вызвать конструктор запроса.

Далее нужно наложить условия на виртуальную таблицу регистра накопления.




Данное условие поможет ограничить запрос по тем товарам, которые находятся в табличной части документа.
Нажимаем на кнопку «ОК». Текст запроса изменился:

Мы добавили параметры. Теперь запрос будет проводить поиск только по конкретному списку товаров. Осталось лишь указать эти товары сразу после текста запроса. Так же необходимо добавить параметр «Дата».

Ну, и последний шаг – выдать сообщение пользователю, если запрос вернул отрицательные остатки. В первую очередь, добавим блок условия:

Внутрь цикла можно попасть только в том случае, если запрос пришел не пустой, то есть если были найдены отрицательные остатки. В таком случае нужно отменить проведение документа и выдать пользователю сообщение:

Код процедуры полностью должен выглядеть следующим образом:



Теперь проверьте корректность работы системы на предмет наличия ошибок при попытке продать товара больше, чем его имеется в наличии.


Как видно из сообщения, товара не хватает ровно в том количестве, которое раньше выводилось в отчете со знаком «-» (минус).
Если изменить количество на меньшее, то механизм будет работать корректно.

Также отчет будет учитывать документы, проведенные в конце дня.

Поставленная задача решена.


Достарыңызбен бөлісу:
1   ...   44   45   46   47   48   49   50   51   ...   63




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет