![]() |
![]() |
![]() |
|
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] : Неверно заданный путь 'Контрагент' В чем я налажался? Запрос: |Период С НачДата По КонДата; |СчетДТ=Операция.Дебет.Счет; |СчетКТ=Операция.Кредит.Счет; |Док=Операция.ТекущийДокумент; |Сум=Операция.Сумма; |Склад=Операция.Дебет.МестаХранения; |Товар=Операция.Дебет.ТМЦ; |Поставщик=Операция.ТекущийДокумент.Контрагент; |Функция Итог_=Сумма(Сум); |Поставщик = Операция.ТекущийДокумент.Контрагент; |Группировка Склад; |Группировка Товар без групп; |Группировка Док; |Группировка Поставщик без групп; |Условие(СчетДТ в СчДт); |Условие(СчетКт в СчКт);"; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |