Имя: Пароль:
1C
1С v8
выбор документов, не делающих движения в определенном регистре
,
0 zhabakot
 
09.10.15
09:23
Доброго дня суток! В отчете необходимо подсчитать количество документов, которые не делают движений в регистре Хозрасчетный. Как это сделать?  Делаю обходом метаданных, он считает все документы, а как убрать ненужные мне?
1 aka AMIGO
 
09.10.15
09:27
(0) плохоньки, но вариант: Выбрать движения всех документов по регистрам в некую табличку, и проанализировать её
2 aka AMIGO
 
09.10.15
09:28
* плохоньки = плохонький
3 aleks_default
 
09.10.15
09:31
(1) Че? Полбазы выбрать в табличку? Ну-ну...
4 aka AMIGO
 
09.10.15
09:32
(3) выбирать не сами движения, а факт их наличия.
5 ДенисЧ
 
09.10.15
09:32
которые не длают в принципе, или которые могут, но не сделали?
6 aka AMIGO
 
09.10.15
09:34
(5)  которые могут, но не сделали? это, пожалуй, маловероятно..
7 zhabakot
 
09.10.15
09:36
(5) , которые не делают вообще, документы, которые не являются регистраторами для этого регистра
8 aleks_default
 
09.10.15
09:37
(7)WTF?
9 SiAl-chel
 
09.10.15
09:38
(0) Ничего сложного, работы максимум на час.
1. Через перебор метаданных выбрать те виды документов, которые могут делать движения по регистру Хозрастченый.
2. С помощью конкатенации строк создать запрос с соединениями виртуальной таблицы оборотов регистра и таблиц документов, в которых проверять наличие регистратора в виртуальной таблице регистра Хозрасчетный.
10 ДенисЧ
 
09.10.15
09:38
(7) Тогда по метаданным.
11 aleks_default
 
09.10.15
09:40
Но зачем такую хрень делать?
12 aka AMIGO
 
09.10.15
09:41
Я писал для 7.7, вот результат работы, сегодня:
http://pics.rsh.ru/img/22_9uhdpmnv.jpg
13 zhabakot
 
09.10.15
09:52
(9) "2. С помощью конкатенации строк создать запрос с соединениями виртуальной таблицы оборотов регистра и таблиц документов, в которых проверять наличие регистратора в виртуальной таблице регистра Хозрасчетный." пожалуйста,  можно поподробнее?
14 aka AMIGO
 
09.10.15
09:54
Часть кода (7.7!)
                Для у=1 По Метаданные.Регистр() Цикл
                    ТР = Метаданные.Регистр(у).Идентификатор;
                    Рег = СоздатьОбъект("Регистр."+ТР);
                    
                    Если Рег.ВыбратьДвиженияДокумента(ТекДок)=1 Тогда
                        
                        Конк = ""+ТекДок.Вид()+ТР;
                        СтрТЗ=0;
                        ТЗ.НайтиЗначение(Конк,СтрТЗ,"Конк");
                        
                        Если СтрТЗ=0 Тогда
                            ТЗ.НоваяСтрока();
                            ТЗ.ВидДока = ТекДок.Вид();
                            Если Рег.Приход = 1 Тогда
                                ТЗ.Знак = "(+)";
                            ИначеЕсли Рег.Расход = 1 Тогда
                                ТЗ.Знак = "(--)";
                            Иначе
                                ТЗ.Знак="";
                            КонецЕсли;
                            ТЗ.СчРег = "Регистр";
                            ТЗ.Дт = ТР;
                            ТЗ.Кт = "";
                            ТЗ.Конк = Конк; //""+ТекДок.Вид()+ТР;
                            СтрТЗ = ТЗ.НомерСтроки;
                        КонецЕсли;
                        
                        
                    КонецЕсли;          
                    
                КонецЦикла;
15 aka AMIGO
 
09.10.15
09:55
+14 вот такой Г-код (с бооольшой буквы Г :) )
16 SiAl-chel
 
12.10.15
12:30
(13) "Более подробно", чем в (9), - это написать весь код за тебя.
17 ДенисЧ
 
12.10.15
12:31
(14) а что, ТЗ прочитать никак было?
18 Ринат-СПб
 
12.10.15
14:21
Примерно так (накидал за 10 минут за кружкой чая)

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

            
            
                  
    Текст = Текст + ") КАК ВложенныйЗапрос
            |ГДЕ
            |    НЕ ВложенныйЗапрос.Ссылка В
            |                (ВЫБРАТЬ
            |                    Хозрасчетный.Регистратор КАК Ссылка
            |                ИЗ
            |                    РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный)";    
            
            
    Запрос.Текст = Текст;
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.