![]() |
![]() |
![]() |
|
Помогите вывести результат запрос в макет | ☑ | ||
---|---|---|---|---|
0
Тоненький Клиент
15.09.12
✎
20:32
|
В конфигурировании новичок, ногами не бить!)))
УТ 10.3, пл. 8.2.15.310 При формировании накладной на возврат делаю запрос на остатки номенклатуры запрос: ОбластьМакета = Макет.ПолучитьОбласть("Возврат"); Запрос = Новый Запрос; Номенклатура = "Кега/50л"; // для упрощения, т.к. используется именно эта тара Запрос.Текст = " |ВЫБРАТЬ | СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоОборот | ИЗ | РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты | ГДЕ | ПродажиОбороты.Контрагент = &Контрагент | И | ПродажиОбороты.Номенклатура = &Номенклатура | СГРУППИРОВАТЬ ПО | ПродажиОбороты.Номенклатура, | ПродажиОбороты.Контрагент |"; Запрос.УстановитьПараметр("Контрагент",ЭтотОбъект.Контрагент); //Контрагенты Запрос.УстановитьПараметр("Номенклатура",Номенклатура); //Номенклатура А вот что дальше - не могу понять. Если сделать: Наличие = Запрос.Выполнить().Выгрузить() то в ячейку "Наличие" выводит "ТаблицаЗначений". В СП не понял, как пользоваться методами Получить(), Выбрать(), Выгрузить(). |
|||
1
Тоненький Клиент
15.09.12
✎
20:44
|
Всё плохо, да?)
|
|||
2
Тоненький Клиент
15.09.12
✎
21:17
|
Ок,
сначала я выполняю запрос РезультатЗапроса = Запрос.Выполнить(); потом получаю результат Выборка = РезультатЗапроса.Выбрать(); а дальше обращаюсь к тому,что выбралось: Наличие = Выборка.КоличествоОборот Но это не срабатывает. Ячейка "Наличие" пустая. Помогите! |
|||
3
kotletka
15.09.12
✎
21:18
|
Номенклатура = "Кега/50л" - начнем с этого, это че это?
|
|||
4
kotletka
15.09.12
✎
21:20
|
тип Номенклатуры = СправочникСсылка.Номенклатура, ты его приравниваешь к типу строка ("Кега/50л"), он у тебя тупо в запросе ничего не находит
|
|||
5
Тоненький Клиент
15.09.12
✎
21:20
|
говорю же - для простоты, пока не научился сообщать в запрос номенклатуру по-нормальному, задаю напрямую
|
|||
6
Тоненький Клиент
15.09.12
✎
21:20
|
(5) к (3)
|
|||
7
Тоненький Клиент
15.09.12
✎
21:21
|
(4) а как надо?
|
|||
8
kotletka
15.09.12
✎
21:22
|
если для простоты то хер с ним оставляй "Кега/50л" , а в запросе не "ПродажиОбороты.Номенклатура", а ПродажиОбороты.Номенклатура.Наименование = &Номенклатура (да не отпилят мне руки за такое)
|
|||
9
Тоненький Клиент
15.09.12
✎
21:28
|
(8) спасибо, сделал
но что-то не так с Наличие = Выборка.КоличествоОборот ничего не дает запрос |
|||
10
kotletka
15.09.12
✎
21:29
|
дальше, Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл Наличие = Выборка.КоличествоОборот; Сообщить(Наличие); //Этот так проверишь, что либо есть или нет КонецЦикла; |
|||
11
kotletka
15.09.12
✎
21:29
|
отладчиком проверяешь?
|
|||
12
Тоненький Клиент
15.09.12
✎
21:30
|
(11) ага
|
|||
13
kotletka
15.09.12
✎
21:34
|
Вообще задачу озвучь, которую тебе сказали сделать
|
|||
14
Тоненький Клиент
15.09.12
✎
21:34
|
(10) или всё-таки ПродажиОбороты.Номенклатура.Наименование = &Номенклатура не работает, так как при проверке в отладчике
СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоОборот на конкретном документе, где я ожидаю значение в пределах 10 (количество именно этой номенклатуры), стоит значение 1950 (похоже, что количество всей номенклатуры, проданной этому контрагенту) |
|||
15
kotletka
15.09.12
✎
21:36
|
Задачу то озвучь
|
|||
16
Тоненький Клиент
15.09.12
✎
21:37
|
(13) задача простая))
Контора торгует пивом в кегах и ведет учет в УТ. Так сложилось, что реализацию она делает через РТИУ с указанием тары в ТЧ Товары с количеством, но без цены. Возврат тары оформляется Возвратом от покупателя. А в документе РТиУ требуется дописать вывод в поле макета количества "зависшей" (не возвр на сег день) тары |
|||
17
kotletka
15.09.12
✎
21:40
|
не возвращенной покупателем?
|
|||
18
Тоненький Клиент
15.09.12
✎
21:40
|
да
|
|||
19
kotletka
15.09.12
✎
21:41
|
и печатешь из РТиУ?
|
|||
20
Тоненький Клиент
15.09.12
✎
21:41
|
ПродажиОбороты вроде бы дают итог продаж за вычетом возвратов
|
|||
21
Тоненький Клиент
15.09.12
✎
21:41
|
(19) ну типа второй лист
удобно им так |
|||
22
Тоненький Клиент
15.09.12
✎
21:42
|
Возвратная накладная на тару от 13 апреля 2011 г.
Тара Наличие Возврат Остаток Кеги Баллоны Отпустил Получил |
|||
23
kotletka
15.09.12
✎
21:42
|
то есть тебе надо найти разность всей проданной и всей возвращенной тары?
|
|||
24
Тоненький Клиент
15.09.12
✎
21:42
|
Возврат и Остаток вписывают при передаче кегов вручную, а наличие желают, чтобы рассчитывалось
|
|||
25
Тоненький Клиент
15.09.12
✎
21:43
|
(23) как бы да, но если запрос к ПродажиОбороты делать, он как раз разницу и даёт
|
|||
26
kotletka
15.09.12
✎
21:43
|
Возврат это сколько вернули, Наличие это сколько всего ему продали?
|
|||
27
Тоненький Клиент
15.09.12
✎
21:45
|
(26) нет, Наличие - это сколько на сегоднящний день у него зависло в итоге, Возврат - сколько сейчас возвращает, остаток - разница между наличием и возвратом
|
|||
28
Тоненький Клиент
15.09.12
✎
21:49
|
(14) опаньки, а 1950 - это не всего количество, это сумма продажи данного документа. Ещё ,значит, глюки есть(((
|
|||
29
kotletka
15.09.12
✎
21:55
|
Запрос рабочий и должен показывать оборот, если правильно введен контрагент и правильно введено наименование
|
|||
30
kotletka
15.09.12
✎
21:58
|
вообще у номенклатуры тара, по хорошему надо либо вид номенклатуры задать тара, либо свойство добавить тара, либо такую же категорию, потом из тч выбирать всю тару, только затем строить запрос.
|
|||
31
Тоненький Клиент
15.09.12
✎
22:00
|
(30) согласен, но так они привыкли вести...
|
|||
32
Тоненький Клиент
15.09.12
✎
22:59
|
ап
|
|||
33
kotletka
15.09.12
✎
23:01
|
а что ап запрос рабочий, что-то даже получает?
|
|||
34
Тоненький Клиент
16.09.12
✎
09:50
|
всё-таки не работает
ОбластьМакета = Макет.ПолучитьОбласть("Возврат"); Запрос = Новый Запрос; Наим = "Кега/50л"; Запрос.Текст = " | ВЫБРАТЬ | ПродажиОбороты.КоличествоОборот КАК Колво |ИЗ | РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты |ГДЕ | ПродажиОбороты.Номенклатура.Наименование = &Наим | И | ПродажиОбороты.Контрагент = &Контрагент |"; Запрос.УстановитьПараметр("Контрагент",ЭтотОбъект.Контрагент); //Контрагенты Запрос.УстановитьПараметр("Наим",Наим); //Номенклатура Выборка = Запрос.Выполнить().Выбрать(); Наличие = Выборка.Колво; в Наличие ничего не отправляет, хотя сам запрос правда рабочий и в консоли запросов выдает требуемое помогите, а?...)) |
|||
35
Wobland
16.09.12
✎
09:52
|
(34) из ГДЕ перенеси всё в скобки - параметры виртуальной таблицы
|
|||
36
Wobland
16.09.12
✎
09:53
|
>ПродажиОбороты.Номенклатура.Наименование = &Наим
вот тут ты демонстрируешь непонимание того, что есть ссылка. по ссылке сравнивай |
|||
37
Wobland
16.09.12
✎
09:54
|
(36) >Наим = "Кега/50л";
похоже, я погорячился ;) |
|||
38
Wobland
16.09.12
✎
09:54
|
Пока Выборка.Следующий()
|
|||
39
Тоненький Клиент
16.09.12
✎
09:59
|
(35) просто вот так?
Запрос.Текст = " | ВЫБРАТЬ | ПродажиОбороты.КоличествоОборот КАК Колво |ИЗ | РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты |ГДЕ | (ПродажиОбороты.Номенклатура.Наименование = &Наим | И | ПродажиОбороты.Контрагент = &Контрагент) |"; |
|||
40
Wobland
16.09.12
✎
10:06
|
(39) виртуальная таблица, я сказал
ИЗ Обороты(&Период1, &Период2, ТвоиУсловия) конструктор умеет |
|||
41
Wobland
16.09.12
✎
10:07
|
кстати, "Кега/50л", "Кега / 50л", " Кега/50л", "Кега/50л." - это разные кеги?
|
|||
42
Тоненький Клиент
16.09.12
✎
10:08
|
(41) нет, кега одна)
|
|||
43
Wobland
16.09.12
✎
10:09
|
(42) а по условию они разные
|
|||
44
kotletka
16.09.12
✎
12:01
|
чорт тебе же уже писали что после запроса надо
Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Наличие = Выборка.КоличествоОборот; Сообщить(Наличие); //Этот так проверишь, что либо есть или нет КонецЦикла; |
|||
45
Тоненький Клиент
16.09.12
✎
12:31
|
Да всё , сделал, СПАСИБО всем, кто проникся!
Теперь можно немножко подрихтовать Если в качестве тары используются несколько (конечное и неизменяемое) число вариантов, то ничего умнее, чем вот это, я сделать не могу ОбластьМакета = Макет.ПолучитьОбласть("Возврат"); Запрос = Новый Запрос; Наим = "Кега/50л"; | ВЫБРАТЬ | ПродажиОбороты.КоличествоОборот КАК Колво |ИЗ | РегистрНакопления.Продажи.Обороты(,ДОБАВИТЬКДАТЕ(&ДатаКонца,ДЕНЬ,1)) КАК ПродажиОбороты |ГДЕ | (ПродажиОбороты.Номенклатура.Наименование = &Наим | И | ПродажиОбороты.Контрагент = &Контрагент) |"; Запрос.УстановитьПараметр("Контрагент",ЭтотОбъект.Контрагент); Запрос.УстановитьПараметр("Наим",Наим); //Номенклатура Запрос.УстановитьПараметр("ДатаКонца",ЭтотОбъект.Дата); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Наличие = Выборка.Колво; КонецЦикла; Запрос = Новый Запрос; Наим = "ЗДЕСЬВТОРОЕНАИМЕНОВАНИЕ"; Запрос.Текст = " | ВЫБРАТЬ | ПродажиОбороты.КоличествоОборот КАК Колво |ИЗ | РегистрНакопления.Продажи.Обороты(,ДОБАВИТЬКДАТЕ(&ДатаКонца,ДЕНЬ,1)) КАК ПродажиОбороты |ГДЕ | (ПродажиОбороты.Номенклатура.Наименование = &Наим | И | ПродажиОбороты.Контрагент = &Контрагент) |"; Запрос.УстановитьПараметр("Контрагент",ЭтотОбъект.Контрагент); //Контрагенты Запрос.УстановитьПараметр("Наим",Наим); //Номенклатура Запрос.УстановитьПараметр("ДатаКонца",ЭтотОбъект.Дата); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Наличие = Наличие + Выборка.Колво; КонецЦикла; Запрос = Новый Запрос; Наим = "ЗДЕСЬТРЕТЬЕНАИМЕНОВАНИЕ"; Запрос.Текст = " | ВЫБРАТЬ | ПродажиОбороты.КоличествоОборот КАК Колво |ИЗ | РегистрНакопления.Продажи.Обороты(,ДОБАВИТЬКДАТЕ(&ДатаКонца,ДЕНЬ,1)) КАК ПродажиОбороты |ГДЕ | (ПродажиОбороты.Номенклатура.Наименование = &Наим | И | ПродажиОбороты.Контрагент = &Контрагент) |"; Запрос.УстановитьПараметр("Контрагент",ЭтотОбъект.Контрагент); //Контрагенты Запрос.УстановитьПараметр("Наим",Наим); //Номенклатура Запрос.УстановитьПараметр("ДатаКонца",ЭтотОбъект.Дата); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Наличие = Наличие + Выборка.Колво; КонецЦикла; ОбластьМакета.Параметры.Наличие = Наличие; ОбластьМакета.Параметры.ДатаВозврата = ДатаВозврата; ТабДокумент.Вывести(ОбластьМакета); Возврат ТабДокумент; Как одним запросом выцепить все три варианта? |
|||
46
Тоненький Клиент
16.09.12
✎
12:31
|
с ДОБАВИТЬКДАТЕ тоже дурь, но щас хрен с ней
|
|||
47
rphosts
16.09.12
✎
12:43
|
момент №1: в услвия виртуальных таблиц занесите Номенклатура.Наименование = &Наим
хотя такое условие тоже отстой! в чём проблемма не понимаю. Нужно для нескольких разных материалов сделать 1 и тот-же запрос? И почему в 1 запросе тупо = , а в 2 следующих суммируем? |
|||
48
Тоненький Клиент
16.09.12
✎
12:49
|
> И почему в 1 запросе тупо = , а в 2 следующих суммируем?
в первом запросе мы получаем долг по таре для контрагента, при том что тара = "Кега/50л" вторым запросом - то же для другой тары суммируем первый и второй результат третьим запросом - долг по третьей таре суммируем итог предыдущий и результат последнего запроса получаем общий долг по всем трем видам тары для контрагента |
|||
49
Тоненький Клиент
16.09.12
✎
12:50
|
я ж не претендую на оптимальность)
её и хочется |
|||
50
Тоненький Клиент
16.09.12
✎
12:50
|
> Нужно для нескольких разных материалов сделать 1 и тот-же запрос?
имЯнно |
|||
51
rphosts
16.09.12
✎
13:08
|
(50) ну правильное желание... тогда так:
1.работу за вас никто делать не будет, но подсказать могут вполне 2.пример того как передать в запрос в качестве параметра массив (в вашем случае массив ссылок на тару): "ВЫБРАТЬ | КонтактСКлиентом.Контрагент, | КонтактСКлиентом.ВидКонтакта, | КонтактСКлиентом.Заголовок, | КонтактСКлиентом.Тема, | КонтактСКлиентом.МоментВремени |ИЗ | Документ.КонтактСКлиентом КАК КонтактСКлиентом |ГДЕ | КонтактСКлиентом.ВидКонтакта В (&ВидыКонтактов)" ВидыКонтактов = Новый Массив; ВидыКонтактов.Добавить(Перечисления.ВидыКонтактов.Звонок); ВидыКонтактов.Добавить(Перечисления.ВидыКонтактов.Письмо); ВидыКонтактов.Добавить(Перечисления.ВидыКонтактов.Встреча); Запрос.УстановитьПараметр("ВидыКонтактов ", ВидыКонтактов); 3.условие воткнуть внутрь параметров виртуальной таблицы обороты 4.если вам нужна общая сумма - суммировать прям там на уровне запроса. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |