Имя: Пароль:
1C
1С v8
v8: Реестр существующих доков [так делать не надо]
Ø (Волшебник 30.05.2013 16:40)
,
0 Терминатор1С
 
30.05.13
15:19
ДатаКон=ТекущаяДата();    //реквизиты на форме
   ДатаНач=НачалоМесяца(ДатаКон);
   
   ТЗ="";
   Для Каждого Мет Из Метаданные.Документы Цикл
       ДокВыборка = Документы[Мет.Имя].Выбрать();
       Если ДокВыборка.Следующий() Тогда
           Если ТЗ<>"" Тогда
               ТЗ=ТЗ+" ОБЪЕДИНИТЬ ВСЕ "+Символы.ПС;
           КонецЕСли;    
               
           ТЗ=ТЗ+" ВЫБРАТЬ """+Мет.Имя+""" КАК ДокументИмя, """+Мет.Синоним+""" КАК ДокументСиноним, "+1+" КАК КоличВсего, "+0+" КАК КоличВПериоде ИЗ Документ."+Мет.Имя;
           ТЗ=ТЗ+" ОБЪЕДИНИТЬ ВСЕ "+Символы.ПС;
           ТЗ=ТЗ+" ВЫБРАТЬ """+Мет.Имя+""" КАК ДокументИмя, """+Мет.Синоним+""" КАК ДокументСиноним, "+0+" КАК КоличВсего, "+1+" КАК КоличВПериоде ИЗ Документ."+Мет.Имя;
           Если (ДатаНач>'00010101')ИЛИ(ДатаКон>'00010101') Тогда
               ТЗ=ТЗ+" ГДЕ ";
               Если (ДатаНач>'00010101') Тогда
                   ТЗ=ТЗ+" Документ."+Мет.Имя+".Дата >=&ДатаНач ";
               КонецЕСли;    
               Если (ДатаНач>'00010101')И(ДатаКон>'00010101') Тогда
                   ТЗ=ТЗ+" И ";
               КонецЕсли;    
               Если (ДатаКон>'00010101') Тогда
                   ТЗ=ТЗ+" Документ."+Мет.Имя+".Дата <=&ДатаКон ";
               КонецЕСли;
           КонецЕсли;    
       КонецЕсли;    
   КонецЦикла;
   //Сообщить(ТЗ);
   Запрос=Новый Запрос(ТЗ);
   ПараметрыЗапроса=Запрос.НайтиПараметры();
   Для Каждого Параметр Из ПараметрыЗапроса Цикл
       //Сообщить(Параметр.Имя);
       Если Параметр.Имя="ДатаНач" Тогда
           Запрос.УстановитьПараметр("ДатаНач",НачалоДня(ДатаНач));
       КонецЕсли;    
       Если Параметр.Имя="ДатаКон" Тогда
           Запрос.УстановитьПараметр("ДатаКон",КонецДня(ДатаКон));
       КонецЕсли;    
   КонецЦикла;    
   
   тбВидыДокументов=Новый ТаблицаЗначений;
   тбВидыДокументов=Запрос.Выполнить().Выгрузить();
   Если тбВидыДокументов.Количество()>0 Тогда
       тбВидыДокументов.Свернуть("ДокументИмя,ДокументСиноним","КоличВсего,КоличВПериоде");
       тбВидыДокументов.ВыбратьСтроку();
   КонецЕсли;
1 MaxisUssr
 
30.05.13
15:20
(0)
Похвастался?
2 Терминатор1С
 
30.05.13
15:30
Как бы сделать что бы запрос возвращал итоговые записи без детальных
3 Волшебник
 
30.05.13
15:33
Пипец... Зачем запросом выбирать все документы из базы?
4 Волшебник
 
30.05.13
15:34
Почему бы в запросе не сделать так?
ВЫБРАТЬ Количество(*)

ведь нужно только количество
5 zladenuw
 
30.05.13
15:36
(0) а зачем еще и выборка по документу ? смысл ее ?
6 Лефмихалыч
 
30.05.13
15:37
а если база весит, например, 600ТБ, сколько лет будет этот реестр из базы высираться?
7 RomanYS
 
30.05.13
15:41
(0) делается (можно конструктором) текст запроса для одного документа (например "АвансовыйОтчет"), а потом
Запрос.Текст = Запрос.Текст + ?(ЗначениеЗаполнено(Запрос.Текст)," ОБЪЕДИНИТЬ ВСЕ ","") + СтрЗаменить(ТекстШаблона, "АвансовыйОтчет", Мет.Имя);

и да все условия уже в шаблон, никаких предварительных выборок и проверок дат
8 Defender aka LINN
 
30.05.13
15:41
+(6) И что он вообще будет символизировать?
9 palpetrovich
 
30.05.13
15:43
ник соответсвует ;)
10 RomanYS
 
30.05.13
15:49
(0) не обратил сначала внимания на установку параметров - это шедевр!
11 Терминатор1С
 
30.05.13
15:58
Исправил на Количество(*)

   ДатаКон=ТекущаяДата();    //реквизиты на форме
   ДатаНач=НачалоМесяца(ДатаКон);
   
   ТЗ="";
   Для Каждого Мет Из Метаданные.Документы Цикл
       ДокВыборка = Документы[Мет.Имя].Выбрать();
       Если ДокВыборка.Следующий() Тогда
           Если ТЗ<>"" Тогда
               ТЗ=ТЗ+" ОБЪЕДИНИТЬ ВСЕ "+Символы.ПС;
           КонецЕСли;    
               
           ТЗ=ТЗ+" ВЫБРАТЬ """+Мет.Имя+""" КАК ДокументИмя, """+Мет.Синоним+""" КАК ДокументСиноним, Количество(*) КАК КоличВсего, "+0+" КАК КоличВПериоде ИЗ Документ."+Мет.Имя;
           ТЗ=ТЗ+" ОБЪЕДИНИТЬ ВСЕ "+Символы.ПС;
           ТЗ=ТЗ+" ВЫБРАТЬ """+Мет.Имя+""" КАК ДокументИмя, """+Мет.Синоним+""" КАК ДокументСиноним, "+0+" КАК КоличВсего, Количество(*) КАК КоличВПериоде ИЗ Документ."+Мет.Имя;
           Если (ДатаНач>'00010101')ИЛИ(ДатаКон>'00010101') Тогда
               ТЗ=ТЗ+" ГДЕ ";
               Если (ДатаНач>'00010101') Тогда
                   ТЗ=ТЗ+" Документ."+Мет.Имя+".Дата >=&ДатаНач ";
               КонецЕСли;    
               Если (ДатаНач>'00010101')И(ДатаКон>'00010101') Тогда
                   ТЗ=ТЗ+" И ";
               КонецЕсли;    
               Если (ДатаКон>'00010101') Тогда
                   ТЗ=ТЗ+" Документ."+Мет.Имя+".Дата <=&ДатаКон ";
               КонецЕСли;
           КонецЕсли;    
       КонецЕсли;    
   КонецЦикла;
   //Сообщить(ТЗ);
   Запрос=Новый Запрос(ТЗ);
   ПараметрыЗапроса=Запрос.НайтиПараметры();
   Для Каждого Параметр Из ПараметрыЗапроса Цикл
       //Сообщить(Параметр.Имя);
       Если Параметр.Имя="ДатаНач" Тогда
           Запрос.УстановитьПараметр("ДатаНач",НачалоДня(ДатаНач));
       КонецЕсли;    
       Если Параметр.Имя="ДатаКон" Тогда
           Запрос.УстановитьПараметр("ДатаКон",КонецДня(ДатаКон));
       КонецЕсли;    
   КонецЦикла;    
   
   тбВидыДокументов=Новый ТаблицаЗначений;
   тбВидыДокументов=Запрос.Выполнить().Выгрузить();
   Если тбВидыДокументов.Количество()>0 Тогда
       тбВидыДокументов.Свернуть("ДокументИмя,ДокументСиноним","КоличВсего,КоличВПериоде");
       тбВидыДокументов.ВыбратьСтроку();
   КонецЕсли;
12 Терминатор1С
 
30.05.13
16:00
(7) а если даты на форме будут не заполнены?
13 Прыгун
 
30.05.13
16:02
Убить автора на лету лопатой.
14 Терминатор1С
 
30.05.13
16:02
(10) где именно "шедевр"?
15 Defender aka LINN
 
30.05.13
16:05
(11) Прямо полегчало, да... Теперь у нас не кусок гуано, а кусок гуано со стразиком.
16 Кир Пластелинин
 
30.05.13
16:06
тему хорошо переименовали)
17 Волшебник
 
30.05.13
16:07
(11) Добавь ещё ИТОГИ
18 Терминатор1С
 
30.05.13
16:08
прям забросали какашками, нет что б подсказать конкретно
19 Терминатор1С
 
30.05.13
16:09
только САМ и помогает, остальные крутые
20 salvator
 
30.05.13
16:09
(0) О, то что надо, давно искал! Спасибо!!11
21 Волшебник
 
30.05.13
16:11
(18) как-то так:

Итоги = Новый Соответствие;
Для Каждого Мет Из Метаданные.Документы Цикл
 Запрос.Текст = "Выбрать количество(*) как колво ИЗ Документ." + Мет.имя;
 выб = Запрос.Выполнить().Выбрать();
 выб.следующий();
 итоги[мет.Имя] = выб.колво;
КонецЦикла;
22 Defender aka LINN
 
30.05.13
16:12
(18) Что подсказать-то? Как получить число 42 в разрезе всей базы?
23 Терминатор1С
 
30.05.13
16:16
(22) допустим открываем реестр документов в торговле и хотим выбрать какие то виды документов, мы видим в том числе и те которые никогда не использовались, а мой реестр показывает только те которые использовались
24 Defender aka LINN
 
30.05.13
16:18
(23) Переводчик! В зале есть переводчик?
Какая практическая польза от этой твоей цифры?
25 RomanYS
 
30.05.13
16:19
Шаблон =
   "ВЫБРАТЬ
   |    КОЛИЧЕСТВО(*) КАК КоличВсего,
   |    ""_Синоним_"" КАК Синоним,
   |    ""АвансовыйОтчет"" КАК ДокументИмя,
   |    СУММА(ВЫБОР
   |            КОГДА Док.Дата МЕЖДУ &Дата1 И &Дата2
   |                ТОГДА 1
   |            ИНАЧЕ 0
   |        КОНЕЦ) КАК КоличВПериоде
   |ИЗ
   |    Документ.АвансовыйОтчет КАК Док
   |
   |ИМЕЮЩИЕ
   |    КОЛИЧЕСТВО(*) <> 0";
   
   
   ТЗ = "";
   Для каждого МДДок Из Метаданные.Документы Цикл
       
       Подзапрос = СтрЗаменить(Шаблон, "АвансовыйОтчет", МДДок.Имя);
       Подзапрос = СтрЗаменить(Подзапрос, "_Синоним_", МДДок.Синоним);
       ТЗ = ТЗ + ?(ЗначениеЗаполнено(ТЗ), Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС,"") + Подзапрос;
       
   КонецЦикла;
   
   Запрос = Новый Запрос(ТЗ);
   Запрос.УстановитьПараметр("Дата1",Дата1);
   Запрос.УстановитьПараметр("Дата2",Дата2);
   тбВидыДокументов=Запрос.Выполнить().Выгрузить();
   тбВидыДокументов.ВыбратьСтроку();
26 Терминатор1С
 
30.05.13
16:22
(24) по этому реестру можно быстро оценить направление деятельности в незнакомой базе особенно если там используются редкие документы.
27 MaxisUssr
 
30.05.13
16:26
(26)
Может быть один документ, в котором 10000000 строк в ТЧ, и 1000 документов с одним реквизитом
28 shuhard
 
30.05.13
16:27
(26) форум дружно поржал
29 mikeA
 
30.05.13
16:29
(26) открой для себя базопузомер )))
30 Терминатор1С
 
30.05.13
16:30
(26)предполагается что Дата1 и Дата2 реквизиты на форме и могут быть не установлены
31 Лефмихалыч
 
30.05.13
16:31
(30) для этих целей культурные люди СКД или на худой конец построитель используют
32 Терминатор1С
 
30.05.13
16:32
(29) владельцу джипа не нужен велик?
33 Терминатор1С
 
30.05.13
16:33
(31) Реестр документов в торговле сделан на СКД?
34 Лефмихалыч
 
30.05.13
16:34
(24) ну как?.. открываешь, а там - татататам-татам - одна и та же херня, которую ты уже видет в 100499 других утэшках. Видишь и понимаешь - все по плану.
35 Лефмихалыч
 
30.05.13
16:34
(33) ты ни хрена не понял...
36 Defender aka LINN
 
30.05.13
16:36
(26) А, точно. В ЗУПе я увижу 100500 документов "Начисление заработной платы", глубокомысленно обдумаю эту информацию и сделаю неопровержимый вывод - в этой базе начисляют людям зарплату!
37 Терминатор1С
 
30.05.13
16:39
(36) Господа модераторы удалите тему плиз   Defender'у aka LINN эта обработка не нужна
38 Терминатор1С
 
30.05.13
16:40
пошёл я дальше делать то что не надо
39 Лефмихалыч
 
30.05.13
16:41
(37),(38) на, держи, ты потерял: ,, - !