Добавил:
связь https://discord.gg/sRPpSvnP Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3_laboratornaya_BST2104_Salnikova.docx
Скачиваний:
0
Добавлен:
11.05.2025
Размер:
621.64 Кб
Скачать

Создание регистра накопления «Остатки номенклатуры»

В регистре накопления «ОстаткиНоменклатуры» (Вид регистра: Остатки), на вкладке «Данные» создали Измерения «Номенклатура» (Тип: СправочникСсылка.Номенклатура) и Ресурсы «Количество» (Тип: Число, Длина: 13, Точность: 3, Неотрицательное).

На вкладке регистраторы выбрали «ПриходнаяНакладная» «РасходнаяНакладная».

В документе «ПриходнаяНакладная» создали движение в модуле объекта:

Процедура ОбработкаПроведения(Отказ, Режим)

Движения.ОстаткиНоменклатуры.Записывать = Истина;

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

|ПриходнаяНакладнаяТовары.Товар КАК Номенклатура,

|СУММА(ПриходнаяНакладнаяТовары.Количество)КАК Количество,

|СУММА(ПриходнаяНакладнаяТовары.Сумма) КАК Сумма

|ИЗ

|Документ.ПриходнаяНакладная.Товары КАК ПриходнаяНакладнаяТовары

|ГДЕ

| ПриходнаяНакладнаяТовары.Ссылка =&Ссылка

|

|СГРУППИРОВАТЬ ПО

|ПриходнаяНакладнаяТовары.Товар";

Запрос.УстановитьПараметр("Ссылка", Ссылка);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

Движение = Движения.ОстаткиНоменклатуры.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Приход;

Движение.Период = Дата;

Движение.Номенклатура =

ВыборкаДетальныеЗаписи.Номенклатура;

Движение.Количество =

ВыборкаДетальныеЗаписи.Количество;

КонецЦикла;

КонецПроцедуры

В модуле документа «РасходнаяНакладная» создали новую процедуру (Ввели «проц» и нажали ctrl+q), назвали «Продажи», в скобки вписали «Отказ». Перенесли весь код из Процедура ОбработкаПроведения(Отказ, Режим) в Продажи(Отказ). Создали новую процедуру НоваяМетодикаКонтроляОтрицательныхОстатков(Отказ). Написали туда код:

Процедура НоваяМетодикаКонтроляОтрицательныхОстатков(Отказ)

Движения.ОстаткиНоменклатуры.Записывать = Истина;

//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

Запрос = Новый Запрос;

Запрос.МенеджерВременныхТаблиц=Новый МенеджерВременныхТаблиц;

Запрос.Текст =

"ВЫБРАТЬ

| РасходнаяНакладнаяТовары.Товар КАК Номенклатура,

| СУММА(РасходнаяНакладнаяТовары.Количество) КАК Количество

|ПОМЕСТИТЬ ВТНоменклатура

|ИЗ

| Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары

|ГДЕ

| РасходнаяНакладнаяТовары.Ссылка = &Ссылка

|

|СГРУППИРОВАТЬ ПО

| РасходнаяНакладнаяТовары.Товар

|

|ИНДЕКСИРОВАТЬ ПО

| Номенклатура

|;

|

|////////////////////////////////////////////////////////////////////////////////

|ВЫБРАТЬ

| ВТНоменклатура.Номенклатура КАК Номенклатура,

| ВТНоменклатура.Количество КАК Количество

|ИЗ

| ВТНоменклатура КАК ВТНоменклатура";

Запрос.УстановитьПараметр("Ссылка", Ссылка);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

Движение = Движения.ОстаткиНоменклатуры.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Движение.Период = Дата;

Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;

Движение.Количество = ВыборкаДетальныеЗаписи.Количество;

КонецЦикла;

Движения.Записать();

Запрос.Текст =

"ВЫБРАТЬ

| ОстаткиНоменклатурыОстатки.КоличествоОстаток КАК КоличествоОстаток,

| ОстаткиНоменклатурыОстатки.Номенклатура.Представление КАК НоменклатураПредставление

|ИЗ

| РегистрНакопления.ОстаткиНоменклатуры.Остатки(

| &МоментВремени,

| Номенклатура В

| (ВЫБРАТЬ

| ВТНоменклатура.Номенклатура КАК Номенклатура

| ИЗ

| ВТНоменклатура КАК ВТНоменклатура)) КАК ОстаткиНоменклатурыОстатки

|ГДЕ

| ОстаткиНоменклатурыОстатки.КоличествоОстаток < 0";

Запрос.УстановитьПараметр("МоментВремени", Новый Граница(МоментВремени(),ВидГраницы.Включая));

РезультатЗапроса = Запрос.Выполнить();

Если НЕ РезультатЗапроса.Пустой() Тогда

Отказ=Истина;

ВыборкаДетальныеЗаписи=РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

Сообщение = СтрШаблон("Ошибка! Недостаточно товара: '%1', в количестве: %2 шт.",ВыборкаДетальныеЗаписи.НоменклатураПредставление,-ВыборкаДетальныеЗаписи.КоличествоОстаток);

Сообщить(Сообщение);

КонецЦикла;

КонецЕсли;

КонецПроцедуры

В процедуру ОбработкаПроведения(Отказ, Режим) пишем код:

Процедура ОбработкаПроведения(Отказ, Режим)

Продажи(Отказ);

НоваяМетодикаКонтроляОтрицательныхОстатков(Отказ);

КонецПроцедуры

Запускаем «1С:Предприятие», проводим сначала Приходные накладные, потом, предварительно сменив дату так, чтобы она была свежее чем в Приходных накладных, проводим Расходные накладные. Если в расходной накладной указано больше товара, чем в приходной в дату проведения расходной, то проведение не случиться и появиться ошибка.

Рисунок 3 – Вывод сообщения о не проведении Расходной накладной на «1С:Предприятие».

Рисунок 4 – Вывод сообщения об нехватке товаров вместо проведения на «1С:Предприятие».

Нажимаем на «Сервис и настройки», «Функции для технического специалиста», «Регистры накопления», «Остатки номенклатруы»

Рисунок 5 – Расположение кнопки «Сервис и настройки» на «1С:Предприятие».

Рисунок 6 – Состав регистра накопления «Остатки номенклатуры» на «1С:Предприятие».

Соседние файлы в предмете Прикладные информационные системы