Запрос на языке 1С, Получить список всех видов документов и их количество в базе

1. pvase 404 06.07.16 17:34 Сейчас в теме
Подскажите пожалуйста запрос на языке 1С, который выведете виды документов и их количество в базе. Спасибо.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Johney20 06.07.16 17:35 Сейчас в теме
(1) pvase, Вам текст запроса просто нужен?
4. pvase 404 06.07.16 17:37 Сейчас в теме
(2) Johney20,
Мне нужно получить список всех документов с их количеством в базе. Можно и текст запроса, я его в query_console вставлю.
6. DJDUH 17 06.07.16 17:47 Сейчас в теме
(1) pvase, Такого эталонного запроса нет!
Можно через метаданные и в цикле запрос по виду дока с количеством!
Иначе запрос объединить все и выбрать все свои документы которые хранятся в конфигурации с колвом.
Иначе пакет запросов по на каждый док с колвом
8. h00k 51 06.07.16 18:14 Сейчас в теме
(1) pvase, вот пример Функции возвращающей текст запроса
Функция СформироватьТекстЗапроса(пТолькоПроведенные)

	лТекстЗапроса	= "";

	лПервыйЗапрос	= Истина;
	Для Каждого лТипДокумента Из Метаданные.Документы Цикл

		Если Не лПервыйЗапрос Тогда 
			лТекстЗапроса	= лТекстЗапроса + "
			|	
			|	ОБЪЕДИНИТЬ ВСЕ
			|";
		КонецЕсли;

		лТекстЗапроса = лТекстЗапроса + "
			|ВЫБРАТЬ
			|	" +лТипДокумента+ " 			КАК ТипДокумента,
			|	Количество(РАЗЛИЧНЫЕ Документ.Ссылка) 	КАК Количество

	 		|ИЗ
			|	Документ." + лТипДокумента + " КАК Документ

			|ГДЕ
			|	Документ.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
			|	И Документ.Проведен

			|СГРУППИРОВАТЬ ПО
			|	ТипДокумента
			|
			|";

		Если Не пТолькоПроведенные Тогда

			лТекстЗапроса = СтрЗаменить(лТекстЗапроса, "	И "Документ.Проведен", "");
		КонецЕсли; 

		лПервыйЗапрос = Ложь;
	КонецЦикла;

	лТекстЗапроса = лТекстЗапроса + "
		|
		|УПОРЯДОЧИТЬ ПО
		|	ТипДокумента
		|";

	Возврат лТекстЗапроса;
КонецФункции // СформироватьТекстЗапроса()
Показать

Функцию редактировал в блокноте, так-что может не сработать без правки в конфигураторе.
3. pvase 404 06.07.16 17:36 Сейчас в теме
Также интересует такой же запрос на языке MS SQL (база на MS SQL 2014).
9. sssss_aaaaa_2011 06.07.16 20:08 Сейчас в теме
5. pvase 404 06.07.16 17:45 Сейчас в теме
Список видов документов из Метаданных + Количество таких документов в базе.
7. makfromkz 35 06.07.16 18:12 Сейчас в теме
Вот из типовой Бух КЗ нашел вам:
// формируем текст запроса по документам
	Если НЕ ДатаНачала = ДатаВыполнения Тогда
		
		Запрос = Новый Запрос;
		Запрос.УстановитьПараметр("Организация", Организация);
		
		Для Каждого ДокументМетаданные ИЗ Метаданные.Документы Цикл
			
			Запрос.Текст = Запрос.Текст + ?(Запрос.Текст = "", "", "
			|ОБЪЕДИНИТЬ ВСЕ
			|") + "ВЫБРАТЬ """ + ДокументМетаданные.Имя + """ КАК ИмяДокумента, Представление КАК Представление, Ссылка КАК Ссылка, Дата КАК Дата ИЗ Документ." + ДокументМетаданные.Имя + "
			|ГДЕ Проведен И Дата >= &ДатаНач";
			
			Запрос.Текст = Запрос.Текст + " И Дата <= &ДатаКон";
			
			Если Организация <> Неопределено И ДокументМетаданные.Реквизиты.Найти("Организация") <> Неопределено Тогда
				Если ТипЗнч(Организация) = Тип("Массив") Тогда
					Запрос.Текст = Запрос.Текст + " И Организация В (&Организация)";
				Иначе
					Запрос.Текст = Запрос.Текст + " И Организация = &Организация";
				КонецЕсли;
			КонецЕсли;
			
		КонецЦикла;
		
		Запрос.Текст = Запрос.Текст + "
		|УПОРЯДОЧИТЬ ПО Дата, Ссылка";
		
		Запрос.УстановитьПараметр("ДатаНач", ДатаНачала);
		Запрос.УстановитьПараметр("ДатаКон", КонецДня(ДатаВыполнения));
		
		ТаблицаДокументов = Запрос.Выполнить().Выгрузить();
Показать
keller; pavlo; igee12; alex-l19041; +4 Ответить
10. pvase 404 07.07.16 09:52 Сейчас в теме
Спасибо всем, вот так сделал на SQL:
SEL ECT object_name(id) NAME
	,rows
FR OM sysindexes
WHERE indid IN (
		0
		,1
		,255
		)
	AND (Left(object_name(id), 10) = '_Document1'
	OR Left(object_name(id), 10) = '_Document2'
	OR Left(object_name(id), 10) = '_Document3'
	OR Left(object_name(id), 10) = '_Document4'
	OR Left(object_name(id), 10) = '_Document5'
	OR Left(object_name(id), 10) = '_Document6'
	OR Left(object_name(id), 10) = '_Document7'
	OR Left(object_name(id), 10) = '_Document8'
	OR Left(object_name(id), 10) = '_Document9'
	)
	AND NOT (object_name(id) LIKE '%_VT%')
ORDER BY rows DESC
Показать
12. sssss_aaaaa_2011 07.07.16 10:26 Сейчас в теме
(10) pvase, а учли тот факт, что использованный вами метод не гарантирует точности?
11. pvase 404 07.07.16 09:53 Сейчас в теме
И вот так на языке 1С:
МетаданныеОбъектов = Метаданные["Документы"];
	
	Для каждого Метаданное Из МетаданныеОбъектов Цикл
		ТекстЗАпроса = "";
		ЕстьФлажок = Ложь; 
		
		ТекстЗАпроса = ТекстЗАпроса + Строка("ВЫБРАТЬ " + СокрЛП(Метаданное.Имя) + ".Ссылка КАК Док ИЗ Документ."+ СокрЛП(Метаданное.Имя) + " как " + СокрЛП(Метаданное.Имя)); 
		
		Запрос = Новый Запрос(ТекстЗАпроса);
		Результат = Запрос.Выполнить(); 
		Выборка = Результат.Выбрать(); 
		КК = 0;
		Пока Выборка.Следующий() Цикл
			КК = КК + 1;
		КонецЦикла;
		Сообщить(""+СокрЛП(Метаданное.Имя)+" ; "+СокрЛП(КК));
	КонецЦикла; 

Показать
shaykhelov; user1569330; +2 Ответить
13. alex-l19041 8 07.07.16 10:34 Сейчас в теме
(11) pvase, запрос в цикле - плохо. Надо использовать " ОБЪЕДИНИТЬ"
14. ovasiliev 6 03.07.19 16:40 Сейчас в теме
А ещё лучше делать это через выборку.
Если документов очень много, запрос будет работать дольше и памяти сожрёт.
15. OlegDudov 23.07.21 16:34 Сейчас в теме
Запрос = Новый Запрос;
	ТекстЗапроса =
		"ВЫБРАТЬ
		|	КОЛИЧЕСТВО(*) КАК КоличествоСсылок,
		|	""АвансовыйОтчет"" КАК ИмяДокумента,
		|	""_ПредставлениеДокумента"" КАК ПредставлениеДокумента
		|ИЗ
		|	Документ.АвансовыйОтчет КАК Док";
	
	
	Разделитель = "";
	
	Для Каждого ТекДокумент Из Метаданные.Документы Цикл
		
		ЗапросДокумента = СтрЗаменить(ТекстЗапроса, "АвансовыйОтчет", ТекДокумент.Имя);
		ПредставлениеДокумента = СтрЗаменить(ТекДокумент.Представление(), """", "'");
		ЗапросДокумента = СтрЗаменить(ЗапросДокумента, "_ПредставлениеДокумента", ПредставлениеДокумента);
		
		Запрос.Текст = Запрос.Текст + Разделитель + ЗапросДокумента;
		Разделитель = " ОБЪЕДИНИТЬ ВСЕ ";
	КонецЦикла;
	
	Запрос.Текст = Запрос.Текст + "
		|
		|УПОРЯДОЧИТЬ ПО
		|	КоличествоСсылок УБЫВ";
	
	Результат = Запрос.Выполнить().Выбрать();
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот