Запрос к таблице значений

08.06.06

Разработка - Работа с интерфейсом

Данная разработка дает возможность обращаться к таблице значений при помощи обычного запроса.
В функцию передается таблица значений, список колонок для свертки и суммирования, а также строка с доп. условиями в формате языка запросов 1С.
Функция возвращает объект типа "Запрос".
Позволяет легко группировать ТЗ по любым полям, а также делать выборку из ТЗ по любым условиям.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Бесплатно
-
.zip 5,53Kb
1857
1857 Скачать бесплатно
Синтаксис:

ТЗ_в_Запрос(ИсхТЗ, Изм, Рес, Условие="").

ИсхТЗ - Обязательный параметр. Таблица значений, к которой выполняется запрос;
Изм - Обязательный параметр. Список колонок для группировок через запятую;
Рес - Список колонок для суммирования;
Условие - произвольный текст в формате языка запросов 1С.

Функция возвращает объект типа "Запрос".

См. также

Работа с интерфейсом Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Создание и использование на формах в среде 1С 7.7 прогрессбара, индикатора, как в 1С 8.Х для контроля над длительными процессами. Реализовано средствами языка программирования 1С 7.7.

1 стартмани

06.06.2024    698    1    user1416274    17    

2

Работа с интерфейсом Логистика, склад и ТМЦ Системный администратор Программист Пользователь Платформа 1С v7.7 1С:Торговля и склад 7.7 Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Решение для разработчика и конечного пользователя для работы с фотографиями номенклатуры: систематизация, хранение, отображение, а также выгрузка на Яндекс-Диск и FTP (кроме версии лайт). Поддерживаются графические форматы: bmp, jpg, gif, tiff, а также png - не поддерживаемый штатными средствами 1С. Выполнено без использования внешних компонент (кроме функции выгрузки на FTP). Поставляется как в виде пустой конфигурации с набором объектов и модулей для работы с фото, так и в виде обновления к 1С:Торговля и склад 7.7. Выполнено в двух версиях: "полная" и "лайт".

5000 руб.

18.10.2022    5845    1    45    

4

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v7.7 Абонемент ($m)

Обработка с фрагментами кода для программного использования набора цветов из коллекции WebЦвета 1с версии 8+ в 1с версии 77. Требуется предварительное подключение сторонней библиотеки FormEх. Будет полезно программистам 1с 77, 1с 8. Да и вообще при программировании на любом языке при потребности использовать коллекцию цветов WebЦвета.

1 стартмани

30.03.2022    4958    2    igor7777    4    

6

Работа с интерфейсом Программист Платформа 1С v7.7 Конфигурации 1cv7 Бесплатно (free)

Публикация имеет цель обратить внимание на возможность улучшения интерфейса.

15.12.2021    4835    71    Cерый    13    

7

Работа с интерфейсом Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Простая и удобная внешняя обработка для выбора цвета без применения внешних компонент.

1 стартмани

09.06.2020    7415    4    vap_pig    5    

4

Учет рабочего времени Работа с интерфейсом Программист Бухгалтер Пользователь Платформа 1С v7.7 Конфигурации 1cv7 Россия Абонемент ($m)

Обработка производственного календаря с возможностью импорта и экспорта xls для 1С 7.7 (7.70.027) без изменения конфигурации.

1 стартмани

18.09.2019    12993    6    Jill    8    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. harleq 27 08.06.06 09:29 Сейчас в теме
Такой метод получения данных, с помощью служебного документа, я увидел первый раз в ИТРП. Очевидный минус такого метода, блокировка транзакции при формировании отчета, но если в базе немного людей, то можно использовать.
10. script 128 02.11.14 22:45 Сейчас в теме
Решение найдено:
1. итоги по иерархии не выводятся из-за того что документ "Запрос" имеет реквизиты табл. части "Измерение1", "Измерение2", "ИзмерениеN" с неопределеным типом значения.
2. Что бы получить нужный результат прийдется изменить документ "Запрос", а именно добавить в него реквизит с определным типом значений (например: реквизит "Товар": ТипЗнч - Спр.Номенклатура). Т.е. в запросе зделать, я бы назвал, предопределенные группировки, т.е. такие для которых точно определен тип значения.
3. Прийдется переделать модуль генерации запроса.
Можно было делать и универсально, но мне и так сойдет.


Функция ТЗ_в_Запрос(ИсхТЗ, Изм, Рес="", Условие="") Экспорт
	
	СписокИзмерений = СоздатьОбъект("СписокЗначений");
	СписокРесурсов  = СоздатьОбъект("СписокЗначений");
	ДокЗапрос		= СоздатьОбъект("Документ.Запрос");
	ТЗ				= СоздатьОбъект("ТаблицаЗначений");

	//Чтобы не засорять базу, удаляем случайно оставшиеся предыдущие документы "Запрос",
	// кроме тех, которые в данный момент кем-нибудь используются.
	НачатьТранзакцию();
		ДокЗапрос.ВыбратьДокументы();
		Пока ДокЗапрос.ПолучитьДокумент() = 1 Цикл
			Попытка
				ДокЗапрос.Удалить();
			Исключение
			КонецПопытки;
		КонецЦикла;
	ЗафиксироватьТранзакцию();

	// Подготавливаем таблицу для загрузки в документ. 
	_ИсхТЗ = СоздатьОбъект("ТаблицаЗначений");
	ВремТЗ = СоздатьОбъект("ТаблицаЗначений");

	// _ИсхТЗ - из ИсхТЗ выгружаются используемые столбца в нужном порядке;
	ИсхТЗ.Выгрузить(_ИсхТЗ,,,Изм+?(ПУстоеЗначение(Рес)=1,"",",")+Рес);

	
	//Загоняем строку-перечень измерений в список
	Стр = СокрЛП(Изм);
	Поз = Найти(Изм, ",");
	Пока 0 < Поз Цикл
		СписокИзмерений.ДобавитьЗначение(СокрП(Лев(Стр, Поз-1)));
		Стр = СокрЛ(Сред(Стр, Поз+1));
		Поз = Найти(Стр, ",");
	КонецЦикла;
	СписокИзмерений.ДобавитьЗначение(СокрЛП(Стр));

	//Загоняем строку-перечень ресурсов в список
	Если ПустоеЗначение(Рес) = 0 Тогда
		Стр = СокрЛП(Рес);
		Поз = Найти(Рес, ",");
		Пока 0 < Поз Цикл
			СписокРесурсов.ДобавитьЗначение(СокрП(Лев(Стр, Поз-1)));
			Стр = СокрЛ(Сред(Стр, Поз+1));
			Поз = Найти(Стр, ",");
		КонецЦикла;
		СписокРесурсов.ДобавитьЗначение(СокрЛП(Стр));
	КонецЕсли;
	
	// ВремТЗ - Структура из документа.........,
	Для Ном = 1 По СписокИзмерений.РазмерСписка() Цикл
		ИдИзм = СписокИзмерений.ПолучитьЗначение(Ном);
		Если ИдИзм = "Товар" Тогда
			ВремТЗ.НоваяКолонка("Товар");
		Иначе	
			ВремТЗ.НоваяКолонка(Шаблон("Измерение[Ном]"));
		КонецЕсли;
	КонецЦикла;
	Для Ном = 1 По СписокРесурсов.РазмерСписка() Цикл
		ВремТЗ.НоваяКолонка(Шаблон("Ресурс[Ном]"));
	КонецЦикла;

	// ВремТЗ - .............., данные из _ИсхТЗ
	ВремТЗ.КоличествоСтрок(_ИсхТЗ.КоличествоСтрок());
	ВремТЗ.Заполнить(_ИсхТЗ);

	
	// Создаем документ, по которому будем делать запрос.
	ДокЗапрос.Новый();

	// Если есть оперативный учет, то документ обязательно должен быть до ТА
	Попытка
		ПолучитьДатуТА();
		ЕстьОперУчет = 1;
	Исключение
		ЕстьОперУчет = 0;
	КонецПопытки;

	Если ЕстьОперУчет = 1 Тогда
		ДокЗапрос.ДатаДок = ПолучитьДатуТА()-1;
	КонецЕсли;
    
	//Заполняем документ
	ДокЗапрос.ЗагрузитьТабличнуюЧасть(ВремТЗ);
	ДокЗапрос.Записать();
	
	// Что-бы никто не удалил пока выпоняется запрос.
	ДокЗапрос.Блокировка(1);
    
	// Понадобится для условия - фильтр по документу.
	ТекущДок = ДокЗапрос.ТекущийДокумент();
	
	// Создаем текст запроса.
	ТекстЗапроса="ОбрабатыватьДокументы Все;
	|ТекДок = Документ.Запрос.ТекущийДокумент;";
	Для Ном = 1 По СписокИзмерений.РазмерСписка() Цикл
		ИдИзм = СписокИзмерений.ПолучитьЗначение(Ном);
		Если ИдИзм = "Товар" Тогда
			ТекстЗапроса=ТекстЗапроса+"
			|Товар = Документ.Запрос.Товар;";
		Иначе	
			ТекстЗапроса=ТекстЗапроса+Шаблон("
			|[ИдИзм] = Документ.Запрос.Измерение[Ном];");
		КонецЕсли;
	КонецЦикла;
	Для Ном = 1 По СписокРесурсов.РазмерСписка() Цикл
		ИдРес = СписокРесурсов.ПолучитьЗначение(Ном);
		ТекстЗапроса=ТекстЗапроса+Шаблон("
		|_[ИдРес] = Документ.Запрос.Ресурс[Ном];");
	КонецЦикла;
	Для Ном = 1 По СписокРесурсов.РазмерСписка() Цикл
		ИдРес = СписокРесурсов.ПолучитьЗначение(Ном);
		ТекстЗапроса=ТекстЗапроса+Шаблон("
		|Функция [ИдРес] = Сумма(_[ИдРес]);");
	КонецЦикла;
	Для Ном = 1 По СписокИзмерений.РазмерСписка() Цикл
		ИдИзм = СписокИзмерений.ПолучитьЗначение(Ном);
		Если ИдИзм = "Товар" Тогда
			ТекстЗапроса=ТекстЗапроса+"
			|Группировка Товар;";
		Иначе	
			ТекстЗапроса=ТекстЗапроса+Шаблон("
			|Группировка [ИдИзм];");
		КонецЕсли;
	КонецЦикла;
	ТекстЗапроса=ТекстЗапроса+"
	|Условие (Запрос.ТекДок = ТекущДок);";


	// Добавляем внешнее условие (или еще что-нибудь !!!)
	// Внимание !!! Во внешнем условии перед идентификатором ресурса должен быть знак нижнего подч.:
	// Например: _Сумма, _Количество.
	
	Если ПустоеЗначение(Условие) = 0 Тогда
		ТекстЗапроса=ТекстЗапроса+"
		|"+Условие;
	КонецЕсли;
	
	//// Отладка текста запроса
	//Текст = СоздатьОбъект("Текст");
	//Текст.ДобавитьСтроку(ТекстЗапроса);
	//Текст.Показать();
	
	Запрос = СоздатьОбъект("Запрос");
	Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
		Сообщить("Ошибка при выполнении запроса");
		Возврат 0;
	КонецЕсли;
	
	// Отработанный материал - в утиль...
	ДокЗапрос.Удалить();

	Возврат Запрос;
	
	
КонецФункции // ЗапросТЗ()
Показать
2. Lapitskiy 1061 14.06.06 05:03 Сейчас в теме
Думаю, что через справочник будет намного быстрее
3. antonrost 656 14.06.06 08:01 Сейчас в теме
4. CheBurator 2712 11.12.06 13:39 Сейчас в теме
5. ROM_1C 692 07.06.13 11:38 Сейчас в теме
Думаю, что очень мне поможет. Спасибо!
6. ROM_1C 692 07.06.13 13:37 Сейчас в теме
7. Alex_1066 06.06.14 16:51 Сейчас в теме
Интересное решение.. Спасибо.
8. script 128 12.06.14 15:49 Сейчас в теме
9. script 128 02.11.14 22:22 Сейчас в теме
Возникла проблема. Не выводит итоги по группам справочников. В исходном запросе используется метод "Группировка Товар". Соответственно в отчет выводятся итоги по группам. После передачи ТЗ в Функция ТЗ_в_Запрос(), возвращаемый запрос не содержит итогов по группам справочника. Как быть?
11. AndreyKaRu 6 29.05.15 18:30 Сейчас в теме
Спасибо, использовал!
Оставьте свое сообщение