Для начала необходимо создать Регистр Накопления, для того чтобы фиксировать количество нашего товара.
Дальше создаём документы "Приход" и "Расход".
В документе "Приход" всё просто, делаем пару реквизитов, в моём случае это "Товар" и "Количество", дальше нам необходимо сделать движения.
Открываем движения и выбираем тип движения регистра - Приход, далее жмём "Заполнить выражения", дальше жмём "ок" и у нас появляется следующий код.
Движения.ОстаткиНоменклатуры.Записывать = Истина;
Для Каждого ТекСтрокаСписокТоваров Из СписокТоваров Цикл
Движение = Движения.ОстаткиНоменклатуры.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Товар = ТекСтрокаСписокТоваров.Товар;
Движение.Склад = Склад;
Движение.Количество = ТекСтрокаСписокТоваров.Количество;
КонецЦикла;
Дальше переходим в документ "Расход" и проделываем те же манипуляции, только уже выбираем тип Расход.
Движения.ОстаткиНоменклатуры.Записывать = Истина;
Для Каждого ТекСтрокаСписокТоваров Из СписокТоваров Цикл
Движение = Движения.ОстаткиНоменклатуры.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Товар = ТекСтрокаСписокТоваров.Товар;
Движение.Склад = Склад;
Движение.Количество = ТекСтрокаСписокТоваров.Количество;
КонецЦикла;
Ниже нужно прописать две строчки кода, которые фиксируют количество товара на момент создания документа.
Движения.ОстаткиНоменклатуры.Записать();
Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;
Далее необходимо сделать запрос, в котором в качестве таблицы мы выбираем наш регистр с типом остатки, а в полях выбираем оба наших реквизита, в условиях надо выбрать количество меньше 0.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиНоменклатурыОстатки.Товар КАК Товар,
| ОстаткиНоменклатурыОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатурыОстатки
|ГДЕ
| ОстаткиНоменклатурыОстатки.КоличествоОстаток < 0";
После создания запроса надо присвоить значения
Товары = ЭтотОбъект.СписокТоваров.ВыгрузитьКолонку("Товар");
Запрос.УстановитьПараметр("Товар", Товары);
РезультатЗапроса = Запрос.Выполнить();
Ну и наконец надо сделать условие с циклом
Если не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
ТекстШаблон = ("Не хватает товара ""%1"" в количестве %2");
Пока Выборка.Следующий() Цикл
СтрокаВывода = СтрШаблон(ТекстШаблон, Выборка.Товар, -Выборка.КоличествоОстаток);
Сообщить(СтрокаВывода);
КонецЦикла;
Отказ = Истина;
КонецЕсли;
В архиве выгрузка приложения с описанным кодом.
Тестирование проводилось в 1С:Предприятие 8.3 версия (8.3.24.1368).