|
Помогите построить запрос | ☑ | ||
---|---|---|---|---|
0
PeaceDeath
09.04.13
✎
16:18
|
Задача такова:
Разработать оптимальную структуру отчета по движению денежных средств на расчетных счетах на базе отчета по банковскому счету. Макет = ОтчетОбъект.ПолучитьМакет("ОтчетПоБанку"); ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок"); ОбластьШапкаОтчета = Макет.ПолучитьОбласть("ШапкаОтчета"); ОбластьДинТаб = Макет.ПолучитьОбласть("ДинТаб"); ОбластьИтогов = Макет.ПолучитьОбласть("Итоги"); ОбластьПодвал = Макет.ПолучитьОбласть("Подвал"); ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт; ЗапросСчета = Новый Запрос; ЗапросСчета.Текст = "ВЫБРАТЬ | ХозрасчетныйОбороты.Период КАК Период, | ХозрасчетныйОбороты.Регистратор КАК Регистратор, | ХозрасчетныйОбороты.Счет КАК Счет, | ХозрасчетныйОбороты.Субконто1 КАК Субконто1, | ХозрасчетныйОбороты.Организация КАК Организация, | ХозрасчетныйОбороты.КорСчет КАК КорСчет, | ХозрасчетныйОбороты.КорСубконто1 КАК КорСубконто1, | ХозрасчетныйОбороты.КорСубконто2 КАК КорСубконто2, | СУММА(ХозрасчетныйОбороты.СуммаОборот) КАК СуммаОборот, | СУММА(ХозрасчетныйОбороты.СуммаОборотДт) КАК СуммаОборотДт, | СУММА(ХозрасчетныйОбороты.СуммаОборотКт) КАК СуммаОборотКт |ИЗ | РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода, &КонецПериода, Регистратор, , , , , ) КАК ХозрасчетныйОбороты |ГДЕ | ХозрасчетныйОбороты.Организация.Ссылка = &СсылкаНаОрганизацию | И ХозрасчетныйОбороты.Субконто1 = &Счет | |СГРУППИРОВАТЬ ПО | ХозрасчетныйОбороты.Регистратор, | ХозрасчетныйОбороты.Счет, | ХозрасчетныйОбороты.Период, | ХозрасчетныйОбороты.КорСчет, | ХозрасчетныйОбороты.Субконто1, | ХозрасчетныйОбороты.КорСубконто2, | ХозрасчетныйОбороты.КорСубконто1, | ХозрасчетныйОбороты.Организация | |УПОРЯДОЧИТЬ ПО | Период |ИТОГИ | СУММА(СуммаОборот), | СУММА(СуммаОборотДт), | СУММА(СуммаОборотКт) |ПО | Регистратор, | Счет, | КорСубконто1, | Организация, | Период, | КорСчет, | КорСубконто2, | Субконто1"; ЗапросСчета.УстановитьПараметр("СсылкаНаОрганизацию", ЭлементыФормы.Организация.Значение); ЗапросСчета.УстановитьПараметр("НачалоПериода", ЭлементыФормы.НачалоПериода.Значение); ЗапросСчета.УстановитьПараметр("КонецПериода", ЭлементыФормы.КонецПериода.Значение); ЗапросСчета.УстановитьПараметр("Счет", ЭлементыФормы.РасчетныйСчет.Значение); РезультатСчета = ЗапросСчета.Выполнить().Выгрузить(); РезультатСчетаВыборка = ЗапросСчета.Выполнить().Выбрать(); ТабДок.Очистить(); ОбластьЗаголовок.Параметры.Компания = Организация; ОбластьЗаголовок.Параметры.Счет = ЭлементыФормы.РасчетныйСчет.Значение.НомерСчета; ОбластьЗаголовок.Параметры.Банк = ЭлементыФормы.РасчетныйСчет.Значение.Банк.Наименование; НачПериод = НачалоДня(НачалоПериода); КонПериод = КонецДня(КонецПериода); Для Каждого Счета Из РезультатСчета Цикл ОборотноСальдоваяВедомость = Новый Запрос; ОборотноСальдоваяВедомость.Текст = "ВЫБРАТЬ | ХозрасчетныйОстаткиИОбороты.Счет, | ХозрасчетныйОстаткиИОбороты.Организация, | ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток, | ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток |ИЗ | РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериод, &КонПериод, , , , , ) КАК ХозрасчетныйОстаткиИОбороты |ГДЕ | ХозрасчетныйОстаткиИОбороты.Счет = &Счет | И ХозрасчетныйОстаткиИОбороты.Организация = &Организация"; ОборотноСальдоваяВедомость.УстановитьПараметр("Счет", Счета.Счет); ОборотноСальдоваяВедомость.УстановитьПараметр("НачПериод", ЭлементыФормы.НачалоПериода.Значение); ОборотноСальдоваяВедомость.УстановитьПараметр("КонПериод", ЭлементыФормы.КонецПериода.Значение); ОборотноСальдоваяВедомость.УстановитьПараметр("Организация", ЭлементыФормы.Организация.Значение); РезультатНачИКонСальдо = ОборотноСальдоваяВедомость.Выполнить().Выгрузить(); Для Каждого Эл из РезультатНачИКонСальдо Цикл ОбластьЗаголовок.Параметры.СальдоНач = Эл.СуммаНачальныйОстаток; КонецЦикла; Попытка ОбластьЗаголовок.Параметры.СчетКод = Счета.Счет.Код; Исключение ОбластьЗаголовок.Параметры.СчетКод = ""; КонецПопытки; КонецЦикла; ОбластьЗаголовок.Параметры.ДатаГод = Строка(" За ")+ПредставлениеПериода(НачПериод,КонПериод,"ФП = Истина"); //ТабДок.ФиксацияСверху = ОбластьЗаголовок; ТабДок.Вывести(ОбластьЗаголовок); ТабДок.Вывести(ОбластьШапкаОтчета); ИтоговаяСуммаПлюс = 0; ИтоговаяСуммаМинус = 0; ИтоговаяСуммаСписания = 0; Для Каждого Параметр из РезультатСчета Цикл ОбластьДинТаб.Параметры.Дата = Формат(Параметр.Период,"ДЛФ = Д" ); Попытка ОбластьДинТаб.Параметры.БанкОрганизации = Параметр.Регистратор.Контрагент; Исключение Попытка ОбластьДинТаб.Параметры.БанкОрганизации = Параметр.КорСубконто1.Наименование; Исключение Попытка ОбластьДинТаб.Параметры.БанкОрганизации = ""; Исключение ОбластьДинТаб.Параметры.БанкОрганизации = ""; КонецПопытки; КонецПопытки; КонецПопытки; Попытка ОбластьДинТаб.Параметры.ИНПСотФот = Параметр.Регистратор.НазначениеПлатежа; ОбластьДинТаб.Параметры.ДокументРасшифровка = Параметр.Регистратор; Исключение Попытка ОбластьДинТаб.Параметры.ИНПСотФот = Параметр.Регистратор.ВидОперации; ОбластьДинТаб.Параметры.ДокументРасшифровка = Параметр.Регистратор; Исключение Попытка ОбластьДинТаб.Параметры.ИНПСотФот = Параметр.Регистратор.РазделУчета; ОбластьДинТаб.Параметры.ДокументРасшифровка = Параметр.Регистратор; Исключение ОбластьДинТаб.Параметры.ИНПСотФот = ""; ОбластьДинТаб.Параметры.ДокументРасшифровка = Параметр.Регистратор; КонецПопытки; КонецПопытки; КонецПопытки; ОбластьДинТаб.Параметры.НомерПлатежа = Параметр.Регистратор.Номер; Если Параметр.СуммаОборот < 0 Тогда ОбластьДинТаб.Параметры.СуммаПоступления = Параметр.СуммаОборотДт; ОбластьДинТаб.Параметры.СуммаСписания = Параметр.СуммаОборотКт; ОбластьДинТаб.Параметры.СчетаОтК = Строка(Параметр.КорСчет) + " - " + Строка(Параметр.Счет); ИтоговаяСуммаМинус = ИтоговаяСуммаМинус + Параметр.СуммаОборотКт; Иначе ОбластьДинТаб.Параметры.СуммаПоступления = Параметр.СуммаОборотДт; ОбластьДинТаб.Параметры.СуммаСписания = Параметр.СуммаОборотКт; ОбластьДинТаб.Параметры.СчетаОтК = Строка(Параметр.Счет) + " - " + Строка(Параметр.КорСчет); ИтоговаяСуммаПлюс = ИтоговаяСуммаПлюс + Параметр.СуммаОборотДт; КонецЕсли; ТабДок.Вывести(ОбластьДинТаб); КонецЦикла; ОбластьИтогов.Параметры.ИтогПослупления = ИтоговаяСуммаПлюс; ОбластьИтогов.Параметры.ИтогСписания = ИтоговаяСуммаМинус; //ОбластьИтогов.Параметры.ИтогСписания = ИтоговаяСуммаСписания; ТабДок.Вывести(ОбластьИтогов); Для Каждого Счета Из РезультатСчета Цикл ОборотноСальдоваяВедомость = Новый Запрос; ОборотноСальдоваяВедомость.Текст = "ВЫБРАТЬ | ХозрасчетныйОстаткиИОбороты.Счет, | ХозрасчетныйОстаткиИОбороты.Организация, | ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток, | ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток |ИЗ | РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериод, &КонПериод, , , , , ) КАК ХозрасчетныйОстаткиИОбороты |ГДЕ | ХозрасчетныйОстаткиИОбороты.Счет = &Счет | И ХозрасчетныйОстаткиИОбороты.Организация = &Организация"; ОборотноСальдоваяВедомость.УстановитьПараметр("Счет", Счета.Счет); ОборотноСальдоваяВедомость.УстановитьПараметр("НачПериод", ЭлементыФормы.НачалоПериода.Значение); ОборотноСальдоваяВедомость.УстановитьПараметр("КонПериод", ЭлементыФормы.КонецПериода.Значение); ОборотноСальдоваяВедомость.УстановитьПараметр("Организация", ЭлементыФормы.Организация.Значение); РезультатНачИКонСальдо = ОборотноСальдоваяВедомость.Выполнить().Выгрузить(); Для Каждого Эл из РезультатНачИКонСальдо Цикл ОбластьПодвал.Параметры.СальдоКон = Эл.СуммаКонечныйОстаток; КонецЦикла; КонецЦикла; ТабДок.Вывести(ОбластьПодвал); Как можно построить запрос так чтобы: Если по одному документу корреспонденция различается - выводить отдельными строками в отчет, если не различается - группировать и выводить одной строкой. Хелп ми |
|||
1
PeaceDeath
09.04.13
✎
16:22
|
Встречаются данные у которых одинаковые "КорСчет" и "Счет"
30.11.2012 ООО Атлас Переброска денежных средств на корпоративную пластиковую карточку с-но договора № 54455 от 29.11.2012 00000000033 300 000 55.30 - 51.10 30.11.2012 ООО Атлас Переброска денежных средств на корпоративную пластиковую карточку с-но договора № 54455 от 29.11.2012 00000000033 300 000 55.30 - 51.10 |
|||
2
PeaceDeath
09.04.13
✎
16:23
|
Пардоньте у меня так
30.11.2012 ООО Атлас Переброска денежных средств на корпоративную пластиковую карточку с-но договора № 54455 от 29.11.2012 00000000033 300 000 55.30 - 51.10 30.11.2012 ООО Атлас Переброска денежных средств на корпоративную пластиковую карточку с-но договора № 54455 от 29.11.2012 00000000033 -300 000 51.00 - 53.30 |
|||
3
PeaceDeath
09.04.13
✎
16:27
|
Жаль здесь нет правки
Первый запрос выглядит так ЗапросСчета = Новый Запрос; ЗапросСчета.Текст = "ВЫБРАТЬ | ХозрасчетныйОбороты.Период КАК Период, | ХозрасчетныйОбороты.Регистратор КАК Регистратор, | ХозрасчетныйОбороты.Счет КАК Счет, | ХозрасчетныйОбороты.Субконто1 КАК Субконто1, | ХозрасчетныйОбороты.Организация КАК Организация, | ХозрасчетныйОбороты.КорСчет КАК КорСчет, | ХозрасчетныйОбороты.КорСубконто1 КАК КорСубконто1, | ХозрасчетныйОбороты.КорСубконто2 КАК КорСубконто2, | СУММА(ХозрасчетныйОбороты.СуммаОборот) КАК СуммаОборот, | СУММА(ХозрасчетныйОбороты.СуммаОборотДт) КАК СуммаОборотДт, | СУММА(ХозрасчетныйОбороты.СуммаОборотКт) КАК СуммаОборотКт |ИЗ | РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода, &КонецПериода, Регистратор, , , , , ) КАК ХозрасчетныйОбороты |ГДЕ | ХозрасчетныйОбороты.Организация.Ссылка = &СсылкаНаОрганизацию | И ХозрасчетныйОбороты.Субконто1 = &Счет | |СГРУППИРОВАТЬ ПО | ХозрасчетныйОбороты.Регистратор, | ХозрасчетныйОбороты.Счет, | ХозрасчетныйОбороты.Период, | ХозрасчетныйОбороты.КорСчет, | ХозрасчетныйОбороты.Субконто1, | ХозрасчетныйОбороты.КорСубконто2, | ХозрасчетныйОбороты.КорСубконто1, | ХозрасчетныйОбороты.Организация | |УПОРЯДОЧИТЬ ПО | Период"; |
|||
4
Maxus43
09.04.13
✎
16:30
|
ХозрасчетныйОборотыДТКТ юзай например
|
|||
5
PeaceDeath
09.04.13
✎
16:41
|
Так корреспондеция различается только в нескольких документах.. Может условие какое нибудь есть?
|
|||
6
Maxus43
09.04.13
✎
16:51
|
(5) какое условие? просто в Оборотах - у тебя 2 записи на одну проводку, по записи на каждый счет, потому и не группируется в одну строку
|
|||
7
PeaceDeath
09.04.13
✎
16:57
|
попробую) (6)
|
|||
8
PeaceDeath
10.04.13
✎
11:16
|
Блин! темку ап.
не то (6) |
|||
9
PeaceDeath
10.04.13
✎
11:17
|
Мне нужно обьединить в одну запись СуммаОборотДт
|
|||
10
GANR
10.04.13
✎
11:23
|
(0) ну и матрешки
Попытка <...> Исключение Попытка <...> Исключение Попытка <...> Исключение Попытка <...> Исключение Попытка <...> Исключение Попытка <...> Исключение КонецПопытки КонецПопытки КонецПопытки КонецПопытки КонецПопытки КонецПопытки |
|||
11
В тылу врага
10.04.13
✎
11:25
|
за такое обилие попыток надо бить
|
|||
12
PeaceDeath
10.04.13
✎
11:25
|
(10) документы то разные вот и приходится такую фигню строчить.
|
|||
13
PeaceDeath
10.04.13
✎
11:25
|
Ну попробуй
|
|||
14
В тылу врага
10.04.13
✎
11:26
|
(13) а ты не быкуй, надо проверять на вид документа, а не попытки делать
|
|||
15
PeaceDeath
10.04.13
✎
11:27
|
Давайте так, поэтапно:
возможно ли в РегБух.ХозрасчетныйОботы сгруппировать поле СуммаОборотДТ или нет |
|||
16
PeaceDeath
10.04.13
✎
11:27
|
(14) позже исправлю
|
|||
17
PeaceDeath
10.04.13
✎
11:31
|
ВЫБРАТЬ
ХозрасчетныйОбороты.Регистратор КАК Регистратор, ХозрасчетныйОбороты.Счет КАК Счет, ХозрасчетныйОбороты.КорСчет КАК КорСчет, ХозрасчетныйОбороты.КорСубконто1 КАК КорСубконто1, ХозрасчетныйОбороты.КорСубконто2 КАК КорСубконто2, СУММА(ХозрасчетныйОбороты.СуммаОборотДт) КАК СуммаОборотДт, СУММА(ХозрасчетныйОбороты.СуммаОборотКт) КАК СуммаОборотКт ИЗ РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода, &КонецПериода, Регистратор, , , , , ) КАК ХозрасчетныйОбороты ГДЕ ХозрасчетныйОбороты.Организация.Ссылка = &СсылкаНаОрганизацию И ХозрасчетныйОбороты.Субконто1 = &Счет СГРУППИРОВАТЬ ПО ХозрасчетныйОбороты.Регистратор, ХозрасчетныйОбороты.Счет, ХозрасчетныйОбороты.КорСчет, ХозрасчетныйОбороты.Субконто1, ХозрасчетныйОбороты.КорСубконто2, ХозрасчетныйОбороты.КорСубконто1, ХозрасчетныйОбороты.Организация В запросе есть одинаковые значения с одинаковым счетом.. необходимо просто обьединить их..Реально?? |
|||
18
GANR
10.04.13
✎
11:39
|
(17) Может, для начала, на СКД попробовать переделать??? Возможно, вложенные схемы применив.
(16) Смотреть не могу на матрешки (10). Проверять наличие/отсутствие поля нужно так: // ПроверяемоеПоле - имя поля // НекийОбъект - произвольный объект Функция ПолеПрисутствуетВОбъекте(ПроверяемоеПоле, НекийОбъект) СтруктураПроверки = Новый Структура; ИдентификаторОтсутствия = Новый УникальныйИдентификатор("80cd11e1-f31d-42a5-a0a0-2f51291cab29"); СтруктураПроверки.Вставить(ПроверяемоеПоле, ИдентификаторОтсутствия); ЗаполнитьЗначенияСвойств(СтруктураПроверки, НекийОбъект); Возврат СтруктураПроверки[ПроверяемоеПоле] <> ИдентификаторОтсутствия; КонецФункции Иначе при отладке с "Остановка по ошибке" будет на каждой такой попытке останавливаться 1000 раз - неудобно. |
|||
19
GANR
10.04.13
✎
11:57
|
Может, в обработке "Консоль запросов" поэкспериментировать с (6) и другими виртуальными таблицами?
|
|||
20
PeaceDeath
10.04.13
✎
13:10
|
Спасибо) Хрусталева скачаю скд весч)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |