Имя: Пароль:
1C
1C 7.7
v7: Помогите с запросом
,
0 bestuzhev
 
25.04.13
11:24
Код:
       Запрос = СоздатьОбъект("Запрос");
       ТекстЗапроса =        
       "//{{ЗАПРОС(Взаиморасчеты)            
       |ПЕРИОД С ДатаНач по ДатаКон;
       |Контрагент  =Регистр.Взаиморасчеты.Клиент;
       |Фирма   =Регистр.Взаиморасчеты.ТекущийДокумент.Фирма;  
       |СуммаБазовая =Регистр.Взаиморасчеты.СуммаБазовая;
       |Группировка Контрагент;
       |Условие (Фирма в ВыбФирма);";
       

       Если Запрос.Выполнить(ТекстЗапроса) <> 0 Тогда                
           Пока Запрос.Группировка("Контрагент") = 1 Цикл
               Сообщить(Запрос.Контрагент);
               Сообщить(Запрос.СуммаБазовая);
               Сообщить(Запрос.Фирма);
               Сообщить("___________________________");
           КонецЦикла;  
       КонецЕсли;    


Нужно получить остатки по взаиморасчетам с контрагентами по организации которая в переменной ВыбФирма.
В регистре нет измерения фирма.
1 Chum
 
25.04.13
11:25
группировка Фирма
2 bestuzhev
 
25.04.13
11:28
(1)
"//{{ЗАПРОС(Взаиморасчеты)            
|ПЕРИОД С ДатаНач по ДатаКон;
|Контрагент  =Регистр.Взаиморасчеты.Клиент;
|Фирма   =Регистр.Взаиморасчеты.ТекущийДокумент.Фирма;  
|СуммаБазовая =Регистр.Взаиморасчеты.СуммаБазовая;
|Группировка Фирма;
|Условие (Фирма в ВыбФирма);";

Вот так?
3 bestuzhev
 
25.04.13
11:35
Я так понял т.к. нет среди измерений Фирмы придется выбирать с документами с начала ведения учета а потом все группировать? Только вот придумать не могу как.
4 pofigos
 
25.04.13
11:49
(0) Меня спасало на начальных этапах |Фирма   =Регистр.Взаиморасчеты.ТекущийДокумент.ВидДокумента.Фирма;

Где ВидДокумента меняешь на ВидДокумента. заданного в конфигураторе.
Либо, если движение по регистру делает несколько документов, перечисляешь их через запятую.

Но со временем понял, что прямой запрос намного удобнее...
5 bestuzhev
 
25.04.13
11:51
(4) Как через запятую? Пример приведи плиз.
6 pofigos
 
25.04.13
11:53
(4)Фирма=Регистр.Взаиморасчеты.ТекущийДокумент.ВидДокумента.Фирма,Регистр.Взаиморасчеты.ТекущийДокумент.ВидДокумента2.Фирма,Регистр.Взаиморасчеты.ТекущийДокумент.ВидДокумента3.Фирма;
7 bestuzhev
 
25.04.13
11:54
(4) Мне в принципе один раз надо сделать, переношу данные из 7ки (самописной) в 8ку типовую.
8 bestuzhev
 
25.04.13
11:57
(6) Слушай а можешь помочь с таким вариантом, может фигню скажу просто не до конца понимаю 7ку.

Я в цикле буду перебирать все организации, потом мне нужно по каждой организации получить остатки по взаиморасчетам на дату. Беду с отсутствием Фирмы в регистре я уже описал, мне хоть в таблицу значений впихнуть все документы по выбранной фирме которые движения по регистру делают а там я уже сверну как мне надо.
9 dk
 
25.04.13
12:05
1. не хватает функций приход / расход
2. фирму можно и потом вытащить - уже при обходе результатов запроса
3. период надо выбирать от начала времен и потом сверить итоговые цифры в разрезе контрагента
10 Builder
 
25.04.13
12:06
Что то мне подсказывает что если Фирма - общий реквизит документов, то такой вариант должен прокатить.
Фирма =Регистр.Взаиморасчеты.ТекущийДокумент.Фирма;

Если в цикле - то смысла нет отборы делать, сделай группировку
Группировка Фирма;
Группировка Контрагент;
11 pofigos
 
25.04.13
12:08
Запрос = СоздатьОбъект("Запрос");
       ТекстЗапроса =        
       "//{{ЗАПРОС(Взаиморасчеты)            

       |ПЕРИОД С ДатаНач по ДатаКон;
       |Контрагент  = Регистр.Взаиморасчеты.Клиент;
       |Фирма = Регистр.Взаиморасчеты.ТекущийДокумент.Фирма  (Тут через запятую перечисли путь к реквизиту фирма для каждого документа регистра);  
       |СуммаБазовая = Регистр.Взаиморасчеты.СуммаБазовая;
       |Функция(СуммаБазоваяСумма) = Сумма(СуммаБазовая);
       |Группировка Контрагент;
       |Условие (Фирма в ВыбФирма);";
       
Если ВыбФирма.ЭтоГруппа() = 1
ТЕкстЗапроса = ТекстЗапроса + "Условие (Фирма в ВыбФирма)
|;";
Иначе
Условие (Фирма в ВыбФирма)
|;";
КонецЕсли;


       Если Запрос.Выполнить(ТекстЗапроса) <> 0 Тогда                
           Пока Запрос.Группировка("Контрагент") = 1 Цикл
               Сообщить(Запрос.Контрагент);
               Сообщить(Запрос.СуммаБазовая);
               Сообщить(Запрос.Фирма);
               Сообщить("___________________________");
           КонецЦикла;  
       КонецЕсли;  

А после этого бы уже сворачивал. в Итоге должна быть таблица с 3 колонками..... Как-то так.
12 pofigos
 
25.04.13
12:09
(10) Согласен, но конфу то не видно. поэтому предложен такой вариант.
13 pofigos
 
25.04.13
12:10
(9) условие с самого текста запроса убрать и на ее место дописать группировку по фирме. Недосмотрел )
14 alex74
 
25.04.13
12:11
остатки так не получишь, только обороты
15 Builder
 
25.04.13
12:13
Если ВыбФирма.ЭтоГруппа() = 1
ТЕкстЗапроса = ТекстЗапроса + "Условие (Фирма в ВыбФирма)
|;";
Иначе
Условие (Фирма в ВыбФирма)
|;";
КонецЕсли;

Это к чему тут вообще ?
16 dk
 
25.04.13
12:14
(11) Функция Сумма для оборотного регистра, тебе приход и расход нужны
(14) остатки и есть оборот за все время
17 Builder
 
25.04.13
12:16
(16) Гениально. А если выбрать не за все время - что получишь?
18 alex74
 
25.04.13
12:17
(16) нуну, успехов
19 pofigos
 
25.04.13
12:17
(15) К тому, что показан пример вхождения элемента справочника фирмы (если это конечно справочник). Весь код не писал.

Если группа, то условие ТЕкстЗапроса = ТекстЗапроса + "Условие (Фирма в ВыбФирма)

Если просто элемент, то : ТЕкстЗапроса = ТекстЗапроса + "Условие (Фирма = ВыбФирма)
20 alex74
 
25.04.13
12:19
(19) попробуй применить "Условие (Фирма в ВыбФирма)" для элемента, удивишься
21 КонецЦикла
 
25.04.13
12:19
В регистре есть КредДокумент?
Какая структура регистра?
22 dk
 
25.04.13
12:20
(17) а чего ты тут советуешь по запросу-то? думаешь остатки получишь по документам? )))
(18) если других вариантов нет, то можно остатки и через обороты получить, для одноразовой процедуры сойдет
23 pofigos
 
25.04.13
12:20
(20) спасибо, при первой возможности попробую. Думаю, что удивлюсь. :)
24 Builder
 
25.04.13
13:19
(22) В данном случае не зная структуры регистра вообще можно только догадываться что же там получится и что хочет ТС.
AdBlock убивает бесплатный контент. 1Сергей