|
УП. Есть у меня 'Упр.приложение глазами пользователя', в нём запрос на наличие товаров. | ☑ | ||
---|---|---|---|---|
0
aka AMIGO
27.01.18
✎
15:08
|
Гл.1.2, уточняю для тех, у кого оно тоже есть.
(Если нет - то приведу их Запрос) Запросом проверяется наличие товаров на Складе. Что-то Запрос не работает, как задумано Для меня он пока сложен, но часть вполне понятна. Из ТЧ документа формируется ВТ, далее - левое соединение с выборкой из регистра РН Товарные запасы.. Мож чего и не просек.. Я так понимаю, что при Левом С. должны вывестись в некую табличку товары из ТЧ, либо сработать простой перебор выборки, с сообщениями о недостатке кол-ва. В цикл по обработке ВыборкаРезультатаСНехваткой не попадает.. Данные вроде-б нецелованные, не должно бы так быть.. |
|||
1
aka AMIGO
27.01.18
✎
15:10
|
Пожалуй, приведу Запрос:
//Контроль остатков при оперативном проведении Если Режим = РежимПроведенияДокумента.Оперативный Тогда // Создадим запрос, чтобы контролировать остатки по товарам Запрос = Новый Запрос("ВЫБРАТЬ | ТоварыВДокументе.Товар КАК Товар, | СУММА(ТоварыВДокументе.Количество) КАК Количество, | МАКСИМУМ(ТоварыВДокументе.НомерСтроки) КАК НомерСтроки | |ПОМЕСТИТЬ ТребуетсяТовара | |ИЗ | Документ.РасходТовара.Товары КАК ТоварыВДокументе | |ГДЕ | ТоварыВДокументе.Ссылка = &Ссылка | И ТоварыВДокументе.Товар.Вид = ЗНАЧЕНИЕ(Перечисление.ВидыТоваров.Товар) | |СГРУППИРОВАТЬ ПО | ТоварыВДокументе.Товар | |ИНДЕКСИРОВАТЬ ПО | Товар |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПРЕДСТАВЛЕНИЕ(ТребуетсяТовара.Товар) КАК ТоварПредставление, | ВЫБОР | КОГДА - ЕСТЬNULL(ТоварныеЗапасыОстатки.КоличествоОстаток, 0) > ТоварыВДокументе.Количество | ТОГДА ТоварыВДокументе.Количество | ИНАЧЕ - ЕСТЬNULL(ТоварныеЗапасыОстатки.КоличествоОстаток, 0) | КОНЕЦ КАК Нехватка, | ТоварыВДокументе.Количество - ВЫБОР | КОГДА - ЕСТЬNULL(ТоварныеЗапасыОстатки.КоличествоОстаток, 0) > ТоварыВДокументе.Количество | ТОГДА ТоварыВДокументе.Количество | ИНАЧЕ - ЕСТЬNULL(ТоварныеЗапасыОстатки.КоличествоОстаток, 0) | КОНЕЦ КАК МаксимальноеКоличество, | ТребуетсяТовара.НомерСтроки КАК НомерСтроки | |ИЗ | ТребуетсяТовара КАК ТребуетсяТовара | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварныеЗапасы.Остатки( | , | Товар В | (ВЫБРАТЬ | ТребуетсяТовара.Товар | ИЗ | ТребуетсяТовара) | И Склад = &Склад) КАК ТоварныеЗапасыОстатки | ПО ТребуетсяТовара.Товар = ТоварныеЗапасыОстатки.Товар | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходТовара.Товары КАК ТоварыВДокументе | ПО ТребуетсяТовара.Товар = ТоварыВДокументе.Товар | И ТребуетсяТовара.НомерСтроки = ТоварыВДокументе.НомерСтроки | |ГДЕ | ТоварыВДокументе.Ссылка = &Ссылка И | 0 > ЕСТЬNULL(ТоварныеЗапасыОстатки.КоличествоОстаток, 0) | |УПОРЯДОЧИТЬ ПО | НомерСтроки"); Запрос.УстановитьПараметр("Склад", Склад); Запрос.УстановитьПараметр("Ссылка", Ссылка); РезультатСНехваткой = Запрос.Выполнить(); ВыборкаРезультатаСНехваткой = РезультатСНехваткой.Выбрать(); // Выдадим ошибки для строк, в которых не хватает остатка Пока ВыборкаРезультатаСНехваткой.Следующий() Цикл |
|||
2
zippygrill
27.01.18
✎
15:11
|
Помещай данные РН Товарные запасы в ВТ и потом соединяй с ТЧ документа
|
|||
3
aka AMIGO
27.01.18
✎
15:12
|
ЗЫ. Приложение - вполне легальное.
|
|||
4
aka AMIGO
27.01.18
✎
15:13
|
(2) А, то бишь - наоборот.. Ладушки, таймаут беру.
Работаю мееееедленно, та чно, прошу извинить за тягомотину :) |
|||
5
aka AMIGO
27.01.18
✎
15:15
|
Одно сообранже только напрягает.. ВТ будет огромной. У нас 19.000 товаров в справочнике, нетбук мой не выдержит :)
|
|||
6
Defender aka LINN
27.01.18
✎
15:56
|
(5) Огромная - это несколько миллионов записей
|
|||
7
breezee
27.01.18
✎
16:22
|
(0) Вот тут у вас отбор
| ТоварыВДокументе.Ссылка = &Ссылка | И ТоварыВДокументе.Товар.Вид = ЗНАЧЕНИЕ(Перечисление.ВидыТоваров.Товар) У вас вид товара случайно не услуга в ваших нецелованных данных?) Не думали переделать вот эту часть кода РезультатСНехваткой = Запрос.Выполнить(); ВыборкаРезультатаСНехваткой = РезультатСНехваткой.Выбрать(); на: РезультатЗапроса = Запрос.Выполнить(); ВыборкаРезультатаСНехваткой = РезультатЗапроса.Выбрать(); Потому что, я никогда еще не видел, чтобы переменная в которую помещается результат запроса называлась не "Результат запроса")) |
|||
8
breezee
27.01.18
✎
16:25
|
(4)
(0) В цикл по обработке ВыборкаРезультатаСНехваткой не попадает. А, у вас результат запроса пустой? Так бы и сказали Вот эта часть кода у вас что делает? Когда ответите на вопрос, и поймете, почему данных у вас и нет |ГДЕ | ТоварыВДокументе.Ссылка = &Ссылка И | 0 > ЕСТЬNULL(ТоварныеЗапасыОстатки.КоличествоОстаток, 0) |
|||
9
aka AMIGO
27.01.18
✎
17:02
|
(6-8) Спасибо, ребята, за внимание.
(8) Именно над этим и ломаю голову. БД учебная, так что авторы её должны учить, как правильно сделать.. А "неправильно" так я и сам мастак :) Итак.. 1. чтобы переменная в которую помещается результат запроса называлась не "Результат запроса")) - строки писаны учителями! ) 2. |ГДЕ | ТоварыВДокументе.Ссылка = &Ссылка По-моему представлению, это указание на док в запросе, из которого выбираем ТЧ и строим ВТ 3. | 0 > ЕСТЬNULL(ТоварныеЗапасыОстатки.КоличествоОстаток, 0) конструкция для меня новая, я-б написал без ЕСТЬNULL Ну, семерочник, что с меня взять?.. :(( |
|||
10
breezee
27.01.18
✎
17:20
|
(9) - строки писаны учителями! )
Есть автор? Если это учебный центр1 - пойду сожгу пару сертификатов, пожалуй)) >конструкция для меня новая, я-б написал без ЕСТЬNULL Нет, я не про естьнал, с ним все ок. Я про то, где это используется. Вот, смотрите 1)Вы выбираете данные из документ 2)Вы связываетесь с данными из регистра левым соединением. У вас получается таблица, где ВСЕ строки из документа + строки из регистра, которые соответствуют условиям связи 3)В таблице, которая получилась вы удаляете в конструкции "ГДЕ" вообще все строки, которые не соответствуют условию. То есть вы режете всю таблицу, а не только одну из таблиц связи. Конкретно в вашей задаче обрежатся данные, которых в регистре нет, даже если они есть в документе Как-то так |
|||
11
Сияющий Асинхраль
27.01.18
✎
20:51
|
(7) "Потому что, я никогда еще не видел, чтобы переменная в которую помещается результат запроса называлась не "Результат запроса"" - сильный совет!!! Не думаешь, что переменная, она на то и переменная, что называть ее можно как вздумается, а уж переменная "РезультатЗапроса" уж точно не относится к зарезервинованным словам, поэтому и называться может как угодно в том числе и "ВыборкаРезультатаСНехваткой" от этого результаты запроса не изменятся, также как не изменится значение переменной "А", если ее обозвать "Б", но не изменить способ формирования...
|
|||
12
Сияющий Асинхраль
27.01.18
✎
21:00
|
А вот условие в (8) и правда странное. Я имею в виду его вторую часть:
0 > ЕСТЬNULL(ТоварныеЗапасыОстатки.КоличествоОстаток, 0) Здесь пофиг на ЕстьNULL, оно всего навсего расставляет нули вместо неопределенных значений, здесь странно то, что в запросе это условие оставляет только отрицательные остатки :-), а то бишь КоличествоОстаток < 0 , иначе говоря убирает из запроса все реальные остатки, вот у тебя там и нет ничего... Походу, просто знак сравнения не в ту сторону поставили... |
|||
13
Лефмихалыч
27.01.18
✎
22:40
|
(1) второе левое соединение с табличной частью убери, оно ненужно.
|
|||
14
Лефмихалыч
27.01.18
✎
22:41
|
+(13) которое "ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходТовара.Товары КАК ТоварыВДокументе"
ТоварыВДокументе - это твоя ВТ и есть, соединения с ней достаточно. |
|||
15
Tateossian
27.01.18
✎
22:51
|
А зачем в запросе на остатки оператор ПРЕДСТАВЛЕНИЕ? Для печатных форм - оно понятно, но вот тут на кой черт?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |