Публикации

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

Найдено публикаций: 18

SDV 34 7

Соединяем план и факт

Коллеги добрый вечер. Составляю отчет на СКД "Анализ расхода продуктов питания". Отчёт должен сравнивать фактические расходы продуктов с плановыми показателями. Ниже набросок Запроса (набора данных) ВЫБРАТЬ РасходПродуктовПоКДОбороты.Учреждение, РасходПр...
SDV 34 7

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

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

ФабрикаXDTO

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

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

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


Грабли при работе с макетом в СКД

Показана особенность при работе с макетом в конструкторе СКД, которая может легко загубить результаты вашей работы На скринах показано как можно легко испортить Макет из-за своеобразной логики работы конструктора СКД 2020-06-15_15-35-36 (2).jpg 2020-06-...
SDV 34 7

Язык выражений СКД Формат()

Коллеги, подскажите пожалуйста, почему не отрабатывает Формат()? 2020-05-24_16-26-07.jpg
SDV 34 7

Заполняем (описываем набор данных и поля) схему компоновки данных из таблицы значений

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

     НаборДанных = НаборДанныхИзТаблицыЗначений(Схема, Таблица, Наименование);
     Возврат Схема;
КонецФункции


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

     Возврат НаборДанных;
          
КонецФункции

Особенность (грабля) при работе с Характеристиками через СКД

Испытываю некоторые сложности с формулировкой сути проблемы поэтому опишу свою user-story: В конфигурации БГУ 1.0 есть возможность детализировать аналитику планирования (кассового расхода) с помощью доп. бюджетной классификации: к некоторым счетам привяз...
SDV 34 7

ТаблицаЗначений из кроны ДереваЗначений

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

// Процедура - Заполнить таблицу листьями ветви.
//  Рекурсивная вспомогательная функция для ТаблицаЗначенийИзКроныДереваЗначений()
//
// Параметры:
//  Таблица     - ТаблицаЗначений -
//  Ветвь     - СтрокаДереваЗначений -
//
Процедура ЗаполнитьТаблицуЛистьямиВетви(Таблица, Ветвь)
    ЭтоЛист = (Ветвь.Строки.Количество() = 0);
    Если ЭтоЛист Тогда
        Лист = Ветвь;
        ЗаполнитьЗначенияСвойств(Таблица.Добавить(), Лист);
    Иначе
        Для Каждого Подветвь из Ветвь.Строки Цикл
            ЗаполнитьТаблицуЛистьямиВетви(Таблица, Подветвь);
        КонецЦикла;
    КонецЕсли;
КонецПроцедуры

Поместить таблицу в запрос

Процедура помещает Таблицу значений во временную таблицу Запроса
SDV 34 7
// Процедура - Поместить таблицу в запрос
// Зависит от ТипизированнаяТаблицаЗначений() https://fastcode.im/Templates/6734
// Параметры:
//  Запрос		 - Запрос 
//  Таблица		 - ТаблицаЗначений
//  ИмяТаблицы	 - Строка - Имя временной таблицы в Запросе
//
Процедура ПоместитьТаблицуВЗапрос(Запрос, Таблица, ИмяТаблицы)
	ТипизированнаяТаблица = ТипизированнаяТаблицаЗначений(Таблица);
	ИсходныйТекстЗапроса = Запрос.Текст;
	Запрос.Текст = "Выбрать * Поместить " + ИмяТаблицы + " Из &" + ИмяТаблицы + " как " + ИмяТаблицы;
	Если Запрос.МенеджерВременныхТаблиц = Неопределено Тогда
		Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	КонецЕсли;
	Если Запрос.Параметры.Свойство(ИмяТаблицы) Тогда
		_Параметр =  Запрос.Параметры.ИмяТаблицы;
		Запрос.УстановитьПараметр(ИмяТаблицы, ТипизированнаяТаблица);
		Запрос.Выполнить();
		Запрос.УстановитьПараметр(ИмяТаблицы, _Параметр);
	Иначе
		Запрос.УстановитьПараметр(ИмяТаблицы, ТипизированнаяТаблица);
		Запрос.Выполнить();
		Запрос.Параметры.Удалить(ИмяТаблицы);
	КонецЕсли;
	Запрос.Текст = ИсходныйТекстЗапроса;
КонецПроцедуры

Перенести коллекцию КлючИЗначение

Дополняет коллекцию КлючИЗначение Приемник (Структура, Соответствие) из коллекции Источник. Можно использовать при копировании Структура или Соответствие.
SDV 34 7
// Процедура - перенести коллекцию КлючИЗначение
//
// Параметры:
//  Приемник - Структура, Соответствие
//  Источник - Структура, Соответствие
//  Заменять - Булево - Заменять [Значение] при наличии [Ключ] в [Приемник], иначе пропустить
Процедура ПеренестиКлючиИЗначения(Приемник, Источник, Заменять = Истина) Экспорт     
	
	ТипПриемника = ТипЗнч(Приемник);

	Для каждого Элемент из Источник Цикл
		
		ЕстьКлюч = Ложь;
				
		Если ТипПриемника = Тип("Соответствие") Тогда
			ЕстьКлюч = Приемник.Получить(Элемент.Ключ) <> Неопределено;
		ИначеЕсли ТипПриемника = Тип("Структура") Тогда  
			ЕстьКлюч = Приемник.Свойство(Элемент.Ключ);
		КонецЕсли;
		
		Если ЕстьКлюч И Заменять тогда
			Приемник[Элемент.Ключ] = Элемент.Значение
		Иначе
			Приемник.Вставить(Элемент.Ключ, Элемент.Значение);
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры

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

Функция загружает данные из dbf файла в таблицу значений. За основу взято https://infostart.ru/public/103060/ Зависит от: ПутьКФайлу() https://fastcode.im/Templates/6672
SDV 34 7
// Функция загружает данные из dbf файла в таблицу значений.
// Зависит от ПутьКФайлу() https://fastcode.im/Templates/6672
// Параметры:
//  ИмяФайла - Строка - полный путь к файлу. Если не указан, то откроется диалог выбора пути к файлу.
//  Кодировка - КодировкаXBase - Если не указан, то КодировкаXBase.OEM
//
Функция ТаблицаЗначенийИзDBF(Кодировка = Неопределено, ПутьКФайлу = Неопределено) Экспорт
	
	Если Кодировка = Неопределено Тогда 
		Кодировка = КодировкаXBase.OEM;
	КонецЕсли;
	
	Если ПутьКФайлу = Неопределено Тогда
		ПутьКФайлу = ПутьКФайлу("Выберите dbf-файл","(*.dbf)|*.dbf",РежимДиалогаВыбораФайла.Открытие);
	КонецЕсли;
	
	// Открытие файла данных
	ФайлДанных = Новый XBase(ПутьКФайлу);
	ФайлДанных.Кодировка = Кодировка;
	Если Не ФайлДанных.Открыта() Тогда
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Не удалось открыть файл " + ПутьКФайлу;
		Сообщение.Сообщить();
		Возврат Неопределено;
	КонецЕсли;
	
	// Переменные и объекты, что бы не создавать постоянно в цикле
	ОписаниеБулево = Новый ОписаниеТипов("Булево");
	ОписаниеДаты = Новый ОписаниеТипов("Дата",,, Новый КвалификаторыДаты(ЧастиДаты.Дата));
	
	// Создание таблицы значений
	ТаблицаЗначений = Новый ТаблицаЗначений;
	Для Каждого Поле из ФайлДанных.Поля Цикл
		Если Поле.Тип = "L" Тогда
			Тип = ОписаниеБулево;
		ИначеЕсли Поле.Тип = "D" Тогда
			Тип = ОписаниеДаты;
		ИначеЕсли (Поле.Тип = "N") ИЛИ (Поле.Тип = "F") Тогда
			Тип = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(Поле.Длина, Поле.Точность));
		Иначе
			Тип = Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(Поле.Длина));
		КонецЕсли;
		ТаблицаЗначений.Колонки.Добавить(Поле.Имя, Тип);
	КонецЦикла;
	
	// Заполнение строк таблицы
	Работаем = ФайлДанных.Первая();
	Пока Работаем Цикл
		СтрокаТаблицы = ТаблицаЗначений.Добавить();
		ЗаполнитьЗначенияСвойств(СтрокаТаблицы, ФайлДанных);
		Работаем = ФайлДанных.Следующая();
	КонецЦикла;
	
	ФайлДанных.ЗакрытьФайл();
	Возврат ТаблицаЗначений;
КонецФункции

Типизированная таблица значений

Создаёт и возвращает копию ТаблицыЗначений с заполненным Типом Колонок
SDV 34 7
// Типизированная таблица значений
//     Создаёт и возвращает копию ТаблицыЗначений с заполненным Типом Колонок
// Зависит от ЗагрузитьКолонку() https://fastcode.im/Templates/6670
// Параметры:
//  Таблица      - ТаблицаЗначений
//
// Возвращаемое значение:
//  ТаблицаЗначений
//
Функция ТипизированнаяТаблицаЗначений(Таблица) Экспорт
    Результат = Новый ТаблицаЗначений;
    Для Каждого Колонка Из Таблица.Колонки Цикл
        ИмяКолонки = Колонка.Имя;
        СвернутаяТаблица = Таблица.Скопировать(, ИмяКолонки);
        СвернутаяТаблица.Свернуть(ИмяКолонки);
        МассивТипов = Новый Массив;
        Для Каждого СтрокаСвернутойТаблицы из СвернутаяТаблица Цикл
            ТипЗначения = ТипЗнч(СтрокаСвернутойТаблицы[ИмяКолонки]);
            Если МассивТипов.Найти(ТипЗначения) = Неопределено Тогда
                МассивТипов.Добавить(ТипЗначения);
            КонецЕсли;
        КонецЦикла;
        Если МассивТипов.Количество() = 1 Тогда
            //Меры по предотвращению ошибки "Тип не может быть выбран в запросе"
            //для колонок заполненных исключительно значениями типа Тип("Неопределено")
            Если МассивТипов[0] = Тип("Неопределено") Тогда
                МассивТипов[0] = Тип("Строка");//Не уверен
            КонецЕсли;
        КонецЕсли;
        Результат.Колонки.Добавить(ИмяКолонки, Новый ОписаниеТипов(МассивТипов), Колонка.Заголовок, Колонка.Ширина);
        ЗагрузитьКолонку(Результат, Таблица.ВыгрузитьКолонку(ИмяКолонки), ИмяКолонки, Ложь);
    КонецЦикла;
    Возврат Результат;
КонецФункции

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

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

Путь к файлу

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

Загрузить колонку (создавать строки Таблицы при необходимости)

Альтернатива странному методу ЗагрузитьКолонку объектов типа ТаблицаЗначений, ТабличнаяЧасть
SDV 34 7
// Процедура - Загрузить колонку
//
// Параметры:
//  Таблица             - ТаблицаЗначений, ТабличнаяЧасть
//  МассивЗначений     - Массив
//  Колонка             - Строка
//  Очищать             - Булево - Необязательно. По-умолчанию Истина.
//                                Если Истина, то таблица предварительно очищается.
//                                
Процедура ЗагрузитьКолонку(Таблица, МассивЗначений, Колонка, Очищать = Истина) Экспорт
    Если Очищать Тогда
        Таблица.Очистить();
    КонецЕсли;


    МаксимальныйИндексТаблицы = Таблица.Количество() - 1;
    МаксимальныйИндексМассива = МассивЗначений.Количество() - 1;
    
    Для ИндексМассива = 0 по МаксимальныйИндексМассива Цикл
        Если ИндексМассива > МаксимальныйИндексТаблицы Тогда
            Строка = Таблица.Добавить();
        Иначе
            Строка = Таблица[ИндексМассива];
        КонецЕсли;
        Строка[Колонка] = МассивЗначений[ИндексМассива];
    КонецЦикла;
    
КонецПроцедуры