|
Помогите задать условие при списании товаров | ☑ | ||
---|---|---|---|---|
0
Beginner girl
06.07.16
✎
10:26
|
Всем привет!
У меня возникла проблема при списании товаров. Когда списываю больше, чем поступило, тогда выводится сообщение с количеством товара, которого не хватает и это правильно. Но если я списываю товар ровно столько, сколько поступило, то потом я могу списывать его еще хоть сколько, даже если его и нет на складе. Например, поступило 25, я списываю 25, а потом хоть еще 100 списывай, даже если его нет. А если я спишу 27, то выдаст ошибку, что 2 шт не хватает. Каким условием дополнить, чтобы после списания того количества, которое поступило, в след.раз не списывались товары, а выводилось такое же сообщение с количеством, которого не хватает. Процедура ОбработкаПроведения(Отказ, Режим) //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! // регистр К_Остатки Расход Движения.К_Остатки.Записывать = Истина; Для Каждого ТекСтрокаСписанныеТовары Из СписанныеТовары Цикл Движение = Движения.К_Остатки.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.К_Товары = ТекСтрокаСписанныеТовары.Товар; Движение.К_Склад = Склад; Движение.К_Количество = ТекСтрокаСписанныеТовары.Количество; Движение.К_Цена = ТекСтрокаСписанныеТовары.Цена; Движение.К_Сумма = ТекСтрокаСписанныеТовары.Сумма; КонецЦикла; МенеджерВТ = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Запрос.Текст = "ВЫБРАТЬ | К_СписаниеТоваровСписанныеТовары.Товар, | СУММА(К_СписаниеТоваровСписанныеТовары.Количество) КАК Количество, | СУММА(К_СписаниеТоваровСписанныеТовары.Цена) КАК Цена, | СУММА(К_СписаниеТоваровСписанныеТовары.Сумма) КАК Сумма |ПОМЕСТИТЬ НоменклатураДокумента |ИЗ | Документ.К_СписаниеТоваров.СписанныеТовары КАК К_СписаниеТоваровСписанныеТовары |ГДЕ | К_СписаниеТоваровСписанныеТовары.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | К_СписаниеТоваровСписанныеТовары.Товар"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Если Режим = РежимПроведенияДокумента.Оперативный Тогда Запрос3 = Новый Запрос; Запрос3.МенеджерВременныхТаблиц = МенеджерВТ; Запрос3.Текст = "ВЫБРАТЬ | К_ОстаткиОстатки.К_Товары, | К_ОстаткиОстатки.К_КоличествоОстаток, | К_ОстаткиОстатки.К_Склад, | К_СписаниеТоваров.СписанныеТовары.( | Количество | ) |ИЗ | РегистрНакопления.К_Остатки.Остатки( | , | К_Товары В | (ВЫБРАТЬ | НоменклатураДокумента.Товар | ИЗ | НоменклатураДокумента) | И К_Склад = &Склад) КАК К_ОстаткиОстатки, | Документ.К_СписаниеТоваров КАК К_СписаниеТоваров |ГДЕ | К_ОстаткиОстатки.К_КоличествоОстаток > 0"; Запрос3.УстановитьПараметр("Склад", Склад); Результат = Запрос3.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Если (ТекСтрокаСписанныеТовары.Количество > ВыборкаДетальныеЗаписи.К_КоличествоОстаток) Тогда Отказ = Истина; Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Не хватает "+ (ТекСтрокаСписанныеТовары.Количество-ВыборкаДетальныеЗаписи.К_КоличествоОстаток) + " позиций номенклатуры " + ВыборкаДетальныеЗаписи.К_Товары + "."; Сообщение.Сообщить(); КонецЕсли; Если Отказ Тогда Продолжить; КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры |
|||
1
FIXXXL
06.07.16
✎
10:32
|
второй запрос кривой
если нет остатка, он вернет "урезанный" список товара тебе нужно или левое соединение, по старой методе или записать движ в регистр, а потом запросом посмотреть минуса, это по-новой методе |
|||
2
Beginner girl
06.07.16
✎
10:42
|
FIXXXL, где можно посмотреть/почитать, чтобы более менее понятно было про левое соединение?
|
|||
3
FIXXXL
06.07.16
✎
10:48
|
(2) полный список номенклатуры из ТЧ, левым соединением таб.остатков с ЕСТЬNULL(КолвоОстаток,0)
тогда получишь что хочешь |
|||
4
FIXXXL
06.07.16
✎
10:48
|
(3) + у тебя же выбирается только номенклатура, которая есть на остатках
|
|||
5
ovrfox
06.07.16
✎
10:49
|
Нужен примерно такой запрос
Запрос3.Текст = "ВЫБРАТЬ | НоменклатураДокумента.Товар КАК К_Товары, | К_ОстаткиОстатки.К_КоличествоОстаток, | К_ОстаткиОстатки.К_Склад, | НоменклатураДокумента.Количество |ИЗ | НоменклатураДокумента КАК НоменклатураДокумента | ЛЕВОЕ СОЕДИНЕНИЕ | РегистрНакопления.К_Остатки.Остатки( | , | К_Товары В | (ВЫБРАТЬ | НоменклатураДокумента.Товар | ИЗ | НоменклатураДокумента) | И К_Склад = &Склад) КАК К_ОстаткиОстатки | ПО НоменклатураДокумента.Товар = К_ОстаткиОстатки.К_Товары |ГДЕ | К_ОстаткиОстатки.К_КоличествоОстаток > 0"; |
|||
6
ovrfox
06.07.16
✎
10:50
|
(5) Только вместо "ГДЕ" должно быть "И"
|
|||
7
FIXXXL
06.07.16
✎
10:54
|
(6) а зачем вообще условие на КолвоОстаток?
(2) почитай про новую методу лучше http://catalog.mista.ru/public/195591/ |
|||
8
Beginner girl
06.07.16
✎
12:18
|
ovrfox, FIXXXL, (5) (7)
Спасибо Вам, ребята, постараюсь разобраться) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |