Найдено публикаций: 3
//Создаем таблицу значений
ТабЗнч = Новый ТаблицаЗначений;
ТабЗнч.Колонки.Добавить("Наименование");
ТабЗнч.Колонки.Добавить("Значение");
//Заполняем ТЗ
Для н=1 По 100 Цикл
СтрокаТЗ = ТабЗнч.Добавить();
СтрокаТЗ.Наименование = "Н"+н;
СтрокаТЗ.Значение = "К"+н;
//Здесь каждый 10-й элемент делаем дубляжом
Если (н%10)=0 Тогда
СтрокаТЗ2 = ТабЗнч.Добавить();
СтрокаТЗ2.Наименование = "Н"+н;
СтрокаТЗ2.Значение = "К"+н;
КонецЕсли;
КонецЦикла;
//Перебираем заполненное ТЗ
Для й=0 По ТабЗнч.Количество()-1 Цикл
//Не даем провалиться индексу за грани
Если й>ТабЗнч.Количество()-1 Тогда
Прервать;
КонецЕсли;
//Пропускаем первый элемент
Если й=0 Тогда
Продолжить;
КонецЕсли;
//Ну и собственно сравниваем значения текущего с предыдущем
Если ТабЗнч[й].Наименование = ТабЗнч[й-1].Наименование Тогда
ТабЗнч[й-1].Значение = ТабЗнч[й-1].Значение + ", " + ТабЗнч[й].Значение;
ТабЗнч.Удалить(й);
КонецЕсли;
КонецЦикла;
Функция ПолучитьВерхнегоРодителяНоменклатуры(мНом)
ЗапросПодразделения = Новый Запрос;
ЗапросПодразделения.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка = &Ссылка
|ИТОГИ ПО
| Ссылка ТОЛЬКО ИЕРАРХИЯ";
ЗапросПодразделения.УстановитьПараметр("Ссылка",мНом);
Выборка = ЗапросПодразделения.Выполнить().Выбрать();
МассивРодителей = Новый Массив;
Пока Выборка.Следующий() Цикл
Если Выборка.Ссылка.ЭтоГруппа Тогда
МассивРодителей.Добавить(Выборка.Ссылка);
КонецЕсли;
КонецЦикла;
Возврат МассивРодителей
//обход элементов формы и сравнение с реквизитами табличной части ПараметрыСегментации
Для Каждого Стр Из Объект.ПараметрыСегментации Цикл
Для Каждого Элемент Из Элементы Цикл
Если ТипЗнч(Элемент) = Тип("ПолеФормы") Тогда
Если Элемент.Имя = Стр.ЗаголовокПоля Тогда
УстановитьЗначениеЭлемента(Стр.ЗаголовокПоля,Стр.ЗначениеПоля);
Элемент.ТолькоПросмотр = Истина;
ТекстДействиеЭлемента = ДействиеЭлемента(Стр.ЗаголовокПоля);
Выполнить(ТекстДействиеЭлемента);
КонецЕсли;
ИначеЕсли ТипЗнч(Элемент) = Тип("ТаблицаФормы") Тогда
//Получаем наименование табличной части из макета
Позиция = Найти(Стр.ЗаголовокПоля,".");
Если Позиция <> 0 Тогда
ТЧИмя = Лев(Стр.ЗаголовокПоля, Позиция-1);
Если Элемент.Имя = ТЧИмя Тогда
ЗаголовокПоля = СтрЗаменить(Стр.ЗаголовокПоля,Лев(Стр.ЗаголовокПоля,Позиция),"");
УстановитьЗначениеЭлементаТабличнойЧасти(ТЧИмя,ЗаголовокПоля,Стр.ЗначениеПоля);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
&НаСервере
Процедура УстановитьЗначениеЭлемента(ИмяЭлемента,ЗначениеЭлемента)
ПутьКДаннымЭлемента = ВернутьПутьКДаннымЭлемента(ИмяЭлемента);
Если Лев(ПутьКДаннымЭлемента,7) = "Объект." Тогда
ПутьКДаннымЭлемента = СтрЗаменить(ПутьКДаннымЭлемента,"Объект.","");
Объект[ПутьКДаннымЭлемента] = ЗначениеЭлемента;
Иначе
ЭтаФорма[ПутьКДаннымЭлемента] = ЗначениеЭлемента;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьЗначениеЭлементаТабличнойЧасти(ТЧИмя,ИмяЭлемента,ЗначениеЭлемента)
ПутьКДаннымТЧ = ВернутьПутьКДаннымЭлемента(ТЧИмя);
Если Лев(ПутьКДаннымТЧ,7) = "Объект." Тогда
ПутьКДаннымТЧ = СтрЗаменить(ПутьКДаннымТЧ,"Объект.","");
Если Объект[ПутьКДаннымТЧ].Количество() = 0 Тогда
СтрокаТЧ = Объект[ПутьКДаннымТЧ].Добавить();
СтрокаТЧ[ИмяЭлемента] = ЗначениеЭлемента;
Иначе
СтрокаТЧ = Объект[ПутьКДаннымТЧ].Получить(0);
СтрокаТЧ[ИмяЭлемента] = ЗначениеЭлемента;
КонецЕсли;
Иначе
Если ЭтаФорма[ПутьКДаннымТЧ].Количество() = 0 Тогда
СтрокаТЧ = ЭтаФорма[ПутьКДаннымТЧ].Добавить();
СтрокаТЧ[ИмяЭлемента] = ЗначениеЭлемента;
Иначе
СтрокаТЧ = ЭтаФорма[ПутьКДаннымТЧ].Получить(0);
СтрокаТЧ[ИмяЭлемента] = ЗначениеЭлемента;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ВернутьПутьКДаннымЭлемента(ИмяЭлемента)
Возврат Элементы[ИмяЭлемента].ПутьКДанным;
КонецФункции