Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
03 июл 2024, 10:06

Проверка наличия товара

Автор Юлия56, 04 ноя 2014, 13:54

0 Пользователей и 1 гость просматривают эту тему.

cska-fanat-kz

tepliym, никому подобный код больше не показывайте. и даже то что результат худо бедно но получен - не показатель ((((
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

mplass

Цитата: LexaK от 04 ноя 2014, 19:17
пример ниже написан в другой базе, для другого документа и регистра,
просто замените на свои документ и регистр. (в примере есть еще пара мест которые можно оптимизировать, но это уже для любителей писать очень оптимальный код)


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

Отказ = ПроверкаОстатков();
Если Отказ Тогда
//проверка не прошла, все сообщения сделаны в функции,
//просто выходим
Возврат;
КонецЕсли;

//здесь дальнейший код по проведению документа!

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

Функция ПроверкаОстатков()

лкЗапрос = новый Запрос;
лкЗапрос.Текст = "
|//подготавливаем таблицу с товарами по документу
|//заодно суммируем количество одинаковых товаров
|//так как в товарной части, в разных строчках,
|//могут быть одинаковые товары!!!
|ВЫБРАТЬ
| //Док.Ссылка,
| Док.Номенклатура,
| Сумма(Док.Количество) как Количество
|поместить Таб
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК Док
|где
| Док.Ссылка = &Ссылка
|Сгруппировать по
| //Док.Ссылка,
| Док.Номенклатура
|;
|Выбрать
| Таб.*,
| Рег.КоличествоОстаток как Остаток
|из
| Таб
|левое соединение
| РегистрНакопления.ТоварыНаСкладах.Остатки(
| &Дата,
| //Склад = &Склад     //ВАЖНО! Если есть склад в документе, включите условие по складу
| //только для нужных товаров получаем остатки!!!
| Номенклатура в (выбрать Номенклатура из Таб) ) КАК Рег
| по Таб.Номенклатура = Рег.Номенклатура
|Где
| //при условии что в документе количество по товарам всегда > 0
| ЕстьNull(Рег.КоличествоОстаток,0) < Таб.Количество
|упорядочить по
| Таб.Номенклатура
|автоупорядочивание
|
|
|";

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

Если лкРезультат.Пустой() Тогда
//результат пустой,
//значит в документе нет Товара по которому нехватает остатка
Возврат Ложь;
КонецЕсли;

лкРезультат = лкРезультат.Выгрузить();
//выводим одну строку - заголовок, информция о проводимом документе
//всегда помним о пакетных обработках!!!
Сообщить("Нехватает остатков по документу: " + Ссылка);
//вместо сообщить можно использовать другие методы, лог в файл
Для каждого лкСтр Из лкРезультат Цикл
//здесь выводим только сообщения по нехватке количества
//указываем товар, сколько надо отгрузить, и какой остаток
Сообщить("Товар: " + лкСтр.Номенклатура
   + " требуется: " + лкСтр.Количество
   + " вналичии: " + лкСтр.Остаток );
КонецЦикла;

//Отказ будет Истина, документ не запишется и не проведется!
Возврат Истина;

КонецФункции //


LexaK, только начинаю познавать 1С, посему не сочтите за наглость мою просьбу. Подскажите, пожалуйста, что нужно поменять в представленном вами коде под мою конфигурацию. Имеется Документ ОтгрузкаПродукции, заполняемый по документу Заказ. При проведении отгрузки товара, необходимо чтобы проводилась проверка наличия изделий на выбранном в отгрузке складе. Вроде как все тоже самое. Регистр накопления, отвечающий за остатки на складе называется НаличиеГотовойПродукции.
Был бы признателен, если бы вы объяснили, что построчно происходит в самом начале
Цитировать|ВЫБРАТЬ
      |   //Док.Ссылка,
      |   Док.Номенклатура,
      |   Сумма(Док.Количество) как Количество
      |поместить Таб   
      |ИЗ
      |   Документ.РеализацияТоваровУслуг.Товары КАК Док
      |где
      |   Док.Ссылка = &Ссылка
      |Сгруппировать по
      |   //Док.Ссылка,
      |   Док.Номенклатура
Буду рад любому вашему ответу

Tyts

Цитата: mplass от 04 фев 2017, 11:30Был бы признателен, если бы вы объяснили, что построчно происходит в самом начале

В этом запросе получаются записи ТЧ документа и результат помещается в ТЗ "Таб" что бы можно было повторно использовать в запросе.
А вообще учите матчасть, это основы.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск