Публикации

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

Открытие активизация формы

    ПутьКФорме = "ПланОбмена.ИмяПланаОбмена.Форма.ФормаВыгрузкиНоменклатуры";
    
    ОткрываемаяФорма = ПолучитьФорму(ПутьКФорме,,,ПутьКФорме);
    Если ОткрываемаяФорма.Открыта() Тогда
        ОткрываемаяФорма.Активизировать();
    Иначе
        ОткрываемаяФорма.Открыть();
    КонецЕсли;

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

Упрощает создание Объектов XDTO. // Возвращает иерархию/дерево типов свойств для ТипОбъектаXDTO // Упрощает создание Объектов XDTO. // Создание объектов XDTO без использования Иерархии свойств: //////////////////////////////////////////////////////////...
SDV 35 7

TurboConf - расширение Конфигуратора 1С Промо

TurboConf повышает эффективность работы в Конфигураторе 1С и помогает программисту автоматизировать свои задачи.
bolsun
-30%

ФабрикаXDTO

Коллеги помогите, пожалуйста, разобраться. Реализую выгрузка данных в сервис ЕГИССО в формате XML. Имеем архив со схемами xsd: http://www.pfrf.ru/files/id/docman/2020/XSD-shema_10.06.S_versii_1.0.6.zip В 1С создал свою ФабрикуXDTO из массива схем и потихон...
SDV 35 7

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

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

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

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

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


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

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

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

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

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

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

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

Распаковывает архив во временную папку и даёт доступ к содержимому, если путь к исходному архиву не указан, то открывается диалог выбора пути.
SDV 35 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(10) + CHAR(13)

SELECT 
	@SQL += 'alter database ['+ name + '] SET  SINGLE_USER WITH ROLLBACK IMMEDIATE' + '' + @StrNewLine
	--+ 'GO' + @StrNewLine
	+ 'EXEC master.dbo.sp_detach_db @dbname = '+ name + ';' + @StrNewLine

from master.sys.databases AS SysDB
WHERE SysDB.name LIKE 'tvs_%'

PRINT @SQL
EXEC (@SQL)
```

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

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

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

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 65 8
-34%