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

СКД отчет с заданной периодичностью

Автор neek666, 01 июн 2021, 11:05

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

neek666

Добрый день!

Подскажите где я туплю.
Есть сайт: https://its.1c.ru/db/metod8dev#content:1587:hdoc
Делаю все в точности. Заданной периодичности нет от слова совсем. Попадают только те дни, по которым есть движение в регистре.

В качестве примера копию схемы СКД приложил.

neek666

Уже все перерыл в интернете. И через ТаблицуПериодов пробовал. И без нее пробовал. Результат один и тот же (выводятся только те дни, по которым были движения в регистре).

Причем, что странно на мой взгляд. Если брать ТаблицуПериодов (ту самую, которая формируется штатными средствами в общем модуле) то она то как раз ЗАПОЛНЯЕТСЯ верно (всеми днями указанного периода). НО, как только я передаю ее в СКД, она сразу же становится пустой! Как так?!

LexaK

все отлично работает заполняет на каждый день
отбор с 01,01 по 20,01

ИП Иванов
01.01.2021 0:00:00
-195,90 -195,90
02.01.2021 0:00:00
03.01.2021 0:00:00
04.01.2021 0:00:00
05.01.2021 0:00:00
06.01.2021 0:00:00
07.01.2021 0:00:00
08.01.2021 0:00:00
09.01.2021 0:00:00
10.01.2021 0:00:00
11.01.2021 0:00:00
12.01.2021 0:00:00
13.01.2021 0:00:00
14.01.2021 0:00:00
15.01.2021 0:00:00
16.01.2021 0:00:00
17.01.2021 0:00:00
18.01.2021 0:00:00
19.01.2021 0:00:00
20.01.2021 0:00:00
-195,90 -195,90
ООО «Дружба»
01.01.2021 0:00:00
-543,90 -543,90
02.01.2021 0:00:00
03.01.2021 0:00:00
04.01.2021 0:00:00
05.01.2021 0:00:00
06.01.2021 0:00:00
07.01.2021 0:00:00
08.01.2021 0:00:00
09.01.2021 0:00:00
10.01.2021 0:00:00
11.01.2021 0:00:00
12.01.2021 0:00:00
13.01.2021 0:00:00
14.01.2021 0:00:00
-9 980,70 -543,90 9 436,80
15.01.2021 0:00:00
16.01.2021 0:00:00
-543,90 -9 980,70 9 436,80
17.01.2021 0:00:00
18.01.2021 0:00:00
19.01.2021 0:00:00
20.01.2021 0:00:00
-543,90 -543,90
(невыписывать) ООО Ромашка
01.01.2021 0:00:00
2 015,28 2 015,28
42 077,40 42 077,40
02.01.2021 0:00:00
03.01.2021 0:00:00
04.01.2021 0:00:00
05.01.2021 0:00:00
06.01.2021 0:00:00
07.01.2021 0:00:00
08.01.2021 0:00:00
09.01.2021 0:00:00
10.01.2021 0:00:00
11.01.2021 0:00:00
12.01.2021 0:00:00
ответ Понравился? (в смысле пригодился?)

neek666

Это мой вариант СКД???????? У меня такого не делает. Показывает только там, где есть движения.

LexaK

ЦитироватьЭто мой вариант СКД?????
да, ваша ХМЛ
загрузил в консольСКД
попробуйте тоже через консоль СКД сделать
возможно у вас в отчете что-то в доп настройках сбивается
еще как вариант сохраните ваш отчет как новый и на нем попробуйте,
иногда старые настройки, перебивают новый функционал, пресловутый кэш
ответ Понравился? (в смысле пригодился?)

neek666

Не знаю не знаю... Короче, как я вышел из ситуации, вдруг кому понадобится (знаю, вариант далеко не из оптимальных, но мучиться по пол дня в поисках "а где это у меня косяк когда все по инструкции" тоже не охото):
1. Первое что надо сделать, это получить таблицу "ТаблицаПериодов". Благо она формируется штатными средствами в общем модуле
2. В цикле прокручивать эту таблицу и получать на каждую дату остатки (один стандартный запрос будет выполнятся столько раз, сколько периодов). В результате на каждую дату таблицы периодов получаем таблицу остатков (или оборотов).
3. Получили остатки на дату, добавили их в сводную таблицу. Далее цикл переходит на следующую дату и все заново.

В итоге получается вполне себе адекватная таблица с адекватными датами (и никаких тебе пустых полей в те дни когда не было движений по регистру (как у некоторых) и прочей как у меня ерунды, у которой не понять откуда растут ноги.

Кто то скажет что это далеко от понятия Оптимальность. Ну да, полностью согласен. Но вариант когда мой отчет вполне себе корректно формируется на другой машине, а на моей нет, - меня вообще не устраивает. Кстате, народ, а как избавиться от пустых полей в моем первом варианте СКД? Т.е. мне надо снять остатки на КАЖДЫЙ день выбранного пользователем периода. Если в определенном дне не было никаких движений, то соответственно поле будет пустым. Согласен. А как сделать так, что бы там был остаток актуальный на тот самый день?

antoneus

Мда. А делается это соединением таблицы периодов с таблицей остатков и оборотов, примерно так:

ВЫБРАТЬ
    ТаблицаПериодов.Период,
    МАКСИМУМ(ОстаткиОбороты.Период) ПериодОстатки
ПОМЕСТИТЬ ТаблицаПериодовОстатки
ИЗ
    ТаблицаПериодов КАК ТаблицаПериодов
ЛЕВОЕ СОЕДИНЕНИЕ
    ОстаткиОбороты
    ПО ТаблицаПериодов.Период >= ОстаткиОбороты.Период
СГРУППИРОВАТЬ ПО
    ТаблицаПериодов.Период
;
/////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТаблицаПериодовОстатки.Период,
    ОстаткиОбороты.Остаток
ИЗ
    ТаблицаПериодовОстатки КАК ТаблицаПериодовОстатки
ЛЕВОЕ СОЕДИНЕНИЕ
    ОстаткиОбороты
    ПО ТаблицаПериодовОстатки.ПериодОстатки = ОстаткиОбороты.Период

neek666

Цитата: antoneus от 01 июн 2021, 16:07
Мда. А делается это соединением таблицы периодов с таблицей остатков и оборотов, примерно так:

ВЫБРАТЬ
    ТаблицаПериодов.Период,
    МАКСИМУМ(ОстаткиОбороты.Период) ПериодОстатки
ПОМЕСТИТЬ ТаблицаПериодовОстатки
ИЗ
    ТаблицаПериодов КАК ТаблицаПериодов
ЛЕВОЕ СОЕДИНЕНИЕ
    ОстаткиОбороты
    ПО ТаблицаПериодов.Период >= ОстаткиОбороты.Период
СГРУППИРОВАТЬ ПО
    ТаблицаПериодов.Период
;
/////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТаблицаПериодовОстатки.Период,
    ОстаткиОбороты.Остаток
ИЗ
    ТаблицаПериодовОстатки КАК ТаблицаПериодовОстатки
ЛЕВОЕ СОЕДИНЕНИЕ
    ОстаткиОбороты
    ПО ТаблицаПериодовОстатки.ПериодОстатки = ОстаткиОбороты.Период


Да, по идеи должно работать.  Надо проверить) Проверю и сразу отпишусь.

neek666

Попробовал. Работает. Но есть одно НО. Каким путем пошел я. Таблицу остатков сформировать в запросе это проблем нет. Таблицу периодов я взял из:
МониторингЦелевыхПоказателей.ПериодыСДатойНаКонецПериода(НастройкаПериодОтчета.Значение.ДатаНачала,
      ДатаОкончания,
      Перечисления.Периодичность.День);
Это экспортная функция в общих модулях. Возвращает таблицу значений (Таблицу, в которой хранятся периоды в указанном интервале и с указанным типом (День, Неделя, Месяц и т.д.)). Проблема в том, что это таблица значений имеет НЕТИПИЗИРОВАННЫЕ поля. А значит и в запрос ее передать не получится. Выход я нашел довольно простой: создать новую таблицу значений с типизированным полем Период, и туда построчно передал все значения.

А в целом это уже достаточно рабочий вариант. Возьму себе на заметку. Спасибо за помощь.

Теги:

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

Рейтинг@Mail.ru Rambler's Top100

Поиск