|
Вопрос по реализации условия | ☑ | ||
---|---|---|---|---|
0
Nemirov
29.01.20
✎
09:27
|
Ребят есть запрос: выводятся все расходные накладные где они есть в основании у приходных. Так Же выведена колонка с разницей в количестве. Но загвоздка в том что в условии стоит Расх.Номенклатура = Приход.Номенклатура и в эти поля не входят те карточки номенклатуры "которые есть в расходной накладной" но нет "в приходе". Как сделать условие так что бы это тоже учитывалось, вычислив какой номенклатуры нет в приходе указав разницу в количестве, предполагаю условие с пустой ссылкой(Когда расх.номенкл = Прих.номенклат.пустаяссылка тогда...) но не пойму как это реализовать. Заранее спасибо! Запрос может быть корявеньким я студент, не придирайтесь сильно(.
Запрос=Новый Запрос(); Запрос.Текст="ВЫБРАТЬ | РасходнаяНакладнаяСостав.Ссылка КАК Документ, | РасходнаяНакладнаяСостав.Номенклатура КАК Номенклатура, | РасходнаяНакладнаяСостав.Количество КАК Количество, | РасходнаяНакладнаяСостав.Коэффициент КАК Коэффициент, | ПриходнаяНакладнаяСостав.Количество - РасходнаяНакладнаяСостав.Количество КАК Разница, | РасходнаяНакладнаяСостав.Ссылка.Дата КАК Дата |ИЗ | Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав, | Документ.ПриходнаяНакладная.Состав КАК ПриходнаяНакладнаяСостав |ГДЕ | ПриходнаяНакладнаяСостав.Ссылка.ДокОснование = РасходнаяНакладнаяСостав.Ссылка | И РасходнаяНакладнаяСостав.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон | И РасходнаяНакладнаяСостав.Ссылка.Проведен = ИСТИНА | И РасходнаяНакладнаяСостав.Номенклатура = ПриходнаяНакладнаяСостав.Номенклатура"; //Запрос.УстановитьПараметр("МоментВремени",ТекущаяДатаСеанса()); Запрос.УстановитьПараметр("ДатаНач",НачалоДня(ДатаНач)); Запрос.УстановитьПараметр("ДатаКон",КонецДня(ДатаКон)); //Запрос.УстановитьПараметр("Контрагент",Контрагент); Документы=Запрос.Выполнить().Выгрузить(); ЭлементыФормы.Документы.СоздатьКолонки(); |
|||
1
Kol Pecivanovich
29.01.20
✎
09:55
|
используйте ЛЕВОЕ СОЕДИНЕНИЕ для связи таблиц, как то так:
| РасходнаяНакладнаяСостав.Количество - ISNULL(ПриходнаяНакладнаяСостав.Количество, 0) КАК Разница |ИЗ | Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав |ЛЕВОЕ СОЕДИНЕНИЕ | Документ.ПриходнаяНакладная.Состав КАК ПриходнаяНакладнаяСостав |ПО | РасходнаяНакладнаяСостав.Номенклатура = ПриходнаяНакладнаяСостав |
|||
2
Nemirov
29.01.20
✎
10:08
|
(1) Поле не найдено "ПриходнаяНакладнаяСостав"
РасходнаяНакладнаяСостав.Номенклатура = <<?>>ПриходнаяНакладнаяСостав |
|||
3
JeHer
29.01.20
✎
10:23
|
(2) ну в (1) скорее всего накидал на коленке.
| РасходнаяНакладнаяСостав.Количество - ISNULL(ПриходнаяНакладнаяСостав.Количество, 0) КАК Разница |ИЗ | Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав | Документ.ПриходнаяНакладная.Состав КАК ПриходнаяНакладнаяСостав |ЛЕВОЕ СОЕДИНЕНИЕ | Документ.ПриходнаяНакладная.Состав КАК ПриходнаяНакладнаяСостав |ПО | РасходнаяНакладнаяСостав.Номенклатура = ПриходнаяНакладнаяСостав.Номенклатура Как-то так. |
|||
4
Nemirov
29.01.20
✎
10:35
|
(3) Скорей всего может и так, но вопрос не решен в плане того что Если номенклатура отсутствует в приходной накладной а в расходной она есть, вычисления не производятся эта строка пропускается и не выводится потому что условие стоит
| РасходнаяНакладнаяСостав.Номенклатура = ПриходнаяНакладнаяСостав.Номенклатура В вычисления попадает Номенклатура которая попадает под это условие |
|||
5
catena
29.01.20
✎
11:37
|
(4)Показывай, что получилось после исправления. И никогда больше не используй кросс-соединение.
|
|||
6
Nemirov
29.01.20
✎
14:09
|
(5) Если ЭлементыФормы.Отметка.Значение = ИСТИНА Тогда
Запрос=Новый Запрос(); Запрос.Текст="ВЫБРАТЬ | РасходнаяНакладнаяСостав.Номенклатура КАК Номенклатура, | РасходнаяНакладнаяСостав.Количество - ЕСТЬNULL(ПриходнаяНакладнаяСостав.Количество, 0) КАК Разница, | РасходнаяНакладнаяСостав.Ссылка КАК Документ |ИЗ | Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриходнаяНакладная.Состав КАК ПриходнаяНакладнаяСостав | ПО РасходнаяНакладнаяСостав.Номенклатура = ПриходнаяНакладнаяСостав.Номенклатура | И РасходнаяНакладнаяСостав.Ссылка = ПриходнаяНакладнаяСостав.Ссылка.ДокОснование |ГДЕ | РасходнаяНакладнаяСостав.Количество - ЕСТЬNULL(ПриходнаяНакладнаяСостав.Количество, 0) <> 0 | И РасходнаяНакладнаяСостав.Ссылка.Контрагент ССЫЛКА Справочник.СтруктурныеЕдиницы | И (&НеПроверятьДата | ИЛИ РасходнаяНакладнаяСостав.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон) | И (&НеПроверятьКонтрагент | ИЛИ РасходнаяНакладнаяСостав.Ссылка.Контрагент = &СтруктурнаяЕдиница) | И РасходнаяНакладнаяСостав.Ссылка.Проведен = ИСТИНА // | И ПриходнаяНакладнаяСостав.Ссылка.Проведен = ИСТИНА |"; Если НЕ ПараметрыСеанса.ТекущаяСтруктурнаяЕдиница = Справочники.СтруктурныеЕдиницы.НайтиПоКоду("1")Тогда ЭлементыФормы.Контрагент.Значение = ПараметрыСеанса.ТекущаяСтруктурнаяЕдиница; ЭлементыФормы.Контрагент.Доступность = ЛОЖЬ; КонецЕсли; //Запрос.УстановитьПараметр("МоментВремени",ТекущаяДатаСеанса()); Запрос.УстановитьПараметр("ДатаНач",НачалоДня(ДатаНач)); Запрос.УстановитьПараметр("ДатаКон",КонецДня(ДатаКон)); Запрос.УстановитьПараметр("СтруктурнаяЕдиница",Контрагент); Если Не ЗначениеЗаполнено(Контрагент) Тогда Запрос.УстановитьПараметр("НеПроверятьКонтрагент", Истина); Иначе Запрос.УстановитьПараметр("НеПроверятьКонтрагент", Ложь); КонецЕсли; Если Не ЗначениеЗаполнено(ДатаНач) Тогда Запрос.УстановитьПараметр("НеПроверятьДата", Истина); Иначе Запрос.УстановитьПараметр("НеПроверятьДата", Ложь); КонецЕсли; Если Не ЗначениеЗаполнено(ДатаКон) Тогда Запрос.УстановитьПараметр("НеПроверятьДата", Истина); Иначе Запрос.УстановитьПараметр("НеПроверятьДата", Ложь); КонецЕсли; Документы=Запрос.Выполнить().Выгрузить(); ЭлементыФормы.Документы.СоздатьКолонки(); |
|||
7
catena
30.01.20
✎
05:15
|
(4)Должно все выводиться. Может наоборот, потерял товар, который есть только в приходе?
|
|||
8
Nemirov
30.01.20
✎
08:39
|
(7) Да все четко благодарю
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |