Процедура УложитьТаблицу(пТЗ, ИмяТаб, Колонки="", ПервичныйКлюч="") Экспорт
Перем ТЗ;
Если ПустаяСтрока(Колонки)=1 Тогда
ТЗ=пТЗ;
Иначе
пТЗ.Выгрузить(ТЗ,,,Колонки);
КонецЕсли;
СтрCreate="create table %Имя% (/*column_definition*/ /*pk*/)";
СтрInsert="insert into %Имя% values(/*?*/)";
Тип="";
Длина="";
Точность="";
ФорматнаяСтрока="";
КолонкиЕсть=0;
Для Тек=1 По ТЗ.КоличествоКолонок() Цикл
Идентификатор=ТЗ.ПолучитьПараметрыКолонки(Тек,Тип,Длина,Точность,,,ФорматнаяСтрока);
Если (ПустаяСтрока(Колонки)=0)И(Найти(Колонки,Идентификатор)=0) Тогда
Продолжить;
КонецЕсли;
КолонкиЕсть=1;
Если ПустаяСтрока(ФорматнаяСтрока)=0 Тогда
SQL_тип=ФорматнаяСтрока;
рс.ДобПараметр(1,);
ИначеЕсли ПустаяСтрока(Тип)=1 Тогда
SQL_тип="char(9)";
рс.ДобПараметр(1,14,9,0);
ИначеЕсли Тип="Число" Тогда
Если Длина=0 Тогда
Длина=38;
Точность=10;
КонецЕсли;
SQL_тип="numeric(%p%,%s%)";
SQL_тип=СтрЗаменить(SQL_тип,"%p%",Длина);
SQL_тип=СтрЗаменить(SQL_тип,"%s%",Точность);
рс.ДобПараметр(1,11,Длина,Точность);
ИначеЕсли Тип="Строка" Тогда
Если Длина=0 Тогда
SQL_тип="varchar(%n%)";
SQL_тип=СтрЗаменить(SQL_тип,"%n%",255);
рс.ДобПараметр(1,15,255,0);
Иначе
SQL_тип="char(%n%)";
SQL_тип=СтрЗаменить(SQL_тип,"%n%",Длина);
рс.ДобПараметр(1,14,Длина,0);
КонецЕсли;
ИначеЕсли Тип="Дата" Тогда
SQL_тип="datetime";
рс.ДобПараметр(1,10,8,0);
ИначеЕсли Найти(Тип,".")>0 Тогда
SQL_тип="char(9)";
рс.ДобПараметр(1,14,9,0);
Иначе
SQL_тип="char(13)";
рс.ДобПараметр(1,14,13,0);
КонецЕсли;
СтрCreate=СтрЗаменить(СтрCreate,"/*,*/",", ");
СтрCreate=СтрЗаменить(СтрCreate,"/*column_definition*/",Идентификатор+" "+SQL_тип+"/*,*//*column_definition*/");
СтрInsert=СтрЗаменить(СтрInsert,"/*,*/",", ");
СтрInsert=СтрЗаменить(СтрInsert,"/*?*/","?/*,*//*?*/");
КонецЦикла;
Если ПустаяСтрока(ПервичныйКлюч)=0 Тогда
СтрCreate=СтрЗаменить(СтрCreate,"/*pk*/","primary key clustered ("+ПервичныйКлюч+")");
КонецЕсли;
Если КолонкиЕсть=1 Тогда
ТекстЗапроса="
|set nocount on
|if exists (select * from tempdb..sysobjects where id=object_id('tempdb..%Имя%') and sysstat & 0xf = 3 )
| drop table %Имя%;
|"+СтрCreate+"
|";
рс=СоздатьОбъект("ODBCRecordset");
рс.ВыполнитьИнструкцию(СтрЗаменить(ТекстЗапроса,"%Имя%",ИмяТаб));
рс.Подготовить(СтрЗаменить(СтрInsert,"%Имя%",ИмяТаб));
рс.ВыполнитьSQL_ИзТЗ(ТЗ,100);
рс.Закрыть();
КонецЕсли;
КонецПроцедуры
МД = СоздатьОбъект("MetaDataWork")
тзп_Объекты = ""; зпт = "";
тз.ВыбратьСтроки();
Пока тз.ПолучитьСтроку() = 1 Цикл
идОбъект = МД.ЗначениеВСтрокуБД(тз.Объект);
тзп_Объекты = тзп_Объекты + зпт + "select '"+идОбъект+"' Объект";
зпт = "
|union all
|";
КонецЦикла;
ТекстЗапроса = "
|SELECT
| Объекты.Объект
|FROM
| ("+тзп_Объекты+") Объекты
|";
Цитата: Злоп от Вчера в 01:14- откуда здесь взялся Товар3?От ключевого слова "Все". То есть все допустимые (удовлетворяющие условиям запроса) элементы справочника, независимо от значения функций (нулевой остаток? - включаем).
Цитата: Харлампий Дымба от 16 ноября 2025, 18:40Группировка Склад Без групп; Группировка Номенклатура Без групп;
|Склад |Товар |Остаток Склад1 Товар1 10 Склад1 Товар2 15 Склад2 Товар1 20
//по каждому складу, добиваем полный список товаров
Код Выделить РазвернутьГруппировка Склад Без групп; Группировка Номенклатура Без групп Все;
|Склад |Товар |Остаток Склад1 Товар1 10 Склад1 Товар2 15 Склад1 Товар3 0 Склад2 Товар1 20 Склад2 Товар2 0 Склад2 Товар3 0
Цитата: ADirks от 18 ноября 2025, 07:30Вот такой вот есть простенький тест.ПолучитьСекцию() точно быстрее (раза в 2), но не так феноменально, как казалось с первых запусков.
секцияТовар1 = Т.ПолучитьСекцию("Строка_3|К1");
облТовар1 = секцияТовар1.Область(1, 1);
секцияТовар2 = Т.ПолучитьСекцию("Строка_3|К1");
облТовар2 = секцияТовар2.Область(1, 1);
секцияТовар3 = Т.ПолучитьСекцию("Строка_3|К1");
облТовар3 = секцияТовар3.Область(1, 1);
тзДанные.ВыбратьСтроки();
Пока тзДанные.ПолучитьСтроку() = 1 Цикл
стрЗначение = тзДанные.Наименование;
облТовар1.Текст = стрЗначение;
Т.ВывестиСекцию(секцияТовар1);
облТовар2.Текст = стрЗначение;
Т.ПрисоединитьСекцию(секцияТовар2);
облТовар3.Текст = стрЗначение;
Т.ПрисоединитьСекцию(секцияТовар3);
КонецЦикла;
Цитата: ADirks от 18 ноября 2025, 07:30Вот такой вот есть простенький тестДа, именно это и искал. Спасибо огромное!
Цитата: trad от 18 ноября 2025, 09:09Убрать автовысоту строк таблицы, сделать ее фиксированнойЕсть такое, в среднем процентов десять прибавки.