Публикации

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

Функция возвращает иерархию типов свойств для ТипОбъектаXDTO

// Возвращает иерархию типов свойств для ТипОбъектаXDTO // // Параметры: // Тип - ТипОбъектаXDTO // ПределРекурсии - Число - Максимальная вложенность вызовов этой рекурсивной функции // Глубина - Число - Служебный - не заполнять. Счетчик вложенн...
SDV 34 7

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

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

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

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

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


OneTracker - трекер учета рабочего времени программиста 1С Промо

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

Документ Регистратор При Проверке Записи

Получить ссылку на объект записи для которого нужно проверять исключение из правил Используется когда нужно для какого-то вида документа сделать особую проверку на запрет изменения данных При проведении документа с исключением инициируются так же изменен...

Заполнение "пустых" строк табличной части

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

&НаКлиенте
Функция ПоискПустыхСтрок(Таблица,КоличествоЗначений)
	
	МассивПустыхСтрок = Новый Массив(); // В данном массиве будут храниться индексы пустых записей 
	СчетчикПустых = 0;
	
	Для Каждого Строка Из Таблица Цикл
		Если  (НЕ ЗначениеЗаполнено(Строка.Материал)) И (СчетчикПустых<КоличествоЗначений)  Тогда  // Проверяем на заполненность значение в колонке (текущей строки) в цикле И проверяем нужно ли дальше идти по циклу, ведь нам нужно лишь определенное кол пустых строк 
			СчетчикПустых = СчетчикПустых+1; 
			МассивПустыхСтрок.Добавить(Таблица.Индекс(Строка)); // Если значение в определенной колонке "пустое", то добавляем в массив  - индекс текущей строки в цикле 
		ИначеЕсли СчетчикПустых=КоличествоЗначений Тогда // Если кол пустых строк и кол значений введенных пользователем равно, то выходим из цикла и не ищем дополнительные пустые строки 
			Возврат МассивПустыхСтрок;
		КонецЕсли;	
	КонецЦикла;
	
	Возврат МассивПустыхСтрок; 
	
КонецФункции 

&НаКлиенте
Процедура ТаблицаЗначенийОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
		
	МассивПустыхСтрок = ПоискПустыхСтрок(ТаблицаЗначений,ВыбранноеЗначение.Количество()); // передаем саму таблицу, а также Кол выбранных элементов для того, чтобы не искать все пустые строки, а лишь определенное кол
	
	Для Индекс = 0 По ВыбранноеЗначение.ВГраница() Цикл
		Если Индекс < МассивПустыхСтрок.Количество() Тогда // Если выбранных значений меньше, чем пустых строк, то ..., иначе, исключительный случай, когда все пустые строки заполнились  
			Строка = ТаблицаЗначений.Вставить(МассивПустыхСтрок[Индекс]); // Вставляем запись вместо пустой, вытесняя пустую запись вниз ( увеличиваем индекс пустой записи на 1, так как работает функция ВСТАВИТЬ() )
			Строка.Материал = ВыбранноеЗначение[Индекс]; // Заполняем реквизит табличной части выбранным значением 
			ТаблицаЗначений.Удалить(МассивПустыхСтрок[Индекс]+1); // Удаляем пустую запись, которая ниже добавленной на 1 
		Иначе
			Строка = ТаблицаЗначений.Добавить(); // Тот самый случай, когда кол выбранных записей больше, чем пустых строк. В этом случаи  добавляем записи в конец табличной части
			Строка.Материал = ВыбранноеЗначение[Индекс];
		КонецЕсли;
	КонецЦикла;
	
	
КонецПроцедуры

Функция СодержимоеАрхива() и вспомогательная функция Путь()

Распаковывает архив во временную папку и даёт доступ к содержимому, если путь к исходному архиву не указан, то открывается диалог выбора пути.
SDV 34 7
// Возвращает путь к распакованному архиву и его содержимое
//
// Параметры:
//  Архив - ЧтениеZipФайла, Строка, Неопределено - Архив; Путь к архиву; Если неопределенно, то спросит путь у пользователя
//  Пароль - Строка
// Возвращаемое значение:
//   Структура   -  содержит:
//	* ВременныйПуть - Строка - путь к папке куда будет извлечено содержимое архива
//	* Архив  - ЧтениеZipФайл
// Пример:
//	НаборСхемXML = Новый НаборСхемXML;
//	СодержимоеАрхива = СодержимоеАрхива();
//	Для Каждого ЭлементАрхива из СодержимоеАрхива.Архив.Элементы Цикл
//		Если ЭлементАрхива.Расширение = "xsd" Тогда
//			СхемаXML = СхемаXMLИзФайла(СодержимоеАрхива.ВременныйПуть +"/"+ ЭлементАрхива.ПолноеИмя);
//			НаборСхемXML.Добавить(СхемаXML);
//		КонецЕсли;
//	КонецЦикла;
Функция СодержимоеАрхива(Архив = Неопределено, Пароль = Неопределено)    Экспорт 

	Если ТипЗнч(Архив ) = Тип("ЧтениеZipФайла") Тогда
		Архив = Архив;
	ИначеЕсли  ТипЗнч(Архив) = Тип("Строка") Тогда
		Архив = Новый ЧтениеZipФайла(Архив, Пароль);
	ИначеЕсли Архив = Неопределено Тогда 
		Путь = Путь("Выберите архив, содержащий схемы XML:", "(*.zip)|*.zip", РежимДиалогаВыбораФайла.Открытие);
		Если Путь  = Неопределено Тогда
			Возврат Неопределено;
		КонецЕсли;
		Архив = Новый ЧтениеZipФайла(Путь, Пароль);
	Иначе
		Возврат Неопределено;
	КонецЕсли;
	
	Результат = Новый Структура("Архив", Архив);
	Результат.Вставить("ВременныйПуть",   КаталогВременныхФайлов() + "ZIP_" + Формат(ТекущаяДатаСеанса(),  "ДФ=yyyyMMddHHmmss"));
	Архив.ИзвлечьВсе(Результат.ВременныйПуть);
	Возврат Результат;
КонецФункции // СодержимоеАрхива()

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


Получить дату из строки формата YYYY-MM-DDThh:mm:ss ISO 8601

Функция ПолучитьДатуВеб(СтрДата)
	
	Рез = Дата(1,1,1);
	
	//2018-03-19T23:59:59
	СтрГод = Сред(СтрДата, 1, 4);
	СтрМесяц = Сред(СтрДата, 6, 2);
	СтрЧисло = Сред(СтрДата, 9, 2);
	СтрЧас = Сред(СтрДата, 12, 2);
	СтрМинута = Сред(СтрДата, 15, 2);
	СтрСекунда = Сред(СтрДата, 18, 2);
	
	Попытка
		Рез = Дата(Число(СтрГод), Число(СтрМесяц), Число(СтрЧисло), Число(СтрЧас), Число(СтрМинута), Число(СтрСекунда));
	Исключение
	КонецПопытки;
	
	Возврат Рез;
	
КонецФункции

Найти с/ф полученный

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

Найти с/ф выданный

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

Строка в дату по форматной строке

Преобразование строки в дату по форматной строке
Функция СтрокаВДату(ФорматДаты, Дано, Ошибка = Ложь)
	
	Попытка
		
		ТестоваяДата = Формат('00010101', "ДФ=" + ФорматДаты); // — необязательная проверка первого правильности параметра
		
	Исключение
		
		Ошибка = Истина;
		Возврат '00010101';
		
	КонецПопытки;
	
	СтруктураДаты = Новый Соответствие;
	
	Для Счетчик = 1 По СтрДлина(ФорматДаты) + 7 Цикл
		
		СтруктураДаты[Сред(ФорматДаты + "dMyHhms", Счетчик, 1)] = 0; // — инициализация частей даты
		
	КонецЦикла;
	
	Для Счетчик = 1 По 12 Цикл
		
		Дано = СтрЗаменить(Дано, Формат(Дата(1, Счетчик, 1), "ДФ=MMММ"), Формат(Счетчик, "ЧЦ=4; ЧВН=")); // — замена названий месяцев числами
		Дано = СтрЗаменить(Дано, Формат(Дата(1, Счетчик, 1), "ДФ=MMМ" ), Формат(Счетчик, "ЧЦ=3; ЧВН="));
		
	КонецЦикла;
	
	Для Счетчик = 1 По СтрДлина(ФорматДаты) Цикл
		
		СтруктураДаты[Сред(ФорматДаты, Счетчик, 1)] = 10 * СтруктураДаты[Сред(ФорматДаты, Счетчик, 1)] + Найти("123456789", Сред(Дано, Счетчик, 1)); // — накопление частей даты
		Ошибка = Ошибка ИЛИ Найти("dMyHhms", Сред(ФорматДаты, Счетчик, 1)) И НЕ Найти("0123456789", Сред(Дано, Счетчик, 1)); // — необязательная проверка на цифры
		
	КонецЦикла;
	
	СтруктураДаты["y"] = СтруктураДаты["y"] + ?(СтруктураДаты["y"] < 50, 2000, ?(СтруктураДаты["y"] < 100, 1900, 0)); // — дополнение двух цифр года до четырех
	
	Попытка
		
		Возврат Дата(СтруктураДаты["y"], СтруктураДаты["M"], СтруктураДаты["d"], СтруктураДаты["H"] + СтруктураДаты["h"], СтруктураДаты["m"], СтруктураДаты["s"])
		
	Исключение
		
		Ошибка = Истина;
		Возврат '00010101';
		
	КонецПопытки;
	
КонецФункции

Цвет текста только что выведенной области табличного документа

ОбластьОформления = ТабДок.Вывести(ОбластьСтрокаТаб);
ОбластьОформления.ЦветТекста = WebЦвета.Красный;

Добавить договор

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

Найти основной договор

&НаСервере
Функция ПолучитьОсновнойДоговор(Организация, Контрагент, ВидДоговора)
	
	Рез = Справочники.ДоговорыКонтрагентов.ПустаяСсылка();
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ ПЕРВЫЕ 1
		|	ОсновныеДоговорыКонтрагента.Договор КАК Договор
		|ИЗ
		|	РегистрСведений.ОсновныеДоговорыКонтрагента КАК ОсновныеДоговорыКонтрагента
		|ГДЕ
		|	ОсновныеДоговорыКонтрагента.Организация = &Организация
		|	И ОсновныеДоговорыКонтрагента.Контрагент = &Контрагент
		|	И ОсновныеДоговорыКонтрагента.ВидДоговора = &ВидДоговора";
	
	Запрос.УстановитьПараметр("ВидДоговора", ВидДоговора);
	Запрос.УстановитьПараметр("Контрагент", Контрагент);
	Запрос.УстановитьПараметр("Организация", Организация);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Если ВыборкаДетальныеЗаписи.Следующий() Тогда
		Рез = ВыборкаДетальныеЗаписи.Договор;
	КонецЕсли;
	
	//если основной договор не отмечен, то поищем среди всех договоров и если по данному виду он один и непомеченный на удаление, то возьмем его
	
	Если Рез.Пустая() Тогда
		Запрос.Текст = 
			"ВЫБРАТЬ
			|	МАКСИМУМ(ДоговорыКонтрагентов.Ссылка) КАК Договор,
			|	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДоговорыКонтрагентов.Ссылка) КАК КоличествоДоговоров
			|ИЗ
			|	Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
			|ГДЕ
			|	ДоговорыКонтрагентов.Владелец = &Контрагент
			|	И ДоговорыКонтрагентов.ВидДоговора = &ВидДоговора
			|	И ДоговорыКонтрагентов.Организация = &Организация
			|	И НЕ ДоговорыКонтрагентов.ПометкаУдаления";
		
		Запрос.УстановитьПараметр("ВидДоговора", ВидДоговора);
		Запрос.УстановитьПараметр("Контрагент", Контрагент);
		Запрос.УстановитьПараметр("Организация", Организация);
		
		РезультатЗапроса = Запрос.Выполнить();
		ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
		
		Если ВыборкаДетальныеЗаписи.Следующий() Тогда
			Если ВыборкаДетальныеЗаписи.КоличествоДоговоров=1 Тогда
				Рез = ВыборкаДетальныеЗаписи.Договор;
			ИначеЕсли ВыборкаДетальныеЗаписи.КоличествоДоговоров=0 Тогда
				Рез = СоздатьОсновнойДоговор(Организация, Контрагент, ВидДоговора);
			ИначеЕсли ВыборкаДетальныеЗаписи.КоличествоДоговоров>1 Тогда
				Рез = ВыборкаДетальныеЗаписи.Договор;
				ТекстОшибки = СтрШаблон("Для контрагента %1 подставлен первый договор из нескольких по виду %2 для организации %3", Контрагент, ВидДоговора, Организация);
				ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки);
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	
	Возврат Рез;

КонецФункции

Отключение (DETACH) баз MS SQL с отбором по вхождению в имя

/******************************************************* Отключение (DETACH) баз MS SQL с отбором по вхождению в имя *******************************************************/ DECLARE @SQL VARCHAR(max) = '' DECLARE @StrNewLine CHAR SET @StrNewLine = CHAR...

Заполнить счета учета

Заполнение счетов учета в табличных частях и шапке документа "Поступление товаров и услуг", но подойдет и для других видов документа
Дамир 2
Документы.ПоступлениеТоваровУслуг.ЗаполнитьСчетаУчетаВТабличнойЧасти(ДокОб, "Товары");
Документы.ПоступлениеТоваровУслуг.ЗаполнитьСчетаУчетаВТабличнойЧасти(ДокОб, "Услуги");
Документы.ПоступлениеТоваровУслуг.ЗаполнитьСчетаУчетаРасчетов(ДокОб);

Проверка, есть ли ключ у соответствия

CerbeRUS 2
Функция ЕстьКлючСоответствия(Объект, Ключ) Экспорт
  Если Объект[Ключ] <> Неопределено Тогда
    Возврат Истина;
  КонецЕсли;
  До = Объект.Количество();
  Объект.Вставить(Ключ);
  После = Объект.Количество();
  Если До <> После Тогда
    Объект.Удалить(Ключ);
  КонецЕсли;
  Возврат До = После;
КонецФункции

Таблица значений в табличный документ

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

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

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

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

Telegram 1C. Полный разбор API. Курс

Разберись со всеми возможностями API Telegram при работе из 1С
FastCode 63 8
-10%

Заполнить параметры запроса из структуры

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

Проверка заполненности полей объекта и возврат статуса + незаполненных полей

Проверяет поля объекта через ЗначениеЗаполнено(), возвращает структуру с полями: Результат - Булево - = Истина, когда заполнены все поля, = Ложь когда есть не заполненные поля. НеЗаполненныеПоля - Строка - не заполненные поля через запятую #Область П...