arefaste/1C_Forums huggingface dataset:
Стажи сотрудников
Теги: 1С,ЗУП 3

Получить стажи сотрудников в ЗУП 3

# Код реализации

```1c
&НаСервере
Функция РассчитатьСтажиСотрудниковЗанявшихПозиции(ПозицияШР, Должность, Подразделение, ДатаОтсчета, КатегорияДолжности, ОкладИндекс)

	СтруктураДанных = Новый Структура();

	СтруктураДанных.Вставить("ДатаНачала",);
	СтруктураДанных.Вставить("ДатаОкончания",);
	СтруктураДанных.Вставить("РазмерОклада",);

	ПараметрыПолучения = ПолучитьПараметры();
	ПараметрыПолучения.Организация = Отчет.Организация;

	//Если ЗначениеЗаполнено(Подразделение) Тогда
	//	ПараметрыПолучения.Подразделение = Подразделение;
	//КонецЕсли;

	//Если ВключаяУволенныхНаНачалоПериода Тогда
	//	ПараметрыПолучения.ВключаяУволенныхНаНачалоПериода = Истина;
	//КонецЕсли;

	ПараметрыПолучения.НачалоПериода = НачалоМесяца(ДатаОтсчета);
	ПараметрыПолучения.ОкончаниеПериода = КонецМесяца(ДатаОтсчета);
	ПараметрыПолучения.ПодработкиРаботниковПоТрудовымДоговорам = Истина;
	ПараметрыПолучения.РаботникиПоДоговорамГПХ = Ложь;

	//ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
	//ПараметрыПолучения.Отборы, "ДолжностьПоШтатномуРасписанию", "=", ПозицияШР);

	ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
	ПараметрыПолучения.Отборы, "Должность", "=", Должность);

	ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
	ПараметрыПолучения.Отборы, "Подразделение", "=", Подразделение);

	ПараметрыПолучения.КадровыеДанные = "Сотрудник,ФизическоеЛицо,Подразделение,Должность,ДолжностьПоШтатномуРасписанию,КоличествоСтавок,ВидЗанятости,ДатаПриема,ДатаУвольнения";

	ТаблицаСотрудников = КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолучения);

	//ДанныеПозиции = УправлениеШтатнымРасписанием.ДанныеПозицииШтатногоРасписания(ПозицияШР, ДатаОтсчета, Истина);

	ТаблицаСтажей = КадровыйУчетРасширенный.СведенияОСтажахСотрудников(ТаблицаСотрудников);

	Возврат ТаблицаСтажей;

КонецФункции
```
Кадровые данные сотрудника
Теги: 1С,ЗУП 3

Получить кадровые данные сотрудника в ЗУП 3

# Код реализации

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

// Список всех возможных кадровых данных
//
// ФИОПолные
// Пол
// ТабельныйНомер
// Организация
// Подразделение
// Должность
// ДатаПриема
// ДатаУвольнения
// Возраст
// Фамилия
// Имя
// Отчество
// Наименование
// ФизическоеЛицоНаименование
// Код
// ФизическоеЛицоКод
// АдресДляИнформирования
// АдресДляИнформированияПредставление
// АдресЗаПределамиРФ
// АдресЗаПределамиРФПредставление
// АдресМестаПроживания
// АдресМестаПроживанияПредставление
// АдресПоПрописке
// АдресПоПропискеПредставление
// ТелефонДомашний
// ТелефонДомашнийПредставление
// ТелефонРабочий
// ТелефонРабочийПредставление
// EMail
// EMailПредставление
// ДокументПериодРегистрации
// ДокументВид
// ДокументКодМВД
// ДокументСерия
// ДокументНомер
// ДокументДатаВыдачи
// ДокументСрокДействия
// ДокументКемВыдан
// ДокументКодПодразделения
// ДокументПредставление
// ИнвалидностьПериодРегистрации
// Инвалидность
// ИнвалидностьДатаВыдачи
// ИнвалидностьСрокДействияСправки
// ГражданствоПериодРегистрации
// Страна
// ИННВСтранеГражданства
// ПроцентСевернойНадбавки
// ТекущаяОрганизация
// ТекущееПодразделение
// ТекущаяДолжность
// ТекущийВидЗанятости
// ОсновноеРабочееМестоВОрганизации
// ДатаПриема
// ДатаЗавершенияРаботы
// ОформленПоТрудовомуДоговору
// ДатаУвольнения
// ТекущаяТарифнаяСтавка
// ТекущийСпособРасчетаАванса
// ТекущийАванс
// ДатаНачалаУчета
// ПриказОПриеме
// ПриказОПриемеДата
// ПриказОПриемеНомер
// НазначениеПодработки
// ПриказОбУвольнении
// ПриказОбУвольненииДата
// ПриказОбУвольненииНомер
// ПриказОбУвольненииСтатьяТКРФ
// ПрекращениеПодработки
// РабочееМестоПериодРегистрации
// РабочееМестоРегистратор
// ВидСобытия
// КоличествоСтавок
// ЭтоГоловнойСотрудник
// УчетЗатратПериодРегистрации
// СпособОтраженияЗарплатыВБухучете
// ОтношениеКЕНВД
// СтатьяФинансирования
// УчетЗатратДокументОснование
// ОплатаТрудаПериодЗаписи
// ОплатаТрудаРегистратор
// ТарифнаяСтавка
// ФОТ
// Надбавка
// ВидЗанятостиПериодЗаписи
// ВидЗанятостиРегистратор
// ВидЗанятости
// АвансПериодЗаписи
// АвансРегистратор
// СпособРасчетаАванса
// Аванс
// КлассУсловийТрудаПериодРегистрации
// КлассУсловийТруда
// КлассУсловийТрудаДатаРегистрацииИзменений
// ЗарплатныйПроектПериодРегистрации
// ЗарплатныйПроектРегистратор
// ЗарплатныйПроект
// НомерЛицевогоСчета.
```
Действующие плановые начисления на дату
Теги: 1С,ЗУП 3

Получить действующие плановые начисления на дату в ЗУП 3

# Код реализации

```1c
//Функция возвращает актуальные плановые начисления сотрудников на заданную дату в виде таблицы значений

ТекущиеДанныеОплатыТруда = КадровыйУчетРасширенный.ТекущиеНачисленияСотрудника(Сотрудник, ТекущаяДата(),,);

//Или для списка сотрудников

ТекущиеДанныеОплатыТруда = КадровыйУчетРасширенный.ТекущиеНачисленияСотрудников(МассивСотрудник, ТекущаяДата(),,);
```
Получить данные позиции штатного расписания
Теги: 1С,ЗУП 3

Получение данных позиции штатного расписания в ЗУП 3

# Код реализации

```1c
//Функция возвращает данные позиции штатного расписания на заданную дату в виде таблицы значений

ДанныеПозиции = УправлениеШтатнымРасписанием.ДанныеПозицииШтатногоРасписания(Позиция, ТекущаяДата(), Истина);
```
Чтение XML в таблицу значений
Теги: 1С,ТаблицаЗначений,XML

# Код реализации

```1c
Режим = РежимДиалогаВыбораФайла.Открытие;
	ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
	ДиалогОткрытияФайла.ПолноеИмяФайла = "";
	Фильтр = "Текст(*.XML)|*.XML";
	ДиалогОткрытияФайла.Фильтр = Фильтр;
	ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
	ДиалогОткрытияФайла.Заголовок = "Выберите файл для загрузки";

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

		ЭтотОбъект.Контрагент 		  	= Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ТЗ[0].КонтрагентИНН);
		ЭтотОбъект.КРВ_IDМенеджер	  	= ТЗ[0].IDМенеджер;
		ЭтотОбъект.КРВ_НомерЗаказаУНФ 	= ТЗ[0].Номер;
		ЭтотОбъект.Склад 				= Справочники.Склады.НайтиПоНаименованию(ТЗ[0].Склад);

Для каждого СтрокаТЗ Из ТЗ Цикл
КонецЦикла;
```
Сохранение таблицы значений в XML
Теги: 1С,Таблица значений,XML

# Код реализации

```1c
ДанныеНакладной = Новый ТаблицаЗначений();
	ДанныеНакладной.Колонки.Добавить("НоменклатураАртикул");
	ДанныеНакладной.Колонки.Добавить("Количество");
	ДанныеНакладной.Колонки.Добавить("Цена");

	Для Каждого Стр Из Товары Цикл
		Если Стр.Номенклатура.Артикул = "" Тогда
			Сообщить ("Внимание! В номенклатуре " + Стр.Номенклатура + " не определен артикул.");
		Иначе
			СтрокаТЗ = ДанныеНакладной.Добавить();
			СтрокаТЗ.НоменклатураАртикул = Стр.Номенклатура.Артикул;
			СтрокаТЗ.Количество = Стр.Количество;
			СтрокаТЗ.Цена = Стр.Цена;
		КонецЕсли;
	КонецЦикла;
	Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
	XML = Новый ЗаписьXML;
	ИмяФайла = "" + КРВ_ВспомогательныеФункции.УбратьНули(Номер)
	+ " - " + КРВ_ВспомогательныеФункции.УбратьНедопустимыеСимволы(Контрагент);

	XML.ОткрытьФайл("d:\1C_DATA\ОБМЕН\" + ИмяФайла + ".xml");
	Сериализатор.ЗаписатьXML(XML, ДанныеНакладной);
```
Как по GUID определить время и дату создания ссылки?
Теги: 1С,GUID,Дата,Ссылка

Как по GUID определить время и дату создания ссылки?

# Код реализации

```1c
Функция UUID_Timestamp(Ссылка)

	ГУИД = Ссылка.УникальныйИдентификатор();
    // Например ГУИД равен: bdb62d89-cede-11e4-b12b-d4ae52b5e909
    // Дата содержится в первых символах, bdb62d89-cede-11e4 которые нужно переставить задом наперед: 11e4-cede-bdb62d89
    Строка16 = Сред(ГУИД, 15, 4) + Сред(ГУИД, 10, 4) + Сред(ГУИД, 1, 8);

    // Убираем "лишние" знаки "-"(тире).
    Строка16 = СтрЗаменить(Строка16, "-", "");

    // Убираем первый символ, так как в нем содержится версия стандарта (зашит в седьмой октет)
    Строка15 = Сред(Строка16, 2);

    // Получаем timestamp в 60 бит : 1E4 CEDE BDB6 2D89
    ЧислоСек = 0;
    Для Позиция = 1 По СтрДлина(Строка15) Цикл
        ЧислоСек = ЧислоСек + Найти("123456789abcdef",Сред(Строка15,Позиция,1))*Pow(16,СтрДлина(Строка15) - Позиция);
    КонецЦикла;
    ЧислоСек = ЧислоСек / 10000000;

    // Прибавляем к дате начала Григореанского календаря
    Возврат Дата(1582, 10, 15, 00, 00, 00) + ЧислоСек + СмещениеСтандартногоВремени() + СмещениеЛетнегоВремени();;

КонецФункции
```
Веб сервис БУХ обращение
Теги: 1С

# Код реализации

```1c
&НаСервереБезКонтекста
Функция ПолучитьПроксиУниверсальныйВебСервисЕРП(ТестовыйСервер)

	ПараметрыПрокси = ПолучитьПараметрыПрокси(ТестовыйСервер);

	АдресWS			= ПараметрыПрокси.АдресWS;
	Пользователь	= ПараметрыПрокси.Пользователь;
	Пароль			= ПараметрыПрокси.Пароль;

	Попытка
		Определение = Новый WSОпределения(АдресWS, Пользователь, Пароль);

		Прокси = Новый WSПрокси(Определение, "gm_BuhExchangeURL", "gm_BuhExchange", "gm_BuhExchangeSoap");
		Прокси.Пользователь	= Пользователь;
		Прокси.Пароль		= Пароль;
	Исключение
		ЗаписьЖурналаРегистрации("ВебСервис",УровеньЖурналаРегистрации.Ошибка,,, "ПолучитьПроксиУниверсальныйВебСервисБух()"+ Символы.ПС + ОписаниеОшибки());
		Возврат Неопределено;
	КонецПопытки;

	Возврат Прокси;

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

&НаСервереБезКонтекста
Функция ПолучитьПараметрыПрокси(ТестовыйСервер)

	СтруктураПараметров = Новый Структура();

	СтруктураПараметров.Вставить("АдресWS","http://192.168.12.11/buh_centr/ws/gm_BuhExchange.1cws?wsdl"); //"http://192.168.12.11/buh_centr/ws/gm_BuhExchange.1cws?wsdl"

	СтруктураПараметров.Вставить("Пользователь","WS_Обмен");
	СтруктураПараметров.Вставить("Пароль","123456");

	Возврат СтруктураПараметров;

КонецФункции
```
Кеширование текущей строки для сравнения при окончании редактирования
Теги: 1С,ИзмененияВСтрокеТЧ

Сохранить кеш строки до её изменения пользователем. Сравнить после окончания редактирования, если надо выполнить нужные действия.

# Код реализации

```1c
//1. На форме необходимо создать реквизит: КешТекущейСтроки - ПроизвольныйТип.

//2. В нужной табличной части создаём процедуру ПередНачаломИзменения, например такую:

&НаКлиенте
Процедура ПрикреплённыеФайлыНаСервереПередНачаломИзменения(Элемент, Отказ)
    КешТекущейСтроки = ПреобразоватьСтрокуТаблицыВСтруктуру(Элемент.ТекущиеДанные, Элементы.ГруппаСтраницы.ПодчиненныеЭлементы.ГруппаПрисоединенныеФайлы.ПодчиненныеЭлементы.ПрикреплённыеФайлыНаСервере.ПодчиненныеЭлементы, "ПрикреплённыеФайлыНаСервере");
КонецПроцедуры

// 3. Добавить  Процедуру  ПреобразоватьСтрокуТаблицыВСтруктуру. В этой процедуре необходимо пропускать обработку колонок, которые взяты по ссылке из какого-то ссылочного реквизита (Ссылка.Реквизит), они не главные и их не обязательно помещать в структуру

// Возвращает структуру с ключами, соответствующими колонкам таблицы значений.
// Значения в структуре заполняются значениями полей из переданной строки таблицы.
//
// Параметры:
//	ТекущаяСтрока - СтрокаТаблицыЗначений
//      ПодчиненныеЭлементы - полный путь к подчиненным элементам табличной части (колонкам) на управляемых формах
//      ИмяТаблица - имя таблицы на управляемой форме
// Возвращаемое значение:
//	Структура
//      лучше вынести  функцию в общий модуль НаКлиенте
&НаКлиенте
Функция ПреобразоватьСтрокуТаблицыВСтруктуру(ТекущаяСтрока,ПодчиненныеЭлементы, ИмяТаблицы) Экспорт

	РезультатСтруктура = Новый Структура;

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

	Возврат РезультатСтруктура;

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

// 4. Создаём процедуру ПриОкончанииРедактирования и в ней уже смотрим что изменилось в строке, после её редактирования, сопоставляем с кешированными данными в строке, например так:

&НаКлиенте
Процедура ПрикреплённыеФайлыНаСервереПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)

    Если  НоваяСтрока = Ложь И КешТекущейСтроки <> Неопределено Тогда

        // проверяем сравниваем с кешированной строкой перед изменениями
        Если КешТекущейСтроки.Имя <> "" И КешТекущейСтроки.Имя <> Элемент.ТекущиеДанные.Имя Тогда
            // пишете код что надо сделать

        КонецЕсли;
     КонецЕсли;

КонецПроцедуры
```
Групповое изменение Измерения в НабореЗаписей регистра сведений
Теги: 1С,Регистры

Изменить измерение в наборе записей регистра сведений

# Код реализации

```1c
    НаборЗаписей = РегистрыСведений.РС1.СоздатьНаборЗаписей();
   // тут устанавливаете нужный  отбор по измерениям
    НаборЗаписей.Отбор.Измерение1.Установить(ЗначениеИзмерения);
    НаборЗаписей.Прочитать();

    МенеджерЗаписи = РегистрыСведений.РС1.СоздатьМенеджерЗаписи();

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

// набор используем только для цикла перебора записей
// а запись каждую редактируем отдельно
// если необходимо можно сделать в одной транзакции

// иначе не даст сохранить, напишет набор не соотвествует  установленному отбору
```
Быстро получить всех родителей для текущей позиции
Теги: 1С,РодителиЭлементаСправочника

Вложенность всех родителей текущей позиции справочника

# Код реализации

```1c
ВсеКоды = СтрЗаменить(Справочники.Номенклатура.НайтиПоКоду(Код).ПолныйКод(),"/",Символы.ПС);

Для Индекс = 1 По СтрЧислоСтрок(ВсеКоды) Цикл
   Путь = Путь + Справочники.Номенклатура.НайтиПоКоду(СтрПолучитьСтроку(ВсеКоды, Индекс)) + "\";
КонецЦикла;

// Параметр .ПолныйКод() позволяет получить всех родителей через символ "/"
// дальше заменяем символ "/" на символ переноса строки Символы.ПС
// и получаем в каждой строке по родителю
// далее через индекс строк собираем полный путь, при необходимости
```
Установить параметр отчета СКД
Теги: 1С,СКД,Отчет

Процедура для удобной установки значения параметра отчета на СКД

# Код реализации

```1c
Процедура УстановитьПараметр(Имя, Значение)

    Параметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый   ПараметрКомпоновкиДанных(Имя));
	Если Параметр <> Неопределено Тогда
		Параметр.Значение = Значение;
		Параметр.Использование = ЗначениеЗаполнено(Значение);
	КонецЕсли;


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

# Примечания

- можно сразу так:
КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Параметр", Значение)
Объединить таблицы значений
Теги: 1С,ТаблицаЗначений,Таблица значений

Ищет в ТаблицеЗначений строки, соответствующие значениям колонок Измерения и складывает значения колонок Ресурсы. Если строка не найдена, то добавляется новая.

# Код реализации

```1c
Функция ОбъединитьТаблицыЗначений(Знач Таблица1, Таблица2, Измерения, Ресурсы) Экспорт

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

		ЗаполнитьЗначенияСвойств(СтруктураОтбора, СтрокаТЗ);

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

	КонецЦикла;

	Возврат Таблица1;

КонецФункции
```
ОставитьСтрокиТаблицыЗначений
Теги: 1С,ТаблицаЗначений,Таблица значений

Оставляет строки ТаблицыЗначений, соответсвующие структуре отбора (удаляет не соответсвующие)

# Код реализации

```1c
Функция ОставитьСтрокиТаблицыЗначений(Знач Таблица, СтруктураОтбора) Экспорт

	МассивСтрок = Новый Массив;
	РезультатОтбора = Таблица.НайтиСтроки(СтруктураОтбора);
	Для каждого СтрокаОтбора Из РезультатОтбора Цикл
		МассивСтрок.Добавить(СтрокаОтбора);
	КонецЦикла;

	МассивУдаления = Новый Массив;
	Для Каждого СтрокаТЗ Из Таблица Цикл
		Если МассивСтрок.Найти(СтрокаТЗ) = Неопределено Тогда
			МассивУдаления.Добавить(СтрокаТЗ);
		КонецЕсли;
	КонецЦикла;

	Для Каждого СтрокаТЗ Из МассивУдаления Цикл
		Таблица.Удалить(СтрокаТЗ);
	КонецЦикла;

    Возврат Таблица;

КонецФункции // ОставитьСтрокиТаблицыЗначений()
```
УдалитьСтрокиТаблицыЗначений
Теги: 1С,ТаблицаЗначений,Таблица значений

Удаляет строки ТЗ, соответсвующие структуре отбора

# Код реализации

```1c
Функция УдалитьСтрокиТаблицыЗначений(Знач Таблица, СтруктураОтбора) Экспорт

	МассивСтрок = Новый Массив;
	РезультатОтбора = Таблица.НайтиСтроки(СтруктураОтбора);
	Для каждого СтрокаОтбора Из РезультатОтбора Цикл
		МассивСтрок.Добавить(СтрокаОтбора);
	КонецЦикла;

	Для Каждого СтрокаТЗ Из МассивСтрок Цикл
		Таблица.Удалить(СтрокаТЗ);
	КонецЦикла;

    Возврат Таблица;

КонецФункции // УдалитьСтрокиТаблицыЗначений()
```
Прибавить рабочие дни к дате
Теги: 1С,производственный календарь,рабочие дни,прибавить дни,добавить дни

# Код реализации

```1c
    Запрос = Новый Запрос;
	Запрос.Текст =
		"ВЫБРАТЬ ПЕРВЫЕ " + Число(ДобавитьКоличествоДней) + "
		|	ДанныеПроизводственногоКалендаря.Дата КАК ДатаКалендаря
		|ПОМЕСТИТЬ ВТ_РабочиеДни
		|ИЗ
		|	РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
		|ГДЕ
		|	ДанныеПроизводственногоКалендаря.ВидДня = &ВидДня_РабочийДень
		|	И ДанныеПроизводственногоКалендаря.Дата >= &ИсходнаяДата
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	МАКСИМУМ(ВТ_РабочиеДни.ДатаКалендаря) КАК ДатаКалендаря
		|ИЗ
		|	ВТ_РабочиеДни КАК ВТ_РабочиеДни";

	Запрос.УстановитьПараметр("ИсходнаяДата", НачалоДня(Объект.Дата));
	Запрос.УстановитьПараметр("ВидДня_РабочийДень", Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий);

        РезультатЗапроса = Запрос.Выполнить();

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

	Если ВыборкаДетальныеЗаписи.Следующий() Тогда
		Возврат ВыборкаДетальныеЗаписи.ДатаКалендаря;
	КонецЕсли;
```

# Примечания

- Чтобы код работал правильно нужно в запросе в первый пакет добавить сортировку по полю ДатаКалендаря.

- еще предпразничные дни учитывать нужно.
Передача таблицы значений в запрос
Теги: 1С,Внешний источник,Таблица значений,Запрос

Передача таблицы значений в запрос. В качестве внешнего источника могут выступать: Таблица значений, Табличная часть, Результат запроса.

# Код реализации

```1c
Товары = Новый ТаблицаЗначений;
Товары.Колонки.Добавить("Наименование");
Товары.Колонки.Добавить("Количество");

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
			   |	ВнешнийИсточник.Наименование,
			   |	ВнешнийИсточник.Количество
			   |ПОМЕСТИТЬ ВТ_ВнешнийИсточник
			   |ИЗ
			   |	&ВнешнийИсточник КАК ВнешнийИсточник
			   |;
			   |
			   |////////////////////////////////////////////////////////////////////////////////
			   |ВЫБРАТЬ
			   |	ВТ_ВнешнийИсточник.Наименование,
			   |	ВТ_ВнешнийИсточник.Количество КАК Количество
			   |ИЗ
			   |	ВТ_ВнешнийИсточник КАК ВТ_ВнешнийИсточник
			   |ГДЕ
			   |	ВТ_ВнешнийИсточник.Количество > 0
			   |
			   |УПОРЯДОЧИТЬ ПО
			   |	Количество";

Запрос.УстановитьПараметр("ВнешнийИсточник", Товары);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

Пока Выборка.Следующий() Цикл

	// Обработка данных

КонецЦикла;
```

# Примечания

- Разве не будет ошибки, что колонки таблицы не типизированные?

- (1) JomInG, будет ошибка, но прямо тут где то рядом есть отличная функционая автоматической типизации подготовленных данных для передачи в запрос, в общем случае работает нормально она
Таблица значений из списка колонок
Теги: 1С

Создает объект ТаблицаЗначений из списка колонок (строка с разделителями или массив)

# Код реализации

```1c
Функция ТаблицаЗначений(Колонки)

	Если ТипЗнч(Колонки) = Тип("Строка") Тогда
		Колонки = СтрРазделить(Колонки, ",");
	КонецЕсли;

	ТабЗнач = Новый ТаблицаЗначений;
	Для каждого Колонка Из Колонки Цикл
		ИмяКолонки = СтрЗаменить(СокрЛП(Колонка), " ", "_");
		ТабЗнач.Колонки.Добавить(ИмяКолонки);
	КонецЦикла;

	Возврат ТабЗнач;

КонецФункции // ТаблицаЗначений()
```
Структура метаданных регистра сведений
Теги: 1С

Возвращает структуру метаданных регистра сведений. В параметр функции можно передать строковое название регистра, или объект РегистрСведений, МенеджерЗаписи, НаборЗаписей

# Код реализации

```1c
Функция СтруктураМетаданныхРегистраСведений(РегистрСведений) Экспорт

	СтруктураРегистра         = Неопределено;
	РегистрСведенийМетаданные = Неопределено;

	Если ТипЗнч(РегистрСведений) = Тип("Строка") Тогда
		РегистрСведенийМетаданные = Метаданные.НайтиПоПолномуИмени("РегистрСведений." + РегистрСведений);
	Иначе

		РегистрСведенийМетаданные = Метаданные.НайтиПоТипу(ТипЗнч(РегистрСведений));
		Если РегистрСведенийМетаданные <> Неопределено Тогда
			РегистрСведенийМетаданные = Метаданные.НайтиПоПолномуИмени("РегистрСведений." + РегистрСведенийМетаданные.Имя);
		КонецЕсли;

	КонецЕсли;

	Если РегистрСведенийМетаданные <> Неопределено Тогда

		НаименованиеРегистра       = РегистрСведенийМетаданные.Имя;
		МетаданныеРегистраСведений = Метаданные.РегистрыСведений[НаименованиеРегистра];

		МассивИзмерений = Новый Массив;
		Для Каждого Измерение Из МетаданныеРегистраСведений.Измерения Цикл
			МассивИзмерений.Добавить(Измерение.Имя);
		КонецЦикла;

		МассивРесурсов  = Новый Массив;
		Для Каждого Ресурс Из МетаданныеРегистраСведений.Ресурсы Цикл
			МассивРесурсов.Добавить(Ресурс.Имя);
		КонецЦикла;

		СтруктураРегистра = Новый Структура;
		СтруктураРегистра.Вставить("Измерения", МассивИзмерений);
		СтруктураРегистра.Вставить("Ресурсы",   МассивРесурсов);

	КонецЕсли;

	Возврат СтруктураРегистра;

КонецФункции // СтруктураМетаданныхРегистраСведений()
```
Колонки в строку
Теги: 1С

Возвращает строку с названиями колонок коллекции (ТаблицаЗначений, РезультатЗапроса)

# Код реализации

```1c
Функция КолонкиВСтроку(Коллекция, Разделитель=",")

	СтрКоллекция = "";

	Для каждого Колонка Из Коллекция.Колонки Цикл
		Если Не ПустаяСтрока(СтрКоллекция) Тогда
			СтрКоллекция = СтрКоллекция + Разделитель;
		КонецЕсли;
		СтрКоллекция = СтрКоллекция + Колонка.Имя;
	КонецЦикла;

	Возврат СтрКоллекция;

КонецФункции // КолонкиВСтроку()
```