Универсальная функция для программного выполнения СКД

Публикация № 358495

Разработка - Инструментарий разработчика

СКД Программное создание Схема Компновки Данных

Часто встречаются вопросы на форумах о программном формировании СКД. Вроде и информации много по этому поводу, но... Все как всегда :)
Собственно, в описании без лишних слов выложен текст общей функции, в которую, для выполнения отчета, нужно передать (минимум 2 параметра): СКД и ТабличныйДокумент.

Передаваемые параметры описаны в комментарии к процедуре.
Функция возвращает ДанныеРасшифровкиКомпоновкиДанных.

Из БСП используется только общая процедура:
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора() 

Собственно сама общая функция.

// Программный вывод СКД в указанный табличный документ.
//  Для корректного выполнения отчета нужно ограничить использование параметров.
//  Для (надеюсь временного) костыля используется перебор пользовательских параметров.
//
// Параметры:
//      СКД                         - СхемаКомпоновкиДанных - СКД которую нужно вывести
//      ТабДокумент                 - ТабличныйДокумент     - Табличный документ вывода результата
//      СтруктураПараметров         - Структура             - Структура параметров СКД
//                                                              Ключ        - Имя параметра
//                                                              Значение    - Значение параметра
//      СтруктураИсточниковДанных   - Структура             - Структура источников данных.
//                                                              Ключ        - Имя таблицы
//                                                              Значение    - Таблица источника
//      СтруктураОтборов            - Структура             - Структура отборов.
//                                                              Ключ        - Имя поля (или "СложныйОтбор")
//                                                              Значение    - Структура, Строка.
//                                                              Если "Имя поля":        Ключ - Имя параметра. Значение - Значение параметра
//                                                                                              Пример: СтруктураПараметровПроцедуры = Новый Структура("ПравоеЗначение, ВидСравнения, Представление, Использование, РежимОтображения, ИдентификаторПользовательскойНастройки");
//                                                              Если "СложныйОтбор":    ОбщиеПроцедуры.УстановитьОбщийОтбор(Отбор);
//      ИмяВариантаНастроек         - Строка                - Имя варианта настроек
//      ОграничениеИспользованияПараметров  - Булево        - Признак необходимости ограничения использования параметров
//
// Возвращаемое значение:
//      Структура - Структура данных (Пока только Расшифровка)
//
Функция   ВыполнитьСКД(СКД, ТабДокумент, СтруктураПараметров = Неопределено, СтруктураИсточниковДанных = Неопределено, СтруктураОтборов = Неопределено, ИмяВариантаНастроек = "", ОграничениеИспользованияПараметров = Неопределено) Экспорт

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


    Для каждого ТекущийПараметр Из СтруктураПараметров Цикл

        ОбщегоНазначенияКлиентСервер.УстановитьПараметрСКД(СКД.Параметры, ТекущийПараметр.Ключ, ТекущийПараметр.Значение, ОграничениеИспользованияПараметров);

    КонецЦикла;

    Если ПустаяСтрока(ИмяВариантаНастроек) Тогда
        Настройки = СКД.НастройкиПоУмолчанию;
    Иначе
        НайденныйВариант = СКД.ВариантыНастроек.Найти(ИмяВариантаНастроек);
        Если НайденныйВариант = Неопределено Тогда
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Не найден вариант настроек " + НайденныйВариант);
            Возврат Неопределено;
        КонецЕсли;
        Настройки = НайденныйВариант.Настройки;
    КонецЕсли;

    Отбор = Настройки.Отбор;

    Для каждого ТекущийПараметр Из Настройки.ПараметрыДанных.Элементы Цикл
        // Надеюсь, временный костыль. Нужно перебрать параметры варианта и установить их.

        ИмяПараметра        = Строка(ТекущийПараметр.Параметр);
        ЗначениеПараметра   = Неопределено;
        Если СтруктураПараметров.Свойство(ИмяПараметра, ЗначениеПараметра) Тогда
            ТекущийПараметр.Использование   = Истина;
            ТекущийПараметр.Значение        = ЗначениеПараметра;
        КонецЕсли;

    КонецЦикла;

    Для каждого ТекущийОтбор Из СтруктураОтборов Цикл

        Если ТекущийОтбор.Ключ = "СложныйОтбор" Тогда
            // Если в качестве ключа строка "СложныйОтбор", значит установка отбора через общие процедуры:
            //  ОбщиеПроцедуры.УстановитьУниверсальныйОтбор(Отбор);

            Выполнить ТекущийОтбор.Значение;

        Иначе

            СтруктураПараметровПроцедуры = Новый Структура("ПравоеЗначение, ВидСравнения, Представление, Использование, РежимОтображения, ИдентификаторПользовательскойНастройки");

            Для каждого ТекущийПараметрОтбора Из МассивПараметровОтбора Цикл

                Если ТекущийОтбор.Значение.Свойство(ТекущийПараметрОтбора) Тогда

                    СтруктураПараметровПроцедуры.Вставить(ТекущийПараметрОтбора, ТекущийОтбор.Значение[ТекущийПараметрОтбора]);

                КонецЕсли;

            КонецЦикла;

            ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Настройки.Отбор, ТекущийОтбор.Ключ, СтруктураПараметровПроцедуры.ПравоеЗначение,
                                                                    СтруктураПараметровПроцедуры.ВидСравнения,
                                                                    СтруктураПараметровПроцедуры.Представление,
                                                                    СтруктураПараметровПроцедуры.Использование,
                                                                    СтруктураПараметровПроцедуры.РежимОтображения,
                                                                    СтруктураПараметровПроцедуры.ИдентификаторПользовательскойНастройки);

        КонецЕсли;

    КонецЦикла;


    КомпоновщикМакетаКомпоновкиДанных = Новый КомпоновщикМакетаКомпоновкиДанных;
    ДанныеРасшифровкиКомпоновкиДанных = Новый ДанныеРасшифровкиКомпоновкиДанных;
    МакетКомпоновкиДанных = КомпоновщикМакетаКомпоновкиДанных.Выполнить(СКД, Настройки, ДанныеРасшифровкиКомпоновкиДанных);

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

    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ТабДокумент);
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

    СтруктураВозврата = Новый Структура;
    СтруктураВозврата.Вставить("ДанныеРасшифровкиКомпоновкиДанных", ДанныеРасшифровкиКомпоновкиДанных);

    Возврат СтруктураВозврата;

КонецФункции // ВыполнитьСКД

 Спасибо, Yashazz, за то что нашел использование общей процедуры УстановитьПараметрСКД()(которую я не описал).

// Поиск и установка значения параметра схемы компоновки данных
// Параметры:
//		ПараметрыСКД		- ПараметрыСхемыКомпоновкиДанных - Параметры СКД
//		ИмяПараметра		- Строка		- Имя параметра
//		ЗначениеПараметра	- Произвольное	- Устанавливаемое значение параметра
//
Процедура УстановитьПараметрСКД(ПараметрыСКД, ИмяПараметра, ЗначениеПараметра, ОграничениеИспользования = Неопределено) Экспорт 
	
	НайденныйПараметр = ПараметрыСКД.Найти(ИмяПараметра);
	Если НайденныйПараметр = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	НайденныйПараметр.Значение		= ЗначениеПараметра;
	
	Если Не ОграничениеИспользования = Неопределено Тогда
		НайденныйПараметр.ОграничениеИспользования = ОграничениеИспользования;
	КонецЕсли;
	
КонецПроцедуры // УстановитьПараметрСКД
 

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. zqzq 21 21.05.15 08:15 Сейчас в теме
Уже было http://infostart.ru/public/80164/ причем без использования внешних функций из БСП и с возможностью выгрузки в таблицу значений. Также лучше передавать не ИмяВариантаНастроек, а сам вариант настроек: при наличии компоновщика настроек Компоновщик.ПолучитьНастройки() возвращает настройки с учетом пользовательских настроек компоновщика, по имени варианта вы их не получите.
2. dj_serega 374 21.05.15 09:36 Сейчас в теме
(1) zqzq, Спасибо за ссылку на статью. Но в ней нет возможности установить отборы (поэтому и используется общая процедура). Получается по ссылке мы можем только выполнить СКД.

Вот рабочий пример выполнения с параметрами, отборами и вариантом.

	СКД = Отчеты.Анализ.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
	
	СтруктураПараметров = Новый Структура;
	СтруктураПараметров.Вставить("Период",					КонецМесяца(ТекущаяДата()));
	СтруктураПараметров.Вставить("ФизлицоРуководитель",	Ссылка);
	
	СтруктураОтборов = Новый Структура;
	СтруктураОтборов.Вставить("СложныйОтбор", "ОбщиеПроцедурыСервер.УстановитьОтборПоПодразделению(Отбор)"); // Тут общий отбор на все отчеты
	
	СтруктураПараметровПроцедуры = Новый Структура();
	СтруктураПараметровПроцедуры.Вставить("ПравоеЗначение",	МассивФизлиц);
	СтруктураПараметровПроцедуры.Вставить("ВидСравнения",	ВидСравненияКомпоновкиДанных.ВСписке);
	СтруктураОтборов.Вставить("Физлицо", СтруктураПараметровПроцедуры); // Тут отбор по подчиненным
	
	ОбщиеПроцедурыСервер.ВыполнитьСКД(СКД, ТабДокумент, СтруктураПараметров,, СтруктураОтборов, "ПоПодчиненным", Истина);
Показать

3. zqzq 21 21.05.15 11:48 Сейчас в теме
(2) пользуюсь той процедурой. При необходимости отбора, его можно установить в настройке и передать саму настройку. Тут, наверное, удобнее.
4. Yashazz 3482 21.05.15 12:06 Сейчас в теме
Чудовищный баян. Но, вероятно, те, кому лень почитать пару абзацев у Хрусталёвой, рады возможности воспользоваться халявой, чем и объясняется рейтинг статьи.

Автор, видимо, не в курсе возможности такой вещи, как КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра, поэтому делает какие-то странные костыли, да ещё применяет какую-то левую функцию "ОбщегоНазначенияКлиентСервер.УстановитьПараметрСКД" (о чём, кстати, не предупреждает, громко заявляя, что
Из БСП используется только общая процедура:
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора()


Полагаю, каждый более-менее грамотный специалист давно для себя сделал пакетники для работы с СКД и пользуется ими.

p.s. не говоря уж о том, что предложенное ещё и не универсально. Вывода в таблицу значений нет, а бывает очень надо. Действительно профессиональным подходом было бы сделать общий механизм - в табличный документ, таблицу, дерево.

...жаль, не нашёл, где минуснуть можно.
triera2000; vardeg; Dach; +3 2 Ответить
5. dj_serega 374 21.05.15 12:24 Сейчас в теме
(4) Yashazz, Извиняюсь за указанную общую процедуру не из БСП. Уже приложил к публикации.

Автор, видимо, не в курсе возможности такой вещи, как КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра, поэтому делает какие-то странные костыли,

Вкурсе-вкурсе.

1. Читаем СП:
Описание:
Устанавливает значение параметра и включает свойство Использование. Если параметр с указанным именем не найден, будет вызвано исключение.
.
Обрабатывать исключения попыткой нет желания ;)
2. КомпоновщикНастроек есть в отчетах. А я эту функцию вызываю из справочников, документов и при программном формировании скд.
3.
p.s. не говоря уж о том, что предложенное ещё и не универсально. Вывода в таблицу значений нет, а бывает очень надо. Действительно профессиональным подходом было бы сделать общий механизм - в табличный документ, таблицу, дерево.

В будущем планировал реализовать вывод в таблицу значений.
Текущий вариант функции взят с рабочего механизма. После написания этой функции, не приходилось выводить в ТЗ. Поэтому и не реализовано.

Чудовищный баян.

И почему баян так еще и чудовищный?
albert.goncharov; +1 Ответить
6. Yashazz 3482 21.05.15 12:48 Сейчас в теме
(5)
КомпоновщикНастроек есть в отчетах. А я эту функцию вызываю из справочников, документов и при программном формировании скд.
Да что вы говорите? А вот это уже отменили, да?
	комп=Новый КомпоновщикНастроекКомпоновкиДанных;
	комп.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(мояСКД));
	комп.ЗагрузитьНастройки(мояСКД.НастройкиПоУмолчанию);

спокойно юзается, где только в голову взбредёт.

Обрабатывать исключения попыткой нет желания ;)
А использовать циклы там, где не надо, желание есть?

Я у себя уж лет пять назад всё сделал, и в таблицу значений, и куда угодно...
7. dj_serega 374 21.05.15 12:53 Сейчас в теме
(6) Yashazz,
Да что вы говорите? А вот это уже отменили, да?

Не злитесь ;)
А использовать циклы там, где не надо, желание есть?

Как по мне то цикл с одной итерацией лучше чем инициализировать компоновщик и загружать настройки.
Я у себя уж лет пять назад всё сделал, и в таблицу значений, и куда угодно...

Можно увидеть ссылку на публикацию?
8. Yashazz 3482 21.05.15 13:35 Сейчас в теме
(7) а вы возьмите любую из моих публикаций, где мне ругались в комментах на отсутствие функций "СоздатьСКД" или "ПревращениеИмениВНаименование". Я это пихаю почти везде, а запостить вместе с основным кодом иногда забываю)))

upd: если очень надо, могу через прям щас запузырить сюда все свои основные блоки на эту тему
9. dj_serega 374 21.05.15 14:15 Сейчас в теме
(8) Yashazz,
если очень надо, могу через прям щас запузырить сюда все свои основные блоки на эту тему

А может Офигенную публикацию по своим основным блокам сделаете? ;)
10. Yashazz 3482 21.05.15 17:33 Сейчас в теме
(9) честно? Я все эти годы, глядя на свой код, думаю: "ну баян же очевидный, фигли его выкладывать", а потом обнаруживаю гораздо менее проработанные аналоги, которые, оказывается, пользуются спросом. Каждый раз ситуация сия вызывает у меня лёгкое охренение.

Сделал вот удобное создание табличного поля (реквизита и элемента формы) под УФ, потом смотрю на типовую БП 3.0 и вижу там почти ровно то же самое). Перенёс когда-то доп.свойства объектов из единого регистра сведений (как было модно во времена 8.1) в табчасть объекта, глянь - и типовая 1С туда же) Поэтому, просто баянить неохота. Если есть конкретная нужда - выложу, а так, чисто "в никуда" - смысл?...

Ну, вот, например:

// Ищет среди всей иерархии отборов Компоновщика элемент с ПолемСКД (ЛевоеЗначение), равным указанному, или
// ищет группу по её типу и имени (в этом случае рПолеСКДилиИмяТипГруппы это структура: ИмяГруппы, ТипГруппы)
// Если не нашёл, возвращает Неопределено.
Функция ПолучитьОтборСКД(рКомпоновщикИлиОтбор,рПолеСКДилиИмяТипГруппы) Экспорт
	Если ТипЗнч(рКомпоновщикИлиОтбор)=Тип("ОтборКомпоновкиДанных") или ТипЗнч(рКомпоновщикИлиОтбор)=Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
		обрОткуда=рКомпоновщикИлиОтбор;
	ИначеЕсли ТипЗнч(рКомпоновщикИлиОтбор)=Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда
		обрОткуда=рКомпоновщикИлиОтбор.Настройки.Отбор;
	Иначе
		Возврат Неопределено;
	КонецЕсли;
	Если ТипЗнч(рПолеСКДилиИмяТипГруппы)=Тип("ПолеКомпоновкиДанных") Тогда
		рИщемДляЭлемента=Истина;
	ИначеЕсли ТипЗнч(рПолеСКДилиИмяТипГруппы)=Тип("Структура") Тогда
		рИщемДляЭлемента=Ложь;
	Иначе
		Возврат Неопределено;
	КонецЕсли;
	//
	Для каждого элотб Из обрОткуда.Элементы Цикл
		#Если Клиент Тогда
			ОбработкаПрерыванияПользователя();
		#КонецЕсли
		рТип=ТипЗнч(элотб);
		Если рТип=Тип("ЭлементОтбораКомпоновкиДанных") Тогда
			Если рИщемДляЭлемента и элотб.ЛевоеЗначение=рПолеСКДилиИмяТипГруппы Тогда
				Возврат элотб;
			КонецЕсли;			
		ИначеЕсли рТип=Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
			Если не рИщемДляЭлемента 
			и СокрЛП(элотб.Представление)=СокрЛП(рПолеСКДилиИмяТипГруппы.ИмяГруппы)
			и элотб.ТипГруппы=рПолеСКДилиИмяТипГруппы.ТипГруппы
			Тогда
				Возврат элотб;
			КонецЕсли;
			// идём глубже
			Возврат ПолучитьОтборСКД(элотб,рПолеСКДилиИмяТипГруппы);
		КонецЕсли;
	КонецЦикла;
	//
	Возврат Неопределено;
КонецФункции


// Добавляет произвольное условное оформление на управляемую форму; должна вызываться строго с сервера
// Параметры:
//    рФорма - сериализованная форма, вызванная с &НаСервере
//    рПараметры - структура:
//         ОформляемоеПоле - строка (обязательный), имя элемента формы, подлежащего оформлению
//         ПолеИсточник - строка (обязательный), имя реквизита формы, чьи данные определяют отбор
//         ВидСравнения - вид сравнения СКД для отбора условия оформления
//         ПравоеЗначение - конкретное значение реквизита ПолеИсточник, определяющее отбор
//         Оформление - структура с именами полей (см.ниже), определяющая оформление (по умолч.жирный шрифт)
//         
// Имена элементов настройки оформления:
// ЦветТекста (TextColor); 
// ЦветФона (BackColor); 
// Шрифт (Font); 
// Формат (Format); 
// ГоризонтальноеПоложение (HorizontalAlign); 
// ВертикальноеПоложение (VerticalAlign); 
// ОриентацияТекста (TextOrientation); 
// Отступ (Indent); 
// АвтоОтступ (AutoIndent); 
// ВыделятьОтрицательные (MarkNegatives); 
// Текст (Text).
//
Процедура ДобавитьУсловноеОформление(рФорма,рПараметры) Экспорт
Попытка
	// адреса (обязательное)
	рПутьОформляемогоПоля=СокрЛП(рПараметры.ОформляемоеПоле);
	рПутьПоляИсточника=СокрЛП(рПараметры.ПолеИсточник);
	// оформление и прочее
	рВидСравнения=?(рПараметры.Свойство("ВидСравнения"),рПараметры.ВидСравнения,ВидСравненияКомпоновкиДанных.Равно);
	рПравоеЗначение=?(рПараметры.Свойство("ПравоеЗначение"),рПараметры.ПравоеЗначение,Неопределено);
	рОформление=?(рПараметры.Свойство("Оформление"),рПараметры.Оформление,Новый Структура);
	Если рОформление.Количество()=0 Тогда 
		рОформление.Вставить("Шрифт",Новый Шрифт(,,Истина));
	КонецЕсли;
	
	// оформляемый элемент добавляем каждый раз, не глядя, что уже есть элементы про этот же элемент формы!
	// если делать иначе, то для каждого элформы возможно лишь одно оформление
	рПолеОформляемое=Новый ПолеКомпоновкиДанных(рПутьОформляемогоПоля);
	эуо=рФорма.УсловноеОформление.Элементы.Добавить();
	полеэуо=эуо.Поля.Элементы.Добавить();
	полеэуо.Поле=рПолеОформляемое;
	полеэуо.Использование=Истина;
	//
	рПолеИсточник=Новый ПолеКомпоновкиДанных(рПутьПоляИсточника);
	отб=ПолучитьОтборСКД(эуо.Отбор,рПолеИсточник);
	Если отб=Неопределено Тогда
		отб=эуо.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
		отб.ЛевоеЗначение=рПолеИсточник;
	КонецЕсли;
	отб.ВидСравнения=рВидСравнения;
	отб.ПравоеЗначение=рПравоеЗначение;
	Для каждого киз Из рОформление Цикл
		эуо.Оформление.УстановитьЗначениеПараметра(киз.Ключ,киз.Значение);
	КонецЦикла;
	//
Исключение
	Сообщить("РаботаСДиалогамиСервер.ДобавитьУсловноеОформление, ошибка: "+ОписаниеОшибки(),СтатусСообщения.ОченьВажное);
КонецПопытки;
КонецПроцедуры

// Обеспечивает для колонки таблицы эффект "ПриВыводеСтроки.УстановитьТекст", согласно заданному списку,
// определяющему, какое реальное значение данных колонки будет заменено на какое текстовое представление.
//
// Параметры:
//    рФорма - форма, на которой всё происходит (сериализованный вызов с сервера)
//    рИмяТаблицы - имя элемента и реквизита таблицы (должны совпадать!); может содержать полный путь к данным
//    рОформляемоеПоле - строка или структура, определяющая реквизит-источник данных для отбора СКД УслОформ.
//       и поле-элемент формы, подлежащее собственно оформлению;
//       если строка - подразумевается, что это и имя реквизита колонки, и имя элемента формы, причём имя реквизита
//       колонки должно совпадать с постфиксом имени элемента колонки, т.е. МояТаблица.МоёПоле и МояТаблицаМоёПоле;
//       если структура - должны быть ключи ОформляемоеПоле (элемент формы) и РеквизитИсточник (для отбора СКД).
//    спДанных - список значений, в значениях - исходные, в представлениях - подлежащие показу
//
Процедура ДобавитьПриВыводеСтроки(рФорма,рИмяТаблицы,рОформляемаяКолонка,спДанных) Экспорт
Попытка
	// в имени таблицы может быть и полный путь к данным этой таблицы
	Если Найти(рИмяТаблицы,".")<>0 Тогда
		мПуть=ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(рИмяТаблицы,".");
		рИмяТаблицыБезПути=СокрЛП(мПуть.Получить(мПуть.Количество()-1));
	Иначе
		рИмяТаблицыБезПути=рИмяТаблицы;
	КонецЕсли;
	//
	Если ТипЗнч(рОформляемаяКолонка)=Тип("Строка") Тогда
		// имя реквизита колонки совпадает с постфиксом имени элемента колонки, т.е. они синонимичны
		// и оформляется та же колонка, что служит источником данных
		рПолеОформления=Новый ПолеКомпоновкиДанных(рИмяТаблицыБезПути+СокрЛП(рОформляемаяКолонка));	
		рПутьОтбора=Новый ПолеКомпоновкиДанных(рИмяТаблицы+"."+СокрЛП(рОформляемаяКолонка));
	ИначеЕсли ТипЗнч(рОформляемаяКолонка)=Тип("Структура")
	и рОформляемаяКолонка.Свойство("ОформляемоеПоле")
	и рОформляемаяКолонка.Свойство("РеквизитИсточник")
	Тогда
		// источником данных для пути к данным отбора оформления может служить не та колонка, что оформляется
		рПолеОформления=Новый ПолеКомпоновкиДанных(рИмяТаблицыБезПути+СокрЛП(рОформляемаяКолонка.ОформляемоеПоле));
		рПутьОтбора=Новый ПолеКомпоновкиДанных(рИмяТаблицы+"."+СокрЛП(рОформляемаяКолонка.РеквизитИсточник));
	Иначе
		Возврат;
	КонецЕсли;
	
	//сообщить("поле оформления: "+рПолеОформления+", путь отбора "+рПутьОтбора);
	Для каждого знч Из спДанных Цикл
		// и добавляем условное оформление (аналог ПриВыводеСтроки для показа представления вместо значения)
		эуо=рФорма.УсловноеОформление.Элементы.Добавить();
		полеэуо=эуо.Поля.Элементы.Добавить();
		полеэуо.Поле=рПолеОформления;
		полеэуо.Использование=Истина;
		отб=эуо.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
		отб.ЛевоеЗначение=рПутьОтбора;
		отб.ВидСравнения=ВидСравненияКомпоновкиДанных.Равно;	
		отб.ПравоеЗначение=знч.Значение;
		отб.Использование=Истина;
		эуо.Оформление.УстановитьЗначениеПараметра("Текст",знч.Представление);
	КонецЦикла;
Исключение
	Сообщить("РаботаСДиалогамиСервер.ДобавитьПриВыводеСтроки, ошибка: "+ОписаниеОшибки(),СтатусСообщения.ОченьВажное);
КонецПопытки;
КонецПроцедуры
Показать


И кому оно надо?
17. akor77 207 22.11.15 22:08 Сейчас в теме
(5) не поддавайся на провокации!
Процветай и преуспевай!
http://www.scientology.ru/videos/category/twth/twth-film-precept-21.html#/videos/category/twth/twth-film-precept-21
Вспомни, как меня на корню хотел один тип задавить.
Начал, продолжай, развивай!
dj_serega; +1 Ответить
11. Yashazz 3482 22.05.15 16:34 Сейчас в теме
Вообще, тенденция пугающая. Стабильно большой популярностью пользуются куцые, слабо структурированные, откровенно копипащенные, мутно и отрывочно изложенные "публикации", выложенные средненько знающими для совсем слабо знающих. За счёт рейтинга такие горе-публикации легко обходят действительно профессиональные разработки, стоившие несоизмеримо больше ресурсов их авторам. Энтузиазм профи-авторов, таким образом, не получает должной оценки. Так на первый план ИС выходят не профессиональные разработки, как хотелось бы, а убогие исходники или псевдо-учебные фрагменты (редко-редко можно видеть действительно качественный учебник, буде то справочник или пошаговик). В результате ИС становится "лягушатником" для начинающих, которые и жёлтых книжек-то не читали, не то что материалов ИТС, а в "лучших" публикациях болтается такое позорище, что уж не знаю, как Доржи перед 1С не стыдно.

пы.сы. Себя отношу не к профи, а к средненько знающим. Именно посмотрев на ситуацию и рейтинг, резко перестал выкладывать "статьи". Мне хватило печального опыта с XPath и модальностями/асинхроном. Жаль, что автору этой публикации самокритики недостаёт.
KSy; unichkin; +2 Ответить
12. dj_serega 374 22.05.15 17:41 Сейчас в теме
(11) Yashazz,
Стабильно большой популярностью пользуются куцые, слабо структурированные, откровенно копипащенные, мутно и отрывочно изложенные "публикации", выложенные средненько знающими для совсем слабо знающих.

Такие публикации не всегда вырываются в перед.
Так на первый план ИС выходят не профессиональные разработки, как хотелось бы

Да ну. Вот взять к примеру ildarovich'а. Его публикации всегда пользуются популярностью. И очень часто на первых местах.
Жаль, что автору этой публикации самокритики недостаёт.

Жаль что Вы так считаете.

Именно посмотрев на ситуацию и рейтинг, резко перестал выкладывать "статьи".

А Вы не сдавайтесь, выкладывайте свои Стоящие статьи. С интересом почитаю.
13. gigapevt 22 27.05.15 09:28 Сейчас в теме
(12) Согласен с автором, тоже с удовольствием почитаю !
14. alon 171 27.05.15 11:37 Сейчас в теме
Вряд ли возможно научиться сразу выдать профессионально написанные публикации, полезные специалистам абсолютно всех уровней. Всегда приходится с чего-то начинать.
Кроме того, часто только в процессе обсуждения удается выяснить некоторые нюансы обсуждаемого вопроса. При этом пользу получает и автор и окружающие, которые не будут повторять те же грабли.
Я считаю, что здесь на передний план выступает более глубокая модерация знающими специалистами. Нужно установить более строгие требования на публикацию. Сделать предварительное обсуждение в песочнице. Ранжировать статьи для разных уровней профессионализма.
Вы же не предъявляете к ребенку на уроке рисования те же требования, что и к выпускнику художественного училища? То же самое и тут.
cleaner_it; user804163; V.Nikonov; KSy; dgolovanov; dj_serega; +6 Ответить
18. cleaner_it 219 21.11.17 09:51 Сейчас в теме
(14) Больше двух лет прошло - до сих пор актуально)
15. IamIvan 20.06.15 23:10 Сейчас в теме
Программное выполнение это здорово.
А кто-нибудь решал задачку такого рода:
Есть внешние отчеты на СКД. Надо из одной конфигурации выполнить их в другой и отобразить.

Я ничего кроме как выполнить запрос через ком и подставь в таблицу набора не придумал.
16. tristarr1 54 08.09.15 09:03 Сейчас в теме
(15) IamIvan, А данные нужны с расшифровками? если без, то можно выполнять их и передавать табличный документ.
Оставьте свое сообщение

См. также

Использование классов .Net в 1С для новичков Промо

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    76776    Serginio    108    

Произвольные колонтитулы и повтор шапки таблицы в табличном документе (функция)

Универсальные функции v8 Бесплатно (free)

Пример рекурсивной функции, при помощи которой в табличный документ можно выводить верхний или нижний колонтитулы с произвольным содержимым, а также делать повтор шапки таблицы (или таблиц, если их несколько).

07.10.2020    961    ellavs    1    

Улучшенный конструктор запроса тонкого клиента (УИР)

Инструментарий разработчика Консоль запросов v8 1cv8.cf Бесплатно (free)

Конструктор запросов тонкого клиента появился в платформе с 8.3.5 обладает рядом недостатков, которые возможно исправить. Передача входных таблиц, исправление связей и другое

07.09.2020    2855    Evg-Lylyk    13    

Пробуем Снегопат (устанавливаем и настраиваем полнофункциональную триальную версию)

Снегопат, openconf v8 Бесплатно (free)

Снегопат — это инструмент, который расширяет штатные функции конфигуратора 1C и превращает его в современную IDE. В данной статье я подробно расскажу, как установить триал-версию Снегопата и сразу начать использовать его наиболее полезные функции. Статья рассчитана прежде всего на тех, кто со Снегопатом сталкивается впервые и хочет разобраться в его возможностях.

31.08.2020    8804    kuntashov    63    

Универсальные функции с примерами использования Промо

Универсальные функции v8 Бесплатно (free)

14 универсальных функций, с примерами использования - для обычного и управляемого интерфейса

26.02.2016    41322    unichkin    46    

paste1c.ru - сервис для обмена кодом для 1С:Предприятия

Прочие инструменты разработчика v8 Бесплатно (free)

Paste1C.ru - сервис для обмена кодом для 1С:Предприятия c подсветкой синтаксиса и подсказками.

21.08.2020    5760    salexdv    48    

1С:EDT. Куда пинать, чтобы полетело?

EDT v8 УНФ Россия Бесплатно (free)

Работал в 1С Конфигуратор и решил перейти на 1С EDT. Не получилось сразу. Потребовалась модификация компьютера.

19.08.2020    4584    pa240775    33    

Снегопат – Dev или Ops?

Снегопат, openconf v8 Бесплатно (free)

Снегопат – программный комплекс, повышающий эффективность работы в конфигураторе 1С. О новом эволюционном этапе проекта, его возможностях и планах развития на митапе «DevOps в 1С» рассказал разработчик Снегопата, системный программист компании Инфостарт Александр Орефков.

17.08.2020    4801    orefkov    44    

Минимализмы 3 Промо

Практика программирования Универсальные функции v8 Бесплатно (free)

Очередная серия "минимализмов" [http://infostart.ru/public/306536/, https://infostart.ru/public/460935/]. Также, как и в предыдущих статьях, здесь приведена подборка коротких оригинальных авторских решений некоторых задач. Ранее эти решения были разбросаны по моим комментариям к чужим публикациям.

19.02.2018    46811    ildarovich    45    

Динамический список, ключи записей. Нюансы

Инструментарий разработчика Практика программирования Конфигурирование 1С v8 Бесплатно (free)

Заметки об особенностях динамических списков с произвольным запросом и видом ключа, отличным от "Авто"

07.08.2020    1756    Yashazz    4    

Самый простой парсинг и обработка веб-страниц в 1С

WEB Универсальные функции v8 1cv8.cf Бесплатно (free)

Рассмотрим самый простой парсинг веб-страниц средствами платформы 1С и еще некоторые полезные приемы работы с веб-страницами.

07.08.2020    4791    YPermitin    18    

Выполнение внешней обработки по расписанию для управляемого и обычного приложения

БСП (Библиотека стандартных подсистем) Универсальные функции v8 1cv8.cf Россия Бесплатно (free)

Использование БСП для выполнения внешних обработок в управляемом и обычном приложении

06.08.2020    1438    RPGrigorev    0    

Легкий способ обновления измененной конфигурации Промо

Инструментарий разработчика v8 Бесплатно (free)

Легкий способ обновления измененной конфигурации. Сервис подготовки расширения конфигурации

25.10.2017    23605    avk72    63    

Пользовательское поле СКД одной процедурой

Практика программирования Универсальные функции v8 Бесплатно (free)

Быстрое создание пользовательского поля "выражение" одной процедурой

05.08.2020    1591    Yashazz    0    

Редактор HTML

Инструментарий разработчика Прочие инструменты разработчика v8 1cv8.cf Россия Бесплатно (free)

Инструмент из состава набора "Универсальные инструменты 1С" для быстрой адаптации html страниц для корректного отображения в Поле HTML документа

03.08.2020    1278    cprit    3    

Глобальное меню разработчика для управляемых форм

Инструментарий разработчика v8 v8::УФ 1cv8.cf Бесплатно (free)

Подсистема "Инструменты разработчика". Глобальное контекстное меню разработчика для управляемых форм в толстом клиенте.

03.08.2020    3427    tormozit    14    

Выполнение произвольного кода в фоновых заданиях Промо

Универсальные функции v8 Бесплатно (free)

Если надо быстро провести 100`000 документов...

13.01.2016    24694    unichkin    13    

Консоль кода и зачем она нужна

Прочие инструменты разработчика v8 Бесплатно (free)

Когда использовать, обзор консолей кода: плюсы - минусы.

27.07.2020    4502    Evg-Lylyk    47    

Полезные встроенные функции для работы с печатными формами и не только на УТ 11.4 и БП 3.0 (сравнение)

Универсальные функции v8 БП3.0 УТ11 Россия Бесплатно (free)

В данном обзоре приведу примеры встроенных используемых функций для работы с печатными формами на примерах конфигураций Управление торговлей 11.4 и Бухгалтерия 3.0.

10.07.2020    3031    quazare    5    

Вывод дерева в табличный документ СКД

Практика программирования Универсальные функции v8 v8::СКД Бесплатно (free)

Вывод содержимого элемента формы "ДанныеФормыДерево" в табличный документ средствами СКД.

09.07.2020    2653    Yashazz    6    

Перевод интерфейса конфигурации с использованием программы 1С:Переводчик Промо

Инструментарий разработчика v8 Бесплатно (free)

Перевод текстов интерфейсов конфигураций без использования технологии памяти переводов приводит к рассогласованности терминологии, когда один и тот же объект в конфигурации в разных меню может называться по-разному. Решить эту проблему можно используя программу 1С:Переводчик.

09.02.2015    33238    boogie    21    

Команда "Вывести список" для динамического списка. Программное выполнение (вариант)

Универсальные функции v8::УФ 1cv8.cf Бесплатно (free)

Делаем свою кнопку вместо "Вывести список" из пункта "ещё" динамического списка.

11.06.2020    3098    DanDy    58    

Unit-тесты с помощью 1C:Enterprise Development Tools

EDT v8 Бесплатно (free)

Концепция TDD требует перестроения подходов к разработке и наличия инструментов для запуска Unit-тестов. Про написание плагина для EDT, который содержит в себе инструменты написания, анализа результатов и запуска Unit-тестов для конфигураций 1С на конференции Infostart Event 2019 Inception рассказал ведущий специалист по внедрению компании 1С-Рарус Александр Капралов.

11.06.2020    4027    doublesun    7    

Шпаргалка. Автоматическое тестирование внешних отчетов и обработок в нескольких информационных базах

Прочие инструменты разработчика v8 Бесплатно (free)

Используем Автоматизированное тестирование на практике. Простой код для обновления и запуска внешних отчетов и обработок в нескольких ИБ. Создаем рабочее решение с нуля.

02.05.2020    4454    pparshin    21    

Сервис обмена кодом Промо

Инструментарий разработчика v8 1cv8.cf Бесплатно (free)

Бывало так, что вам нужно быстро показать кому-то свой код, но опубликовать его негде, так как популярные сервисы просто не поддерживают раскраску кода 1С? Теперь решение есть!

26.06.2015    20505    Infactum    23    

Enterprise Development Tools, версия 2020.2 для мобильной разработки. Бег по граблям (серия публикаций от чайника для чайников)

EDT v8::Mobile 1cv8.cf Бесплатно (free)

Небольшие советы, которые сберегут время при работе с Enterprise Development Tools, версия 2020.2.

10.04.2020    4388    capitan    8    

Управляемая консоль отчетов – новый функциональный инструмент для работы с запросами и СКД в управляемых формах

Прочие инструменты разработчика Консоль запросов v8::УФ v8::Запросы v8::СКД Бесплатно (free)

Консоль запросов и СКД – один из наиболее часто используемых программистом инструментов. Как с его помощью можно упростить разработку, в своем докладе на конференции Infostart Event 2019 Inception рассказал Евгений Люлюк, ведущий программист компании GLT.

06.04.2020    7407    Evg-Lylyk    0    

EDT + УТ 11.4 + БП 3.0 + Расширения. ЧАСТЬ 03

EDT v8 Бесплатно (free)

Групповая разработка в EDT.

21.01.2020    4411    YuriYuriev    3    

1C:Enterprise Development tools (EDT) или кодим в Eclipse Промо

EDT v8 Бесплатно (free)

Как и выход мобильной платформы был для оооочень большого числа разработчиком открытием, так и я уверен, что и о новом конфигураторе - тоже мало кто слышал. Поэтому давайте попробуем пробежаться по новому конфигуратору. (Много больших картинок)

11.04.2015    77328    DitriX    297    

EDT + УТ 11.4 + БП 3.0 + Расширения. Часть 02

EDT v8 Бесплатно (free)

Продолжение "путевых заметок" про EDT...

09.01.2020    6291    YuriYuriev    31    

EDT + УТ 11.4 + БП 3.0 + Расширения. ЧАСТЬ 01

EDT v8 Бесплатно (free)

...продолжаем мучить(ся с) EDT

28.12.2019    6638    YuriYuriev    8    

Сходство Джаро - Винклера. Нечеткое сравнение строк

Универсальные функции v8 Россия Бесплатно (free)

В области информатики и статистики сходство Джаро - Винклера представляет собой меру схожести строк для измерения расстояния между двумя последовательностями символов. В публикации рассмотрены некоторые особенности алгоритма, и представлен вариант его реализации на языке 1С.

25.12.2019    7089    brooho    17    

Распределение оплаты по товарам Промо

Практика программирования Универсальные функции v8 1cv8.cf Бесплатно (free)

Учебная задача. Оплата приходит по заказу. Требуется запросом распределить её по товарам. Практическая задача была сложнее. Упростил специально для иллюстрации. Сначала собираем в одну таблицу заказы и товары. Затем ОБЪЕДИНТЬ ВСЕ с оплатами. Потом намазываем оплату на товар.

04.08.2014    19176    Трактор    5    

EDT 1.16. Первые 20 часов работы

EDT v8 Россия Бесплатно (free)

Первое знакомство с 1C:Enterprise Development Tools, версия 1.16.0.363.

25.12.2019    10831    YuriYuriev    13    

Функция - Формат государственного номера автомобиля

Универсальные функции v8 Автомобили, автосервисы Россия Бесплатно (free)

Возникла необходимость в приведении к единому формату хранящихся, и вводимых вновь, автомобильных Регистрационных знаков - Гос.номер.

23.12.2019    3795    brooho    4    

Как работают управляемые формы и тонкий клиент 1С – взгляд "из-под капота"

Практика программирования Инструментарий разработчика v8::УФ Бесплатно (free)

Переход на управляемые формы перевернул процесс разработки на 1С, заставив программистов менять привычные подходы к описанию логики работы интерфейса. Руководитель компании «Цифровой Кот» Юрий Лазаренко в своем докладе на конференции Infostart Event 2019 Inception рассказал о том, как устроены управляемые формы и как правильно работать с тонким клиентом платформы 1С:Предприятие.

23.12.2019    12898    TitanLuchs    23    

TurboConf:Шаблоны - сервис для поиска и хранения фрагментов кода Промо

Инструментарий разработчика v8 1cv8.cf Бесплатно (free)

Сервис добавляет в Конфигуратор возможность поиска и хранения фрагментов кода. Делитесь своими шаблонами с другими разработчиками или используйте уже готовые!

13.08.2014    22533    m.bolsun    68    

Мониторим производительность с помощью 1С RAS

Инструментарий разработчика Производительность и оптимизация (HighLoad) v8 1cv8.cf Бесплатно (free)

Подключаемся и анализируем данные через 1С RAS. Необходимо выполнить 5 пунктов и серьезный инструмент мониторинга будет у вас в руках.

19.12.2019    11691    ivanov660    16    

Полезности | Дерево значений | Обычные формы |

Практика программирования Универсальные функции v8 Бесплатно (free)

Полезные функции при работе с деревом значений.

04.12.2019    5711    Mellow    7    

Разбор любого JSON-объекта в соответствующую структуру

Инструментарий разработчика WEB v8 1cv8.cf Бесплатно (free)

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

13.11.2019    9681    user665435_al.windstorm    15    

Подсистема "COMExchange": консоль запросов в режиме «Консоль кода». Промо

Консоль запросов v8 1cv8.cf Россия Бесплатно (free)

Описана возможность использования обработки «Консоль запросов 1С+ADO» в качестве «консоли кода». При этом имеется возможность помещения результатов вычислений в «табло формул». Кроме результатов вычислений в это «табло» можно также вывести время выполнения и описание обработанных ошибок времени исполнения.

03.04.2014    26069    yuraos    2    

Обработка расширением на клиенте

Расширения Универсальные функции v8::УФ 1cv8.cf Бесплатно (free)

Описываю нетривиальный прием работы с расширением, который позволит относительно быстро реализовывать некоторые обработки данных. Суть: обработка данных на клиенте с использованием методов, которые реализованы разработчиком конфигурации на форме объекта. Если эти методы есть вне модуля формы объекта (общий модуль, модуль менеджера, модуль объекта)- лучше сделать обработку более простым способом.

31.10.2019    7172    EvgenURNN    10    

Git для 1С-ника и другие технологии групповой разработки

Инструментарий разработчика Git (GitHub, GitLab, BitBucket) v8 1cv8.cf Россия Бесплатно (free)

У многих специалистов в отношении Git сложились стереотипы, мешающие начать работу с этим прекрасным и удобным инструментом. Почему его не стоит бояться, и чем он может упростить жизнь 1С-никам, рассказал архитектор ГК «Невада» Станислав Ганиев.

28.10.2019    12855    stas_ganiev    16    

Использование XML-схемы из макета внешней обработки

Обмен через XML Универсальные функции v8 1cv8.cf Бесплатно (free)

Простой способ использования XML-схем из макета внешней обработки.

28.10.2019    10981    Olesia_Matusevich    10    

VM1C - виртуальная машина для 1С Промо

Инструментарий разработчика v8 1cv8.cf Россия Бесплатно (free)

Демонстрация возможностей виртуальной машины для 1С. Создаем и выполняем код модулей в режиме Предприятия в реальном времени.

07.06.2013    24066    m.bolsun    46    

Быстрое создание наполненных коллекций

Практика программирования Универсальные функции v8 1cv8.cf Бесплатно (free)

Разберем самые частые способы создания коллекции, значения которой известны заранее. И сравним скорость их выполнения.

28.10.2019    7226    SeiOkami    66    

Преобразование XML в таблицу значений или иной объект 1С методом XSL преобразования

Универсальные функции Обмен через XML v8 1cv8.cf Бесплатно (free)

Сразу открою интригу, напрямую прочитать XML, не содержащий объект 1С, не удастся. Статья раскрывает способы привести XML к формату, который возможно прочитать средствами платформы.

24.10.2019    11525    kraspila    30    

Обертка функций Excel на русском. Ускорение процесса разработки.

Загрузка и выгрузка в Excel Универсальные функции v8 Бесплатно (free)

Устали переключаться с русского на английский и обратно при работе с таблицами Excel из 1С? Сборка наиболее необходимых функций и методов работы с Excel, обернутых в функции 1С на русском языке.

24.10.2019    7283    DmitryKotov    6    

Подсистема "COMExchange", "Консоль запросов 1C + ADO" - сервис обработки выборки запроса: грузим курс «бакса» ЦБРФ из файла *.dbf или *.xlsx. Промо

Консоль запросов v8 КА1 УТ10 УПП1 Россия Бесплатно (free)

На примере загрузки курса валюты продемонстрированы возможности консоли запросов в составе подсистемы "COMExchange" для обработки данных из внешних файлов и их синхронизации с данными информационной базы 1С.

10.03.2013    33290    yuraos    3    

Полезняшки по СКД и построителям. Просто код

Практика программирования Универсальные функции v8 v8::СКД Бесплатно (free)

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

10.10.2019    10082    Yashazz    45    

Про ТабДок или TabDoc Pro

Практика программирования Инструментарий разработчика v8 Бесплатно (free)

Табличный документ – всем знакомый и привычный компонент продукта 1С. Про оптимизацию работы табличного документа, его проблемы и недостатки в своем докладе на конференции Infostart Event 2019 Education рассказал ведущий программист BIA-Technologies Князьков Алексей.

11.09.2019    6626    AKnyazkov    26    

FastCode - сервис шаблонов кода 1С

Инструментарий разработчика v8 Бесплатно (free)

Удобный поиск по базе шаблонов кода, БСП, ответы на вопросы, помощь сообщества программистов 1С. Клиент для поиска прямо в Конфигураторе!

10.09.2019    10251    m.bolsun    23    

Как мы разрабатываем в EDT

EDT Инструментарий разработчика v8 Бесплатно (free)

EDT – это новая среда разработки, на которую сейчас перешли разработчики фирмы «1С». Однако до сих пор существует ряд «белых пятен», касающихся как теоретической, так и практической части применения этого инструмента. Про опыт перехода на разработку в EDT на конференции INFOSTART EVENT 2018 EDUCATION рассказал начальник сектора разработки в компании «Группа Полипластик» Владимир Крючков.

23.08.2019    12633    ivanov660    24