Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 05:17

Помогите разобраться с запросом

Автор Глеб Шахов, 22 июн 2020, 09:58

0 Пользователей и 1 гость просматривают эту тему.

Глеб Шахов

Доброе время суток, помогите, пожалуйста, разобраться с запросом. Только начинаю осваивать 1С. Когда выводятся данные о пособиях, о больничном, о начислениях, они дублируются. То есть например выбран диапазон в 2 месяца, за эти 2 месяца было 2 разных суммы больничного, но в табл. строках отображается одна и таже сумма. Есть предположение почему такая путаница. Проблема в цикле, но это не точно
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Начисления.ПериодРегистрации КАК ПериодРегистрации,
| Начисления.ВидРасчета КАК ВидРасчета,
| Начисления.Результат КАК Результат
|ИЗ
| РегистрРасчета.Начисления КАК Начисления
|ГДЕ
| Начисления.ПериодРегистрации МЕЖДУ &Дата1 И &Дата2
| И Начисления.Сотрудник = &Сотрудник
|ИТОГИ
| СУММА(Результат)
|ПО
| ОБЩИЕ,
| ПериодРегистрации ПЕРИОДАМИ(МЕСЯЦ, , ),
| ВидРасчета";
Запрос.УстановитьПараметр("Дата1", НачалоМесяца(НачалоПериода));
Запрос.УстановитьПараметр("Дата2", КонецМесяца(КонецПериода));
Запрос.УстановитьПараметр("Сотрудник", Сотрудник);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаОбщийИтог = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

ВыборкаОбщийИтог.Следующий();

ОбластьТаблицаИтог.Параметры.СуммаНачисления =   ВыборкаОбщийИтог.Результат;

ВыборкаПериодРегистрации = ВыборкаОбщийИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаПериодРегистрации.Следующий() Цикл
ОбластьТаблица.Параметры.МесяцНачисления = Формат(ВыборкаПериодРегистрации.ПериодРегистрации,"ДФ='MMMM yyyy'");
ВыборкаВидРасчета = ВыборкаПериодРегистрации.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
 
Пока ВыборкаВидРасчета.Следующий() Цикл
Сообщить(ВыборкаВидРасчета.ВидРасчета.КодДоходаНДФЛ);
Сообщить(ВыборкаВидРасчета.Результат);
Если ЗначениеЗаполнено(ВыборкаВидРасчета.ВидРасчета.КодДоходаНДФЛ) Тогда                                                   
Если СокрЛП(ВыборкаВидРасчета.ВидРасчета.КодДоходаНДФЛ) = "2300" Тогда           
ОбластьТаблица.Параметры.НачисленияБольничный = ВыборкаВидРасчета.Результат;                     
Иначе
ОбластьТаблица.Параметры.Начисления = ВыборкаВидРасчета.Результат;                           
КонецЕсли;                                                                                               
Иначе                                                                                                         
ОбластьТаблица.Параметры.НачисленияПособия = ВыборкаВидРасчета.Результат;                         
КонецЕсли;
КонецЦикла;
ТабличныйДокумент.Вывести(ОбластьТаблица);
КонецЦикла;

LexaK

а сам запрос что возвращает? посмотрите его результат в консоли запросов.
и по коду, не видно где инициализируется ОбластьТаблица, перед заполнением параметров или получать новую область или очистить старые параметры
если помогло нажмите: Спасибо!

Глеб Шахов

LexaK, инициализация ОбластьТаблица идет перед заполнением параметров

LexaK

Глеб Шахов, укажите в коде, в упор не вижу в вашем коде... :fdbsdfbsd:
если помогло нажмите: Спасибо!

Глеб Шахов

LexaK, Она у меня определена в начале модуля...Единственно, что мне кажется необходимо сделать это как то суммировать результат, потому что период он выводит правильно, а вот результат дублирует, то есть он находит код 2300 выводит его значение, а следующий не выводит, просто дублирует
Добавлено: 23 июн 2020, 06:50


LexaK, или даже не суммировать, а сделать так чтобы не дублировал. уже всю голову сломал:(

Добавлено: 23 июн 2020, 08:42


Дело в том, что именно в цикле параметры НАЧИСЛЕНИЙ записывали по одному обходу, проблему решило инициализация доп.переменных и суммирование внутри цикла
СчБ = 0; 
СчНачис = 0;
СчПособия = 0;
ВыборкаВидРасчета = ВыборкаПериодРегистрации.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаВидРасчета.Следующий() Цикл
Если ЗначениеЗаполнено(ВыборкаВидРасчета.ВидРасчета.КодДоходаНДФЛ) Тогда                                                   
                Если СокрЛП(ВыборкаВидРасчета.ВидРасчета.КодДоходаНДФЛ) = "2300" Тогда           
                    сЧб = сЧб+ВыборкаВидРасчета.Результат;                     
Иначе   
                    СчНачис = СчНачис+ВыборкаВидРасчета.Результат;                           
                КонецЕсли;                                                                                               
Иначе
                СчПособия = СчПособия+ВыборкаВидРасчета.Результат;
            КонецЕсли;
КонецЦикла;
ОбластьТаблица.Параметры.НачисленияБольничный = сЧб;
ОбластьТаблица.Параметры.Начисления = СчНачис;
ОбластьТаблица.Параметры.НачисленияПособия = СчПособия;
ТабличныйДокумент.Вывести(ОбластьТаблица);
КонецЦикла;

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск