СКД: как использовать таблицу значений в качестве временной для запроса?

1. JaneP 14 20.09.18 15:01 Сейчас в теме
Здравствуйте!
Объяснять буду долго и наверно неправильно :). Есть отчет, который выводит данные по месяцам. Есть месяцы, в которые данных нет. Они соответственно пропускаются, т.к. в запросе таких данных нет. А надо чтобы 0 выводился. Дополнение по периодам не подходит, потому что используются регистры, а не их виртуальные таблицы. Придумала вот что: программно заполняю таблицу периодов за выбранный произвольный интервал, передаю её в СКД в качестве объекта. А дальше как её в запрос подсунуть, чтобы потом к ней Левым соединением остальные данные добавить? И еще вопрос: есть механизмы для отладки этой мешанины из программного кода и СКД?
П.С. Любые другие предложения, как решить мою проблему, тоже принимаются.
По теме из базы знаний
Ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
4. login1020 133 20.09.18 15:33 Сейчас в теме
(1)
есть механизмы для отладки этой мешанины из программного кода и СКД?


Консоль отчётов

(1)
программно заполняю таблицу периодов за выбранный произвольный интервал, передаю её в СКД в качестве объекта


Здесь придётся программно формировать отчёт в модуле объекта в Процедуре ПриКомпановкеРезультата()

Там и будете подсовывать в качестве набора данных (вид набора объект) Вашу заранее подготовленную таблицу.

А в самой скд связывать уже эти наборы.

Если у Вас идёт связка по дням, то можно взять типовой регистр (например, ДанныеПроизводственногоКалендаря, там единственное установить в параметрах какой год хотите выводить, или интервал дат, и вот у вас готовая таблица периодов, без всяких наборов, и ручного сбора отчета).
acanta; KulSer; +2 Ответить
9. KulSer 22.09.18 11:45 Сейчас в теме
А я подерживаю предложение (4) от login1020.
Связка с регистром ДанныеПроизводственногоКалендаря - и никакие временные таблицы не потребуются. Соответственно, никакого кода, всё настраивается изуально.
2. alex-l19041 8 20.09.18 15:18 Сейчас в теме
набор данных объект используйте для передачи в СКД таблицы
3. DenisCh 20.09.18 15:21 Сейчас в теме
Рекомендую для начала прочитать Хрусталёвой по СКД
Много вопросов сразу отпадёт
5. vnagapov 20.09.18 15:40 Сейчас в теме
Можно во временной таблице подготовить список дат в интервале запроса. Посмотрите вот здесь комментарий №34
8. boln 1040 20.09.18 15:45 Сейчас в теме
(5) -> [6] Примерно то же, только изящнее.
6. boln 1040 20.09.18 15:42 Сейчас в теме
А можно сгенерить запросом таблицу последовательности дат и левым соединением подтянуть к ней Вашу таблицу. См. "Порождающий запрос" на Инфостарте у автора ildarovich.
7. VmvLer 20.09.18 15:44 Сейчас в теме
в таком случае хорошо использовать технологию представлений в запросах которую бурно развивают в ЗУП

Пример, как я решаю подобные задачи в УТ

Допустим в СКД у меня такой фрагмент запроса из набора данных

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ДАТАВРЕМЯ(1, 1, 1) КАК ДатаНачала,
	ДАТАВРЕМЯ(1, 1, 1) КАК ДатаОкончания,
	0 КАК ДнейПериода,
	0 КАК ДнейРабочих
ПОМЕСТИТЬ ВтПериоды
ГДЕ
	&ПараметрПериоды
//.....

;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	ВтПериоды.ДатаНачала КАК ДатаНачала,
	ВтПериоды.ДатаОкончания КАК ДатаОкончания,
	ВтАналитикаУчетаНоменклатуры.ТоварОтбора КАК ТоварОтбора,
	ВтАналитикаУчетаНоменклатуры.СкладОтбора КАК СкладОтбора,
	ОстаткиНаДатаК.ВидЗапасов КАК ВидЗапасов,
	ОстаткиНаДатаК.КоличествоОстаток КАК КоличествоОстаток,
	ОстаткиНаДатаК.СтоимостьОстаток КАК СтоимостьОстаток
ПОМЕСТИТЬ ВтОстатки
ИЗ
	ВтПериоды КАК ВтПериоды
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			ДАТАВРЕМЯ(1, 1, 1) КАК ДатаОкончания,
			СбТвОстатки.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
			СбТвОстатки.ВидЗапасов КАК ВидЗапасов,
			СбТвОстатки.КоличествоОстаток КАК КоличествоОстаток,
			СбТвОстатки.СтоимостьОстаток КАК СтоимостьОстаток
		ИЗ
			РегистрНакопления.СебестоимостьТоваров.Остатки(, ЛОЖЬ) КАК СбТвОстатки
		ГДЕ
			&ПараметрОстатки) КАК ОстаткиНаДатаК
			ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтАналитикаУчетаНоменклатуры КАК ВтАналитикаУчетаНоменклатуры
			ПО ОстаткиНаДатаК.АналитикаУчетаНоменклатуры = ВтАналитикаУчетаНоменклатуры.КлючАналитики
		ПО ВтПериоды.ДатаОкончания = ОстаткиНаДатаК.ДатаОкончания

;
Показать


Что мы имеет? Фактически мы имеем в запросе набора данных СКД временную таблицу периодов с полями ДатаНачала и ДатаОкончания. Причем мы сразу можем создать весь запрос пакета, соединяя эту таблицу с виртуальными таблицами и т.д.

Перед выполнением запроса СКД находим место в тексте запроса по комбинации подстрок

"ПОМЕСТИТЬ ВтПериоды" и "&ПараметрПериоды". Причем "ПараметрПериоды" служебный и недоступный параметр СКД имеющий значение Ложь(что гарантирует, что пакет-шаблон в объединении будет пуст) , который
служит для точного позиционирования замены представления указанного выше пакета на реальный пакет.
Этот метод особенно хорош для расчета остатков на произвольные даты на каждый день, каждую неделю и т.д.
Тесты показали, что распиаренный метод расчета остатков динамическим итогом(так считает и платформа) в значительном проигрыше методу представлений - если не поняли о чем я, пропускайте.

Т.е. сверху "рыба", снизу "мясо". И если вы понимаете о чем я, то вы научитесь передавать таблицы значений в запросы СКД.

                   

#Область ПриКомпоновкеДополнительно_Схема

Функция ПриКомпоновке_НаборДанных_Показатели_Запрос_Периоды_Получить­ТекстВставки(ПармВставки)
	
	ТзПериоды = ПармВставки.ТзПериоды;
	Если НЕ ТзПериоды.Количество() Тогда
		ТекстИсключения =  "Таблицу периодов получить не удалось!" + Символы.ПС + "Обратитесь к разработчику!";
		ВызватьИсключение ТекстИсключения;
	КонецЕсли;
	// ТзПериоды.Колонки = {"ДатаНачала", "ДатаОкончания", "ДнейПериода", "ДнейРабочих"} 
	
	// Для гарантиии, что в пакете не будет дублей периодов свернем исходную тз по всем колонкам
	мКолонки = Новый Массив;
	Для каждого тКолонка Из ТзПериоды.Колонки Цикл
	   мКолонки.Добавить(тКолонка.Имя);
	КонецЦикла;
	СтрокаИменКолонок = СтрСоединить(мКолонки, ",");
	ТзПериодыУник = ТзПериоды.Скопировать();
	ТзПериодыУник.Свернуть(СтрокаИменКолонок);
	ТзПериодыУник.Сортировать("ДатаНачала,ДатаОкончания");
	
	// Текст первой секции и пример второй из запроса-объединения в СКД. 
	// Первая секция предоставляет поля для СКД даже когда динамически запрос не расширен.
	// Вторая сециия с ОБЪЕДИНИТЬ ВСЕ и последующие отсутствуют в исходной схеме - эти секции
	// формируются динамически в этом методе.
	//  
    //  |.... голова пакетов запроса
	//  |
	//  |ВЫБРАТЬ
	//  |	ДАТАВРЕМЯ(1, 1, 1) КАК ДатаНачала,
	//  |	ДАТАВРЕМЯ(1, 1, 1) КАК ДатаОкончания,
	//  |	0 КАК ДнейПериода,
	//  |	0 КАК ДнейРабочих
	//  |ПОМЕСТИТЬ ВтПериоды
	//  |ГДЕ
	//  |	&ПараметрПериоды
	//	|
	//	|ОБЪЕДИНИТЬ ВСЕ
	//	|
	//  |ВЫБРАТЬ 
	//  |	ДАТАВРЕМЯ(2017, 11, 1),
	//  |	ДАТАВРЕМЯ(2017, 11, 30, 23, 59, 59),
	//  |	30,
	//  |	22";
	
	ЗапросТекстВставка = "";
	ЗапросТекстШаблон1 = "
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ 
	|	ДАТАВРЕМЯ(%1, %2, %3),
	|	ДАТАВРЕМЯ(%4, %5, %6, %7, %8, %9),";
	ЗапросТекстШаблон2 = "
	|	%1,
	|	%2";
	
	мУжеОбработано = Новый Массив; // Для контроля дублей интервалов, если есть даты начала и окончания в один день, но разное время
	Для каждого СтрокаТз Из ТзПериодыУник Цикл
		
		НачалоДняДатаНчл = НачалоДня(СтрокаТз.ДатаНачала);
		НачалоДняДатаОкн = НачалоДня(СтрокаТз.ДатаОкончания);
		КлючИнтервала = Формат(НачалоДняДатаНчл, "ДЛФ=Д")+"_"+Формат(НачалоДняДатаОкн, "ДЛФ=Д");
		
		Если мУжеОбработано.Найти(КлючИнтервала) = Неопределено Тогда
			мУжеОбработано.Добавить(КлючИнтервала);
		Иначе	
			Продолжить; // Уже был такой интервал по дате начала и окончания без учета времени
		КонецЕсли;
		
		ПараметрыЗамены1  = Новый Структура;
		ПараметрыЗамены1.Вставить("_1", Формат(Год  (НачалоДняДатаНчл), "ЧГ="));
		ПараметрыЗамены1.Вставить("_2", Формат(Месяц(НачалоДняДатаНчл), "ЧГ="));
		ПараметрыЗамены1.Вставить("_3", Формат(День (НачалоДняДатаНчл), "ЧГ="));
		ПараметрыЗамены1.Вставить("_4", Формат(Год  (НачалоДняДатаОкн), "ЧГ="));
		ПараметрыЗамены1.Вставить("_5", Формат(Месяц(НачалоДняДатаОкн), "ЧГ="));
		ПараметрыЗамены1.Вставить("_6", Формат(День (НачалоДняДатаОкн), "ЧГ="));
		ПараметрыЗамены1.Вставить("_7", "23");
		ПараметрыЗамены1.Вставить("_8", "59");
		ПараметрыЗамены1.Вставить("_9", "59");

		ПараметрыЗамены2  = Новый Структура;
		ПараметрыЗамены2.Вставить("_1", Формат(СтрокаТз.ДнейПериода, "ЧГ="));
		ПараметрыЗамены2.Вставить("_2", Формат(СтрокаТз.ДнейРабочих, "ЧГ="));
	
		ЗапросТекстСекция1 = СтрШаблон(ЗапросТекстШаблон1, 
		ПараметрыЗамены1._1,
		ПараметрыЗамены1._2,
		ПараметрыЗамены1._3,
		ПараметрыЗамены1._4,
		ПараметрыЗамены1._5,
		ПараметрыЗамены1._6, 
		ПараметрыЗамены1._7,
		ПараметрыЗамены1._8,
		ПараметрыЗамены1._9); 
		
		ЗапросТекстСекция2 = СтрШаблон(ЗапросТекстШаблон2, 
		ПараметрыЗамены2._1,
		ПараметрыЗамены2._2); 
		
		ЗапросТекстВставка = ЗапросТекстВставка + ЗапросТекстСекция1 + ЗапросТекстСекция2;
		
	КонецЦикла;
	
	Возврат ЗапросТекстВставка;	
	
КонецФункции

Функция ПриКомпоновке_НаборДанных_Показатели_Запрос_ОстаткиНаДатаК_П­олучитьТекстВставки(ПармВставки)
	
	ТзПериоды = ПармВставки.ТзПериоды;
	Если НЕ ТзПериоды.Количество() Тогда
		ТекстИсключения =  "Таблицу периодов получить не удалось!" + Символы.ПС + "Обратитесь к разработчику!";
		ВызватьИсключение ТекстИсключения;
	КонецЕсли;
	// ТзПериоды.Колонки = {"ДатаНачала", "ДатаОкончания", "ДнейПериода", "ДнейРабочих"} 
	
	ИмяКолонкиГраницыПериода = "ДатаОкончания";
	ТзПериодыДатаК = ТзПериоды.Скопировать(, ИмяКолонкиГраницыПериода);
	ТзПериодыДатаК.Свернуть(ИмяКолонкиГраницыПериода);
	ТзПериодыДатаК.Сортировать(ИмяКолонкиГраницыПериода);
	
	// Текст первой секции и пример второй из запроса-объединения в СКД. 
	// Первая секция предоставляет поля для СКД даже когда динамически запрос не расширен.
	// Вторая сециия с ОБЪЕДИНИТЬ ВСЕ и последующие отсутствуют в исходной схеме - эти секции
	// формируются динамически в этом методе.
	//
	// Обратите внимание, что 
	//  - в качестве поля ДатаОкончания - выступает конец дня,
	//  - в качестве параметра остатков - выступает начало следующего дня, что аналогично 
	// ДОБАВИТЬКДАТЕ(&ДатаОкончания, СЕКУНДА, 1), но избавляет запрос от лишнего вычисления. 
	// &ПараметрОстатки всегда имеет значение ЛОЖЬ и в условии вируальной таблицы ЛОЖЬ, 
	// таким образом первая секция не будет иметь данных и это именно секция шаблон.
	//  
	//  |
	//  |.... тут может быть выборка вложенных полей	
	//  |	ПОМЕСТИТЬ ВтОстатки
    //  |.... тут может быть соединение с другими таблицами
	//  |
	//  |ВЫБРАТЬ 
	//  |	ДАТАВРЕМЯ(1, 1, 1) КАК ДатаОкончания,
	//  |	СбТвОстатки.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
	//  |	СбТвОстатки.ВидЗапасов КАК ВидЗапасов,
	//  |	СбТвОстатки.КоличествоОстаток КАК КоличествоОстаток,
	//  |	СбТвОстатки.СтоимостьОстаток КАК СтоимостьОстаток
	//  |	ИЗ
	//  |	    РегистрНакопления.СебестоимостьТоваров.Остатки(, ЛОЖЬ) КАК СбТвОстатки
	//  |	ГДЕ
	//  |		&ПараметрОстатки
	//	|
	//	|ОБЪЕДИНИТЬ ВСЕ
	//	|
	//  |ВЫБРАТЬ 
	//  |	ДАТАВРЕМЯ(2017, 7, 31, 23, 59, 59),
	//  |	СбТвОстатки.АналитикаУчетаНоменклатуры,
	//  |	СбТвОстатки.ВидЗапасов,
	//  |	СбТвОстатки.КоличествоОстаток,
	//  |	СбТвОстатки.СтоимостьОстаток
	//  |ИЗ
	//  |	РегистрНакопления.СебестоимостьТоваров.Остатки(
	//  |			ДАТАВРЕМЯ(2017, 8, 1),
	//  |			АналитикаУчетаНоменклатуры В
	//  |					(ВЫБРАТЬ
	//  |						ВтАналитикаУчетаНоменклатуры.КлючАналитики
	//  |					ИЗ
	//  |						ВтАналитикаУчетаНоменклатуры)
	//  |				И ВидЗапасов В
	//  |					(ВЫБРАТЬ
	//  |						ВтВидыЗапасов.ВидЗапасов
	//  |					ИЗ
	//  |						ВтВидыЗапасов)) КАК СбТвОстатки";
	
	ЗапросТекстВставка = "";
	ЗапросТекстШаблон  = "
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ 
	|	ДАТАВРЕМЯ(%1, %2, %3, %4, %5, %6),
	|	СбТвОстатки.АналитикаУчетаНоменклатуры,
	|	СбТвОстатки.ВидЗапасов,
	|	СбТвОстатки.КоличествоОстаток,
	|	СбТвОстатки.СтоимостьОстаток
	|ИЗ
	|	РегистрНакопления.СебестоимостьТоваров.Остатки(
	|			ДАТАВРЕМЯ(%7, %8, %9),
	|			АналитикаУчетаНоменклатуры В
	|					(ВЫБРАТЬ
	|						ВтАналитикаУчетаНоменклатуры.КлючАналитики
	|					ИЗ
	|						ВтАналитикаУчетаНоменклатуры)
	|				И ВидЗапасов В
	|					(ВЫБРАТЬ
	|						ВтВидыЗапасов.ВидЗапасов
	|					ИЗ
	|						ВтВидыЗапасов)) КАК СбТвОстатки";
	
	
	мУжеОбработано = Новый Массив; // Для контроля дублей дней даты окончания, если есть даты окончания в один день, но разное время
	Для каждого СтрокаТз Из ТзПериодыДатаК Цикл
		
		НачалоДняДатаОкончания = НачалоДня(СтрокаТз.ДатаОкончания);
		Если мУжеОбработано.Найти(НачалоДняДатаОкончания) = Неопределено Тогда
			мУжеОбработано.Добавить(НачалоДняДатаОкончания);
		Иначе	
			Продолжить; // Уже был такой день даты окончания
		КонецЕсли;
		НачалоСледующегоДня = КонецДня(НачалоДняДатаОкончания) + 1;
		
		ПараметрыЗамены  = Новый Структура;
		ПараметрыЗамены.Вставить("_1", Формат(Год  (НачалоДняДатаОкончания), "ЧГ="));
		ПараметрыЗамены.Вставить("_2", Формат(Месяц(НачалоДняДатаОкончания), "ЧГ="));
		ПараметрыЗамены.Вставить("_3", Формат(День (НачалоДняДатаОкончания), "ЧГ="));
		ПараметрыЗамены.Вставить("_4", "23");
		ПараметрыЗамены.Вставить("_5", "59");
		ПараметрыЗамены.Вставить("_6", "59");
		ПараметрыЗамены.Вставить("_7", Формат(Год  (НачалоСледующегоДня), "ЧГ="));
		ПараметрыЗамены.Вставить("_8", Формат(Месяц(НачалоСледующегоДня), "ЧГ="));
		ПараметрыЗамены.Вставить("_9", Формат(День (НачалоСледующегоДня), "ЧГ="));
		
		ЗапросТекстСекция = СтрШаблон(ЗапросТекстШаблон, 
		ПараметрыЗамены._1,
		ПараметрыЗамены._2,
		ПараметрыЗамены._3,
		ПараметрыЗамены._4,
		ПараметрыЗамены._5,
		ПараметрыЗамены._6, 
		ПараметрыЗамены._7,
		ПараметрыЗамены._8,
		ПараметрыЗамены._9); 
		
		ЗапросТекстВставка = ЗапросТекстВставка + ЗапросТекстСекция;
		
	КонецЦикла;
	
	Возврат ЗапросТекстВставка;
	
КонецФункции

Функция ПриКомпоновке_НаборДанных_Показатели_Запрос_ПолучитьТекстСРа­сширением(ЗапросТекст, ПармВставки)
	
	ТаблицаИмя      = ПармВставки.ТаблицаИмя;        // Например: "Периоды"
	ПодстрокаПоиска = "&Параметр" + ТаблицаИмя;      // Будет   : "&ПараметрПериоды"
		
	ПодстрокаПоискаВт = "ПОМЕСТИТЬ Вт" + ТаблицаИмя; // Будет   : "ПОМЕСТИТЬ ВтПериоды"
	ПозицияНачалаПостроки = СтрНайти(НРег(ЗапросТекст), НРег(ПодстрокаПоискаВт));
	Если НЕ ПозицияНачалаПостроки Тогда
		ТекстИсключения = 
		Символы.ПС + "В запросе источника данных ""Показатели"" не найдена подстрока " +""""+ПодстрокаПоискаВт+""""+ 
		Символы.ПС + "Обратитесь к разработчику!";
		ВызватьИсключение ТекстИсключения;
	КонецЕсли;
	
	ЗапросТекстГоловаДлина = ПозицияНачалаПостроки + СтрДлина(ПодстрокаПоискаВт) - 1;
	ЗапросТекстГолова = Лев(ЗапросТекст, ЗапросТекстГоловаДлина);
	ЗапросТекстХвост = Сред(ЗапросТекст, ЗапросТекстГоловаДлина + 1);
	
	Если НЕ ПустаяСтрока(ПодстрокаПоиска) Тогда
		// Вставка будет не сразу за ПодстрокаПоискаВт, а за ПодстрокаПоиска. Т.е. ЗапросТекстГолова расширяется. 
		ПозицияНачалаПостроки = СтрНайти(НРег(ЗапросТекстХвост), НРег(ПодстрокаПоиска));
		Если НЕ ПозицияНачалаПостроки Тогда
			ТекстИсключения = 
			Символы.ПС + "В запросе источника данных ""Показатели"" не найдена подстрока " +""""+ПодстрокаПоиска+""""+ 
			Символы.ПС + "Обратитесь к разработчику!";
			ВызватьИсключение ТекстИсключения;
		КонецЕсли;
		ЗапросТекстГоловаДлина = ПозицияНачалаПостроки + СтрДлина(ПодстрокаПоиска) - 1;
		ЗапросТекстГолова = ЗапросТекстГолова + Лев(ЗапросТекстХвост, ЗапросТекстГоловаДлина);
		ЗапросТекстХвост = Сред(ЗапросТекстХвост, ЗапросТекстГоловаДлина + 1);
	КонецЕсли;
	                
	Если НРег(ТаблицаИмя) = НРег("Периоды") Тогда
		ЗапросТекстВставка = ПриКомпоновке_НаборДанных_Показатели_Запрос_Периоды_Получить­ТекстВставки(ПармВставки);
	
	ИначеЕсли НРег(ТаблицаИмя) = НРег("Остатки") Тогда	
		ЗапросТекстВставка = ПриКомпоновке_НаборДанных_Показатели_Запрос_ОстаткиНаДатаК_П­олучитьТекстВставки(ПармВставки);
		
	Иначе
		ТекстИсключения = 
		Символы.ПС + "Для запроса источника данных ""Показатели"" не определен метод расширения для таблицы " +""""+ТаблицаИмя+""""+ 
		Символы.ПС + "Обратитесь к разработчику!";
		ВызватьИсключение ТекстИсключения;
		
	КонецЕсли;
		
	ЗапросТекст = ЗапросТекстГолова + ЗапросТекстВставка + ЗапросТекстХвост;
	
	Возврат ЗапросТекст;
	
КонецФункции

Процедура ПриКомпоновкеНаборДанных_Показатели_Запрос_Модифицировать(СхемаКд)
	
	ЗапросТекст = СхемаКд.НаборыДанных.Показатели.Запрос;
	
	ТзПериоды = ПолучитьТаблицуПериодовПоПараметрамКомпоновки();
	Если ЗначениеЗаполнено(ТзПериоды) Тогда
		
		ПармВставки = Новый Структура("ТаблицаИмя,ТзПериоды", "Периоды",ТзПериоды);
		ЗапросТекст = ПриКомпоновке_НаборДанных_Показатели_Запрос_ПолучитьТекстСРа­сширением(ЗапросТекст, ПармВставки);
		
		ПармВставки = Новый Структура("ТаблицаИмя,ТзПериоды", "Остатки",ТзПериоды);
		ЗапросТекст = ПриКомпоновке_НаборДанных_Показатели_Запрос_ПолучитьТекстСРа­сширением(ЗапросТекст, ПармВставки);
		
	КонецЕсли;
	
	СхемаКд.НаборыДанных.Показатели.Запрос = ЗапросТекст;

 КонецПроцедуры

Функция ПриКомпоновкеСхема_Получить(СхемаКдИмя)
	
	СхемаКд = ПолучитьМакет(СхемаКдИмя);
	
	ПриКомпоновкеНаборДанных_Показатели_Запрос_Модифицировать(СхемаКд);
	
	// Прочие проверки и модификации СхемаКд 
	//...
	
	Возврат СхемаКд;
	
КонецФункции

#КонецОбласти

Показать
10. acanta 22.09.18 13:43 Сейчас в теме
Код, генерирующий даты выполняет платформа, регистр производственный календарь будет соединять субд. Вы пробовали сравнить время тестирования базы данных и к примеру кода, выполняющего простую перезапись всех объектов в базе? Зачем оптимизировать что то потом, если можно сразу писать что-то близкое к оптимальному? Если есть возможность сделать сравнение по производительности- сделайте. Правда для этого требуется сделать два рабочих варианта на тяжелой базе.
11. acanta 23.09.18 21:54 Сейчас в теме
Вопрос по прежнему актуален. Источник данных таблица на форме в процессе изменения, требуется ее свернуть в шахматку, вместо даты - вид работы.
Прикрепленные файлы:
12. acanta 24.09.18 01:49 Сейчас в теме
Странно, но работает:) После нескольких приплясываний с бубном все получилось. Спасибо всем огромное!
Оставьте свое сообщение

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