Имя: Пароль:
1C
1С v8
v8: Хелп( забаньте меня в следующий раз за такое название )
Ø (Волшебник 17.07.2012 13:27)
0 SherifSP
 
17.07.12
12:40
Есть запрос

Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    Долги.Контрагент,
   |    СУММА(ВЫБОР
   |            КОГДА Долги.ДнейПросрочки < 0
   |                ТОГДА Долги.СуммаВзаиморасчетовОстаток
   |            ИНАЧЕ 0
   |        КОНЕЦ) КАК СуммаПросрочки,
   |    МИНИМУМ(Долги.ДатаОплаты) КАК ДатаОплаты
   |ИЗ
   |    (ВЫБРАТЬ
   |        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.Контрагент КАК Контрагент,
   |        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом КАК ДокументРасчетов,
   |        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаОплаты КАК ДатаОплаты,
   |        РАЗНОСТЬДАТ(&ДатаИтогов, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаОплаты, ДЕНЬ) + Константы.ДопустимыеДниПросрочки КАК ДнейПросрочки,
   |        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток КАК СуммаВзаиморасчетовОстаток
   |    ИЗ
   |        РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(, ) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки
   |            ЛЕВОЕ СОЕДИНЕНИЕ Константы КАК Константы
   |            ПО (1 = 1)) КАК Долги
   |ГДЕ
   |    Долги.СуммаВзаиморасчетовОстаток > 0
   |
   |СГРУППИРОВАТЬ ПО
   |    Долги.Контрагент";

И менеджер временныхТаблиц

МенеджерВременныхТаблиц = Неопределено;
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ РАЗЛИЧНЫЕ
   |    НС.Контрагент,
   |    НС.ТорговаяТочка
   |ПОМЕСТИТЬ Клиенты
   |ИЗ
   |    &СписокКлиентов КАК НС";
   Запрос.УстановитьПараметр("СписокКлиентов",СписокКлиентов);
   Запрос.Выполнить();
   МенеджерВременныхТаблиц = Запрос.МенеджерВременныхТаблиц;

Как поместить менеджер в первый запрос, чтобы запрос искал только по контрагентам, которые выбрал менеджер временных таблиц
1 SherifSP
 
17.07.12
12:42
В этот кусок нужно поместить врем табл
2 SherifSP
 
17.07.12
12:43
|ИЗ
   |    (ВЫБРАТЬ
   |        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.Контрагент КАК Контрагент,
   |        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом КАК ДокументРасчетов,
   |        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаОплаты КАК ДатаОплаты,
   |        РАЗНОСТЬДАТ(&ДатаИтогов, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаОплаты, ДЕНЬ) + Константы.ДопустимыеДниПросрочки КАК ДнейПросрочки,
3 andrewks
 
17.07.12
12:43
ветки нужно называть осмысленно
4 alkov
 
17.07.12
12:47
3-я ветка с этим запросом уже
5 SherifSP
 
17.07.12
12:52
Хз правильно или нет

|ИЗ
   |    (ВЫБРАТЬ
   |        МенеджерВременныхТаблиц.Контрагент КАК Контрагент,
   |        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом КАК ДокументРасчетов,
   |        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаОплаты КАК ДатаОплаты,
   |        РАЗНОСТЬДАТ(&ДатаИтогов, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаОплаты, ДЕНЬ) + Константы.ДопустимыеДниПросрочки КАК ДнейПросрочки,
   |        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток КАК СуммаВзаиморасчетовОстаток
   |    ИЗ
   |        РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(, ) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки
   |            ЛЕВОЕ СОЕДИНЕНИЕ Константы КАК Константы
   |            ПО (1 = 1)
   |            ЛЕВОЕ СОЕДИНЕНИЕ МенеджерВременныхТаблиц КАК МенеджерВременныхТаблиц
   |            ПО ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.Контрагент = МенеджерВременныхТаблиц.Контрагент) КАК Долги
6 SherifSP
 
17.07.12
12:56
Ругается на временную таблицу
7 Рэйв
 
17.07.12
12:59
ты помещаешь результат в таблицу клиенты.
Она после выполнения висит у тебя в запросе.
Работай с ней как с обычной таблицей, в чем трабла то?
8 SherifSP
 
17.07.12
13:02
Запрос = Новый Запрос;
   Запрос.МенеджерВременныхТаблиц = мМенеджерВременныхТаблиц;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    СУММА(ВЫБОР
   |            КОГДА Долги.ДнейПросрочки < 0
   |                ТОГДА Долги.СуммаВзаиморасчетовОстаток
   |            ИНАЧЕ 0
   |        КОНЕЦ) КАК СуммаПросрочки,
   |    МИНИМУМ(Долги.ДатаОплаты) КАК ДатаОплаты,
   |    Долги.Контрагент
   |ИЗ
   |    (ВЫБРАТЬ
   |        МенеджерВременныхТаблиц.Контрагент КАК Контрагент,
   |        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом КАК ДокументРасчетов,
   |        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаОплаты КАК ДатаОплаты,
   |        РАЗНОСТЬДАТ(&ДатаИтогов, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаОплаты, ДЕНЬ) + Константы.ДопустимыеДниПросрочки КАК ДнейПросрочки,
   |        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток КАК СуммаВзаиморасчетовОстаток
   |    ИЗ
   |        РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(, ) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки
   |            ЛЕВОЕ СОЕДИНЕНИЕ Константы КАК Константы
   |            ПО (1 = 1)
   |            ЛЕВОЕ СОЕДИНЕНИЕ МенеджерВременныхТаблиц КАК МенеджерВременныхТаблиц
   |            ПО ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.Контрагент = МенеджерВременныхТаблиц.Контрагент) КАК Долги
   |ГДЕ
   |    Долги.СуммаВзаиморасчетовОстаток > 0
   |
   |СГРУППИРОВАТЬ ПО
   |    Долги.Контрагент";
   Запрос.УстановитьПараметр("МенеджерВременныхТаблиц", мМенеджерВременныхТаблиц);
   Запрос.УстановитьПараметр("ДатаИтогов", КонецДня(ДатаПросрочки));
   мДанныеДолгДата = Запрос.Выполнить().Выгрузить();


МенеджерВременныхТаблиц = Неопределено;
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ РАЗЛИЧНЫЕ
   |    НС.Контрагент,
   |    НС.ТорговаяТочка
   |ПОМЕСТИТЬ Клиенты
   |ИЗ
   |    &СписокКлиентов КАК НС";
   Запрос.УстановитьПараметр("СписокКлиентов",СписокКлиентов);
   Запрос.Выполнить();
   мМенеджерВременныхТаблиц = Запрос.МенеджерВременныхТаблиц;
9 Рэйв
 
17.07.12
13:06
Запрос.Текст =
   "ВЫБРАТЬ РАЗЛИЧНЫЕ
   |    НС.Контрагент,
   |    НС.ТорговаяТочка
   |ПОМЕСТИТЬ Клиенты
   |ИЗ
   |    &СписокКлиентов КАК НС";
   Запрос.УстановитьПараметр("СписокКлиентов",СписокКлиентов);
   Запрос.Выполнить();

  перенеси вверх, до выполнения основного запроса и не создавай два раза объект.
10 Рэйв
 
17.07.12
13:07
а вообще все можно выполнить в одном тексте просто разделив два запроса через ";"
11 SherifSP
 
17.07.12
13:09
Мне первый запрос возвращает всех контрагентов в базе, это очень долго
12 SherifSP
 
17.07.12
13:09
Сейчас кину для чего я менеджер использую
13 Рэйв
 
17.07.12
13:10
ты совсем не слушаешь что тебе говорят.
14 SherifSP
 
17.07.12
13:12
Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
       НС = СписокКлиентов.Добавить();
       НС.Контрагент = ОформлениеСтроки.ДанныеСтроки.Контрагент;
       НС.ТорговаяТочка = ОформлениеСтроки.ДанныеСтроки.ТорговаяТочка;
       
       Если ОформлениеСтроки.ДанныеСтроки.Ссылка.Форма2 Тогда
           ОформлениеСтроки.ЦветФона = ЦветаСтиля.ЦветФормы2;    
       КонецЕсли;
       
       СтруктураОтбора.Заказ = ОформлениеСтроки.ДанныеСтроки.Ссылка;
       СтатусРазблокировки = Ложь;
       ОтпускРазблокирован = РегистрыСведений.РазблокировкаЗаказов.СрезПоследних(,СтруктураОтбора);
       Если ОтпускРазблокирован.Количество() > 0 Тогда
           СтрокаТаблицы = ОтпускРазблокирован[0];
           СтатусРазблокировки = СтрокаТаблицы.ОтгрузкаРазрешена;
       КонецЕсли;
       
       Ячейка = ОформлениеСтроки.Ячейки.Разблокирован;
       Если СтатусРазблокировки Тогда
           Ячейка.ОтображатьКартинку = Истина;
           Ячейка.Картинка = БиблиотекаКартинок.ПроверитьПолучателейЭлектронныхПисем;
       Иначе
           Ячейка.ОтображатьКартинку = Ложь;
       КонецЕсли;
       
       Ячейка = ОформлениеСтроки.Ячейки.Блокировка;
       Ячейка.Значение = ОформлениеСтроки.ДанныеСтроки.Контрагент.БлокировкаОтпускаПродукции;
       
       СрокДействия = ОформлениеСтроки.Ячейки.ТорговаяТочка.Значение.ЛицензияАлкогольСрокДействия;
       Если ЗначениеЗаполнено(СрокДействия) Тогда
           ОформлениеСтроки.Ячейки.ЛицензияАлкогольСрокДействия.Значение = СрокДействия;
           Если СрокДействия < ТекущаяДата() Тогда
               ОформлениеСтроки.Ячейки.ЛицензияАлкогольСрокДействия.ЦветТекста = Новый Цвет(255,0,0);
           КонецЕсли;
       КонецЕсли;
       
   КонецЦикла;
   
   МенеджерВременныхТаблиц = Неопределено;
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ РАЗЛИЧНЫЕ
   |    НС.Контрагент,
   |    НС.ТорговаяТочка
   |ПОМЕСТИТЬ Клиенты
   |ИЗ
   |    &СписокКлиентов КАК НС";
   Запрос.УстановитьПараметр("СписокКлиентов",СписокКлиентов);
   Запрос.Выполнить();
   мМенеджерВременныхТаблиц = Запрос.МенеджерВременныхТаблиц;


В цикле я перебираю строки таблицы значения, там только один контрагент, Вот хочу этот менеджер поместить в главный запрос, чтобы он не выбирал всех контрагентов, а именно тех контрагентов, которые в менеджере
15 Lama12
 
17.07.12
13:12
Может название темы смените?
16 Рэйв
 
17.07.12
13:12
и вообще зачем тебе ВТ?  у тебя и так есть список готовый контрагентов в ТЗ.

Сделай из него нормальный массив из список значений и закинь в условие в запрос.
17 Рэйв
 
17.07.12
13:13
из=или
18 SherifSP
 
17.07.12
13:14
(16)Запрос это отдельная процедура, к которой я обращаюсь при открытии и не только
19 Рэйв
 
17.07.12
13:18
>>Вот хочу этот менеджер поместить в главный запрос, чтобы он не выбирал всех контрагентов, а именно тех контрагентов, которые в менеджере


Да легко

Запрос.Текст =
   "ВЫБРАТЬ РАЗЛИЧНЫЕ
   |    НС.Контрагент,
   |    НС.ТорговаяТочка
   |ПОМЕСТИТЬ Клиенты
   |ИЗ
   |    &СписокКлиентов КАК НС
   |;
   |Выбрать * Из Клиенты";
20 Рэйв
 
17.07.12
13:22
+ а если  из взаиморасчетов, то все еще проще

Запрос.УстановитьПараметр("спКликеты",СписокКлиентов.ВыгрузитьКолонку("Клиент"));

и потом в запросе
....
|ИЗ
|РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(&Дата,Контрагент в (спКлиенты) )
21 pessok
 
17.07.12
13:23
+(19)
ГДЕ Клиенты.Ссылка В &НужныйСписок

Запрос.УстановитьПараметр("НужныйСписок", НС.ВыгрузитьКолонку("Контрагент"))
22 Рэйв
 
17.07.12
13:24
(21)Да у него в ВТ как раз нужный список как я понял.
23 Рэйв
 
17.07.12
13:24
+(20)
в (спКлиенты)  = в (&спКлиенты)
24 SherifSP
 
17.07.12
13:24
(19)не так ты понял запрос который самый первый в (0) должен выбирать контрагентов с менеджера временных таблиц, то есть со второго запроса. Но чтобы он выбрал нужно МенеджерВременныхТаблиц = Неопределено;
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ РАЗЛИЧНЫЕ
   |    НС.Контрагент,
   |    НС.ТорговаяТочка
   |ПОМЕСТИТЬ Клиенты
   |ИЗ
   |    &СписокКлиентов КАК НС";
   Запрос.УстановитьПараметр("СписокКлиентов",СписокКлиентов);
   Запрос.Выполнить();
   мМенеджерВременныхТаблиц = Запрос.МенеджерВременныхТаблиц;

Вставить в

Есть запрос

Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    Долги.Контрагент,
   |    СУММА(ВЫБОР
   |            КОГДА Долги.ДнейПросрочки < 0
   |                ТОГДА Долги.СуммаВзаиморасчетовОстаток
   |            ИНАЧЕ 0
   |        КОНЕЦ) КАК СуммаПросрочки,
   |    МИНИМУМ(Долги.ДатаОплаты) КАК ДатаОплаты
   |ИЗ
   |    (ВЫБРАТЬ
   |        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.Контрагент КАК Контрагент,
   |        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом КАК ДокументРасчетов,
   |        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаОплаты КАК ДатаОплаты,
   |        РАЗНОСТЬДАТ(&ДатаИтогов, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаОплаты, ДЕНЬ) + Константы.ДопустимыеДниПросрочки КАК ДнейПросрочки,
   |        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток КАК СуммаВзаиморасчетовОстаток
   |    ИЗ
   |        РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(, ) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки
   |            ЛЕВОЕ СОЕДИНЕНИЕ Константы КАК Константы
   |            ПО (1 = 1)) КАК Долги
   |ГДЕ
   |    Долги.СуммаВзаиморасчетовОстаток > 0
   |
   |СГРУППИРОВАТЬ ПО
   |    Долги.Контрагент";
25 pessok
 
17.07.12
13:24
а, ну тогда тупо в пакете внутреннее соединение, да и все
26 pessok
 
17.07.12
13:25
шота с константами по 1 = 1 я уже сегодня видел запрос...
27 Рэйв
 
17.07.12
13:25
(24)Это ты помоему нифига не понимаешь как работает менеджер временных таблиц.  Так что почитай и просвятись сначала.
28 SherifSP
 
17.07.12
13:25
А именно где то в эту область

|ИЗ
   |    (ВЫБРАТЬ
   |        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.Контрагент КАК Контрагент,
   |        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом КАК ДокументРасчетов,
   |        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаОплаты КАК ДатаОплаты,
   |        РАЗНОСТЬДАТ(&ДатаИтогов, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаОплаты, ДЕНЬ) + Константы.ДопустимыеДниПросрочки КАК ДнейПросрочки,
   |        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток КАК СуммаВзаиморасчетовОстаток
   |    ИЗ
   |        РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(, ) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки
   |            ЛЕВОЕ СОЕДИНЕНИЕ Константы КАК Константы
   |            ПО (1 = 1)) КАК Долги
29 SherifSP
 
17.07.12
13:26
(25) Вот как это сделать?
30 Kashemir
 
17.07.12
13:26
Чем это вы тут занимаетесь ?


   Буффер =  Новый МенеджерВременныхТаблиц;
   
   Запрос = Новый Запрос;
   Запрос.МенеджерВременныхТаблиц = Буффер ;
   Запрос.Текст =
   "ВЫБРАТЬ РАЗЛИЧНЫЕ
   |    НС.Контрагент,
   |    НС.ТорговаяТочка
   |ПОМЕСТИТЬ Клиенты
   |ИЗ
   |    &СписокКлиентов КАК НС";
   Запрос.УстановитьПараметр("СписокКлиентов",СписокКлиентов);
   Запрос.Выполнить();

   Запрос2 = Новый Запрос;
   Запрос2.МенеджерВременныхТаблиц = Буффер;
   Запрос2.Текст = "ВЫБРАТЬ
                   |    Клиенты.Контрагент,
                   |    Клиенты.ТорговаяТочка
                   |ИЗ
                   |    Клиенты КАК Клиенты";
                   
   Запрос2.Выполнить();
31 Рэйв
 
17.07.12
13:26
Считаю дальнейшую дискуссию контрпродуктивной:-)
2 + 2 = 3.9999999999999999999999999999999...