Имя: Пароль:
1C
1С v8
Виртуальная таблица периодического регистра сведений
0 Ненавижу Неопределен
 
26.09.12
10:37
Хочу ВТ периодического регистра сведений - периоды действия
Как считаете надо?
1 Азат
 
26.09.12
10:37
нет канеш
2 DrShad
 
26.09.12
10:40
(0) что есть желание это похвально, но не нужно это - от лукавого все
3 Kashemir
 
26.09.12
10:43
Слишком редко встречаются задачи для таких вт.
4 Ненавижу Неопределен
 
26.09.12
10:44
5 narayanan
 
26.09.12
10:44
не надо
6 DrShad
 
26.09.12
10:45
(4) в чем суть твоей ветки?
7 Ненавижу Неопределен
 
26.09.12
10:46
(6) в том, что постоянно натыкаются либо на грабли, либо городят сами - а можно ыбло воткнуть в платформу
8 DrShad
 
26.09.12
10:48
(7) так ты пиши Нуралиеву, тут чего
9 Kashemir
 
26.09.12
10:48
(7) Т.е. та же простенькая лабуда но на ВТ, плюс лишние условия на сравнения МЕЖДУ - будут полезны ? Это кому вообще нужно - начинающим программистам  ?
10 Ненавижу Неопределен
 
26.09.12
10:49
(8) хочу писать сюда, это форум кастельно 1С
(9) будут полезны, даже тебе
11 DrShad
 
26.09.12
10:50
(10) ну удачного вам нытья здесь
12 Ненавижу Неопределен
 
26.09.12
10:51
(11) тогда уходи
13 Kashemir
 
26.09.12
11:00
(10) Вот тебе пример того как универсально собрать запрос того вида что ты хочешь. А для себя полезности не вижу - с "закрытыми глазами" могу решить подобные проблемы.



// возвращает запрос с периодами действий произвольного периодического регистра с полным набором полей
Функция Спец_ПолучитьИсточникРегистраИнтервалами(ИмяРегистра)

   Часть1 = "ВЫБРАТЬ
               |    Таб.Период КАК Период,
               |    МИНИМУМ(ЕСТЬNULL(КонцыИнтервалов.Период, ДАТАВРЕМЯ(2111, 11, 11))) КАК _КонецПериодаДействия";
   Часть2 = "";
   Часть3 = "";
   Часть4 = "СГРУППИРОВАТЬ ПО
               |    Таб.Период";
   МетаданныеРегистра = Метаданные.РегистрыСведений[ИмяРегистра];
   Для каждого Изм из МетаданныеРегистра.Измерения Цикл
       Часть1 = Часть1 +"," + Символы.ПС + Символы.Таб +  "Таб." + Изм.Имя+ " КАК " + Изм.Имя;
       Часть2 = Часть2 + Символы.ПС + "            И Таб." + Изм.Имя + " = КонцыИнтервалов." + Изм.Имя;
       Часть3 = Часть3 + ?(ПустаяСтрока(Часть3), "", "," ) + Символы.ПС + "        Таб." + Изм.Имя + ?(ДанныйТипРазворачивается(Изм.Тип), ".*","") + " КАК " + Изм.Имя;
       Часть4 = Часть4 + "," + Символы.ПС + "    Таб." + Изм.Имя;
       
   КонецЦикла;
   
   Для каждого Рес из МетаданныеРегистра.Ресурсы Цикл
       Часть1 = Часть1 +"," + Символы.ПС + Символы.Таб +  "Таб." + Рес.Имя+ " КАК " + Рес.Имя;
       Часть3 = Часть3 + ?(ПустаяСтрока(Часть3), "", "," ) + Символы.ПС + "        Таб." + Рес.Имя + ?(ДанныйТипРазворачивается(Рес.Тип), ".*","") + " КАК " + Рес.Имя;
       Часть4 = Часть4 + "," + Символы.ПС + "    Таб." + Рес.Имя;
   КонецЦикла;
   
   Для каждого Рекв из МетаданныеРегистра.Реквизиты Цикл
       Часть1 = Часть1 +"," + Символы.ПС + Символы.Таб +  "Таб." + Рекв.Имя+ " КАК " + Рекв.Имя;
       Часть3 = Часть3 + ?(ПустаяСтрока(Часть3), "", "," ) + Символы.ПС + "        Таб." + Рекв.Имя + ?(ДанныйТипРазворачивается(Рекв.Тип), ".*","") + " КАК " + Рекв.Имя;
       Часть4 = Часть4 + "," + Символы.ПС + "    Таб." + Рекв.Имя;
   КонецЦикла;
   
   
   Часть3 = ?(ПустаяСтрока(Часть3) , "", "    {ГДЕ" + Символы.ПС + Часть3 + "}" + Символы.ПС);
   
   Возврат              Часть1 +
                       " ИЗ " + Символы.ПС +
                       "    РегистрСведений." + ИмяРегистра + " КАК Таб" + Символы.ПС +
                       "    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений." + ИмяРегистра + " КАК КонцыИнтервалов"  + Символы.ПС +
                       "        ПО Таб.Период < КонцыИнтервалов.Период" +
                       Часть2 +
                       Часть3 +
                       Часть4;

КонецФункции


// Функция, позволяющая определить возможность разыменования для данного описания типов
Функция ДанныйТипРазворачивается(ОписаниеТипа, НеРазворачиватьПланыВидовХарактеристик = Ложь)
   Для каждого Тип из ОписаниеТипа.Типы() Цикл
       ТипМетаданных = Метаданные.НайтиПоТипу(Тип);
       Если ТипМетаданных <> Неопределено Тогда
           Если
               (Метаданные.ПланыВидовХарактеристик.Содержит(ТипМетаданных)
               И Не НеРазворачиватьПланыВидовХарактеристик)
               Или
               Метаданные.Справочники.Содержит(ТипМетаданных) или
               Метаданные.Документы.Содержит(ТипМетаданных) или
               Метаданные.ПланыСчетов.Содержит(ТипМетаданных) или
               Метаданные.ПланыВидовРасчета.Содержит(ТипМетаданных) или
               Метаданные.ПланыВидовРасчета.Содержит(ТипМетаданных.Родитель()) тогда
               
               Возврат Истина;
           КонецЕсли;
       КонецЕсли;
   КонецЦикла;
   Возврат Ложь;
КонецФункции
14 Ненавижу Неопределен
 
26.09.12
11:01
(13) молодец, это нечитабельное гауно
15 Kashemir
 
26.09.12
11:02
(14) Ясно, досвиданья
16 Ненавижу Неопределен
 
26.09.12
11:02
(15) аналогично
17 Gesperid
 
26.09.12
11:08
(13) если такие задачи редко встречаются, зачем функцию навелосипедил?
18 ПиН
 
26.09.12
11:13
а чо, хорошая функция...  если работает...
19 Kashemir
 
26.09.12
11:15
(17) На старой работе написал для сверхпродвинутых пользователей скд отчет, где они самостоятельно интерактивно выбирали и произвольно компоновали любые источники данных, в том числе и эмуляции периодов действия. В результате программистам осталось не более 1% отчета из заказываемых пользователей, тех что чистой СКД не слепишь.

(18) Работает.
20 Kashemir
 
26.09.12
11:21
+(19) Так выглядели источники со стороны пользователей http://s60.radikal.ru/i167/1209/7c/d3198d547e85.png
21 Ненавижу Неопределен
 
26.09.12
11:22
(19) а если нет изменения регистра в заданном интервале?
22 Kashemir
 
26.09.12
11:24
(21) Суть вопроса неясна. Выполни Спец_ПолучитьИсточникРегистраИнтервалами(ИмяРегистра) - получи запрос и в консоли его выполни - может вопросы сами отпадут.
23 Ненавижу Неопределен
 
26.09.12
11:25
(22) ща
24 Ненавижу Неопределен
 
26.09.12
11:31
кстати, это могла быть физическая даже таблица
25 Ненавижу Неопределен
 
26.09.12
11:32
+(230 там нет границ периодов
26 Gesperid
 
26.09.12
11:34
(20) залей плиз на другой хостинг, например, http://imageshost.ru/
27 Kashemir
 
26.09.12
11:35
(25) Есть действие записи С и ПО. Если это не границы периода, то тогда имеет место неопределенность терминологии.
28 Ненавижу Неопределен
 
26.09.12
11:36
валюта менялась

01.01
01.02
01.05
01.12

я хочу интервал периодов с 15.03 по 20.11
29 Kashemir
 
26.09.12
11:36
30 Kashemir
 
26.09.12
11:38
(28) Получишь интервалы
01.01 - 01.02
01.02 - 01.05
01.05 - 01.12
01.12 - 11.111 (принял за максдату)
31 Ненавижу Неопределен
 
26.09.12
11:39
(30) а надо

15.03-01.05
01.05-20.11

или хотя бы

01.02-01.05
01.05-01.12
32 Gesperid
 
26.09.12
11:41
(19) а РС с ресурсом ПериодЗавершения как обрабатывал? Имхо, такие МЕГАотчеты не знаю досконально конфу изнутри черевато использовать
33 Kashemir
 
26.09.12
11:41
(31) Тогда на интервалы надо еще сверху условия твоего периода наложить.
34 Ненавижу Неопределен
 
26.09.12
11:43
(33) вот именно, но ты красавчик, извиняюсь за (14)
35 Kashemir
 
26.09.12
11:43
(32) Аналогов таких отчетов я тоже не видел и вряд ли увижу. Имхо оно такое и не надо - для этого пользователи нужны крайне специфические. Научить им пользоваться - это все равно что запросы научить писать.
36 Kashemir
 
26.09.12
11:45
(34) Без обид :)
37 Ненавижу Неопределен
 
26.09.12
11:46
(35) почему крайне редки - продажи ведутся в УЕ, а нужно в рублях по курсу продажи, как пример
38 Kashemir
 
26.09.12
11:48
(37) Да это мы про отчет в (29)
39 Gesperid
 
26.09.12
11:48
(35) так регистры сведений с ресурсом ПериодЗавершения ты обрабатывал особо или нет?
40 Kashemir
 
26.09.12
11:49
(39) Мне непонятен какой смысл ты вкладываешь в имя ресурса.
41 Kashemir
 
26.09.12
11:49
(39) Если требуется что-то отличное от какой-то общей модели, конечно надо пилить отдельно.
42 Gesperid
 
26.09.12
11:53
43 Ненавижу Неопределен
 
26.09.12
11:54
(42) нет доступа, что там?
44 Gesperid
 
26.09.12
11:56
В статье рассказывается о внутреннем устройстве механизма регистрации "кадровых" (в широком смысле этого слова) изменений, характеризующихся двумя датами – датой изменения состояния и датой возврата в исходное состояние, а также объясняется, почему было принято именно такое решение.

Под кадровыми (в широком смысле этого слова) изменениями, о которых пойдет далее речь, будем понимать:
"настоящие" кадровые перемещения сотрудников (т. е. изменение должности и/или подразделения, других сведений о рабочем месте) на определенный срок;
отпуска, болезни, командировки и прочие целодневные (т. е. продолжающиеся один день и более) неявки сотрудников;
назначение каких-либо начислений, например, доплат и надбавок на определенный срок.
45 Ненавижу Неопределен
 
26.09.12
11:57
(44) ну и что?
46 Gesperid
 
26.09.12
11:59
(45) да то, что периоды действия в этом случае иначе определяются
47 Kashemir
 
26.09.12
12:03
(46) Я так понимаю, в этом случае вообще достаточно просто физической таблицы. Период = НачалоИнтервала, ресурс ПериодЗавершения  = КонецИнтервала. Ничего додумывать не надо.
48 Gesperid
 
26.09.12
12:18
(47) не, не так
В случае пересечения периодов физической таблицы - ПериодЗавершения, оказавшийся после Периода другой записи, не учитывается.

Например, у записей:
01.01, 11.03, Состояние1, Состояние2
01.02, 01.03, Состояние3, Состояние4

периоды действия следующие:
01.01-31.01 Состояние1
01.02-29.02 Состояние3
01.03-бессрочно  Состояние4
49 Ненавижу Неопределен
 
26.09.12
12:20
(48) это совсем другая история, вытеснения
50 Gesperid
 
26.09.12
12:21
(49) На уровне отчета "для пользователя" как раз это и необходимо
51 Kashemir
 
26.09.12
12:21
(48) Эмуляция вытеснения это другая задача
52 Kashemir
 
26.09.12
12:22
(50) Пока работал - нужды такое делать не было. Но и сложностей такое сделать - тоже не вижу.
53 Gesperid
 
26.09.12
12:29
(52) ну это не только вытеснение, но в сделать можно - да
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.