Имя: Пароль:
1C
1С v8
Как свернуть регистраторы по типу значения в 8.1
,
0 siggoron
 
05.11.11
14:01
Вот какая ситуация: Необходимо узнать какие документы используются в реальной (действующей) базе, затрагивающие регистр накопления определённого вида (ПартииТоваровНаСкладах).
Для реализации данной задачи запускаю консоль запросов и выполняю запрос следующего вида:

ВЫБРАТЬ
   ПартииТоваровНаСкладахОбороты.Регистратор
ИЗ
   РегистрНакопления.ПартииТоваровНаСкладах.Обороты(, , Авто, ) КАК ПартииТоваровНаСкладахОбороты

Данный запрос выводит перечень всех документов оказавших влияние на регистр накопления (ПартииТоваровНаСкладах). Всё бы хорошо, но только как преобразовать запрос таким образом, чтобы отобразился перечень только типов данных документов.
P/s база на 8.1 и использовать ТипЗначения никак, так как данная штука только в 8.2 появилась :(
1 zag2art
 
05.11.11
14:03
только через ССЫЛКА и ВЫБОР КОГДА....
2 GROOVY
 
05.11.11
14:05
Может быстрее через метеданные у регистра глянуть регистраторы?
3 siggoron
 
05.11.11
14:08
(2) нет дело не в этом
необходимо узнать какие из данных регистраторов используют в текущей базе (как правило это не все)
4 Alexandr Puzakov
 
05.11.11
14:10
Когда Регистратор ССЫЛКА Документ.ТакойТоДокумент Тогда "ТакойТоТип" Когда Регистратор ССЫЛКА Документ.ЕщеКакойТоДокумент Тогда "ЕщеКакойТоТип" Конец
5 siggoron
 
05.11.11
14:12
(4) и если регистраторов за 30, то и более 30 КОГДА ТОГДА, а проще никак?
6 shuhard
 
05.11.11
14:16
(0) есть и красивое решение,
свернуть по реквизиту регистратора "ВидОперации"

ибо в ПТиУ, ОПзС, комплектации, Оприходования и возврата они разные
7 Alexandr Puzakov
 
05.11.11
14:16
(5) а в чем сложность-то? Накидать такое условие в конструкторе запросов - две минуты делов.

Если регистров много, то можно через метаданные регистра в цикле собирать эту конструкцию.
8 ДенисЧ
 
05.11.11
14:17
(6) Телепат? Ты уверен, что у него упп?
9 Alexandr Puzakov
 
05.11.11
14:18
*Если проверяемых регистров много
10 siggoron
 
05.11.11
14:21
(8) у меня УТ
11 shuhard
 
05.11.11
14:24
(10) тю,
тогда (6) однозначно
12 Alexandr Puzakov
 
05.11.11
14:46
Насчет (7) спи@дел, не доступны регистраторы через метаданные...
13 siggoron
 
05.11.11
14:48
всем спасибо вот маё решение:


   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
                  |    ПартииТоваровНаСкладахОбороты.Регистратор
                  |ИЗ
                  |    РегистрНакопления.ПартииТоваровНаСкладах.Обороты(, , Авто, ) КАК ПартииТоваровНаСкладахОбороты";
   ТЗ = Запрос.Выполнить().Выгрузить();
   ТЗ.Колонки.Добавить("Тип");
   
   Для Каждого СтрокаТЗ Из ТЗ Цикл
       
       СтрокаТЗ.Тип = ТипЗнч(СтрокаТЗ.Регистратор);
       
   КонецЦикла;
   
   ТЗ.Свернуть("Тип");
   
   ТЗ.ВыбратьСтроку();
14 shuhard
 
05.11.11
14:52
(13) отвратительное решение
15 siggoron
 
05.11.11
14:55
(14) И в чем тут отврат? Предложи своё!
16 etc
 
05.11.11
16:25

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


Кому не нравится запрос в цикле может переделать на составление одного запроса "ВЫБОР .. КОГДА .."