Последние сообщения

#1
7.7 / Re: Как ускорить вывод таблицы...
Последний ответ от Ветер в поле - Вчера в 21:58
Немного поэкспериментировал. У меня таблица с 18 колонками и 14600 строками формировалась за 30 секунд без всякой оптимизации вывода. Причем со сложными расшифровками. Вывод в файл занимал в районе 8 секунд. Не принципиальная разница. Не думаю, что отчеты на десятки тысяч строк формируют каждые 5 минут и сложно подождать минуту-другую. Вот сотни тысяч уже в таблицу не выведешь. А если выведешь, то работать с ней в 1С невозможно.
#2
7.7 / Re: Как ускорить вывод таблицы...
Последний ответ от Ветер в поле - Вчера в 21:18
Можно, конечно, поиграться с выводом, но вряд ли скорость вывода существенно вырастет - слишком большой объем данных выводится. Порочна сама практика формирования отчетов больше, чем на считанное количество тысяч строк. Люди всё же не компьютеры, чтобы суметь обработать такой массив информации. Другое дело, если данные из 1С потом обрабатываются всяким OLAP-программами, хотя бы тем же экселем. Вот тогда такой массив данных вполне имеет смысл. Но не стоит его выводить в таблицу 1С. У меня все стандартные отчеты имеют опцию "Данные для анализа OLAP". Тогда перед формированием у пользователя спросят имя файла и в него выгрузят данные отчета в формате CSV (использую для выгрузки метод ВФайл(стрИмяФайла, чФормат = 4, Индекс = "", чСИменамиКолонок = 1) объекта ИндексированнаяТаблица). Вот тогда даже сотни тысяч строк со многими колонками очень быстро выгружаются. Не скажу, правда, что быстро формируется - иногда и час может затратиться. В любом случае, таблица на многие десятки тысяч строк в программе еле шевелится и работать с ней почти невозможно. Чтобы не упираться в 1.5 ГБ памяти, я применил патч 4 ГБ.
 
#3
7.7 / ТЗ, вывод с ячейку в несколько...
Последний ответ от Злоп - 22 ноября 2025, 14:33
можно ли такое сделать?
или ТЗ - жестко фиксированной высоты строки сделаны и никак?
#4
7.7 / Re: Йоксель.ГрафическийКонверт...
Последний ответ от alyuev - 21 ноября 2025, 14:57
Можно использовать принтер pdfFactory
#5
7.7 / Re: Как ускорить вывод таблицы...
Последний ответ от alyuev - 21 ноября 2025, 14:53
Я запоминал секции в отдельные переменные и перед выводом заполнял текст нужным значением и потом выводил. Было быстрее, чем ВывестиСекцию().
#6
7.7 / Re: Передать таблицу значений ...
Последний ответ от trad - 20 ноября 2025, 11:05

Процедура УложитьТаблицу(пТЗ, ИмяТаб, Колонки="", ПервичныйКлюч="") Экспорт
	Перем ТЗ;
	
	Если ПустаяСтрока(Колонки)=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);
		рс.Закрыть();
	КонецЕсли;
КонецПроцедуры
#7
7.7 / Re: Передать таблицу значений ...
Последний ответ от ADirks - 20 ноября 2025, 10:58
например так
    МД = СоздатьОбъект("MetaDataWork")
    тзп_Объекты = ""; зпт = "";
    тз.ВыбратьСтроки();
    Пока тз.ПолучитьСтроку() = 1 Цикл
        идОбъект = МД.ЗначениеВСтрокуБД(тз.Объект);
        тзп_Объекты = тзп_Объекты + зпт + "select '"+идОбъект+"' Объект";
        зпт = "
        |union all
        |";
    КонецЦикла;
    
    ТекстЗапроса = "
    |SELECT
    |    Объекты.Объект
    |FROM
    |    ("+тзп_Объекты+") Объекты
    |";
#8
7.7 / Передать таблицу значений в за...
Последний ответ от SnakePlisskin - 19 ноября 2025, 17:54
Доброго дня!
Господа подскажите, как в прямой запрос в качестве параметра передать таблицу значений, суть, мне нужно справить значения те что есть у меня в БД их я выбираю запросом напрямую обращением к объектам, а есть некий внешний источник данных значения которого я получаю в таблицу значений, так вот что бы сравнить эти две таблицы, вторую мне нужно как-то передать в запрос.
#9
7.7 / Re: Все ВошедшиеВзапрос - пояс...
Последний ответ от Харлампий Дымба - 19 ноября 2025, 11:05
Цитата: Злоп от 19 ноября 2025, 01:14- откуда здесь взялся Товар3?
От ключевого слова "Все". То есть все допустимые (удовлетворяющие условиям запроса) элементы справочника, независимо от значения функций (нулевой остаток? - включаем).
#10
7.7 / Re: Как ускорить вывод таблицы...
Последний ответ от Злоп - 19 ноября 2025, 01:18
для увеличения скорости (исключительно на собственном опыте)
- убирать расшифровки
- убирать мелкую нарезку ячеек для точного построения макетов/выравниыаний
- убирать ПрисоединитьСекцию()