Все публикации

БСП
Разработки

Найдено результатов: 24


Вывести на печать произвольную таблицу значений (ТЗ)

Выводит на печать произвольную ТЗ
Дамир 3
//вариант 1
&НаКлиенте
Процедура ВывестиНаПечать(Команда)
    ТабДок = ВывестиНаПечатьНаСервере();
    ТабДок.Показать();
КонецПроцедуры

&НаСервере
Функция ВывестиНаПечатьНаСервере()
    ТЗ = РеквизитФормыВЗначение("Реквизит1");
    ПостроительОтчета = Новый ПостроительОтчета;
    ПостроительОтчета.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ);
    
    ТабДок = Новый ТабличныйДокумент;
    ПостроительОтчета.Вывести(ТабДок);
    Возврат ТабДок
КонецФункции

//вариант 2
&НаКлиенте
Процедура ВывестиНаПечать2(Команда)
    ТабДок = ВывестиНаПечатьНаСервере2();
    ТабДок.Показать();    
КонецПроцедуры

&НаСервере
Функция ВывестиНаПечатьНаСервере2()
    ТЗ = РеквизитФормыВЗначение("Реквизит1");
    
    ТабДок = Новый ТабличныйДокумент;
    Сч = 1;
    Для Каждого Колонка Из ТЗ.Колонки Цикл
        ТабДок.Область(1, Сч).Текст = Колонка.Имя;
        Сч = Сч + 1
    КонецЦикла;
    
    КоличествоКолонок = ТЗ.Колонки.Количество();
    
    ТекущаяСтрока = 2;
    Для Каждого Стр Из ТЗ Цикл
        Для Сч = 1 По КоличествоКолонок Цикл
            ТабДок.Область(ТекущаяСтрока, Сч).Текст = Стр[Сч - 1];            
        КонецЦикла;
        ТекущаяСтрока = ТекущаяСтрока + 1;
    КонецЦикла;
    
    Возврат ТабДок
КонецФункции


Как выбрать наибольшее значение из ТЗ

Как выбрать наибольшее значение из ТЗ
Сергей 2
ИстДанных = Новый ОписаниеИсточникаДанных(ТЗ);
ИстДанных.Колонки.Кол.Итог = "Максимум(Кол)" ;
ПостроительЗапроса = Новый ПостроительЗапроса; 
ПостроительЗапроса.ИсточникДанных = ИстДанных; 
Результат = ПостроительЗапроса.Результат; // тип РезультатЗапроса     
 
ТЗРез = Результат.Выгрузить();
МаксКол = ТЗРез[0].Кол;

Таблица значений

обход таблицы и работа с ней по условию
Максим1C 7 1
//Создаем таблицу значений
	ТабЗнч = Новый ТаблицаЗначений;
	ТабЗнч.Колонки.Добавить("Наименование");
	ТабЗнч.Колонки.Добавить("Значение");
	
	//Заполняем ТЗ
	Для н=1 По 100 Цикл
		
		СтрокаТЗ = ТабЗнч.Добавить();
		СтрокаТЗ.Наименование = "Н"+н;
		СтрокаТЗ.Значение = "К"+н;
		
		//Здесь каждый 10-й элемент делаем дубляжом
		Если (н%10)=0 Тогда
			СтрокаТЗ2 = ТабЗнч.Добавить();
			СтрокаТЗ2.Наименование = "Н"+н;
			СтрокаТЗ2.Значение = "К"+н;
		КонецЕсли;
		
	КонецЦикла;
	
	//Перебираем заполненное ТЗ
	Для й=0 По ТабЗнч.Количество()-1 Цикл
		
		//Не даем провалиться индексу за грани
		Если й>ТабЗнч.Количество()-1 Тогда
			
			Прервать;
			
		КонецЕсли;
		
		//Пропускаем первый элемент
		Если й=0 Тогда
			
			Продолжить;
			
		КонецЕсли;
		
		//Ну и собственно сравниваем значения текущего с предыдущем
		Если ТабЗнч[й].Наименование = ТабЗнч[й-1].Наименование Тогда
			
			ТабЗнч[й-1].Значение = ТабЗнч[й-1].Значение + ", " + ТабЗнч[й].Значение;
			
			ТабЗнч.Удалить(й);
			
		КонецЕсли;
		
	КонецЦикла;

Отбор по таблице значений

Отбор строк по таблице значений
gorenski 1
СтруктураОтбора = Новый Структура("Номенклатура,ХарактеристикаНоменклатуры", ЗначениеОтбора.Номенклатура, ЗначениеОтбора.ХарактеристикаНоменклатуры);
РезультатОтбора = ТаблицаЗначений.НайтиСтроки(СтруктураОтбора);
//Если РезультатОтбора.Количество() > 0 Тогда
//	СтрокаОтбора = РезультатОтбора[0];
//КонецЕсли;
Для каждого СтрокаОтбора Из РезультатОтбора Цикл
	
КонецЦикла;

Скомпоновать результат отчета

Выполняет компоновку СКД по переданным настройкам
SeiOkami 7 1
// Выполняет компоновку СКД по переданным настройкам
//
// Параметры:
//  Результат               - ТабличныйДокумент,ТаблицаЗначений,ДеревоЗначений                      - результат выполнения
//  СхемаКомпоновкиДанных   - СхемаКомпоновкиДанных                                                 - выполняемая СКД
//  НастройкиКомпоновки     - НастройкиКомпоновкиДанных,КомпоновщикНастроекКомпоновкиДанных,Строка  - выполняемые настройки или адрес временного хранилища или компоновщик с настройками
//  ДанныеРасшифровки       - ДанныеРасшифровкиКомпоновкиДанных, Неопределено                       - данные расшифровки
//  ВнешниеНаборыДанных     - Структура, Неопределено                                               - коллекция внешних наборов данных
//  ДополнительныеПараметры - Структура, Неопределено                                               - коллекция внешних наборов данных
//       * МакетОформления              - МакетОформленияКомпоновкиДанных   - Макет оформления, в соответствии с которым необходимо оформлять макет компоновки данных.
//       * ПроверятьДоступностьПолей    - Булево - Определяет, выполнять ли проверку прав на просмотр полей и проверку доступности поля во включенных функциональных возможностях.
//       * ПараметрыФункциональныхОпций - Булево - Содержит параметры функциональных опций, используемые при исполнении отчета.
//       * ВозможностьИспользованияВнешнихФункций - Булево - Указывает возможность использования функции общих модулей конфигурации в выражениях компоновки данных.
//
// SeiOkami: 
//     https://infostart.ru/profile/309462/
//     https://t.me/JuniorOneS
//Подробнее об использовании метода: https://infostart.ru/public/1082944/?ref=1159
//
Процедура СкомпоноватьРезультатОтчета(Результат, СхемаКомпоновкиДанных, НастройкиКомпоновки, 
    ДанныеРасшифровки = Неопределено, ВнешниеНаборыДанных = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт
           
    
    //Инициализируем настройки
    Если ТипЗнч(НастройкиКомпоновки) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда
        ВыполняемыеНастройки    = НастройкиКомпоновки.ПолучитьНастройки();
    ИначеЕсли ТипЗнч(НастройкиКомпоновки) = Тип("Строка") И ЭтоАдресВременногоХранилища(НастройкиКомпоновки) Тогда
        ВыполняемыеНастройки    = ПолучитьИзВременногоХранилища(НастройкиКомпоновки);
    Иначе 
        ВыполняемыеНастройки    = НастройкиКомпоновки;   
    КонецЕсли;
    
    Если НЕ ТипЗнч(ВыполняемыеНастройки) = Тип("НастройкиКомпоновкиДанных") Тогда
        Возврат;
    КонецЕсли;
    

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

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

Вывод произвольной Таблицы Значений в Табличный Документ

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

	Для каждого Колонка Из Построитель.ВыбранныеПоля Цикл
	   Колонка.Представление = РезультатТЗ.Колонки[Колонка.Имя].Заголовок;
	КонецЦикла; 

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

УдалитьСтрокиТаблицыЗначений

Удаляет строки ТЗ, соответсвующие структуре отбора
prog1c 45 1 5
Функция УдалитьСтрокиТаблицыЗначений(Знач Таблица, СтруктураОтбора) Экспорт
	
	МассивСтрок = Новый Массив;
	РезультатОтбора = Таблица.НайтиСтроки(СтруктураОтбора);
	Для каждого СтрокаОтбора Из РезультатОтбора Цикл
		МассивСтрок.Добавить(СтрокаОтбора);
	КонецЦикла;
	
	Для Каждого СтрокаТЗ Из МассивСтрок Цикл
		Таблица.Удалить(СтрокаТЗ);
	КонецЦикла;
	
    Возврат Таблица;
    
КонецФункции // УдалитьСтрокиТаблицыЗначений()

Найти документ, состав табличной части которого соответствует параметру - таблице значений

Запросом найти ТЧ документа по ТЗ в качестве параметра

Автор: ildarovich

FastCode 66 8
ВЫБРАТЬ
    Товары.Номенклатура,
    Товары.Количество
ПОМЕСТИТЬ Эталон
ИЗ
    &Товары КАК Товары
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
    Товары.Ссылка,
    Товары.Номенклатура КАК Номенклатура,
    Товары.Количество КАК Количество
ПОМЕСТИТЬ ВсеСтроки
ИЗ
    Документ.ЗаказПокупателя.Товары КАК Товары

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ РАЗЛИЧНЫЕ
    ЗаказПокупателя.Ссылка,
    Эталон.Номенклатура,
    Эталон.Количество
ИЗ
    Эталон КАК Эталон,
    Документ.ЗаказПокупателя КАК ЗаказПокупателя
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Пары.Ссылка
ИЗ
    (ВЫБРАТЬ
        Пары.Ссылка КАК Ссылка,
        Пары.Номенклатура КАК Номенклатура,
        Пары.Количество КАК Количество,
        КОЛИЧЕСТВО(*) КАК Признак
    ИЗ
        ВсеСтроки КАК Пары
    
    СГРУППИРОВАТЬ ПО
        Пары.Ссылка,
        Пары.Номенклатура,
        Пары.Количество) КАК Пары

СГРУППИРОВАТЬ ПО
    Пары.Ссылка

ИМЕЮЩИЕ
    МИНИМУМ(Пары.Признак) = 2

Конструктор массива (Массив = Массив(Значение1, ... , Значение20))

- Конструктор массива берет на вход до 20 Параметров, и возвращает их в виде массива - Если первый Параметр это Массив, то в него добавляются остальные Параметры - Рекомендуется добавить в Глобальный модуль - Пример использования: ТЗ = Новый ТаблицаЗначений; Для Каждого ИмяКолонки Из Массив("Колонка1", "Колонка2") Цикл ТЗ.Колонки.Добавить(ИмяКолонки) КонецЦикла;
Функция Массив(
    Значениеначение1=Неопределено, Значение2=Неопределено, Значение3=Неопределено, Значение4=Неопределено, Значение5=Неопределено, 
    Значение6=Неопределено, Значение7=Неопределено, Значение8=Неопределено, Значение9=Неопределено, Значение10=Неопределено, 
    Значение11=Неопределено, Значение12=Неопределено, Значение13=Неопределено, Значение14=Неопределено, Значение15=Неопределено, 
    Значение16=Неопределено, Значение17=Неопределено, Значение18=Неопределено, Значение19=Неопределено, Значение20=Неопределено) Экспорт
    
	Если ТипЗначения(Значение1) = Тип("Массив") Тогда
		М = Значение1	
	Иначе  
		М = Новый Массив();
		Если Значение1=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение1); КонецЕсли;
	КонецЕсли;
    
   Если Значение2=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение2); КонецЕсли; 
   Если Значение3=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение3); КонецЕсли; 
   Если Значение4=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение4); КонецЕсли; 
   Если Значение5=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение5); КонецЕсли; 
   Если Значение6=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение6); КонецЕсли; 
   Если Значение7=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение7); КонецЕсли; 
   Если Значение8=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение8); КонецЕсли; 
   Если Значение9=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение9); КонецЕсли; 
   Если Значение10=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение10); КонецЕсли; 
   Если Значение11=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение11); КонецЕсли; 
   Если Значение12=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение12); КонецЕсли; 
   Если Значение13=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение13); КонецЕсли; 
   Если Значение14=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение14); КонецЕсли; 
   Если Значение15=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение15); КонецЕсли; 
   Если Значение16=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение16); КонецЕсли; 
   Если Значение17=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение17); КонецЕсли; 
   Если Значение18=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение18); КонецЕсли; 
   Если Значение19=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение19); КонецЕсли; 
   Если Значение20=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение20); КонецЕсли;
	
	Возврат М;
КонецФункции

Удаление строк таблицы по условию

Обратный цикл по таблице значений с удалением строк по условию
Ram3 3 1
Для Индекс = -ТЗ.Количество()+1 По -1 Цикл
	Стр =ТЗ.Получить(-Индекс);
	Если Найти(Стр.Имя, "ПодстрокаПоиска") > 0 Тогда
		ТЗ.Удалить(Стр);
	КонецЕсли;
КонецЦикла;

Создать объект ОписаниеТипов

Автор: HostHost

FastCode 66 8
НоваяКолонка = ТЗ.Колонки.Добавить("КолонкаДата", ОбщегоНазначения.ОписаниеТипаДата(ЧастиДаты.Дата));

НоваяКолонка = ТЗ.Колонки.Добавить("КолонкаЧисло", ОбщегоНазначения.ОписаниеТипаЧисло(12));

НоваяКолонка = ТЗ.Колонки.Добавить("КолонкаСтрока", ОбщегоНазначения.ОписаниеТипаСтрока(100));

НоваяКолонка = ТЗ.Колонки.Добавить("КолонкаСсылка", ОбщегоНазначения.ОписаниеТипаВсеСсылки());

ДанныеXDTOИзДанныхИБ

Выполняет преобразование данных информационной базы в структуру с данными в соответствии с правилами.
ОбщийМодуль.ОбменДаннымиXDTOСервер
Автор: 1С
// Выполняет преобразование данных информационной базы в структуру с данными в соответствии с правилами.
//
// Параметры:
//  КомпонентыОбмена    - Структура - содержит все правила и параметры обмена.
//  Источник            - ЛюбаяСсылка - Ссылка на выгружаемый объект информационной базы.
//  ПравилоКонвертации  - СтрокаТаблицыЗначений - Строка таблицы правил конвертации объектов, 
//                        в соответствии с которой выполняется преобразование.
//  СтекВыгрузки        - массив - ссылки на выгружаемые объекты с учетом вложенности.
//
// Возвращаемое значение:
//  Структура - результат преобразования.
//
Функция ДанныеXDTOИзДанныхИБ(КомпонентыОбмена, Источник, Знач ПравилоКонвертации, СтекВыгрузки = Неопределено) Экспорт
	
	Приемник = Новый Структура;
	
	Если СтекВыгрузки = Неопределено Тогда
		СтекВыгрузки = Новый Массив;
	КонецЕсли;
	
	Если ПравилоКонвертации.ЭтоСсылочныйТип Тогда
		
		ПозицияВСтеке = СтекВыгрузки.Найти(Источник.Ссылка);
		
		// Проверяем, выгружался ли объект по ссылке, чтобы не допустить зацикливания.
		Если ПозицияВСтеке <> Неопределено Тогда
			
			Если ПозицияВСтеке > 0 Тогда
				Возврат Неопределено;
			ИначеЕсли СтекВыгрузки.Количество() > 1 Тогда
				// Необходимо искать перебором.
				ПерваяИтерация = Истина;
				Для Каждого ЭлементСтека Из СтекВыгрузки Цикл
					Если ПерваяИтерация Тогда
						ПерваяИтерация = Ложь;
						Продолжить;
					КонецЕсли;
					Если ЭлементСтека = Источник.Ссылка Тогда
						Возврат Неопределено;
					КонецЕсли;
				КонецЦикла;
			КонецЕсли;
		КонецЕсли;
		
		СтекВыгрузки.Добавить(Источник.Ссылка);
		
		Если Не ОбщегоНазначения.СсылкаСуществует(Источник.Ссылка) Тогда
			Возврат Неопределено;
		КонецЕсли;
		
	Иначе
		СтекВыгрузки.Добавить(Источник);
	КонецЕсли;
	
	Если ПравилоКонвертации.ЭтоКонстанта Тогда
		
		Если ПравилоКонвертации.ТипXDTO.Свойства.Количество() = 1 Тогда
			
			Приемник.Вставить(ПравилоКонвертации.ТипXDTO.Свойства[0].Имя, Источник.Значение);
			
		Иначе
			ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Ошибка XML-схемы. Для приемника должно быть задано одно свойство.
				|Тип источника: %1
				|Тип приемника: %2'"),
				Строка(ТипЗнч(Источник)),
				ПравилоКонвертации.ТипXDTO);
		КонецЕсли;
		
	Иначе
		
		// Выполнение ПКС, 1-й этап
		Для Каждого ПКС Из ПравилоКонвертации.Свойства Цикл
			
			Если ПравилоКонвертации.ОбъектДанных <> Неопределено
				И ПКС.СвойствоКонфигурации = ""
				И ПКС.ИспользуетсяАлгоритмКонвертации Тогда
				Продолжить;
			КонецЕсли;
			
			Если СтекВыгрузки.Количество() > 1 И Не ПКС.ОбработкаКлючевогоСвойства Тогда
				Продолжить;
			КонецЕсли;
			
			ВыгрузитьСвойство(
				КомпонентыОбмена,
				Источник,
				Приемник,
				ПКС,
				СтекВыгрузки,
				1);
		КонецЦикла;
		
		// Выполнение ПКС для ТЧ (прямая конвертация).
		Если СтекВыгрузки.Количество() = 1 Тогда
			Для Каждого ТЧИСвойства Из ПравилоКонвертации.СвойстваТабличныхЧастей Цикл
				Если НЕ (ЗначениеЗаполнено(ТЧИСвойства.ТЧКонфигурации) И ЗначениеЗаполнено(ТЧИСвойства.ТЧФормата)) Тогда
					Продолжить;
				КонецЕсли;
				// ТЧ пустая.
				Если Источник[ТЧИСвойства.ТЧКонфигурации].Количество() = 0 Тогда
					Продолжить;
				КонецЕсли;
				НоваяТЧПриемника = СоздатьТЧПриемникаПоПКС(ТЧИСвойства.Свойства);
				Для Каждого СтрокаТЧКонфигурации Из Источник[ТЧИСвойства.ТЧКонфигурации] Цикл
					СтрокаТЧПриемник = НоваяТЧПриемника.Добавить();
					Для Каждого ПКС Из ТЧИСвойства.Свойства Цикл
						Если ПКС.ИспользуетсяАлгоритмКонвертации Тогда
							Продолжить;
						КонецЕсли;
						ВыгрузитьСвойство(
							КомпонентыОбмена,
							СтрокаТЧКонфигурации,
							СтрокаТЧПриемник,
							ПКС,
							СтекВыгрузки,
							1);
					КонецЦикла;
				КонецЦикла;
				Приемник.Вставить(ТЧИСвойства.ТЧФормата, НоваяТЧПриемника);
			КонецЦикла;
		КонецЕсли;
		
		// {Обработчик: ПриОтправкеДанных} Начало
		Если ПравилоКонвертации.ЕстьОбработчикПриОтправкеДанных Тогда
			
			Если Не Приемник.Свойство("КлючевыеСвойства") Тогда
				Приемник.Вставить("КлючевыеСвойства", Новый Структура);
			КонецЕсли;
			
			ПриОтправкеДанных(Источник, Приемник, ПравилоКонвертации.ПриОтправкеДанных, КомпонентыОбмена, СтекВыгрузки);
			
			Если Приемник = Неопределено Тогда
				Возврат Неопределено;
			КонецЕсли;
			
			Если СтекВыгрузки.Количество() > 1 Тогда
				Для Каждого КлючевоеСвойство Из Приемник.КлючевыеСвойства Цикл
					Приемник.Вставить(КлючевоеСвойство.Ключ, КлючевоеСвойство.Значение);
				КонецЦикла;
				Приемник.Удалить("КлючевыеСвойства");
			КонецЕсли;
			
			// Выполнение ПКС, 2-й этап
			Для Каждого ПКС Из ПравилоКонвертации.Свойства Цикл
				Если ПКС.СвойствоФормата = "" 
					Или (СтекВыгрузки.Количество() > 1 И Не ПКС.ОбработкаКлючевогоСвойства) Тогда
					Продолжить;
				КонецЕсли;
				
				// Выполняем конвертацию, если в свойство помещена инструкция.
				ЗначениеСвойства = Неопределено;
				Если СтекВыгрузки.Количество() = 1 И ПКС.ОбработкаКлючевогоСвойства Тогда
					Приемник.КлючевыеСвойства.Свойство(ПКС.СвойствоФормата, ЗначениеСвойства);
				Иначе
					СвойствоФормата_Имя = СокрЛП(ПКС.СвойствоФормата);
					ВложенныеСвойства = СтрРазделить(СвойствоФормата_Имя,".",Ложь);
					// Указано полное имя свойства, входящего в группу общих свойств.
					Если ВложенныеСвойства.Количество() > 1 Тогда
						ПолучитьЗначениеВложенныхСвойств(Приемник, ВложенныеСвойства, ЗначениеСвойства);
					Иначе
						Приемник.Свойство(СвойствоФормата_Имя, ЗначениеСвойства);
					КонецЕсли;
				КонецЕсли;
				Если ЗначениеСвойства = Неопределено Тогда
					Продолжить;
				КонецЕсли;
				
				Если ПКС.ИспользуетсяАлгоритмКонвертации Тогда
					
					Если ТипЗнч(ЗначениеСвойства) = Тип("Структура")
						И ЗначениеСвойства.Свойство("Значение")
						И ЗначениеСвойства.Свойство("ИмяПКО")
						Или ПКС.ПравилоКонвертацииСвойства <> ""
						И ТипЗнч(ЗначениеСвойства) <> Тип("Структура") Тогда
						
						ВыгрузитьСвойство(
							КомпонентыОбмена,
							Источник,
							Приемник,
							ПКС,
							СтекВыгрузки,
							2);
							
					КонецЕсли;
						
				КонецЕсли;
			КонецЦикла;
			
			// Выполнение ПКС для ТЧ
			Если СтекВыгрузки.Количество() = 1 Тогда
				
				// Формируем структуру новых табличных частей по ПКС.
				СвойстваТЧПриемника = Новый Структура;
				Для Каждого ТЧИСвойства Из ПравилоКонвертации.СвойстваТабличныхЧастей Цикл
					
					ИмяТЧПриемника = ТЧИСвойства.ТЧФормата;
					
					Если ПустаяСтрока(ИмяТЧПриемника) Тогда
						Продолжить;
					КонецЕсли;
					
					Если Не СвойстваТЧПриемника.Свойство(ИмяТЧПриемника) Тогда
						ТаблицаПКС = Новый ТаблицаЗначений;
						ТаблицаПКС.Колонки.Добавить("СвойствоФормата", Новый ОписаниеТипов("Строка"));
						
						СвойстваТЧПриемника.Вставить(ИмяТЧПриемника, ТаблицаПКС);
					КонецЕсли;
					
					Для Каждого ПКС Из ТЧИСвойства.Свойства Цикл
						СтрокаСвойство = СвойстваТЧПриемника[ИмяТЧПриемника].Добавить();
						СтрокаСвойство.СвойствоФормата = ПКС.СвойствоФормата;
					КонецЦикла;
					
				КонецЦикла;
				
				Для Каждого ТЧИСвойства Из ПравилоКонвертации.СвойстваТабличныхЧастей Цикл
					
					Если Не ТЧИСвойства.ИспользуетсяАлгоритмКонвертации Тогда
						Продолжить;
					КонецЕсли;
					
					ПКСДляТЧ = ТЧИСвойства.Свойства;
					ИмяТЧПриемника = ТЧИСвойства.ТЧФормата;
					
					ТЧПриемника = Неопределено;
					Если Не ЗначениеЗаполнено(ИмяТЧПриемника)
						Или Не Приемник.Свойство(ИмяТЧПриемника, ТЧПриемника) Тогда
						Продолжить;
					КонецЕсли;
					
					// Создаем новую ТЗ, в которой нет ограничений типа для колонок.
					НоваяТЧПриемника = СоздатьТЧПриемникаПоПКС(СвойстваТЧПриемника[ИмяТЧПриемника]);
					
					// Убираем лишние колонки, которые могли добавить в приемнике.
					УдаляемыеКолонки = Новый Массив;
					Для Каждого Колонка Из ТЧПриемника.Колонки Цикл
						Если НоваяТЧПриемника.Колонки.Найти(Колонка.Имя) = Неопределено Тогда
							УдаляемыеКолонки.Добавить(Колонка);
						КонецЕсли;
					КонецЦикла;
					Для Каждого Колонка Из УдаляемыеКолонки Цикл
						ТЧПриемника.Колонки.Удалить(Колонка);
					КонецЦикла;
					
					// Копируем данные в новую таблицу приемника.
					Для Каждого СтрокаТЧПриемника Из ТЧПриемника Цикл
						СтрокаНовойТЧПриемника = НоваяТЧПриемника.Добавить();
						ЗаполнитьЗначенияСвойств(СтрокаНовойТЧПриемника, СтрокаТЧПриемника);
					КонецЦикла;
					Приемник[ИмяТЧПриемника] = НоваяТЧПриемника;
					
					Для Каждого Строка Из НоваяТЧПриемника Цикл
						
						Для Каждого ПКС Из ПКСДляТЧ Цикл
							
							Если НЕ ПКС.ИспользуетсяАлгоритмКонвертации Тогда
								Продолжить;
							КонецЕсли;
							
							ВыгрузитьСвойство(
								КомпонентыОбмена,
								Источник,
								Строка,
								ПКС,
								СтекВыгрузки,
								2);
								
						КонецЦикла;
						
					КонецЦикла;
					
				КонецЦикла;
				
			КонецЕсли;
			
		КонецЕсли;
		// {Обработчик: ПриОтправкеДанных} Окончание
		
		Если СтекВыгрузки.Количество() > 1 Тогда
			Приемник.Вставить("ТипСоставногоСвойства", ПравилоКонвертации.ТипКлючевыхСвойствОбъектаXDTO);
		КонецЕсли;
		
	КонецЕсли;
	
	Возврат Приемник;
	
КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Типизация таблицы значений

Автор: acces969

FastCode 66 8
РезультатТЗ = новый ТаблицаЗначений;
Для Каждого Колонка из ТЗ.Колонки Цикл
	Имя = Колонка.Имя;
	МассивТипов = новый Массив(1);
	МассивТипов[0] = ТипЗнч(ТЗ[0][Имя]);
	Описатель = новый ОписаниеТипов(МассивТипов);
	РезультатТЗ.Колонки.Добавить(Имя, Описатель);
КонецЦикла;

Для каждого Строка из ТЗ Цикл
	СтрокаРез = РезультатТЗ.Добавить();
	ЗаполнитьЗначенияСвойств(СтрокаРез, Строка);
КонецЦикла;

ТЗ = РезультатТЗ.Скопировать();

Удалить дубли строк в таблице значений

Удаляет дубли строк таблицы по указанным колонкам, если не указано, то ищет дубли во всем.
prog1c 45 1 5
Функция УдалитьДублиСтрокТаблицыЗначений(Таблица, Колонки = "") Экспорт

	Если ПустаяСтрока(Колонки) Тогда
		
		// Просто свернем таблицу по всем колонкам
		
		Для каждого Колонка Из Таблица.Колонки Цикл
			Колонки = Колонки + ?(ПустаяСтрока(Колонки), "", ",") + Колонка.Имя;
		КонецЦикла;
		
		ТаблицаРезультат = Таблица.Скопировать();
		ТаблицаРезультат.Свернуть(Колонки);
		
	Иначе
		
		КолонкиЗапроса = "ТЗ." + СтрЗаменить(Колонки, ",", ",ТЗ.");
		
		Запрос = Новый Запрос;
		Запрос.Текст = "ВЫБРАТЬ
					   |	" + КолонкиЗапроса + "
					   |ПОМЕСТИТЬ ВТ_ТЗ
					   |ИЗ
					   |	&ТЗ КАК ТЗ
					   |;
					   |
					   |////////////////////////////////////////////////////////////////////////////////
					   |ВЫБРАТЬ РАЗЛИЧНЫЕ
					   |	" + СтрЗаменить(КолонкиЗапроса, "ТЗ.", "ВТ_ТЗ.") + "
					   |ИЗ
					   |	ВТ_ТЗ КАК ВТ_ТЗ
					   |";

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

КонецФункции // УдалитьДублиСтрокТаблицыЗначений()

Чтение XML в таблицу значений

ArturR 31 2
Режим = РежимДиалогаВыбораФайла.Открытие;
	ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);        
	ДиалогОткрытияФайла.ПолноеИмяФайла = "";
	Фильтр = "Текст(*.XML)|*.XML";
	ДиалогОткрытияФайла.Фильтр = Фильтр;
	ДиалогОткрытияФайла.МножественныйВыбор = Ложь;             
	ДиалогОткрытияФайла.Заголовок = "Выберите файл для загрузки";
	
	Если ДиалогОткрытияФайла.Выбрать() Тогда 
		ПутьКФайлу = ДиалогОткрытияФайла.ПолноеИмяФайла;
		ЧтениеXML = Новый ЧтениеXML;
		ЧтениеXML.ОткрытьФайл(ПутьКФайлу);
		Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
		ТЗ = Сериализатор.ПрочитатьXML(ЧтениеXML,Тип("ТаблицаЗначений"));
		ЧтениеXML.Закрыть();
	КонецЕсли;
	
		ЭтотОбъект.Контрагент 		  	= Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ТЗ[0].КонтрагентИНН);
		ЭтотОбъект.КРВ_IDМенеджер	  	= ТЗ[0].IDМенеджер;
		ЭтотОбъект.КРВ_НомерЗаказаУНФ 	= ТЗ[0].Номер;
		ЭтотОбъект.Склад 				= Справочники.Склады.НайтиПоНаименованию(ТЗ[0].Склад);
	
Для каждого СтрокаТЗ Из ТЗ Цикл
КонецЦикла; 

Выгрузка Таблицы значений в Объект Таблица Значений на форме обработки (для передачи сервер - клиент)

Передача данных из Таблицы значений на сервере в объект Таблица значений на обработке.
vlan76 3 1
&НаСервере
Процедура ЗаполнитьНаСервере()
	// Вставить содержимое обработчика.
	Запрос= новый запрос;
	Запрос.Текст="ВЫБРАТЬ
	             |	ОстаткиНоменклатурыОстатки.Номеклатура КАК Номеклатура,
	             |	ОстаткиНоменклатурыОстатки.КоличестовОстаток КАК КоличестовОстаток,
	             |	ОстаткиНоменклатурыОстатки.СуммаОстаток КАК СуммаОстаток
	             |ИЗ
	             |	РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатурыОстатки";
	//выборка=запрос.Выполнить().Выбрать();
	
	//создаем ТаблицуЗначений ТЗ
	ТЗ=новый ТаблицаЗначений;
	//Выгружаем Результат Запроса в Таблицу Значений ТЗ 
	ТЗ=запрос.Выполнить().Выгрузить();
	//создаем ТаблицуЗначений ТЗрез
	ТЗрез=новый ТаблицаЗначений;
	//в ТаблицуЗначений ТЗрез выгружаем данные с формы
	ТЗрез=данныеформывзначение(Объект.Результат,Тип("ТаблицаЗначений"));
	//В ТаблицуЗначений ТЗрез сохраняем ТЗ 
	ТЗрез=ТЗ;
	//Записываем значения Таблицы ТЗрез в объект на форме.
	ЗначениеВданныеФормы(ТЗрез,объект.Результат);
	
	//данныевреквизитформы(Тзрез,"Результат0");

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

Загрузка из excel, xls

Простая загрузка из excel, xls
Евгений 4 1

////1
Процедура Загрузить();
                                
    Попытка
        Excel = Новый COMОбъект("Excel.Application");
        Excel.displayalerts = 0;
        Excel.WorkBooks.Open(КаталогДБФ);
        Состояние("Обработка файла Microsoft Excel...");
        ExcelЛист = Excel.Sheets(1);
    Исключение 
        Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel.");
        Excel.WorkBooks.Close(); Excel = 0;
        Возврат;
    КонецПопытки;  
    
    ТЗ = ПрочитатьЛистExcel(, ExcelЛист,,,,6);
    
    Excel.WorkBooks.Close();
    Excel = 0;          
    
КонецПроцедуры;  


Функция ПрочитатьЛистExcel(ТЗ = Неопределено, ЛистЭксель = Неопределено, НомерПервойСтроки = 1, НомерПервойКолонки = 1, ВсегоСтрок = 0, ВсегоКолонок = 0) Экспорт
    
    Если ЛистЭксель = Неопределено Тогда
        ЛистЭксель = ПолучитьCOMОбъект(,"Excel.Application");
    КонецЕсли;
    Если ВсегоСтрок = 0 Тогда
        ВсегоСтрок = ЛистЭксель.Cells.SpecialCells(11).Row;
    КонецЕсли;
    Если ВсегоКолонок = 0 Тогда
        ВсегоКолонок = ЛистЭксель.Cells.SpecialCells(11).Column;
    КонецЕсли;
    Если ТЗ = Неопределено Тогда
        ТЗ =  Новый ТаблицаЗначений;
        Для Счетчик = 1 По ВсегоКолонок Цикл
            ТЗ.Колонки.Добавить("Колонка"+Счетчик, Новый ОписаниеТипов("Строка"));
        КонецЦикла;
    КонецЕсли;
    Для Счетчик = НомерПервойСтроки По ВсегоСтрок Цикл
        НоваяСтрока = ТЗ.Добавить();
    КонецЦикла;
    
    Область = ЛистЭксель.Range(ЛистЭксель.Cells(НомерПервойСтроки,НомерПервойКолонки), ЛистЭксель.Cells(ВсегоСтрок,ВсегоКолонок));
    Данные = Область.Value.Выгрузить();
    
    Для Счетчик = 0 По ВсегоКолонок-1 Цикл
        ТЗ.ЗагрузитьКолонку(Данные[Счетчик], Счетчик);
    КонецЦикла;
    ЛистЭксель = Неопределено;
    Возврат ТЗ;
КонецФункции   

////2    

Таблица значений на УФ с динамическим набором колонок

buketoff 35 7
    ТЗ_рез = РеквизитФормыВЗначение("ТЗДокументы");
    
    МассивРеквизитов = Новый Массив;
    
    //Удалим ранее созданные колонки в ТЗДокументы    
    Для Каждого Колонка Из ТЗ_рез.Колонки Цикл
        МассивРеквизитов.Добавить("ТЗДокументы." + Колонка.Имя);        
	КонецЦикла;
	
	ИзменитьРеквизиты(,МассивРеквизитов);
	
	//Удалим отображение таблицы на форме и создадим новую
	ЭлементТаблица = Элементы.Найти("ТЗДокументы");
	Если ЭлементТаблица <> Неопределено Тогда
		Элементы.Удалить(ЭлементТаблица);        
	КонецЕсли;     
	
	ЭлементТаблица=Элементы.Добавить("ТЗДокументы",Тип("ТаблицаФормы"));
	ЭлементТаблица.ПутьКДанным = "ТЗДокументы";
	ЭлементТаблица.Отображение = ОтображениеТаблицы.Список;
	
	ТЗ_рез = Данные;

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

Подключение к базе через COM соединение и создание нового документа

buketoff 35 7
//выбираем сотрудника

ЗапросВ = КомСоединение.NewObject("Запрос");
ЗапросВ.Текст = "
|ВЫБРАТЬ первые 1 
|Сотрудники.Ссылка КАК Сотрудник
|ИЗ
|Справочник.Сотрудники КАК Сотрудники
|ГДЕ
|НЕ Сотрудники.СтруктураКомпании = ЗНАЧЕНИЕ(Справочник.СтруктураКомпании.ПустаяСсылка)
|И Сотрудники.ФизическоеЛицо.Наименование = &ФизическоеЛицо
|И Сотрудники.ПометкаУдаления = ЛОЖЬ
|";

ЗапросВ.УстановитьПараметр("ФизическоеЛицо", СтруктураДанных.Сотрудник.Наименование);

com_Результат     = ЗапросВ.Выполнить().Выбрать();// COM объект    

Если com_Результат.следующий() Тогда
	//нашли сотрудника
	
	com_ТЗ_Сотрудники = com_Результат.Сотрудник;// COM объект
	
	// Получаем таблицу значений из COM-объекта
	// COMОбъект в -> строку
	// Запишем COMОбъект в строку на стороне базы-источника
	
	стр_ТЗ_Сотрудники = КомСоединение.ЗначениеВСтрокуВнутр(com_ТЗ_Сотрудники);
	
	// получим таблицу значений из строки
	ТЗ_Сотрудники = ЗначениеИзСтрокиВнутр(стр_ТЗ_Сотрудники);
	
	МенеджерДокумента = КомСоединение.Документы.ЗаписьВРНФактическиеОтпуска;
	КомСоединение.УстановитьБезопасныйРежим(Ложь);
	КомСоединение.УстановитьПривилегированныйРежим(Истина);
	
	НовДок      = МенеджерДокумента.СоздатьДокумент();
	НовДок.Дата = СтруктураДанных.Период;
	НовДок.Сотрудник...
	
Иначе
	//соответственно не нашли
	
	com_ТЗ_Сотрудники = Неопределено;
КонецЕсли;

Элемент справочника

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