Запрос на языке 1С, Получить список всех видов документов и их количество в базе
По теме из базы знаний
- Сравнение 1С8 и Navision
- Выгрузка-загрузка любых данных из 1С (и измененных) в XML между похожими конфигурациями (ФАЙЛ, HTTP, COM) ЛЮБЫХ баз 1С 8.1-8.3 с обработкой и поиском данных по произвольным полям поиска
- Консоль запросов для управляемых форм 8.3
- Как мы подружили "1С:Аналитику" и "Финансист". Практический опыт
- Применение ChatGPT в 1С и не только
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) pvase, вот пример Функции возвращающей текст запроса
Функцию редактировал в блокноте, так-что может не сработать без правки в конфигураторе.
Функция СформироватьТекстЗапроса(пТолькоПроведенные)
лТекстЗапроса = "";
лПервыйЗапрос = Истина;
Для Каждого лТипДокумента Из Метаданные.Документы Цикл
Если Не лПервыйЗапрос Тогда
лТекстЗапроса = лТекстЗапроса + "
|
| ОБЪЕДИНИТЬ ВСЕ
|";
КонецЕсли;
лТекстЗапроса = лТекстЗапроса + "
|ВЫБРАТЬ
| " +лТипДокумента+ " КАК ТипДокумента,
| Количество(РАЗЛИЧНЫЕ Документ.Ссылка) КАК Количество
|ИЗ
| Документ." + лТипДокумента + " КАК Документ
|ГДЕ
| Документ.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И Документ.Проведен
|СГРУППИРОВАТЬ ПО
| ТипДокумента
|
|";
Если Не пТолькоПроведенные Тогда
лТекстЗапроса = СтрЗаменить(лТекстЗапроса, " И "Документ.Проведен", "");
КонецЕсли;
лПервыйЗапрос = Ложь;
КонецЦикла;
лТекстЗапроса = лТекстЗапроса + "
|
|УПОРЯДОЧИТЬ ПО
| ТипДокумента
|";
Возврат лТекстЗапроса;
КонецФункции // СформироватьТекстЗапроса()
ПоказатьФункцию редактировал в блокноте, так-что может не сработать без правки в конфигураторе.
Вот из типовой Бух КЗ нашел вам:
// формируем текст запроса по документам
Если НЕ ДатаНачала = ДатаВыполнения Тогда
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Организация", Организация);
Для Каждого ДокументМетаданные ИЗ Метаданные.Документы Цикл
Запрос.Текст = Запрос.Текст + ?(Запрос.Текст = "", "", "
|ОБЪЕДИНИТЬ ВСЕ
|") + "ВЫБРАТЬ """ + ДокументМетаданные.Имя + """ КАК ИмяДокумента, Представление КАК Представление, Ссылка КАК Ссылка, Дата КАК Дата ИЗ Документ." + ДокументМетаданные.Имя + "
|ГДЕ Проведен И Дата >= &ДатаНач";
Запрос.Текст = Запрос.Текст + " И Дата <= &ДатаКон";
Если Организация <> Неопределено И ДокументМетаданные.Реквизиты.Найти("Организация") <> Неопределено Тогда
Если ТипЗнч(Организация) = Тип("Массив") Тогда
Запрос.Текст = Запрос.Текст + " И Организация В (&Организация)";
Иначе
Запрос.Текст = Запрос.Текст + " И Организация = &Организация";
КонецЕсли;
КонецЕсли;
КонецЦикла;
Запрос.Текст = Запрос.Текст + "
|УПОРЯДОЧИТЬ ПО Дата, Ссылка";
Запрос.УстановитьПараметр("ДатаНач", ДатаНачала);
Запрос.УстановитьПараметр("ДатаКон", КонецДня(ДатаВыполнения));
ТаблицаДокументов = Запрос.Выполнить().Выгрузить();
Показать
Спасибо всем, вот так сделал на 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
Показать
И вот так на языке 1С:
МетаданныеОбъектов = Метаданные["Документы"];
Для каждого Метаданное Из МетаданныеОбъектов Цикл
ТекстЗАпроса = "";
ЕстьФлажок = Ложь;
ТекстЗАпроса = ТекстЗАпроса + Строка("ВЫБРАТЬ " + СокрЛП(Метаданное.Имя) + ".Ссылка КАК Док ИЗ Документ."+ СокрЛП(Метаданное.Имя) + " как " + СокрЛП(Метаданное.Имя));
Запрос = Новый Запрос(ТекстЗАпроса);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
КК = 0;
Пока Выборка.Следующий() Цикл
КК = КК + 1;
КонецЦикла;
Сообщить(""+СокрЛП(Метаданное.Имя)+" ; "+СокрЛП(КК));
КонецЦикла;
ПоказатьЗапрос = Новый Запрос;
ТекстЗапроса =
"ВЫБРАТЬ
| КОЛИЧЕСТВО(*) КАК КоличествоСсылок,
| ""АвансовыйОтчет"" КАК ИмяДокумента,
| ""_ПредставлениеДокумента"" КАК ПредставлениеДокумента
|ИЗ
| Документ.АвансовыйОтчет КАК Док";
Разделитель = "";
Для Каждого ТекДокумент Из Метаданные.Документы Цикл
ЗапросДокумента = СтрЗаменить(ТекстЗапроса, "АвансовыйОтчет", ТекДокумент.Имя);
ПредставлениеДокумента = СтрЗаменить(ТекДокумент.Представление(), """", "'");
ЗапросДокумента = СтрЗаменить(ЗапросДокумента, "_ПредставлениеДокумента", ПредставлениеДокумента);
Запрос.Текст = Запрос.Текст + Разделитель + ЗапросДокумента;
Разделитель = " ОБЪЕДИНИТЬ ВСЕ ";
КонецЦикла;
Запрос.Текст = Запрос.Текст + "
|
|УПОРЯДОЧИТЬ ПО
| КоличествоСсылок УБЫВ";
Результат = Запрос.Выполнить().Выбрать();
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот