1C:Бухгалтерия
1С:CRM ПРОФ, КОРП
1С:ERP Управление предприятием 2
Платформа 1С v8.3
Корп. решения 1С
Здравствуйте. Я плохо знаю русский. Извините за этого. Я еще новичок в 1С программирование. В УТ 10.3. Написал запрос с пакетам. Все работает. Сам код показывает сообщению пользователя когда остаток на складах меньше количество минимум. Это работает но есть токая проблема что если в документе есть 2 или более товары тогда код выбирает только последних из них. И не проверяет остальные товары. С отладкчиком смотрел но ошибку не нашло. Можете дать подсказку что где может быть проблем?
Спасибо всем за ранее. Документ - Реализация Товаров Услуг - Модуль Объекта - Процедура Обработка Проведения.
Спасибо всем за ранее. Документ - Реализация Товаров Услуг - Модуль Объекта - Процедура Обработка Проведения.
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|Номенклатура.Ссылка,
|Номенклатура.Мин КАК Минимум
|ПОМЕСТИТЬ втМинимум
|ИЗ
|Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|Номенклатура.Ссылка.ЭтоГруппа = ЛОЖЬ И Номенклатура.Ссылка = &Номенклатура
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
|ТоварыНаСкладахОстатки.Номенклатура,
|ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток
|ПОМЕСТИТЬ втОстаток
|ИЗ
|РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура = &Номенклатура) КАК ТоварыНаСкладахОстатки
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
|втОстаток.Номенклатура,
|ЕСТЬNULL(втМинимум.Минимум, 0) КАК Минимум,
|ЕСТЬNULL(ВЫРАЗИТЬ(втОстаток.КоличествоОстаток КАК ЧИСЛО(15, 2)), 0) КАК Остаток
|ИЗ
|втОстаток КАК втОстаток
|ЛЕВОЕ СОЕДИНЕНИЕ втМинимум КАК втМинимум
|ПО втОстаток.Номенклатура = втМинимум.Ссылка";
Стр = ЭтотОбъект.ПолучитьФорму("ФормаДокумента").ЭлементыФормы.Товары.ТекущиеДанные;
//Запрос.УстановитьПараметр("Дата", КонецДня(ТекущаяДата()));
Запрос.УстановитьПараметр("Номенклатура", Стр.Номенклатура);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Остаток = Выборка.Остаток - Стр.Количество;
Если Остаток < Выборка.Минимум Тогда
//ПоказатьОповещениеПользователя("Информация",,"Siz qalıq sayını keçdiniz. " + Стр.Номенклатура + "Minimum say - " + Выборка.Остаток,,СтатусОповещенияПользователя.Информация,);
Сообщить("Siz " + Выборка.Номенклатура + " - məhsulu üzrə daxil eilmiş minimum miqdarı keçdiniz. Minimum miqdar = "
+ Выборка.Минимум + " Anbar üzrə məhsulun qalıq sayı = " + Остаток, СтатусСообщения.Информация);
Иначе
КонецЕсли;
КонецЦикла;
ПоказатьПо теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Потому что код возвращает данные по текущей активной строке таблицы Товары.
Соответственно, если у вас 100 строк в тч, и активная 99, то только по ней остаток и собирается.
(1)
Класс) Это на каком языке?
Стр = ЭтотОбъект.ПолучитьФорму("ФормаДокумента").ЭлементыФормы.Товары.ТекущиеДанные; //Запрос.УстановитьПараметр("Дата", КонецДня(ТекущаяДата())); Запрос.УстановитьПараметр("Номенклатура", Стр.Номенклатура);
Потому что код возвращает данные по текущей активной строке таблицы Товары.
Соответственно, если у вас 100 строк в тч, и активная 99, то только по ней остаток и собирается.
(1)
- məhsulu üzrə daxil eilmiş minimum miqdarı keçdiniz. Minimum miqdar =
Класс) Это на каком языке?
Надо менять логику проверки в принципе.
В запросе надо получать остаток по списку номенклатуры Товары.ВыгрузитьКолонку("Номенклатура") - получим массив номенклатуры. Но это, если нет учета по характеристикам и/или сериям.
А потом получаем таблицу товаров
В запросе надо получать остаток по списку номенклатуры Товары.ВыгрузитьКолонку("Номенклатура") - получим массив номенклатуры. Но это, если нет учета по характеристикам и/или сериям.
А потом получаем таблицу товаров
ТабТоваров = Товары.Выгрузить(); //Получаем таблицу товаров.
ТабТоваров.Свернуть("Номенклатура","Количество"); //Группируем, если вдруг какой то товар двумя строчками.
Пока Выборка.Следующий() Цикл
//Находим в таблице товаров нужную номенклатуру и проверяем хватает ли остатка.
//Только учти,что если нет остатка, то в запросе не будет данной номенклатуры.
КонецЦикла;
(3)
Изменил запрос, в консоль показывает но ..
Изменил запрос, в консоль показывает но ..
ВЫБРАТЬ
| РеализацияТоваровУслугТовары.Номенклатура.Ссылка КАК Номенклатура,
| Справочники.Мин
|ПОМЕСТИТЬ втДокумент
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Справочники
| ПО РеализацияТоваровУслугТовары.Номенклатура.Ссылка = Справочники.Ссылка
|ГДЕ
| РеализацияТоваровУслугТовары.Ссылка = &СсылкаДокумента
|;
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура,
| ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток
|ПОМЕСТИТЬ втОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
|;
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| втДокумент.Номенклатура,
| ЕСТЬNULL(ВЫРАЗИТЬ(втОстаток.Остаток КАК ЧИСЛО(15, 2)), 0) КАК Остаток,
| ЕСТЬNULL(втДокумент.Мин, 0) КАК Минимум
|ИЗ
| втДокумент КАК втДокумент
| ЛЕВОЕ СОЕДИНЕНИЕ втОстаток КАК втОстаток
| ПО втДокумент.Номенклатура.Ссылка = втОстаток.Номенклатура.Ссылка
Запрос.УстановитьПараметр("СсылкаДокумента", ЭтотОбъект.ПолучитьФорму("ФормаДокумента").Ссылка);
ПоказатьПрикрепленные файлы:

1. В запросе заменить на
Эти строки
заменить на
= &Номенклатура
В (&Номенклатура)
Эти строки
Стр = ЭтотОбъект.ПолучитьФорму("ФормаДокумента").ЭлементыФормы.Товары.ТекущиеДанные;
//Запрос.УстановитьПараметр("Дата", КонецДня(ТекущаяДата()));
Запрос.УстановитьПараметр("Номенклатура", Стр.Номенклатура);
заменить на
тзТовары = Товары.Выгрузить();
тзТовары.Свернуть("Номенклатура");
СписокНоменклатуры = тзТовары.ВыгрузитьКолонку("Номенклатура");
Запрос.УстановитьПараметр("Номенклатура", СписокНоменклатуры);
(7)
Так?
тзТовары = Товары.Выгрузить();
тзТовары.Свернуть("Номенклатура");
СписокНоменклатуры = тзТовары.ВыгрузитьКолонку("Номенклатура");
Запрос.УстановитьПараметр("Номенклатура", СписокНоменклатуры);
тзТовары.Свернуть("Номенклатура");
СписокНоменклатуры = тзТовары.ВыгрузитьКолонку("Номенклатура");
Запрос.УстановитьПараметр("Номенклатура", СписокНоменклатуры);
Так?
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|Номенклатура.Ссылка,
|Номенклатура.Мин КАК Минимум
|ПОМЕСТИТЬ втМинимум
|ИЗ
|Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|Номенклатура.Ссылка.ЭтоГруппа = ЛОЖЬ И Номенклатура.Ссылка = В (&Номенклатура)
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
|ТоварыНаСкладахОстатки.Номенклатура,
|ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток
|ПОМЕСТИТЬ втОстаток
|ИЗ
|РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура = &Номенклатура) КАК ТоварыНаСкладахОстатки
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
|втОстаток.Номенклатура,
|ЕСТЬNULL(втМинимум.Минимум, 0) КАК Минимум,
|ЕСТЬNULL(ВЫРАЗИТЬ(втОстаток.КоличествоОстаток КАК ЧИСЛО(15, 2)), 0) КАК Остаток
|ИЗ
|втОстаток КАК втОстаток
|ЛЕВОЕ СОЕДИНЕНИЕ втМинимум КАК втМинимум
|ПО втОстаток.Номенклатура = втМинимум.Ссылка";
тзТовары = Товары.Выгрузить();
тзТовары.Свернуть("Номенклатура");
СписокНоменклатуры = тзТовары.ВыгрузитьКолонку("Номенклатура");
Запрос.УстановитьПараметр("Номенклатура", СписокНоменклатуры);
//Стр = ЭтотОбъект.ПолучитьФорму("ФормаДокумента").ЭлементыФормы.Товары.ТекущиеДанные;
//Запрос.УстановитьПараметр("Дата", КонецДня(ТекущаяДата()));
//Запрос.УстановитьПараметр("Номенклатура", Стр.Номенклатура);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
//Остаток = Выборка.Остаток - Количество;
Если Выборка.Остаток < Выборка.Минимум Тогда
//ПоказатьОповещениеПользователя("Информация",,"Siz qalıq sayını keçdiniz. " + Стр.Номенклатура + "Minimum say - " + Выборка.Остаток,,СтатусОповещенияПользователя.Информация,);
Сообщить("Siz " + Выборка.Номенклатура + " - məhsulu üzrə daxil eilmiş minimum miqdarı keçdiniz. Minimum miqdar = "
+ Выборка.Минимум + " Anbar üzrə məhsulun qalıq sayı = " + Выборка.Остаток, СтатусСообщения.Информация);
Иначе
КонецЕсли;
КонецЦикла;
Показать
(9)
Есть проблема по моему
Как изменить стр.Количество?
Есть проблема по моему
Как изменить стр.Количество?
тзТовары = Товары.Выгрузить();
тзТовары.Свернуть("Номенклатура");
СписокНоменклатуры = тзТовары.ВыгрузитьКолонку("Номенклатура");
Запрос.УстановитьПараметр("Номенклатура", СписокНоменклатуры);
//Стр = ЭтотОбъект.ПолучитьФорму("ФормаДокумента").ЭлементыФормы.Товары.ТекущиеДанные;
//Запрос.УстановитьПараметр("Дата", КонецДня(ТекущаяДата()));
//Запрос.УстановитьПараметр("Номенклатура", Стр.Номенклатура);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
//Остаток = Выборка.Остаток - Стр.Количество;
Если Выборка.Остаток < Выборка.Минимум Тогда
//ПоказатьОповещениеПользователя("Информация",,"Siz qalıq sayını keçdiniz. " + Стр.Номенклатура + "Minimum say - " + Выборка.Остаток,,СтатусОповещенияПользователя.Информация,);
Сообщить("Siz " + Выборка.Номенклатура + " - məhsulu üzrə daxil eilmiş minimum miqdarı keçdiniz. Minimum miqdar = "
+ Выборка.Минимум + " Anbar üzrə məhsulun qalıq sayı = " + Выборка.Остаток, СтатусСообщения.Информация);
Иначе
КонецЕсли;
КонецЦикла;
Показать
(9) Но так не работает
тзТовары = Товары.Выгрузить();
тзТовары.Свернуть("Номенклатура");
тзТовары.Свернуть("Количество");
СписокНоменклатуры = тзТовары.ВыгрузитьКолонку("Номенклатура");
Количество = тзТовары.ВыгрузитьКолонку("Количество");
Запрос.УстановитьПараметр("Номенклатура", СписокНоменклатуры);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Остаток = Выборка.Остаток - Количество;
Если Остаток < Выборка.Минимум Тогда
Сообщить("Siz " + Выборка.Номенклатура + " - məhsulu üzrə daxil eilmiş minimum miqdarı keçdiniz. Minimum miqdar = "
+ Выборка.Минимум + " Anbar üzrə məhsulun qalıq sayı = " + Остаток, СтатусСообщения.Информация);
Иначе
КонецЕсли;
КонецЦикла;
Показать
(15) Правильно. Соединение должно быть
Иначе, если на складе нет остатка совсем, то номенклатура не будет выводится в запросе.
А нельзя сделать это все одним запросом:
втМинимум КАК втМинимум
ЛЕВОЕ СОЕДИНЕНИЕ втОстаток КАК втОстаток
Иначе, если на складе нет остатка совсем, то номенклатура не будет выводится в запросе.
А нельзя сделать это все одним запросом:
ВЫБРАТЬ
СпрНоменклатура.Ссылка,
СпрНоменклатура.Мин КАК Минимум,
ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток
ИЗ
Справочник.Номенклатура КАК СпрНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, ) КАК ТоварыНаСкладахОстатки
ПО (ТоварыНаСкладахОстатки.Номенклатура = СпрНоменклатура.Ссылка)
ГДЕ
СпрНоменклатура.ПометкаУдаления = ЛОЖЬ
И СпрНоменклатура.Ссылка.ЭтоГруппа = ЛОЖЬ
И СпрНоменклатура.Ссылка = &Номенклатура
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот