Имя: Пароль:
1C
1С v8
Помогите построить запрос
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
Спасибо) Хрусталева скачаю скд весч)