Имя: Пароль:
1C
1C 7.7
v7: Обычный запрос и бухитоги
0 Ирен
 
27.06.07
09:46
Киньте примерчик, плиз, как можно обычным запросом извлечь бухгалтерские итоги
1 Ирен
 
27.06.07
09:53
Обратите внимание, пожалуйста, уважаемые господа :)
2 Chum
 
27.06.07
09:54
БИ.ВыполнитьЗапрос()
3 Ирен
 
27.06.07
09:55
(2) я не про это.. бухгалтерским запросом я умею пользоваться
4 Чаки
 
27.06.07
09:56
(3) В ЖКК точно премер есть, сам видел.
5 child
 
27.06.07
09:59
(3)    |СчетД = Операция.Дебет.Счет;
   |СчетК = Операция.Кредит.Счет;
   |Сумма = Операция.Сумма;
   |Функция СуммаСНД = СНД(Сумма);
   |Функция СуммаСНК = СНК(Сумма);
   |Функция СуммаДО = ДО(Сумма);
   |Функция СуммаКО = КО(Сумма);
   |Функция СуммаСКД = СКД(Сумма);
   |Функция СуммаСКК = СКК(Сумма);
   |Группировка СчетД;
   |Группировка СчетК;
6 nicxxx
 
27.06.07
10:03
где-то проскакивали рекомендации фирмы 1С не пользоваться простым запросом для извлечения на свет божий бухгалтерских данных, а юзать специально под это заточенный объект БухгалтерскиеИтоги, в режиме запроса
7 Ирен
 
27.06.07
10:03
в ЖКК один примерчик нашла, но буду благодарна еще за примеры
8 IUnknown
 
27.06.07
10:04
сейчас придет Пит и такого тут наговорит
9 Ирен
 
27.06.07
10:04
(8) жду с нетерпением :)
10 Trigg
 
27.06.07
10:05
(6)
Да уже мусолили эту тему, мол там неправильно будет считать в каком-то случае...
11 rsv
 
27.06.07
10:05
(7)        ТекстЗапроса="
   |Период С ДатаНач По ДатаКон;
   //|Опер=Операция.ТекущийДокумент;
   |СчетДТ=Операция.Дебет.Счет;
   |СчетКТ=Операция.Кредит.Счет;
   |Сум=Операция.Сумма;
   |Вид=Операция.Кредит.ВидыСтрахования;
   |Договор=Операция.Кредит.ДоговораСтрахования;
   |Функция Итог_=Сумма(Сум);
   |Функция Процент=Сумма(Окр(Сум*(Ставка/100),2,1));
   |Функция Колво=Счётчик();
   |Условие(Вид=ВидСтрахования);
   |Условие(СчетДТ В Список50);
   |Условие(СчетКт В Список77);  
   |Группировка Договор;";
12 rsv
 
27.06.07
10:08
(9)    ТекстЗапроса="
   |Период С ДатаНач По ДатаКон;
   |СчетКТ=Операция.Кредит.Счет;
   |СчетДТ=Операция.Дебет.Счет;
   |Док=Операция.ТекущийДокумент;
   |Сум=Операция.Сумма;  
   |Вид=Операция.Кредит.ВидыСтрахования;
   |Договор=Операция.Кредит.ДоговораСтрахования;
   |ДатаДоср= Операция.Кредит.ДоговораСтрахования.ДатаДосроч;
   |ДатаОкон= Операция.Кредит.ДоговораСтрахования.ДатаОкончания;
   |Функция Итог_=Сумма(Сум);
   |Условие(Вид=Бордеро_.ВидСтрах);
   |Условие(СчетКт =СчетПоКоду(""92.1""));
   |Условие(СчетДТ =СчетПоКоду(""77.1.1""));
   |Условие(ПустоеЗначение(Договор)=0);
   |Условие(ПустоеЗначение(ДатаДоср)=1);
   |Условие(ДатаОкон='30.06.2007');
   |Условие(СписокЗначений.НайтиЗначение(Договор)=0);
//    |Условие(Док<>""Выписка"");
   |Группировка Договор Без Групп;";
13 rsv
 
27.06.07
10:14
Не желательно использовать функции остатка т.к. по сравнению с извлечением оборотов значительно прибавляются тормоза.
14 Ирен
 
27.06.07
10:16
а мне как раз нужны остатков
15 rsv
 
27.06.07
10:20
(14)Имхо. Вообще использование объкта Запрос() при обращении к БИ целесообразно если  необходимо получить что либо в разрезе реквизитов субконто. Например есть справочник Контаргенты  в качестве субконто , но хоца получить чего либо в разрезе его реквизита.
16 Ирен
 
27.06.07
10:22
(15) в том и стоит задача
17 Ирен
 
27.06.07
10:26
Есть счет ЗОС "Залог основных средств", на нем аналитика:
1. Договоры (Справоник.Договоры кредита)
2. ПередачаОСвЗалог (документ)
3. ОсновныеСредства (справочник)

В справочнике "Основные средства" есть реквизиты Лизингополучатель и ДоговорЛизинга.
Нужно в их разрезе получить бухитоги, причем группировки должны быть вышестоящие над Основными средствами
18 Ирен
 
27.06.07
10:31
Перефразирую вопрос: Как получить бухитоги в разрезе реквизитов субконто?
19 Trigg
 
27.06.07
10:33
(18)
Воткни условие в запрос
20 Ирен
 
27.06.07
10:35
(19) какое условие и в какой запрос?
21 rsv
 
27.06.07
10:36
(20) Сейчас состряпаю.
22 Ирен
 
27.06.07
10:46
подниму
23 rsv
 
27.06.07
10:52
ТекстЗапроса="
   |Период С ДатаНач По ДатаКон;
   |СчетКТ=Операция.Кредит.Счет;
   |СчетДТ=Операция.Дебет.Счет;
   |Док=Операция.ТекущийДокумент;
   |Сум=Операция.Сумма;  
   |Лизингополучатель=Операция.Субконто.ОсновныеСредства.Лизингополучатель;
   |ДоговорЛизинга=Операция.Субконто.ОсновныеСредства.ДоговорЛизинга;
   |ОсновныеСредства= Операция.Субконто.ОсновныеСредства;
   |Функция СКД_=СКД(Сум);
   |Функция СКК_=СКК(Сум);
   |Функция ДО=ДО(Сум);
   |Функция КО=КО(Сум);
   |Группировка Лизингополучатель Без Групп;
   |Группировка ДоговорЛизинга  Без Групп;
   |Группировка ОсновныеСредства Без Групп;
   |Группировка Месяц;
   |Условие( ( (СчетДТ=ЗОС) И СчетКТ в списоккорр) ) или ( (СчетКР=ЗОС) И    (СчетДТ в списоккорр)) )
24 Ирен
 
27.06.07
10:55
(23) спасибо
25 rsv
 
27.06.07
10:56
(24) Попробуй. Может взлетит.
26 Ирен
 
27.06.07
10:57
я примерно что-то это и начала стряпать :) а если бухзапросом, то какие пути лучше использовать? :)
27 rsv
 
27.06.07
11:01
(26) А какие там пути ?  Только явно в разрезе субконто. Все остальное пляски с ТЗ или СЗ.
28 Ирен
 
27.06.07
11:03
(27) а что лучше - через черный запрос или пляски с ТЗ?
29 rsv
 
27.06.07
11:08
(28) Я бы объектЗапрос помучил конечно , НО на моей памяти бодание через него именно с остатками т.е. СКД,СНД и пр. приводило к какойто галиматье чего не скажешь о ДО() или КО(). Не пробовал конечно но говорят галиматья пропадает с использованием временных группирвоок типа День, Месяц но эот не всегда необходимо чтобы  при получении остатков опускаться до такой группировки да и неудобно это.
30 rsv
 
27.06.07
11:10
Но помучить объект Запрос стоит, тем более что разработчиокм он заявлен как средство доступа к БИ.
31 Ирен
 
27.06.07
11:10
(29) спасибо, теперь картина прояснилась :)
32 Ирен
 
27.06.07
12:14
(30) rsv, спасибо большое! все получилось..
33 Ирен
 
27.06.07
12:28
Сижу туплю :(
Получился вот такой код:
Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ВыбНачПериода по ВыбКонПериода;
   |Обрабатывать НеПомеченныеНаУдаление;
   |СчетДебет = Операция.Дебет.Счет;
   |СчетКредит = Операция.Кредит.Счет;
   |Док = Операция.ТекущийДокумент;
   |Сумма = Операция.Сумма;
   |Кредитор = Операция.Субконто.Договоры.Владелец;
   |ДоговорКредита = Операция.Субконто.Договоры.ТекущийЭлемент;
   |ДокПередачиВЗалог = Операция.Субконто.ХНС_ДоговорыЗалога.ТекущийДокумент;
   |Лизингополучатель = Операция.Субконто.ОсновныеСредства.ДоговорЛизинга.Контрагент;
   |ДоговорЛизинга = Операция.Субконто.ОсновныеСредства.ДоговорЛизинга;
   |ОС = Операция.Субконто.ОсновныеСредства;
   |Функция СуммаСКД = СКД(Сумма);
   |Группировка Кредитор упорядочить по Кредитор.Наименование;
   |Группировка ДоговорКредита упорядочить по ДоговорКредита.Наименование;
   |Группировка Лизингополучатель упорядочить по Лизингополучатель.Наименование;
   |Группировка ДоговорЛизинга упорядочить по ДоговорЛизинга.Наименование без групп;
   |Группировка ОС упорядочить по ОС.Код без групп;
   |Условие((СчетДебет = СчетПоКоду(""ЗОС"")) или (СчетКредит = СчетПоКоду(""ЗОС"")));  
   |"//}}ЗАПРОС
   ;
   // Если ошибка в запросе, то выход из процедуры
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
       Возврат;
   КонецЕсли;

   // Подготовка к заполнению выходных форм данными запроса
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("Сформировать");
   // Заполнение полей "Заголовок"
   Таб.ВывестиСекцию("Заголовок");
   Состояние("Заполнение выходной таблицы...");
   Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
   Пока Запрос.Группировка(1) = 1 Цикл
       // Заполнение полей Кредитор
       Таб.ВывестиСекцию("Кредитор");
       Пока Запрос.Группировка(2) = 1 Цикл
           // Заполнение полей ДоговорКредита
           Таб.ВывестиСекцию("ДоговорКредита");
           Пока Запрос.Группировка(3) = 1 Цикл
               // Заполнение полей Лизингополучатель
               Таб.ВывестиСекцию("Лизингополучатель");
               Пока Запрос.Группировка(4) = 1 Цикл
                   // Заполнение полей ДоговорЛизинга
                   Таб.ВывестиСекцию("ДоговорЛизинга");
                   Пока Запрос.Группировка(5) = 1 Цикл
                       // Заполнение полей ОС  
                       Таб.ВывестиСекцию("ОС");      
                   КонецЦикла;
               КонецЦикла;
           КонецЦикла;
       КонецЦикла;
   КонецЦикла;

Он мне выводит и все нулевые итоги. А надо чтобы выводил только ненулевые. Как поставить условие, чтобы информация выводилась тогда, когда Запрос.СуммаСКД > 0?
34 Ирен
 
27.06.07
12:32
Вопрос снимается. затупила :)
35 rsv
 
27.06.07
12:43
(34) Ну как ? Взлетело.
36 Ирен
 
27.06.07
12:51
(35) взлетело, только медленно работает.. на дбфной вроде нормально, а на скульной вообще долго :(
37 ZanderZ
 
27.06.07
12:53
ВключитьSQL в 0 поставь на скуле...
38 Ирен
 
27.06.07
12:54
(37) это где такое сделать?
39 Ирен
 
27.06.07
12:55
(35) итоги верные выводит.. сверила..
40 rsv
 
27.06.07
12:56
(38) Перед Запрос.Выполнить(Текст) написать Запрос.ВключитьSQ(0)
41 rsv
 
27.06.07
12:56
Запрос.ВключитьSQ(0) = Запрос.ВключитьSQL(0)
42 rsv
 
27.06.07
12:59
И еще можно кое что изменить
Например всместо двух СчДТ  СчКр  написать одно
Счет = Операция.Кредит.Счет,Операция.Дебет.Счет;

И соответсвенно в условии Условие (Счет=СчетПоКоду(""ЗОС"") )
43 rsv
 
27.06.07
13:04
Да и заранее создать ссылку на ЗОС а взапросе уже в условии ссылаться на нее. Всеж прирост какой никакой.
44 Ирен
 
27.06.07
13:11
Спасибо большое!!! Значительно быстрее стало
45 Ирен
 
28.06.07
11:15
Получился вот такой запрос:
ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ВыбНачПериода по ВыбКонПериода;
   |Обрабатывать НеПомеченныеНаУдаление;
   |Счет = Операция.Кредит.Счет,Операция.Дебет.Счет;
   |Док = Операция.ТекущийДокумент;
   |Сумма = Операция.Сумма;
   |Кредитор = Операция.Субконто.Договоры.Владелец;
   |ДоговорКредита = Операция.Субконто.Договоры.ТекущийЭлемент;
   |ДокПередачиВЗалог = Операция.Субконто.ХНС_ДоговорыЗалога.ТекущийДокумент;
   |Лизингополучатель = Операция.Субконто.ОсновныеСредства.ДоговорЛизинга.Контрагент;
   |ДоговорЛизинга = Операция.Субконто.ОсновныеСредства.ДоговорЛизинга;
   |ОС = Операция.Субконто.ОсновныеСредства;  
   |ПервоначСт = Операция.Субконто.ОсновныеСредства.ПервоначальнаяСтоимость;  
   |Функция СуммаПервоначСт = Сумма(ПервоначСт);
   |Функция СуммаСКД = СКД(Сумма);
   |Группировка Кредитор упорядочить по Кредитор.Наименование;
   |Группировка ДоговорКредита упорядочить по ДоговорКредита.Наименование;
   |Группировка Лизингополучатель упорядочить по Лизингополучатель.Наименование;
   |Группировка ДоговорЛизинга упорядочить по ДоговорЛизинга.Наименование без групп;
   |Группировка ОС упорядочить по ОС.Код без групп;
   |Условие(Счет = СчетЗалога);  
   |"//}}ЗАПРОС
   ;          

В ОС есть реквизит ПервоначальнаяСтоимость (ПервоначСт)
Делаю функцию, чтобы выводить итоги Первоначальной стоимости по группировкам:
|Функция СуммаПервоначСт = Сумма(ПервоначСт);

Выводит суммы в двойном размере. Почему?
46 Ирен
 
28.06.07
11:24
ап
47 rsv
 
28.06.07
11:24
(45) Как ни странно но возможно  логика в этом есть. Т.к. субконто ОС стоит в ДТ или в КТ счета ЗОС значит возможно "двоить" сумма реквизита и будет.
48 rsv
 
28.06.07
11:26
Сальдо не двоит хоть ?
49 Ирен
 
28.06.07
11:28
(47) я вот тоже об этом подумала.. как выходить из этого? тупо разделить на два? :)
50 Ирен
 
28.06.07
11:30
(48) Сальдо не двоит
51 rsv
 
28.06.07
11:32
(49) Попробуй вернуться к тому что было. Т.е (33) Две переменные в запросе и условие или.
52 Ирен
 
28.06.07
11:32
(51) ок, сейчас попробую.
53 rsv
 
28.06.07
11:35
И закомментарь перем Док в запросе. Мало ли .
54 rsv
 
28.06.07
11:37
И еще . Добавь туды последнюю предопределенную группировку День.
55 Ирен
 
28.06.07
11:37
Все равно двоит
56 rsv
 
28.06.07
11:38
(55) Группировку добавила ?
57 Ирен
 
28.06.07
11:44
(56) с группировкой он чуйствую долго будет формироваться.. а зачем она?
58 rsv
 
28.06.07
11:45
Если есть закономеность именно задваивания а незатраивания и зачевверения на разных промежутках времени  то вариант в тупую
Функция СуммаПервоначСт =Сумма (ПервоначСт/2)
59 Ирен
 
28.06.07
11:46
(58) вот и я об этом думаю :)
60 rsv
 
28.06.07
11:46
(57) Да так . Для эксперимента.
61 Ирен
 
28.06.07
12:04
(60) тупо раздилила на 2. все работает :)
62 rsv
 
28.06.07
12:07
(61 )Мне думается штаа время выполнения запроса  плюс нестандартное деление на два (хотя всеж будем считать стандартое) компенсирует затраты  по реализации на БИ.ВыполнитьЗапрос() и ТЗ и СЗ :)
63 Ирен
 
28.06.07
12:08
(62) ну мне так все равно больше нравится, и код короче и прозрачнее.. да и новый опыт :)
64 Ирен
 
28.06.07
12:10
rsv, спасибо большое за помощь..
65 DF_Slayer
 
28.06.07
12:17
Я бы деление на 2 не оставлял все же, как-то страшно выглядит :)
66 Ирен
 
28.06.07
13:30
(65) а что другое сделать? :)
67 DeZol
 
04.09.07
12:06
Еррор:
Поставщик=Операция.ТекущийДокумент. <<?>> Контрагент;
Запрос[9] : Неверно заданный путь 'Контрагент'

В чем я налажался?

Запрос:
|Период С НачДата По КонДата;
|СчетДТ=Операция.Дебет.Счет;
|СчетКТ=Операция.Кредит.Счет;
|Док=Операция.ТекущийДокумент;
|Сум=Операция.Сумма;  
|Склад=Операция.Дебет.МестаХранения;
|Товар=Операция.Дебет.ТМЦ;
|Поставщик=Операция.ТекущийДокумент.Контрагент;
|Функция Итог_=Сумма(Сум);
|Поставщик = Операция.ТекущийДокумент.Контрагент;
|Группировка Склад;
|Группировка Товар без групп;
|Группировка Док;
|Группировка Поставщик без групп;
|Условие(СчетДТ в СчДт);
|Условие(СчетКт в СчКт);";
Программист всегда исправляет последнюю ошибку.