Имя: Пароль:
1C
1С v8
Помогите вывести результат запрос в макет
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.если вам нужна общая сумма - суммировать прям там на уровне запроса.