Имя: Пароль:
1C
 
Хитрый расчет ресурса в СКД
,
0 YAGolova
 
19.04.16
11:24
Всем привет. Может кто сталкивался - в наборе СКД получаю таблицу остатков на каждый день по товарам, т.е.
1.01 - 5
2.01 - 4
3.01 - 4
4.01 - 1
5.01 - 2
Так вот как сделать так, чтобы при выборе произвольной группировки по периоду (допустим вместо дня, месяц или неделя) пользователь видел остаток на начало этого периода?
1 YAGolova
 
19.04.16
11:27
Сразу скажу: пробовал ВычислитьВыражение("Сумма(Остаток)",,, "Первая", "Первая", "День"), но ничего не выводит(, причем если группировку по дню добавляешь, показывает, убираешь - нет
2 AceVi
 
19.04.16
11:57
(1) Чет ты мудришь. тебе нужны остатки с разбивкой по периодам? на конец каждого периода или на начало? в любом случае надо заранее подготовить таблицу с остатками на самый маленький период(например день), потом сформировать таблицу периодов например
01.01-07.01
08.01-14.01
и т.д.
Потом
Поместить ДниРаспределеныПоПериодам
ТабПериоды
ЛевоеСоединение ТабОстаткиПоДням
ПО ТабОстаткиПоДням.День <=ТабПериоды.КонецПериода
и ТабОстаткиПоДням.День >=ТабПериоды.НачалоПериода

Потом допустим надо получить остаток на конец
Выбрать Максимум(День) КАК ДеньОстатка
Поместить
максимальныйДеньВПериоде
ИЗ ДниРаспределеныПоПериодам

Потом

максимальныйДеньВПериоде
ЛевоеСоединение ТабОстаткиПоДням
По максимальныйДеньВПериоде.ДеньОстатка = ТабОстаткиПоДням.День
3 YAGolova
 
19.04.16
12:06
(2) Так как я сформирую таблицу периодов, если ее пользователь настраивает, или ты предлагаешь получать значения структуры компоновщика, по нему строить таблицу периодов, подсовывать во внешний набор данных скд и т.д.? Я все же надеюсь на возможности как то это получить в СКД (я бы уже получил, если бы можно было писать собственную функцию в общем модуле, только мне отчет внешний надо и лесть в конфу низзя)
4 AceVi
 
19.04.16
12:11
(3) ВЫБРАТЬ
    ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Период,
    ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток
ИЗ
    РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(, , Неделя, , ) КАК ВзаиморасчетыСКонтрагентамиОстаткиИОбороты

"Неделя" или любая периодичность что тебе нужна. т.е. сразу получай данные с нужной периодичность.
5 YAGolova
 
19.04.16
12:15
(4) я же уже объяснил что не знаю какой периодичности мне нужны данные....
+ не забывай о тонкостях этой "волшебной" таблицы - если у тебя нет движений в этом периоде, то и остатков не будет
6 AceVi
 
19.04.16
12:20
(5) РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(, , &периодичность, , )

периодичность - Это параметр СКД. Вид строка - доступен список - сам заполняешь список типа "День", "Неделя" и т.д.
пользователь будет выбирать из списка значение.
Не будет остатков - а тебе нужен даже пустой период? тогда без заранее сформированной таблицы периодов ты никак не сделаешь.
7 AceVi
 
19.04.16
12:25
(3) Что значит пользователь настраивает? в каком виде? редактирует таблицу с где ставит конкретные даты в каждой строке? или просто "Неделя" и период отчета?

И кстати нет никаких проблем сформировать таблицу периодов и как внешние данные поместить ее в скд, стандартный функционал это поддерживает. типа такого

ТиповыеОтчеты.СформироватьТиповойОтчет(ЭтотОбъект, Результат, ДанныеРасшифровки, ВыводВФормуОтчета,Новый Структура("ВнешниеДанные",ТабКонтр))
8 YAGolova
 
19.04.16
12:29
(7) спасибо) я знаю как пользоваться внешними наборами
Допустим пользователь хочет сгруппировать колонки по годам, внутри по месяцам и далее по дням - что мне получать?
9 YAGolova
 
19.04.16
12:30
а еще лучше сделал произвольное пользовательское поле в котором периоды настроил по своему усмотрению?
10 тарам пам пам
 
19.04.16
13:07
а почему нельзя воспользоваться возможностями самой СКД и не настроить роли у нужных полей? Она адекватно отреагирует на (почти) любые настройки пользователя.
11 YAGolova
 
19.04.16
14:55
(10) В итоге так и сделал, выкрутился с помощью вычислитьвыражениесгруппировкоймассив и настроил по полям (неделя, месяц, год). НО так к сожалению для произвольного периода работать не будет
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший