Добрый день, уважаемые коллеги.
Приключилась тут со мной такая фигня: отчёт выводит не правильную цифру. Сую запрос в консоль - всё правильно. Проверяю в СКД параметры\ресурсы\вычисляемые поля... в общем всё, что даже косвенно могло (да и не могло) повлиять на вывод результата. И ничего... Как показывал он неправильную фигру, так, хоть ты тресни, и показывает.
Если расшифровать немного ситуацию, то я из регистра сведений получаю плановые платежи клиента (в рег свед есть измерение - ПлановаяДата). Клиент за август должен был заплатить 100 т.р., за сентябрь 150 т.р. И дело в том, что консоль берёт данные нормальные - 250 т.р., а СКД только 100 т.р. за август, и сентябрь почему-то игнорирует.
Подскажите, в чём может быть беда.
P.S. Проверить параметры - не предлагать. Я их раз 10 уже проверял.
У меня была похожая ситуация скхема компоновки данных в отчете получала из регистра сведений срез последних отличный от того что получала консоль отчетов. Если мне не изменяет память, если не задавать период среза, консоль возвращала последнее значение в регистре, а сКД на текущую дату(у меня это была предпоследняя запись), поэтому данные отличались. Может у вас схожая проблема.
Самое правильное и быстрое решение проблемы - берешь "Консоль СКД" и смотришь, а что за запрос получается на самом деле? У СКД есть неприятная особенность - после обработки запроса ее оптимизатором итоговый запрос может получиться "слегка" отличным от исходного.
(6) Dasty, консоль то я взял, вот только т.к. никогда таких проблем ранее не случалось, не знаю, как ей пользоваться в части проверки итогового запроса. Не могли бы пнуть в нужном направлении?
Пнул себя сам.
Большое спасибо ресурсу Spec8, и в особенности Евгению Гилёву за неоценимый вклад в профессиональное развитие программистов (в том числе и меня в данный момент)))))
ВЫБРАТЬ
РасчетыНалогоплательщиковСБюджетомПоНДФЛ.ГоловнаяОрганизация КАК ГоловнаяОрганизация,
РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Период КАК Период,
РасчетыНалогоплательщиковСБюджетомПоНДФЛ.СрокПеречисления КАК СрокПеречисления,
СУММА(РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Сумма) КАК Сумма
ПОМЕСТИТЬ УдержанныйНДФЛ
ИЗ
РегистрНакопления.РасчетыНалогоплательщиковСБюджетомПоНДФЛ КАК РасчетыНалогоплательщиковСБюджетомПоНДФЛ
ГДЕ
РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Организация = &Организация
И РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Период >= &ДатаНачала
И РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Период <= &ДатаКонец
И РасчетыНалогоплательщиковСБюджетомПоНДФЛ.ВариантУдержания = &ВариантУдержания
СГРУППИРОВАТЬ ПО
РасчетыНалогоплательщиковСБюджетомПоНДФЛ.ГоловнаяОрганизация,
РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Период,
РасчетыНалогоплательщиковСБюджетомПоНДФЛ.СрокПеречисления
ИНДЕКСИРОВАТЬ ПО
ГоловнаяОрганизация,
Период
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
УдержанныйНДФЛ.ГоловнаяОрганизация КАК ГоловнаяОрганизация,
ВЫБОР
КОГДА УдержанныйНДФЛ.СрокПеречисления = ЗНАЧЕНИЕ(Перечисление.СрокиПеречисляемогоНалога.МежрасчетныеОтпускаИБольничные)
ТОГДА КОНЕЦПЕРИОДА(УдержанныйНДФЛ.Период, МЕСЯЦ)
ИНАЧЕ КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(УдержанныйНДФЛ.Период, ДЕНЬ, 1), ДЕНЬ)
КОНЕЦ КАК КрайнийСрокПеречисленияНалога,
СУММА(УдержанныйНДФЛ.Сумма) КАК Сумма
ПОМЕСТИТЬ СрокУплатыУдержанногоНДФЛ
ИЗ
УдержанныйНДФЛ КАК УдержанныйНДФЛ
СГРУППИРОВАТЬ ПО
УдержанныйНДФЛ.ГоловнаяОрганизация,
ВЫБОР
КОГДА УдержанныйНДФЛ.СрокПеречисления = ЗНАЧЕНИЕ(Перечисление.СрокиПеречисляемогоНалога.МежрасчетныеОтпускаИБольничные)
ТОГДА КОНЕЦПЕРИОДА(УдержанныйНДФЛ.Период, МЕСЯЦ)
ИНАЧЕ КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(УдержанныйНДФЛ.Период, ДЕНЬ, 1), ДЕНЬ)
КОНЕЦ
ИНДЕКСИРОВАТЬ ПО
ГоловнаяОрганизация,
КрайнийСрокПеречисленияНалога
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
КОНЕЦПЕРИОДА(СписаниеСРасчетногоСчета.Дата, ДЕНЬ) КАК Дата,
СписаниеСРасчетногоСчета.СуммаДокумента КАК СуммаДокумента,
СписаниеСРасчетногоСчета.Ссылка КАК Ссылка
ПОМЕСТИТЬ ПеречисленияНДФЛ
ИЗ
Документ.СписаниеСРасчетногоСчета КАК СписаниеСРасчетногоСчета
ГДЕ
СписаниеСРасчетногоСчета.Дата >= &ДатаНачала
И СписаниеСРасчетногоСчета.Дата <= &ДатаКонец
И СписаниеСРасчетногоСчета.Проведен
И СписаниеСРасчетногоСчета.Организация = &Организация
И СписаниеСРасчетногоСчета.ВидОперации = &ВидОперации
И СписаниеСРасчетногоСчета.Налог = &Налог
ИНДЕКСИРОВАТЬ ПО
Дата,
Ссылка
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПеречисленияНДФЛ.Дата КАК Дата,
ПеречисленияНДФЛ.СуммаДокумента КАК СуммаДокумента,
МИНИМУМ(СрокУплаты.КрайнийСрокПеречисленияНалога) КАК КрайнийСрокПеречисленияНалога,
ПеречисленияНДФЛ.Ссылка
ПОМЕСТИТЬ ПеречисленоИСрокУплаты
ИЗ
ПеречисленияНДФЛ КАК ПеречисленияНДФЛ
ЛЕВОЕ СОЕДИНЕНИЕ СрокУплатыУдержанногоНДФЛ КАК СрокУплаты
ПО ПеречисленияНДФЛ.Дата <= СрокУплаты.КрайнийСрокПеречисленияНалога
СГРУППИРОВАТЬ ПО
ПеречисленияНДФЛ.Дата,
ПеречисленияНДФЛ.СуммаДокумента,
ПеречисленияНДФЛ.Ссылка
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПеречисленоИСрокУплаты.СуммаДокумента КАК СуммаДокумента2,
ПеречисленоИСрокУплаты.КрайнийСрокПеречисленияНалога КАК КрайнийСрокПеречисленияНалога2
ПОМЕСТИТЬ ПеречисленоИСрокУплаты2
ИЗ
ПеречисленоИСрокУплаты КАК ПеречисленоИСрокУплаты
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПеречисленоИСрокУплаты2.СуммаДокумента2,
ПеречисленоИСрокУплаты2.КрайнийСрокПеречисленияНалога2
ИЗ
ПеречисленоИСрокУплаты2 КАК ПеречисленоИСрокУплаты2
разбираю все запросы последовательно и нашла где глючит.
Может быть кто-нибудь подскажет : как это обойти:
В результате выполнения нескольких запросов, данные пишутся во временную таблицу Т1:
Сссылка на документ, СуммаДокумента, Срок оплаты - это поле расчетное - рассчитывается на основании других таблиц... хитрое поле Минимум()
Данные Т1 - формируются верно, выводятся через отчет-СКД верно.
Далее мне нужно собрать/сгруппировать данные по Сроку оплаты:
Срок оплаты, СуммаДокумента - вот это уже СКД выводит неверно, теряется часть данных.
Даже если просто сделать выборку из Т1 - двух полей Срок оплаты, СуммаДокумента - она будет уже неверной.
Если сделать выборку из Т1 всех трех полей Сссылка на документ, СуммаДокумента, Срок оплаты - то результат будет верный.
В чем тут соль?
Я так понимаю, что СКД оптимизирует запрос? и результат уже другой...
(14) user_2010, бывает с СКД такое, недавно убил на это кучу времени :). Можно попробовать вместо временных таблиц использовать вложенные запросы, их она не "оптимизирует". Можно попробовать как-то иначе исправить запрос, но это дело очень темное, как я понял, а без временных таблиц нормально получается.
(23) user_2010, в каждом конкретном случае это отдельный разговор. Кривость значит неоптимально написан!
А так замени
ВЫБРАТЬ
ПеречисленоИСрокУплаты.СуммаДокумента КАК СуммаДокумента2,
ПеречисленоИСрокУплаты.КрайнийСрокПеречисленияНалога КАК КрайнийСрокПеречисленияНалога2
ПОМЕСТИТЬ ПеречисленоИСрокУплаты2
ИЗ
ПеречисленоИСрокУплаты КАК ПеречисленоИСрокУплаты
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПеречисленоИСрокУплаты2.СуммаДокумента2,
ПеречисленоИСрокУплаты2.КрайнийСрокПеречисленияНалога2
ИЗ
ПеречисленоИСрокУплаты2 КАК ПеречисленоИСрокУплаты2
Показать
На
ВЫБРАТЬ
ПеречисленоИСрокУплаты.СуммаДокумента КАК СуммаДокумента2,
ПеречисленоИСрокУплаты.КрайнийСрокПеречисленияНалога КАК КрайнийСрокПеречисленияНалога2
ИЗ
ПеречисленоИСрокУплаты КАК ПеречисленоИСрокУплаты
хоть с ресурсами, хоть без ресурсов - результат один и тот же - в СКД часть записей пропадает.
виртуальная таблица в конце - именно в ней и пропадают записи, хотя идет просто выборка всех записей из предыдущей таблицы.
(если выбирать только СуммаДокумента и КрайнийСрокПеречисленияНалога - тогда часть записей пропадает, если в выборку добавить поле Сссылка, тогда выведутся все записи)
(22) user_2010, у СКД логика отличается от вашей. Он оптимизирует запрос по своим критериям.
В данном случае, если в итоговой выборке Ссылка не нужна, то и измерения по ним не нужны. Он просто не получает дублирующиеся записи (без Ссылки они именно дублирующиеся).
(25) spacecraft, да, в примере, на котором я проверяю работу отчета - пропадает одна из дублирующихся записей, и еще пропадает последняя запись.
Но мне нужно собрать итоговую сумму по датам, а из-за пропадания записей итого получается неверным
(25) spacecraft, да, в примере, на котором я проверяю работу отчета - пропадает одна из дублирующихся записей, и еще пропадает последняя запись.
Но мне нужно собрать итоговую сумму по датам, а из-за пропадания записей итого получается неверным
как мне это дело сделать правильно?
(32) user_2010, прочитайте еще раз (25). Все что не получается в итоговой выборке, не считаются измерениями. Если нужно получать данные по Дате, значит и в итоговой выборке нужно получать Дату.
(33) spacecraft,
я и получаю дату ПеречисленоИСрокУплаты.КрайнийСрокПеречисленияНалога
ВЫБРАТЬ
ПеречисленоИСрокУплаты.СуммаДокумента КАК СуммаДокумента2,
ПеречисленоИСрокУплаты.КрайнийСрокПеречисленияНалога КАК КрайнийСрокПеречисленияНалога2
...
сейчас подробнее опишу проблему
ВЫБРАТЬ
РасчетыНалогоплательщиковСБюджетомПоНДФЛ.ГоловнаяОрганизация КАК ГоловнаяОрганизация,
РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Период КАК Период,
РасчетыНалогоплательщиковСБюджетомПоНДФЛ.СрокПеречисления КАК СрокПеречисления,
СУММА(РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Сумма) КАК Сумма
ПОМЕСТИТЬ УдержанныйНДФЛ
ИЗ
РегистрНакопления.РасчетыНалогоплательщиковСБюджетомПоНДФЛ КАК РасчетыНалогоплательщиковСБюджетомПоНДФЛ
ГДЕ
РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Организация = &Организация
И РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Период >= &ДатаНачала
И РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Период <= &ДатаКонец
И РасчетыНалогоплательщиковСБюджетомПоНДФЛ.ВариантУдержания = &ВариантУдержания
СГРУППИРОВАТЬ ПО
РасчетыНалогоплательщиковСБюджетомПоНДФЛ.ГоловнаяОрганизация,
РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Период,
РасчетыНалогоплательщиковСБюджетомПоНДФЛ.СрокПеречисления
ИНДЕКСИРОВАТЬ ПО
ГоловнаяОрганизация,
Период
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
УдержанныйНДФЛ.ГоловнаяОрганизация КАК ГоловнаяОрганизация,
ВЫБОР
КОГДА УдержанныйНДФЛ.СрокПеречисления = ЗНАЧЕНИЕ(Перечисление.СрокиПеречисляемогоНалога.МежрасчетныеОтпускаИБольничные)
ТОГДА КОНЕЦПЕРИОДА(УдержанныйНДФЛ.Период, МЕСЯЦ)
ИНАЧЕ КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(УдержанныйНДФЛ.Период, ДЕНЬ, 1), ДЕНЬ)
КОНЕЦ КАК КрайнийСрокПеречисленияНалога,
СУММА(УдержанныйНДФЛ.Сумма) КАК Сумма
ПОМЕСТИТЬ СрокУплатыУдержанногоНДФЛ
ИЗ
УдержанныйНДФЛ КАК УдержанныйНДФЛ
СГРУППИРОВАТЬ ПО
УдержанныйНДФЛ.ГоловнаяОрганизация,
ВЫБОР
КОГДА УдержанныйНДФЛ.СрокПеречисления = ЗНАЧЕНИЕ(Перечисление.СрокиПеречисляемогоНалога.МежрасчетныеОтпускаИБольничные)
ТОГДА КОНЕЦПЕРИОДА(УдержанныйНДФЛ.Период, МЕСЯЦ)
ИНАЧЕ КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(УдержанныйНДФЛ.Период, ДЕНЬ, 1), ДЕНЬ)
КОНЕЦ
ИНДЕКСИРОВАТЬ ПО
ГоловнаяОрганизация,
КрайнийСрокПеречисленияНалога
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
КОНЕЦПЕРИОДА(СписаниеСРасчетногоСчета.Дата, ДЕНЬ) КАК Дата,
СписаниеСРасчетногоСчета.СуммаДокумента КАК СуммаДокумента,
СписаниеСРасчетногоСчета.Ссылка КАК Ссылка
ПОМЕСТИТЬ ПеречисленияНДФЛ
ИЗ
Документ.СписаниеСРасчетногоСчета КАК СписаниеСРасчетногоСчета
ГДЕ
СписаниеСРасчетногоСчета.Дата >= &ДатаНачала
И СписаниеСРасчетногоСчета.Дата <= &ДатаКонец
И СписаниеСРасчетногоСчета.Проведен
И СписаниеСРасчетногоСчета.Организация = &Организация
И СписаниеСРасчетногоСчета.ВидОперации = &ВидОперации
И СписаниеСРасчетногоСчета.Налог = &Налог
ИНДЕКСИРОВАТЬ ПО
Дата,
Ссылка
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПеречисленияНДФЛ.Дата КАК Дата,
ПеречисленияНДФЛ.СуммаДокумента КАК СуммаДокумента,
МИНИМУМ(СрокУплаты.КрайнийСрокПеречисленияНалога) КАК КрайнийСрокПеречисленияНалога,
ПеречисленияНДФЛ.Ссылка
ПОМЕСТИТЬ ПеречисленоИСрокУплаты
ИЗ
ПеречисленияНДФЛ КАК ПеречисленияНДФЛ
ЛЕВОЕ СОЕДИНЕНИЕ СрокУплатыУдержанногоНДФЛ КАК СрокУплаты
ПО ПеречисленияНДФЛ.Дата <= СрокУплаты.КрайнийСрокПеречисленияНалога
СГРУППИРОВАТЬ ПО
ПеречисленияНДФЛ.Дата,
ПеречисленияНДФЛ.СуммаДокумента,
ПеречисленияНДФЛ.Ссылка
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПеречисленоИСрокУплаты.Дата КАК ДатаДокумента,
ПеречисленоИСрокУплаты.СуммаДокумента КАК СуммаДокумента,
ПеречисленоИСрокУплаты.КрайнийСрокПеречисленияНалога КАК КрайнийСрокПеречисленияНалога
ИЗ
ПеречисленоИСрокУплаты КАК ПеречисленоИСрокУплаты
(35) spacecraft, в последнем запросе - мне не надо дату документа, мне нужно только 2 поля: КрайнийСрокПеречисленияНалога(это тоже дата) и СуммаДокумента.
Есть Таблица Т2 только с датами сроков оплаты
ДатаСрок
13/01/2016
16/01/2016
11/02/2016
29/02/2016
18/03/2016
Мне нужно соединить таблица так: к записям Т1 добавить поле ДатаСрок из Т2 так, чтобы ДатаСрок было ближайшим большим ДатыДокумента (для этого я соединяю по условию ДатаДокумента<=ДатаСрок.. и выбираю Минимум(ДатаСрок))- это работает. Получается такая таблица Т3:
ДатаДокумента СсылкаНаДокумент СуммаДокумента ДатаСрок
12/01/2016 1 1000 13/01/2016
13/01/2016 2 1000 13/01/2016
15/01/2016 3 2000 16/01/2016
10/02/2016 4 3000 11/02/2016
15/03/2016 5 3000 18/03/2016
И вот теперь мне нужно получить такую таблицу: итоги по ДатаСрок:
ДатаСрок СуммаДокументов
13/01/2016 2000
16/01/2016 2000
10/02/2016 3000
15/03/2016 3000
spacecraft - вы пишите про измерения - я вашего намека не понимаю... поясните, плз, - нужно что-то сделать, чтобы скд стал понимать ДатаСрок как измерения?
ВЫБРАТЬ
РасчетыНалогоплательщиковСБюджетомПоНДФЛ.ГоловнаяОрганизация КАК ГоловнаяОрганизация,
РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Период КАК Период,
РасчетыНалогоплательщиковСБюджетомПоНДФЛ.СрокПеречисления КАК СрокПеречисления,
СУММА(РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Сумма) КАК Сумма
ПОМЕСТИТЬ УдержанныйНДФЛ
ИЗ
РегистрНакопления.РасчетыНалогоплательщиковСБюджетомПоНДФЛ КАК РасчетыНалогоплательщиковСБюджетомПоНДФЛ
ГДЕ
РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Организация = &Организация
И РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Период >= &ДатаНачала
И РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Период <= &ДатаКонец
И РасчетыНалогоплательщиковСБюджетомПоНДФЛ.ВариантУдержания = &ВариантУдержания
СГРУППИРОВАТЬ ПО
РасчетыНалогоплательщиковСБюджетомПоНДФЛ.ГоловнаяОрганизация,
РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Период,
РасчетыНалогоплательщиковСБюджетомПоНДФЛ.СрокПеречисления
ИНДЕКСИРОВАТЬ ПО
ГоловнаяОрганизация,
Период
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
УдержанныйНДФЛ.ГоловнаяОрганизация КАК ГоловнаяОрганизация,
ВЫБОР
КОГДА УдержанныйНДФЛ.СрокПеречисления = ЗНАЧЕНИЕ(Перечисление.СрокиПеречисляемогоНалога.МежрасчетныеОтпускаИБольничные)
ТОГДА КОНЕЦПЕРИОДА(УдержанныйНДФЛ.Период, МЕСЯЦ)
ИНАЧЕ КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(УдержанныйНДФЛ.Период, ДЕНЬ, 1), ДЕНЬ)
КОНЕЦ КАК КрайнийСрокПеречисленияНалога,
СУММА(УдержанныйНДФЛ.Сумма) КАК Сумма
ПОМЕСТИТЬ СрокУплатыУдержанногоНДФЛ
ИЗ
УдержанныйНДФЛ КАК УдержанныйНДФЛ
СГРУППИРОВАТЬ ПО
УдержанныйНДФЛ.ГоловнаяОрганизация,
ВЫБОР
КОГДА УдержанныйНДФЛ.СрокПеречисления = ЗНАЧЕНИЕ(Перечисление.СрокиПеречисляемогоНалога.МежрасчетныеОтпускаИБольничные)
ТОГДА КОНЕЦПЕРИОДА(УдержанныйНДФЛ.Период, МЕСЯЦ)
ИНАЧЕ КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(УдержанныйНДФЛ.Период, ДЕНЬ, 1), ДЕНЬ)
КОНЕЦ
ИНДЕКСИРОВАТЬ ПО
ГоловнаяОрганизация,
КрайнийСрокПеречисленияНалога
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
КОНЕЦПЕРИОДА(СписаниеСРасчетногоСчета.Дата, ДЕНЬ) КАК Дата,
СписаниеСРасчетногоСчета.СуммаДокумента КАК СуммаДокумента,
СписаниеСРасчетногоСчета.Ссылка КАК Ссылка
ПОМЕСТИТЬ ПеречисленияНДФЛ
ИЗ
Документ.СписаниеСРасчетногоСчета КАК СписаниеСРасчетногоСчета
ГДЕ
СписаниеСРасчетногоСчета.Дата >= &ДатаНачала
И СписаниеСРасчетногоСчета.Дата <= &ДатаКонец
И СписаниеСРасчетногоСчета.Проведен
И СписаниеСРасчетногоСчета.Организация = &Организация
И СписаниеСРасчетногоСчета.ВидОперации = &ВидОперации
И СписаниеСРасчетногоСчета.Налог = &Налог
ИНДЕКСИРОВАТЬ ПО
Дата,
Ссылка
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Сумма(ПеречисленияНДФЛ.СуммаДокумента) КАК СуммаДокумента,
МИНИМУМ(СрокУплаты.КрайнийСрокПеречисленияНалога) КАК КрайнийСрокПеречисленияНалога,
ИЗ
ПеречисленияНДФЛ КАК ПеречисленияНДФЛ
ЛЕВОЕ СОЕДИНЕНИЕ СрокУплатыУдержанногоНДФЛ КАК СрокУплаты
ПО ПеречисленияНДФЛ.Дата <= СрокУплаты.КрайнийСрокПеречисленияНалога
СГРУППИРОВАТЬ ПО
МИНИМУМ(СрокУплаты.КрайнийСрокПеречисленияНалога)
Показать
За основу взял, что во временных таблицах данные получаются верные (код даже не смотрел там). Писал на коленке. Возможны ошибки.
получается, что СКД поле СуммаДокумента воспринимается как измерения, а мне надо, чтобы как измерение воспринималось поле КрайнийСрокПеречисления.
Как это сделать?
ВЫБРАТЬ
РасчетыНалогоплательщиковСБюджетомПоНДФЛ.ГоловнаяОрганизация КАК ГоловнаяОрганизация,
РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Период КАК Период,
РасчетыНалогоплательщиковСБюджетомПоНДФЛ.СрокПеречисления КАК СрокПеречисления,
СУММА(РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Сумма) КАК Сумма
ПОМЕСТИТЬ УдержанныйНДФЛ
ИЗ
РегистрНакопления.РасчетыНалогоплательщиковСБюджетомПоНДФЛ КАК РасчетыНалогоплательщиковСБюджетомПоНДФЛ
ГДЕ
РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Организация = &Организация
И РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Период >= &ДатаНачала
И РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Период <= &ДатаКонец
И РасчетыНалогоплательщиковСБюджетомПоНДФЛ.ВариантУдержания = &ВариантУдержания
СГРУППИРОВАТЬ ПО
РасчетыНалогоплательщиковСБюджетомПоНДФЛ.ГоловнаяОрганизация,
РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Период,
РасчетыНалогоплательщиковСБюджетомПоНДФЛ.СрокПеречисления
ИНДЕКСИРОВАТЬ ПО
ГоловнаяОрганизация,
Период
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
УдержанныйНДФЛ.ГоловнаяОрганизация КАК ГоловнаяОрганизация,
ВЫБОР
КОГДА УдержанныйНДФЛ.СрокПеречисления = ЗНАЧЕНИЕ(Перечисление.СрокиПеречисляемогоНалога.МежрасчетныеОтпускаИБольничные)
ТОГДА КОНЕЦПЕРИОДА(УдержанныйНДФЛ.Период, МЕСЯЦ)
ИНАЧЕ КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(УдержанныйНДФЛ.Период, ДЕНЬ, 1), ДЕНЬ)
КОНЕЦ КАК КрайнийСрокПеречисленияНалога,
СУММА(УдержанныйНДФЛ.Сумма) КАК Сумма
ПОМЕСТИТЬ СрокУплатыУдержанногоНДФЛ
ИЗ
УдержанныйНДФЛ КАК УдержанныйНДФЛ
СГРУППИРОВАТЬ ПО
УдержанныйНДФЛ.ГоловнаяОрганизация,
ВЫБОР
КОГДА УдержанныйНДФЛ.СрокПеречисления = ЗНАЧЕНИЕ(Перечисление.СрокиПеречисляемогоНалога.МежрасчетныеОтпускаИБольничные)
ТОГДА КОНЕЦПЕРИОДА(УдержанныйНДФЛ.Период, МЕСЯЦ)
ИНАЧЕ КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(УдержанныйНДФЛ.Период, ДЕНЬ, 1), ДЕНЬ)
КОНЕЦ
ИНДЕКСИРОВАТЬ ПО
ГоловнаяОрганизация,
КрайнийСрокПеречисленияНалога
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
КОНЕЦПЕРИОДА(СписаниеСРасчетногоСчета.Дата, ДЕНЬ) КАК Дата,
СписаниеСРасчетногоСчета.СуммаДокумента КАК СуммаДокумента,
СписаниеСРасчетногоСчета.Ссылка КАК Ссылка
ПОМЕСТИТЬ ПеречисленияНДФЛ
ИЗ
Документ.СписаниеСРасчетногоСчета КАК СписаниеСРасчетногоСчета
ГДЕ
СписаниеСРасчетногоСчета.Дата >= &ДатаНачала
И СписаниеСРасчетногоСчета.Дата <= &ДатаКонец
И СписаниеСРасчетногоСчета.Проведен
И СписаниеСРасчетногоСчета.Организация = &Организация
И СписаниеСРасчетногоСчета.ВидОперации = &ВидОперации
И СписаниеСРасчетногоСчета.Налог = &Налог
ИНДЕКСИРОВАТЬ ПО
Дата,
Ссылка
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПеречисленияНДФЛ.СуммаДокумента КАК СуммаДокумента,
МИНИМУМ(СрокУплаты.КрайнийСрокПеречисленияНалога) КАК КрайнийСрокПеречисленияНалога,
ИЗ
ПеречисленияНДФЛ КАК ПеречисленияНДФЛ
ЛЕВОЕ СОЕДИНЕНИЕ СрокУплатыУдержанногоНДФЛ КАК СрокУплаты
ПО ПеречисленияНДФЛ.Дата <= СрокУплаты.КрайнийСрокПеречисленияНалога
ПОМЕСТИТЬ ПеречисленоИСрокУплаты
СГРУППИРОВАТЬ ПО
ПеречисленияНДФЛ.СуммаДокумента
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Сумма(ПеречисленоИСрокУплаты.СуммаДокумента) КАК СуммаДокумента,
ПеречисленоИСрокУплаты.КрайнийСрокПеречисленияНалога КАК КрайнийСрокПеречисленияНалога
ИЗ
ПеречисленоИСрокУплаты КАК ПеречисленоИСрокУплаты
СГРУППИРОВАТЬ ПО
ПеречисленоИСрокУплаты.КрайнийСрокПеречисленияНалога
(43) user_2010, Тогда зачем сейчас в СКД выводить промежуточный результат?
Берите консоль запросов и пока там отлаживайте.
Вот для разминки, как получать итоги по группировки даты (во вложении).
(53) user_2010, вы бы определились? Или это готовый запрос и тогда в настройках указываем роли, или не мудрим и дальше продолжаете готовить запрос. А промежуточный результат настраивать в СКД нет совсем никакого смысла.
(55) spacecraft, весь полный запрос в консоли запросов работает как нужно. В СКД этот запрос не работает. Чтобы понять в чем проблема - начала упрощать запрос. Нашла где проблема.
Какая разница - где исправить проблему - в большом запросе или в маленьком?
С маленьким же проще разобраться...
(57) Xershi, уже...
пытаюсь освоить консоль СКД.... схему загрузила, параметры заполнила, результата - неправильный - получила - подскажите что дальше нужно делать? куда глядеть?
(46) Xershi, где поставить галку автозаполнение? В СКД - стоит галка автозаполнение.
запрос и так уже минимизирован - оставила только проблемную часть...
(49) user_2010, правила наименования объектов нужно понять. В этом проблема, СКД сгруппирует все в итоговый запрос, который на этапе проектирования создал криво. Это приходит только с опытом. И набитием шишек.
вроде бы понятно - что скд понимает неправильно... но как это обойти? может есть где-нибудь какая-нибудь теория? не все же методом научного потыкивания...
(67) spacecraft, да, спасибо! теперь выдает ожидаемый результат.... пока мельком посмотрела ваш запрос... вы изменили только последний запрос?
еще раз спасибо!
(68) user_2010, последнюю ВТ и результирующую выборку. В последней ВТ была группировка по сумме. Заменил на группировку по ссылке и суммирование поля сумма. СКД оптимизирует запрос и в итоге он может быть совсем не таким, как его написали. В данном случае определив группировку по сумме, СКД изменил запрос и сумму сделал измерением.
Я тоже добился интересного эффекта: в пользовательском режиме в настройках добавляю определённое поле - показывается вся таблица, как и выглядит в консоли запроса, а если снимаешь галочку, то отчет не только убирает одну колонку, но и 3/4 строк.
Такого же не может быть?
Был похожий случай, помог анализ выполнения СКД в консоли СКД
порядок был такой:
Грузим в консоль СКД, выполняем и смотрим какой на самом деле выполнился запрос
сохраняем его тестовый файл например
и исходный текст запроса тоже сохраняем в тестовый файл, после чего сравниваем их через "сравнить файлы"
с моем случаем проблема нашлась и заключалась в том что компоновщик удалял одно измерение, в результате при группировке получал не верное значение
решил помещение этой временной таблицы во вложенный запрос
(75) FirePyres, Вы знаете, помогло. Весь запрос отправил во вложенный - стало выводить всё. Но это же совершенно не здорово. Кстати: одно поле уже было во вложенном запросе, я его прописал на вкладке "Компоновка данных" - его отпустило. А вот второе поле было во внешнем - на него стало ругаться "поле замены не найдено". Напрямую не удалось победить.
Возникает другой вопрос: как это понимать, как это предвидеть, как это предотвращать?
Когда выполняю запрос - получаю одни данные (правильные).
Но если этот же запрос исполняется в СКД - то результаты получаются неверные.
На рисунке 01 - запрос верные результаты
в общем как это примерно работает:
Вообще фигурные скобки в СКД это необязательный параметр, НО есть одна фишка если допустим мы в запросе выбираем из регистра остатков или оборотов Ну например вы что то пишите и в запросе у вас есть выборка из оборотного регистра
ИЗ
РегистрНакопления.ТоварыОрганизаций.Обороты(,,) КАК ТоварыОрганизацийОбороты
Здесь скобки поставил сам обычно без них конструктор рисует...
Так вот даже в таком варианте СКД по умолчанию будет строить запрос вот так
И параметры начало период и конец у вас автоматом появятся в параметрах СКД
И вот если не ставить фигурные скобки на своих параметрах СКД любит их заменять на свои НачалоПериода и КонецПериода поэтому тут либо используем то что по умолчанию либо ставить скобки тогда СКД уж точно подставит нужные параметры...
Показать
(с) bmk74
Как отслеживать? я после этого случая все проверять - а что же передала мне компоновка? не изменился ли мой запрос до неузнаваемости. как-то так(
Грузим в консоль СКД, выполняем и смотрим какой на самом деле выполнился запрос
сохраняем его тестовый файл например
и исходный текст запроса тоже сохраняем в тестовый файл, после чего сравниваем их через "сравнить файлы"
Ничего не понял!
Как посмотреть "какой на самом деле выполнился запрос", и сохранить его в тестовый файл??
Нужно сохранить СКД в XML? (Там запрос такой же, 1в1!)
(87) Нашел, млять.
Стандартная консоль СКД 1с-я.
После нажатия на кнопку "Сформировать" на закладке "Макет для табличного документа XML" можно найти финальный вариант запроса, который формирует СКД!
Где-то можно это почитать? Мы же не решили проблему стратегически. А если тот запрос нужно кому-то показать?
- А почему у тебя запрос вложенный?
- А потому что я не могу договориться с СКД о выдаче получающейся таблички.
Страшная мысль: а не проверить все отчёты, которые я делал? Квалификация-то нулевая, как её подтянуть хотя бы к приличной?
Столкнулся нынче с этою же проблемой, обошёлся без вложения запросов. Долго чесал репу, матюкался и экспериментировал, но в конце концов переписал запрос правильно (как мне кажется) - и всё заработало. Вот мои соображения. Гуры могут плевать мне в спину и говорить обидные слова, но я исхожу из того, что главный критерий истины - практика, а мне на практике нижеизложенное помогло.
В общем, я так понял, запрос должен быть чётко логически структурированным. Нужно отделить поля-"ресурсы" от полей-"измерений". Ключевой момент этой истории - группировка. Нужно следить, чтобы "ресурсы" не попадали в список "Групповое поле" (раздел запроса "СГРУППИРОВАТЬ ПО"). Конструктор пихает туда все поля, которые не попали в список "Суммируемое поле".
У меня вырисовывался пакет из трёх запросов с двумя временными таблицами (ВТ). В первую временную таблицу (ВТ "Продажи") я тяну товар, дату продажи, сумму продажи и количество. Групповые поля - товар и дата, суммируемые - сумма и количество. Во втором запросе (ВТ "ПродажиСДатойЦП) по дате продажи получаю необходимый мне период периодического регистра, групповые поля - опять товар и дата, суммируемое - период. В третьем - вытягиваю ресурс из этого периодического регистра и свожу всё в кучу. Так вот, сначала я тащил сумму продаж и количество из первой ВТ во вторую, а оттуда - уже в результат запроса:
Первый (неправильный) вариант запроса
ВЫБРАТЬ
ОтчетОРозничныхПродажахТовары.Ссылка.Дата КАК ПродажиДата,
СУММА(ОтчетОРозничныхПродажахТовары.Количество) КАК ПродажиКоличество,
СУММА(ОтчетОРозничныхПродажахТовары.Сумма) КАК ПродажиСумма,
ОтчетОРозничныхПродажахТовары.Номенклатура.Ссылка КАК ПродажиТовар
ПОМЕСТИТЬ Продажи
ИЗ
Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары
ГДЕ
ОтчетОРозничныхПродажахТовары.Ссылка.Дата >= &ДатаНачала
И ОтчетОРозничныхПродажахТовары.Ссылка.Дата <= &ДатаКонца
И ОтчетОРозничныхПродажахТовары.Номенклатура.Родитель = &Группа
СГРУППИРОВАТЬ ПО
ОтчетОРозничныхПродажахТовары.Ссылка.Дата,
ОтчетОРозничныхПродажахТовары.Номенклатура.Ссылка
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
МАКСИМУМ(ЦеныНоменклатурыПоставщиков.Период) КАК Период,
Продажи.ПродажиКоличество КАК ПродажиКоличество,
Продажи.ПродажиСумма КАК ПродажиСумма,
Продажи.ПродажиДата,
Продажи.ПродажиТовар
ПОМЕСТИТЬ ПродажиСДатойЦП
ИЗ
Продажи КАК Продажи
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыПоставщиков КАК ЦеныНоменклатурыПоставщиков
ПО Продажи.ПродажиДата >= ЦеныНоменклатурыПоставщиков.Период
И Продажи.ПродажиТовар = ЦеныНоменклатурыПоставщиков.Номенклатура
СГРУППИРОВАТЬ ПО
Продажи.ПродажиДата,
Продажи.ПродажиКоличество,
Продажи.ПродажиСумма,
Продажи.ПродажиТовар
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
СУММА(ПродажиСДатойЦП.ПродажиКоличество) КАК ПродажиКоличество,
СУММА(ПродажиСДатойЦП.ПродажиСумма) КАК ПродажиСумма,
СУММА(ПродажиСДатойЦП.ПродажиКоличество * ЦеныНоменклатурыПоставщиков.Цена) КАК ЗакупкаСумма,
СУММА(ПродажиСДатойЦП.ПродажиСумма - ПродажиСДатойЦП.ПродажиКоличество * ЦеныНоменклатурыПоставщиков.Цена) КАК НаценкаСумма,
ПродажиСДатойЦП.ПродажиТовар
ИЗ
ПродажиСДатойЦП КАК ПродажиСДатойЦП
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыПоставщиков КАК ЦеныНоменклатурыПоставщиков
ПО ПродажиСДатойЦП.Период = ЦеныНоменклатурыПоставщиков.Период
И ПродажиСДатойЦП.ПродажиТовар = ЦеныНоменклатурыПоставщиков.Номенклатура
СГРУППИРОВАТЬ ПО
ПродажиСДатойЦП.ПродажиТовар
УПОРЯДОЧИТЬ ПО
ПродажиСДатойЦП.ПродажиТовар.Наименование
Показать
Как видите, во втором запросе поля Сумма и Количество попали в раздел ГРУППИРОВАТЬ ПО. В этом виде консоль запросов выдавала результат корректный, а СКД - нет. Покопавшись, я понял, что при формировании второй ВТ мне нужна группировка только по товару и дате, в агрегатных функциях - период, а количество и сумма мне в группировке (да и вообще - во втором запросе и второй ВТ) вообще не нужны. Я их тянул через вторую ВТ транзитом только для того, чтобы использовать в окончательном результате. А конструктор их пихал в групповые поля. Как только я убрал из второго запроса те поля, которые в нём не были необходимы (количество и сумма), всё заработало и в консоли, и в СКД. Третий запрос после этого, правда, чуть разросся - теперь к нему пришлось добавить первую ВТ, из которой я беру сумму и количество.
Второй (рабочий) вариант запроса
ВЫБРАТЬ
ОтчетОРозничныхПродажахТовары.Ссылка.Дата КАК ПродажиДата,
СУММА(ОтчетОРозничныхПродажахТовары.Количество) КАК ПродажиКоличество,
СУММА(ОтчетОРозничныхПродажахТовары.Сумма) КАК ПродажиСумма,
ОтчетОРозничныхПродажахТовары.Номенклатура.Ссылка КАК ПродажиТовар
ПОМЕСТИТЬ Продажи
ИЗ
Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары
ГДЕ
ОтчетОРозничныхПродажахТовары.Ссылка.Дата >= &ДатаНачала
И ОтчетОРозничныхПродажахТовары.Ссылка.Дата <= &ДатаКонца
И ОтчетОРозничныхПродажахТовары.Номенклатура.Родитель = &Группа
СГРУППИРОВАТЬ ПО
ОтчетОРозничныхПродажахТовары.Ссылка.Дата,
ОтчетОРозничныхПродажахТовары.Номенклатура.Ссылка
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
МАКСИМУМ(ЦеныНоменклатурыПоставщиков.Период) КАК Период,
Продажи.ПродажиДата,
Продажи.ПродажиТовар
ПОМЕСТИТЬ ПродажиСДатойЦП
ИЗ
Продажи КАК Продажи
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыПоставщиков КАК ЦеныНоменклатурыПоставщиков
ПО Продажи.ПродажиДата >= ЦеныНоменклатурыПоставщиков.Период
И Продажи.ПродажиТовар = ЦеныНоменклатурыПоставщиков.Номенклатура
СГРУППИРОВАТЬ ПО
Продажи.ПродажиДата,
Продажи.ПродажиТовар
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПродажиСДатойЦП.ПродажиТовар,
СУММА(Продажи.ПродажиКоличество) КАК ПродажиКоличество,
СУММА(Продажи.ПродажиСумма) КАК ПродажиСумма,
СУММА(Продажи.ПродажиКоличество * ЦеныНоменклатурыПоставщиков.Цена) КАК ЗакупкаСумма
ИЗ
Продажи КАК Продажи
ЛЕВОЕ СОЕДИНЕНИЕ ПродажиСДатойЦП КАК ПродажиСДатойЦП
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыПоставщиков КАК ЦеныНоменклатурыПоставщиков
ПО ПродажиСДатойЦП.Период = ЦеныНоменклатурыПоставщиков.Период
И ПродажиСДатойЦП.ПродажиТовар = ЦеныНоменклатурыПоставщиков.Номенклатура
ПО Продажи.ПродажиДата = ПродажиСДатойЦП.ПродажиДата
И Продажи.ПродажиТовар = ПродажиСДатойЦП.ПродажиТовар
СГРУППИРОВАТЬ ПО
ПродажиСДатойЦП.ПродажиТовар
УПОРЯДОЧИТЬ ПО
ПродажиСДатойЦП.ПродажиТовар.Наименование
Показать
Т.е. пока я тянул количество и сумму через весь запрос, через все ВТ, где они попадали в групповые поля, - СКД не хотел воспринимать их как нормальный ресурс, поскольку по ним делалась группировка. Как только этот винегрет из групповых и суммируемых полей прекратился - СКД выдал корректный результат. И никаких скобок и вложенных запросов.
Да, СКД иногда выдает неправильный результат, и вот пример:
ВЫБРАТЬ
"Группировка" КАК Группировка,
"ГАЗ" КАК Модель,
100 КАК Пробег,
70 КАК Расход
ПОМЕСТИТЬ ПервыйШаг
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Группировка",
"ГАЗ",
200,
140
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Группировка",
"ВАЗ",
10,
8
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПервыйШаг.Группировка,
ПервыйШаг.Модель,
МАКСИМУМ(ПервыйШаг.Пробег) КАК Пробег,
СУММА(ПервыйШаг.Расход) КАК Расход
ПОМЕСТИТЬ ВторойШаг
ИЗ
ПервыйШаг КАК ПервыйШаг
СГРУППИРОВАТЬ ПО
ПервыйШаг.Группировка,
ПервыйШаг.Модель
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВторойШаг.Группировка,
СУММА(ВторойШаг.Пробег) КАК Пробег,
СУММА(ВторойШаг.Расход) КАК Расход
ИЗ
ВторойШаг КАК ВторойШаг
СГРУППИРОВАТЬ ПО
ВторойШаг.Группировка
Показать
Результат запроса, выполненного из СКД:
Группировка Пробег Расход
Группировка 200 218
Правильный результат, полученный из консоли:
Группировка Пробег Расход
Группировка 210 218
Возможно, это следствие оптимизации запросов СКД
Примечание: если поле пробег во временной таблице сделать полем группировки, результат становится правильным
ВЫБРАТЬ
ПервыйШаг.Группировка,
ПервыйШаг.Модель,
ПервыйШаг.Пробег КАК Пробег,
СУММА(ПервыйШаг.Расход) КАК Расход
ПОМЕСТИТЬ ВторойШаг
ИЗ
ПервыйШаг КАК ПервыйШаг
СГРУППИРОВАТЬ ПО
ПервыйШаг.Группировка,
ПервыйШаг.Модель,
ПервыйШаг.Пробег
Спасибо большое за совет про консоль СКД, у меня для формирования поля запроса в параметры СКД передавался список значений, формирующийся программно в зависимости от выбора пользователя. Пока не проверила в консоли СКД не могла понять почему берется только первое значение. Оказалось во вкладке Параметры надо было галочку поставить "Доступен список значений", тогда в передаваемом списке значений стали обрабатываться все значения. Может кому пригодится.
а еще если указываете в параметрах виртуальной таблицы параметр (например &НачалоГода), отличный от типового (&НачалоПериода или &КонецПериода), но сам типовой тоже используется, указывайте его в фигурных скобках ) - {&НачалоГода}
Столкнулся с подобной проблемой. Взял запрос из СКД, доработал в консоли запросов - всё Ок. Доработал запрос в схеме СКД, но отчет упорно показывал те же самые данные. Проверил на другой базе - результат аналогичный. В настройках отчета ничего особенного, но погасил все группировки для вывода только детальных записей - не помогло. Начал кромсать запрос (а он не маленький), чтобы понять причину потери данных. Подозревал группировки. В итоге докромсал до того, что уже нечего было кромсать, но отчет продолжать выводить одни и те же данные. Начал подозревать кэш. В итоге - просто скорректировал имя отчета и всё заработало. Встречался пару раз с такой темой, но не сразу понял, в чем дело. Пару часов пришлось разбираться.