Отчет по двум запросам , Сформировать отчет по двум запросам
2 страниц
1 2 >
07.11.17, 12:38
Общительный
Группа: Пользователи
Сообщений: 18
Спасибо сказали: 0 раз
Рейтинг: 0
Нужно сформировать отчет по двум запросам.
При формировании отчета, не выводит данные первого запроса, а со вторым всё в порядке. Подскажите пожалуйста, в чем ошибка(В 7.7 работаю не давно, больше опыта в 8)
Код Процедура Сформировать()
Перем Запрос, ТекстЗапроса, Таб;
Запрос3 = СоздатьОбъект("Запрос" );
ТекстЗапроса =
"//{{ЗАПРОС3(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|ДатаДок = Документ.НачисленияУдержанияСписком.ДатаДок;
|Расчет = Документ.НачисленияУдержанияСписком.Расчет;
|НомерДок = Документ.НачисленияУдержанияСписком.НомерДок;
|Величина = Документ.НачисленияУдержанияСписком.Величина;
|СкидкаКДоходамДляСтраховыхВзносов = Документ.НачисленияУдержанияСписком.СкидкаКДоходамДляСтраховыхВзносов;
|Функция СкидкаКДоходамДляСтраховыхВзносовСумма = Сумма(СкидкаКДоходамДляСтраховыхВзносов-СкидкаКДоходамДляСтраховыхВзносов+Число(Величина));
|Группировка ДатаДок без упорядочивания;
|Группировка Расчет;
|Группировка НомерДок;
|Условие(Расчет = ВыбРасчет);
|"
;
Если Запрос3 .Выполнить(ТекстЗапроса) = 0 Тогда
Возврат ;
КонецЕсли ;
Таб = СоздатьОбъект("Таблица" );
Таб.ИсходнаяТаблица("Сформировать" );
Таб.ВывестиСекцию("Заголовок" );
Состояние("Заполнение выходной таблицы..." );
Таб.Опции(0 , 0 , Таб.ВысотаТаблицы(), 0 );
Пока Запрос3 .Группировка(1 ) = 1 Цикл
Таб.ВывестиСекцию("ДатаДок" );
Пока Запрос3 .Группировка(2 ) = 1 Цикл
Таб.ВывестиСекцию("Расчет" );
Пока Запрос3 .Группировка(3 ) = 1 Цикл
Таб.ВывестиСекцию("НомерДок" );
КонецЦикла ;
КонецЦикла ;
КонецЦикла ;
Таб.ВывестиСекцию("Итого" );
Запрос1 = СоздатьОбъект("Запрос" );
ТекстЗапроса =
"//{{ЗАПРОС1(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|ДатаДок1 = Документ.НачисленияУдержанияСписком.ДатаДок;
|Расчет1 = Документ.НачисленияУдержанияСписком.Расчет;
|НомерДок1 = Документ.НачисленияУдержанияСписком.НомерДок;
|Величина1 = Документ.НачисленияУдержанияСписком.Величина;
|СкидкаКДоходамДляСтраховыхВзносов1 = Документ.НачисленияУдержанияСписком.СкидкаКДоходамДляСтраховыхВзносов;
|Функция СкидкаКДоходамДляСтраховыхВзносовСумма1 = Сумма(СкидкаКДоходамДляСтраховыхВзносов1-СкидкаКДоходамДляСтраховыхВзносов1+Число(Величина1));
|Группировка ДатаДок1 без упорядочивания;
|Группировка Расчет1;
|Группировка НомерДок1;
|Условие(Расчет1 = ВыбРасчет1);
|"
;
Если Запрос1 .Выполнить(ТекстЗапроса) = 0 Тогда
Возврат ;
КонецЕсли ;
Таб = СоздатьОбъект("Таблица" );
Таб.ИсходнаяТаблица("Сформировать" );
Таб.ВывестиСекцию("Заголовок1" );
Состояние("Заполнение выходной таблицы..." );
Таб.Опции(0 , 0 , Таб.ВысотаТаблицы(), 0 );
Пока Запрос1 .Группировка(1 ) = 1 Цикл
Таб.ВывестиСекцию("ДатаДок1" );
Пока Запрос1 .Группировка(2 ) = 1 Цикл
Таб.ВывестиСекцию("Расчет1" );
Пока Запрос1 .Группировка(3 ) = 1 Цикл
Таб.ВывестиСекцию("НомерДок1" );
КонецЦикла ;
КонецЦикла ;
КонецЦикла ;
Таб.ВывестиСекцию("Итого1" );
Таб.ТолькоПросмотр(1 );
Таб.Показать("Сформировать" , "Сформировать1" );
КонецПроцедуры
Сообщение отредактировал Vofka - 07.11.17, 13:00
07.11.17, 13:15
Танцор с Бубном
Группа: Местный
Сообщений: 1121
Из: Днепра
Спасибо сказали: 232 раз
Рейтинг: 0
Цитата(ranis @ 07.11.17, 13:01)
И что сделать?
Выводить в одну таблицу два отчета:
Таб = СоздатьОбъект("ТабличныйДокумент" );
Таб.Показать();
Или в разные шаблоны:
Таб = СоздатьОбъект("ТабличныйДокумент" );
Таб.ИсходнаяТаблица("Отчет_1" );
Таб.Показать();
Таб = СоздатьОбъект("ТабличныйДокумент" );
Таб.ИсходнаяТаблица("Отчет_2" );
Таб.Показать();
07.11.17, 13:46
Общительный
Группа: Пользователи
Сообщений: 18
Спасибо сказали: 0 раз
Рейтинг: 0
ranis @ Сегодня, 14:17
,
Вот диалоговое окно
Вот так должно сформироваться
Так формируется
! Правила : 8, в следующий раз картинки удалю
Flexy @ Сегодня, 14:23
,
Похоже я совсем не умею описывать. Нужно по одному документу создать отчет. Есть два отбора "Удержание " и "Доплата". К примеру ставим удержание 25 и Произвольную доплату 50. В одной таблице нужно вывести данные по отбору Удержание, во второй таблице по отбору Доплата. И это всё должно быть в одном отчете
Flexy @ Сегодня, 14:23
,
Flexy @ Сегодня, 14:23
,
Получается надо получить 2 таблицы. С разными отборами
Сообщение отредактировал Vofka - 07.11.17, 13:36
08.11.17, 13:03
Говорящий
Группа: Пользователи
Сообщений: 92
Из: Полтава
Спасибо сказали: 24 раз
Рейтинг: 0
Цитата(ranis @ 08.11.17, 12:37)
Не то
Что не то?
Используя ПрисоединитьСекцию() можно выводить в одну строку две разных колонки.
Если Вам не нравиться так - делайте одним запросом как подсказал
Flexy , и в обходе результата выводите одну строку/секцию для обеих таблиц сразу.
09.11.17, 8:54
Оратор
Группа: Местный
Сообщений: 312
Из: Бердянск
Спасибо сказали: 110 раз
Рейтинг: 0
во-первых, не понимаю этой формулы:
СкидкаКДоходамДляСтраховыхВзносов-СкидкаКДоходамДляСтраховыхВзносов+Число(Величина)
ведь: (а - а) + в = 0 + в
во-вторых, предлагаю вам все-таки написать один запрос,
в-третьих, если "Таблицы с данными должн быть параллельные", а запроса остается все-таки два, то скидываете результаты в общую таблицу и сворачивайте
1С Предприятие 7.7: Бух. учет для Украины (активно дописанная) + самописка (учет производства и ЗП) 1С Предприятие 8.3: Бух.предприятия 3.0 + самописка ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Кроме высшего образования, нужно иметь хотя бы среднее соображение
09.11.17, 9:20
Общительный
Группа: Пользователи
Сообщений: 18
Спасибо сказали: 0 раз
Рейтинг: 0
nysysimara @ Сегодня, 9:54
,
1) Величина тип "Неопределенный", а для суммирование как раз та и нужно сделать.
2) Если делать одним запросом, то я не представляю, как объеденить существующие запросы
3) Я не имею представления как работать с таблицами значений
09.11.17, 14:19
Общительный
Группа: Пользователи
Сообщений: 18
Спасибо сказали: 0 раз
Рейтинг: 0
nysysimara @ Сегодня, 14:35
,
Процедура Сформировать()
Перем Запрос, ТекстЗапроса, Таб;
ТЗ=СоздатьОбъект("ТаблицаЗначений" );
ТЗ.КоличествоКолонок(10 );
Запрос3 = СоздатьОбъект("Запрос" );
ТекстЗапроса =
"//{{ЗАПРОС3(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|ДатаДок = Документ.НачисленияУдержанияСписком.ДатаДок;
|Расчет = Документ.НачисленияУдержанияСписком.Расчет;
|НомерДок = Документ.НачисленияУдержанияСписком.НомерДок;
|Величина = Документ.НачисленияУдержанияСписком.Величина;
|СкидкаКДоходамДляСтраховыхВзносов = Документ.НачисленияУдержанияСписком.СкидкаКДоходамДляСтраховыхВзносов;
|Функция СкидкаКДоходамДляСтраховыхВзносовСумма = Сумма(СкидкаКДоходамДляСтраховыхВзносов-СкидкаКДоходамДляСтраховыхВзносов+Число(Величина));
|Группировка ДатаДок без упорядочивания;
|Группировка Расчет;
|Группировка НомерДок;
|Условие(Расчет = ВыбРасчет);
|"
;
Если Запрос3 .Выполнить(ТекстЗапроса) = 0 Тогда
Возврат ;
КонецЕсли ;
Пока Для й=1 по Результат1 .КоличествоСтрок() Цикл
Если й>ТЗ.КоличествоСтрок() Тогда
ТЗ.НоваяСтрока();
КонецЕсли ;
ТЗ.НоваяСтрока();
ТЗ.УстановитьЗначение(й,1 ,Итого);
ТЗ.УстановитьЗначение(й,2 ,Расчет);
ТЗ.УстановитьЗначение(й,3 ,НомерДок);
ТЗ.УстановитьЗначение(й,4 ,ДатаДок);
КонецЦикла ;
Для й=1 по Результат2 .КоличествоСтрок() Цикл
Если й>ТЗ.КоличествоСтрок() Тогда
ТЗ.НоваяСтрока();
КонецЕсли ;
ТЗ.УстановитьЗначение(й,1 ,Итого1 );
ТЗ.УстановитьЗначение(й,2 ,Расчет1 );
ТЗ.УстановитьЗначение(й,3 ,НомерДок1 );
ТЗ.УстановитьЗначение(й,4 ,ДатаДок1 );
Запрос1 = СоздатьОбъект("Запрос" );
ТекстЗапроса =
"//{{ЗАПРОС1(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|ДатаДок1 = Документ.НачисленияУдержанияСписком.ДатаДок;
|Расчет1 = Документ.НачисленияУдержанияСписком.Расчет;
|НомерДок1 = Документ.НачисленияУдержанияСписком.НомерДок;
|Величина1 = Документ.НачисленияУдержанияСписком.Величина;
|СкидкаКДоходамДляСтраховыхВзносов1 = Документ.НачисленияУдержанияСписком.СкидкаКДоходамДляСтраховыхВзносов;
|Функция СкидкаКДоходамДляСтраховыхВзносовСумма1 = Сумма(СкидкаКДоходамДляСтраховыхВзносов1-СкидкаКДоходамДляСтраховыхВзносов1+Число(Величина1));
|Группировка ДатаДок1 без упорядочивания;
|Группировка Расчет1;
|Группировка НомерДок1;
|Условие(Расчет1 = ВыбРасчет1);
|"
;
Если Запрос1 .Выполнить(ТекстЗапроса) = 0 Тогда
Возврат ;
КонецЕсли ;
Таб = СоздатьОбъект("Таблица" );
Таб.ИсходнаяТаблица("Сформировать" );
Таб.ВывестиСекцию("Заголовок" );
Состояние("Заполнение выходной таблицы..." );
Таб.Опции(0 , 0 , Таб.ВысотаТаблицы(), 0 );
Для й=1 по ТЗ.КоличествоСтрок() Цикл
Таб.ВывестиСекцию("ДатаДок" );
Таб.ВывестиСекцию("Расчет" );
Таб.ВывестиСекцию("НомерДок" );
КонецЦикла ;
Таб.ВывестиСекцию("Итого" );
Таб.ТолькоПросмотр(1 );
Таб.Показать("Сформировать" , "" );
КонецПроцедуры
Вот сейчас код написанный с ТЗ. Только он сейчас на переменные ругается
nysysimara @ Сегодня, 14:35
,
Таблицы обязательно нужны параллельные, где есть столбцы дата, расчет, и сумма
Точнее вот так
Процедура Сформировать()
Перем Запрос, ТекстЗапроса, Таб;
ТЗ=СоздатьОбъект("ТаблицаЗначений" );
ТЗ.КоличествоКолонок(10 );
Запрос3 = СоздатьОбъект("Запрос" );
ТекстЗапроса =
"//{{ЗАПРОС3(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|ДатаДок = Документ.НачисленияУдержанияСписком.ДатаДок;
|Расчет = Документ.НачисленияУдержанияСписком.Расчет;
|НомерДок = Документ.НачисленияУдержанияСписком.НомерДок;
|Величина = Документ.НачисленияУдержанияСписком.Величина;
|СкидкаКДоходамДляСтраховыхВзносов = Документ.НачисленияУдержанияСписком.СкидкаКДоходамДляСтраховыхВзносов;
|Функция Итого = Сумма(СкидкаКДоходамДляСтраховыхВзносов-СкидкаКДоходамДляСтраховыхВзносов+Число(Величина));
|Группировка ДатаДок без упорядочивания;
|Группировка Расчет;
|Группировка НомерДок;
|Условие(Расчет = ВыбРасчет);
|"
;
Если Запрос3 .Выполнить(ТекстЗапроса) = 0 Тогда
Возврат ;
КонецЕсли ;
; Пока Для й=1 по Запрос3 .КоличествоСтрок() Цикл
Если й>ТЗ.КоличествоСтрок() Тогда
ТЗ.НоваяСтрока();
КонецЕсли ;
ТЗ.НоваяСтрока();
ТЗ.УстановитьЗначение(й,1 ,Итого);
ТЗ.УстановитьЗначение(й,2 ,Расчет);
ТЗ.УстановитьЗначение(й,3 ,НомерДок);
ТЗ.УстановитьЗначение(й,4 ,ДатаДок);
КонецЦикла ;
Запрос1 = СоздатьОбъект("Запрос" );
ТекстЗапроса =
"//{{ЗАПРОС1(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|ДатаДок1 = Документ.НачисленияУдержанияСписком.ДатаДок;
|Расчет1 = Документ.НачисленияУдержанияСписком.Расчет;
|НомерДок1 = Документ.НачисленияУдержанияСписком.НомерДок;
|Величина1 = Документ.НачисленияУдержанияСписком.Величина;
|СкидкаКДоходамДляСтраховыхВзносов1 = Документ.НачисленияУдержанияСписком.СкидкаКДоходамДляСтраховыхВзносов;
|Функция Итого1 = Сумма(СкидкаКДоходамДляСтраховыхВзносов1-СкидкаКДоходамДляСтраховыхВзносов1+Число(Величина1));
|Группировка ДатаДок1 без упорядочивания;
|Группировка Расчет1;
|Группировка НомерДок1;
|Условие(Расчет1 = ВыбРасчет1);
|"
;
Если Запрос1 .Выполнить(ТекстЗапроса) = 0 Тогда
Возврат ;
КонецЕсли ;
Для й=1 по Запрос1 .КоличествоСтрок() Цикл
Если й>ТЗ.КоличествоСтрок() Тогда
ТЗ.НоваяСтрока();
КонецЕсли ;
ТЗ.УстановитьЗначение(й,1 ,Итого1 );
ТЗ.УстановитьЗначение(й,2 ,Расчет1 );
ТЗ.УстановитьЗначение(й,3 ,НомерДок1 );
ТЗ.УстановитьЗначение(й,4 ,ДатаДок1 );
Таб = СоздатьОбъект("Таблица" );
Таб.ИсходнаяТаблица("Сформировать" );
Таб.ВывестиСекцию("Заголовок" );
Состояние("Заполнение выходной таблицы..." );
Таб.Опции(0 , 0 , Таб.ВысотаТаблицы(), 0 );
Для й=1 по ТЗ.КоличествоСтрок() Цикл
Таб.ВывестиСекцию("ДатаДок" );
Таб.ВывестиСекцию("Расчет" );
Таб.ВывестиСекцию("НомерДок" );
КонецЦикла ;
Таб.ВывестиСекцию("Итого" );
Таб.ТолькоПросмотр(1 );
Таб.Показать("Сформировать" , "" );
КонецЦикла ;
КонецПроцедуры
Не нашли ответа на свой вопрос?
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!