arefaste/1C_Forums huggingface dataset:
Получение таблицы и массива, заполненных последовательностью чисел от 0 до N-1
Теги: 1С,Минимализмы,Задачи

Иногда бывает нужно быстро получить готовый массив с последовательностью чисел от 0 до N-1. Например, чтобы пронумеровать строки таблицы значений путем загрузки в нее колонки с номерами строк. Это можно очень быстро сделать, используя "Порождающий запрос". Все необходимые функции очень компактны. Поэтому они приведены здесь.

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

```1c
// Возвращает текст запроса, формирующего таблицу чисел rN с одной колонкой X (eng), содержащую ряд: 0, 1, (N - 1).
function ProtoText(N, M = 1000000000) export
    return ?(N > 2
    , ProtoText(M - Int(M - Sqrt(N)))
    + strreplace(strreplace(";select top #2 a.X * #1 + b.X X into r#2 from r#1 a, r#1 b", "#2", format(N, "NG=")), "#1", format(M - Int(M - Sqrt(N)), "NG="))
    , "select 0 X into r2 union select 1")
endfunction

// Возвращает таблицу, содержащую последовательность чисел: 0, 1, 2, ..., (ЧислоСтрок - 1)
Функция ПоследовательностьЧиселТаблицей(ЧислоСтрок) Экспорт
    Запрос = Новый Запрос(СтрЗаменить(ProtoText(ЧислоСтрок), "into r" + format(ЧислоСтрок, "NG="), ""));
    Возврат Запрос.Выполнить().Выгрузить()
КонецФункции

// Возвращает массив, содержащий последовательность чисел: 0, 1, 2, ..., (ЧислоЭлементов - 1)
Функция ПоследовательностьЧиселМассивом(ЧислоЭлементов) Экспорт
    Возврат ПоследовательностьЧиселТаблицей(ЧислоЭлементов).ВыгрузитьКолонку(0)
КонецФункции
```
Добавить к дате и разность дат
Теги: 1С,Минимализмы,Дата

Функции для работы с датами как в языке запросов

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

```1c
Функция ДобавитьКДате(Дата1, Количество, Период) Экспорт
    Шаг = Новый Структура("Год, Квартал, Месяц, Неделя, День, Час, Минута, Секунда", 12, 3, 1, -604800, -86400, -3600, -60, -1);
    Возврат ?(Шаг[Период] > 0, ДобавитьМесяц(Дата1, Количество * Шаг[Период]), Дата1 - Количество * Шаг[Период])
КонецФункции
Функция РазностьДат(Дата1, Дата2, Период) Экспорт
    Шаг = Новый Структура("Год, Квартал, Месяц, Неделя, День, Час, Минута, Секунда", 12, 3, 1, -604800, -86400, -3600, -60, -1);
    Возврат Цел(?(Шаг[Период] > 0, Год(Дата2) * 12 + Месяц(Дата2) - 1, '00010101' - Дата2) / Шаг[Период])
          - Цел(?(Шаг[Период] > 0, Год(Дата1) * 12 + Месяц(Дата1) - 1, '00010101' - Дата1) / Шаг[Период])
КонецФункции

//Функция Квартал

Функция Квартал(Дата) Экспорт
    Возврат Цел((Месяц(Дата) - 1) / 3) + 1
КонецФункции

//Названия месяцев прописью

Формат(Дата(1, НомерМесяца, 1),"ДФ=ММММ")

//Название дней недели прописью

Формат(Дата(1, 1, 2 + НомерДняНедели),"ДФ=дддд")
```
Сжатое представление последовательности дат запросом
Теги: 1С,Минимализмы,Задачи

Задача похожа на сжатое представление ряда чисел, только роль чисел играют даты. Дана последовательность дат. Нужно заменить ее последовательностью непрерывных интервалов дат. Вот решение

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

```1c
ВЫБРАТЬ
    Даты.Дата,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДатыДо.Дата) КАК Номер
ПОМЕСТИТЬ НомераДат
ИЗ
    ВТДаты КАК Даты
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТДаты КАК ДатыДо
        ПО (ДатыДо.Дата < = Даты.Дата)
СГРУППИРОВАТЬ ПО
    Даты.Дата
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    МИНИМУМ(НомераДат.Дата) КАК ДатаНач,
    МАКСИМУМ(НомераДат.Дата) КАК ДатаКон
ИЗ
    НомераДат КАК НомераДат
СГРУППИРОВАТЬ ПО
    ДОБАВИТЬКДАТЕ(НомераДат.Дата, ДЕНЬ, -НомераДат.Номер)
```
Функция для превращения строки в дату по форматной строке
Теги: 1С,Минимализмы

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

```1c
Функция СтрокаВДату(Знач ФорматДаты, Знач Дано, Ошибка = Ложь) Экспорт
    Попытка
        ё = Формат('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'
    КонецПопытки
КонецФункции
```
Найти кратчайший путь коня между двумя заданными клетками
Теги: 1С,Минимализмы,Задачи

Первая функция размечает доску, вторая рекурсивно перечисляет пути из конечной точки.  Разметка идет "по спирали". Номер витка (круга) соответствует минимальному расстоянию от начальной точки. На каждом витке неразмеченные клетки просматриваются в паре с каждой клеткой последнего витка. Если расстояние (сумма квадратов разности координат равно пяти) соответствует шагу коня клетка включается в следующий виток (круг). И так пока в круг не попадет конечная клетка. В каждой клетке запоминается массив клеток предыдущего витка, из которых попадают в текущую. Это дает возможность рекурсивно раскрутить пути до начальной точке "при спуске".

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

```1c
Функция Спираль(А, Б, Круг = 0)Экспорт
    Поле = НоваяТаблицаЗначений("Х, У, Круг, Связи");
    Для К = 0 По 63 Цикл
        ЗаполнитьЗначенияСвойств(Поле.Добавить(), Новый Структура("Х, У, Круг, Связи", Цел(К / 8), К % 8, (К = А) - 1, Новый Массив))
    КонецЦикла;
    Пока Поле[Б].Круг < 0 Цикл
        Целина = Поле.НайтиСтроки(Новый Структура("Круг", -1));
        Трек = Поле.НайтиСтроки(Новый Структура("Круг", Круг));
        Для Каждого С Из Целина Цикл
            Для Каждого К Из Трек Цикл
                Если (С.Х - К.Х) * (С.Х - К.Х) + (С.У - К.У) * (С.У - К.У) = 5 Тогда
                    С.Круг = Круг + 1;
                    С.Связи.Добавить(К.Х * 8 + К.У)
                КонецЕсли
            КонецЦикла
        КонецЦикла;
        Круг = Круг + 1
    КонецЦикла;
    Возврат Поле
КонецФункции
Процедура Спуск(Б, Поле, Знач Путь = "") Экспорт
    Путь = Сред("abcdefgh", Б / 8 + 1, 1) + (Б % 8 + 1) + " " + Путь;
    Если Поле[Б].Связи.Количество() = 0 Тогда
        ЗаполнитьЗначенияСвойств(Пути.Добавить(), Новый Структура("Путь", Путь))
    Иначе
        Для Каждого К Из Поле[Б].Связи Цикл
            Спуск(К, Поле, Путь)
        КонецЦикла
    КонецЕсли
КонецПроцедуры
```
Ход конем
Теги: Задачи,1С,Минимализмы

Определить количество и поля клеток, доставаемых конем, в зависимости от его положения на доске

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

```1c
ВЫБРАТЬ 1 у, "a" х
ПОМЕСТИТЬ а
ОБЪЕДИНИТЬ ВЫБРАТЬ 2, "b"
ОБЪЕДИНИТЬ ВЫБРАТЬ 3, "c"
ОБЪЕДИНИТЬ ВЫБРАТЬ 4, "d"
ОБЪЕДИНИТЬ ВЫБРАТЬ 5, "e"
ОБЪЕДИНИТЬ ВЫБРАТЬ 6, "f"
ОБЪЕДИНИТЬ ВЫБРАТЬ 7, "g"
ОБЪЕДИНИТЬ ВЫБРАТЬ 8, "h"
;
ВЫБРАТЬ г.х, д.у
ИЗ а а, а г, а д
ГДЕ а.х = &ах И (а.у - г.у) * (а.у - г.у) + (&бу - д.у) * (&бу - д.у) = 5
```
Сравнение двух строк
Теги: 1С,Минимализмы

Результатом сравнения двух строк является массив, который показывает, что от "От" до "До" позиции строки совпадают (ОК = Истина) или нет.

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

```1c
Функция ТаблицаСравненияСтрок_(С1, С2) Экспорт
   Ответ = Новый ТаблицаЗначений; //Ответ = НоваяТаблицаЗначений("От, До, ОК");
   Ответ.Колонки.Добавить("От");
   Ответ.Колонки.Добавить("До");
   Ответ.Колонки.Добавить("ОК");
   ЗаполнитьЗначенияСвойств(Ответ.Добавить(), Новый Структура("От, ОК", 1, Сред(С1, 1, 1) = Сред(С2, 1, 1)));
   Для ё = 2 По Макс(СтрДлина(С1), СтрДлина(С2)) Цикл
      Если Ответ[0].ОК <> (Сред(С1, ё, 1) = Сред(С2, ё, 1)) Тогда
         ЗаполнитьЗначенияСвойств(Ответ.Вставить(0), Новый Структура("От, ОК", ё, НЕ Ответ[1].ОК));
         Ответ[1].До = ё - 1
      КонецЕсли
   КонецЦикла;
   Ответ[0].До = Макс(СтрДлина(С1), СтрДлина(С2));
   Возврат Ответ
КонецФункции

//С дихотомией

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

Вариант на основе стэйт-машины.
Выгодное отличие здесь в том, что символ вырезается из строки и проверяется на регистр только один раз. Если бы не надо было первую букву делать заглавной - было бы еще красивее.

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

```1c
Функция Синонимайзер(Имя, Ответ = "", Стэйт = 7, б = "") Экспорт
   Для ё = 1 По СтрДлина(Имя) Цикл
      а = Сред(Имя, ё, 1);
      Стэйт = (НРег(а) <> а) * 4 + Цел(Стэйт / 2);
      Ответ = Ответ + ?(Стэйт = 2, НРег(б), ?(ё = 2, ВРег(б), б)) + ?(Стэйт = 4 ИЛИ Стэйт = 5, " ", "");
      б = а
   КонецЦикла;
   Возврат Ответ + б
КонецФункции
```

# Примечания

- Можете пояснить конструкцию, особенно часть, где вычисляется очередной стэйт? Насколько понимаю, стэйты здесь - это значимость символов в строке, первый, последний, прописной... Но конструкция по вычислению стэйта непонятна.
Связывание таблиц значений по ФИФО
Теги: ТаблицаЗначений,1С,Минимализмы,ФИФО

Если имеется две таблицы с колонками: Период, Документ, Сумма, то часто возникает задача построения объединенной таблицы "Результат" с колонками Период1, Документ1, Период2, Документ2, Сумма, в которой документы двух таблиц связаны по ФИФО. Чтобы функция Результат.Свернуть("Период1,Документ1", "Сумма") давала первую таблицу, а Результат.Свернуть("Период2,Документ2", "Сумма") - вторую.
Такой задачей, является, например, распределение оплат по отгрузкам.
Вот требуемая функция. Осторожнее, так как она меняет исходные таблицы!

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

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

Стандартная выборка из виртуального регистра остатков и оборотов не показывает остатки на периодах, в которых нет оборотов. В СКД, то есть вне запроса проблема легко решается, а для использования внутри запроса приходится "городить огород". У многих это выливается в несколько запросов, тогда как можно обойтись и одним. Остатки здесь получаются суммированием оборотов. По тому же принципу платформа рассчитывает остатки внутри периода хранения итогов.
ЗначениеСвойства
Теги: 1С,Минимализмы

Для получения значения одного свойства выбранного объекта хватает одной строки кода, которую можно оформить в виде функции или использовать "инлайн"

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

```1c
ЗначениеСвойства = РегистрыСведений.ЗначенияСвойствОбъектов.Получить(Новый Структура("Объект, Свойство", ОбъектСсылка, ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию(ИмяСвойства))).Значение;
```
Типизация таблицы значений
Теги: ТаблицаЗначений,1С

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

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

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

ТЗ = РезультатТЗ.Скопировать();
```
Пример раскраски текста форматированной строки
Теги: 1С

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

```1c
Если СокрЛП(ЭлементТекста) = "="
	Или СокрЛП(ЭлементТекста) = ">"
	Или СокрЛП(ЭлементТекста) = "<"
	Или СокрЛП(ЭлементТекста) = "*"
	Или СокрЛП(ЭлементТекста) = "/"
	Или СокрЛП(ЭлементТекста) = "+"
	Или СокрЛП(ЭлементТекста) = "-" тогда

	ЭлементТекста = Новый ФорматированнаяСтрока(ЭлементТекста,, WebЦвета.Красный, WebЦвета.Белый);

ИначеЕсли Нрег(СокрЛП(ЭлементТекста)) = "результат"
	Или нРег(СокрЛП(ЭлементТекста)) = "база"
	Или нРег(СокрЛП(ЭлементТекста)) = "размероклада"
	Или нРег(СокрЛП(ЭлементТекста)) = "недельнаяставканорма"
	Или нРег(СокрЛП(ЭлементТекста)) = "недельнаяставкафакт"
	Или нРег(СокрЛП(ЭлементТекста)) = "отработанодней"
	Или нРег(СокрЛП(ЭлементТекста)) = "отработаночасов" тогда

	ЭлементТекста = Новый ФорматированнаяСтрока(ЭлементТекста,, WebЦвета.Синий, WebЦвета.Белый);

Иначе
	ЭлементТекста = Новый ФорматированнаяСтрока(ЭлементТекста,, WebЦвета.Белый, WebЦвета.Черный);
КонецЕсли;
```
Отладить внешнюю обработку
Теги: 1С,БСП

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

```1c
//Общий модуль ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку

Функция ПодключитьВнешнююОбработку(Ссылка) Экспорт

        СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Подключение, БезопасныйРежим = ""%1"".'"), БезопасныйРежим));

        //ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , БезопасныйРежим,

        //ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений());

        ИмяОбработки = Менеджер.Создать("C:\1C\МояОбработка.epf", Ложь);

        ИмяОбработки = "МояОбработка";

        Возврат ИмяОбработки;



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

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

```1c
ИсправлениеДокументовЗарплатаКадры.СкопироватьДокумент(Приемник, Источник, ИсключаемыеСвойства = "", ИсключаемыеТабличныеЧасти = "", ДанныеЗаполнения = Неопределено) Экспорт;
```
Вернуть значения реквизитов объекта
Теги: 1С,БСП

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

```1c
ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Данные.ФизическоеЛицо, "ФИО,Фамилия,Имя,Отчество,УточнениеНаименования");

ФИО = Новый Структура("Фамилия,Имя,Отчество");

ЗаполнитьЗначенияСвойств(ФИО, ЗначенияРеквизитов);
```
Дополнить таблицу значений - приемника данными из таблицы значений - источника
Теги: ТаблицаЗначений,Таблица значений,1С,БСП

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

```1c
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ТаблицаИсточник, ТаблицаПриемник);
```
Дополнить массив МассивПриемник значениями из массива МассивИсточник
Теги: 1С,Массив,БСП

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

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

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

```1c
СтруктураАдреса = ЗарплатаКадры.СтруктураАдресаИзXML(Адрес,

ПредопределенноеЗначение("Справочник.ВидыКонтактнойИнформации.ПочтовыйАдресОрганизации"));

Адрес = СтруктураАдреса.Представление;
```
Преобразовать таблицу значений в массив
Теги: ТаблицаЗначений,Таблица значений,1С,Массив

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

```1c
мсДанных = Новый Массив;

Для Каждого СтрокаТЗ Из тзДанных Цикл

    стСтрокаТаблицы = Новый Структура;

    Для Каждого ИмяКолонки Из тзДанных.Колонки Цикл

        стСтрокаТаблицы.Вставить(ИмяКолонки.Имя, СтрокаТЗ[ИмяКолонки.Имя]);

    КонецЦикла;

    мсДанных.Добавить(стСтрокаТаблицы);

КонецЦикла;
```
Программное добавление возможности отбора в динамический список формы
Теги: 1С,БСП

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

```1c
Если Не Пользователи.РолиДоступны("ИспользованиеДополнительныхРеквизитов") Тогда

        Форма.Список.ТекстЗапроса = Форма.Список.ТекстЗапроса + "

        |ГДЕ

        |       Документ.НужныйРеквизит = ЛОЖЬ";

КонецЕсли;
```
Динамическое добавление реквизита на форму из общего модуля
Теги: ЗУП 3,1С

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

```1c
ЗарплатаКадрыРасширенный.МногофункциональныеДокументыДобавитьЭлементыФормы(Форма, НСтр("ru='Новый'"), "ГруппаНовых", "Новый");

Элементы.Новый.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Лево;

Элементы.Новый.Доступность = Пользователи.РолиДоступны("ДобавлениеНовых");
```
Создать временную таблицу "Штатное расписание"
Теги: Временная таблица,ЗУП 3,1С,КадровыйУчет

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

```1c
ПараметрыТаблицы = КадровыйУчет.ПараметрыПолученияВсехСотрудниковОрганизацийПоСпискуФизическихЛиц();

ПараметрыТаблицы.Организация = СтруктураПараметров.Организация;

ПараметрыТаблицы.НачалоПериода = СтруктураПараметров.Дата;

ПараметрыТаблицы.ОкончаниеПериода = СтруктураПараметров.Дата;

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

Запрос.Текст =

        "ВЫБРАТЬ

        |       *

        |ПОМЕСТИТЬ ВТСотрудники

        |ИЗ

        |       ВТСотрудникиПредварительно КАК ВТСотрудникиПредварительно

        |ГДЕ

        |       ВТСотрудникиПредварительно.ДатаУвольнения = ДАТАВРЕМЯ(1,1,1)

        |;

        |УНИЧТОЖИТЬ ВТСотрудникиПредварительно

        |";

Запрос.Выполнить();

ПараметрыТаблицы = УправлениеШтатнымРасписанием.ПараметрыПостроенияВТШтатноеРасписание(СтруктураПараметров.Дата, СтруктураПараметров.Организация);

ПараметрыТаблицы.ДополнитьОписаниемНачислений = Истина;

ПараметрыТаблицы.ПолноеОписаниеНачислений = Истина;

ПараметрыТаблицы.Вставить("ПоказыватьПлановыеПозиции");



УправлениеШтатнымРасписанием.СоздатьВТШтатноеРасписание(МенеджерВТ, Истина, ПараметрыТаблицы, , "ВТВыбраныПозицииШР");
```
Создать временную таблицу, с данными учета времени и состояний сотрудников
Теги: Временная таблица,ЗУП 3,1С

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

```1c
ПараметрыЗаполнения = УчетРабочегоВремениРасширенный.ПараметрыДляЗапросВТДанныеУчетаВремениИСостоянийСотрудников();

ПараметрыЗаполнения.ИмяВТСотрудники = "ВТСотрудникиПериоды";

ПараметрыЗаполнения.ИмяВТРезультат = "ВТУчетРабочегоВремениПолный";

ПараметрыЗаполнения.РассчитыватьПлановоеВремя = Истина;

ПараметрыЗаполнения.ДатаАктуальности  = ПериодПланирования;

ПараметрыЗаполнения.ДатаНачала = АнализируемыйГод;

ПараметрыЗаполнения.ДатаОкончания = КонецГода(АнализируемыйГод);

ПараметрыЗаполнения.МесяцДатаНачала = АнализируемыйГод;

ПараметрыЗаполнения.МесяцДатаОкончания = КонецГода(АнализируемыйГод);

ПараметрыЗаполнения.ВыделятьВыходныеВПериодыОтклонений = Ложь;

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

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

```1c
УстановитьПривилегированныйРежим(Истина);

ОписательВТ = КадровыйУчетРасширенный.ОписательВременнойТаблицыОтборовДляВТСтажиФизическихЛиц("ВТИсходныеДанные");

ОписательВТ.ИмяПоляВидСтажа = "ВидСтажа";

КадровыйУчетРасширенный.СоздатьВТСтажиФизическихЛиц(Запрос.МенеджерВременныхТаблиц, Ложь, ОписательВТ, "ВТСтажиФизическихЛиц");

УстановитьПривилегированныйРежим(Ложь);
```
Узнать СпособОтраженияЗарплатыВБухучете у сотрудника
Теги: ЗУП 3,1С

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

```1c
ОтражениеЗарплатыВБухучетеРасширенный.СоздатьВТСведенияОБухучетеЗарплатыСотрудников(Запрос.МенеджерВременныхТаблиц, "ВТСотрудники", "Сотрудник,Период", Организация);
```
Узнать версию библиотеки стандартных подсистем - БСП
Теги: 1С,БСП

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

```1c
ОбновлениеИнформационнойБазыБСП.ПриДобавленииПодсистемы(Описание)

Процедура ПриДобавленииПодсистемы(Описание) Экспорт

        Описание.Имя    = "СтандартныеПодсистемы";

        Описание.Версия = "3.0.3.43";

        Описание.ИдентификаторИнтернетПоддержки = "SSL";

        Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно";

        Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0";

КонецПроцедуры
```
Подключение внешней обработки/отчета, пример оформления модуля объекта
Теги: 1С,БСП

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

```1c
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область СлужебныеПроцедурыИФункции

Функция СведенияОВнешнейОбработке() Экспорт

ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.4.4.106");

ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();

        ПараметрыРегистрации.Версия = "1.0";

        ПараметрыРегистрации.БезопасныйРежим = Истина;

        ПараметрыРегистрации.Наименование = НСтр("ru = 'Добавляемая обработка'");

        НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();

        НоваяКоманда.Представление = НСтр("ru = 'Имя команды обработки'");

        НоваяКоманда.Идентификатор = "ИдентификаторКоманды";

НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();

        НоваяКоманда.ПоказыватьОповещение = Истина;

        Возврат ПараметрыРегистрации;

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

#КонецОбласти

#КонецЕсли
```
Возвращает сумму значений в поле [ИмяПоля] всех элементов коллекции
Теги: ЗУП 3,1С

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

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

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

```1c
ТекущиеДанные.СпособКомпенсацииПереработки = ПредопределенноеЗначение("Перечисление.СпособыКомпенсацииПереработки.ПовышеннаяОплата")
```
Кадровые данные физических лиц
Теги: ЗУП 3,1С,КадровыйУчет

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

```1c
#Область КадровыеДанныеФизическихЛиц

КадровыйУчетРасширенный.ЗапросВТКадровыеДанныеСотрудников

...

#КонецОбласти
```
Массив видов рабочего времени, отражающих норму времени для суммированного учета рабочего времени
Теги: ЗУП 3,1С

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

```1c
//Это рабочее время + выходные + время, когда сотрудник отсутствовал по своей вине.

УчетРабочегоВремениРасширенный.ВидыВремениВЗачетНормыСуммированногоУчета()
```
Возвращает соответствие имен предопределенных значений по ссылкам на них
Теги: 1С,БСП

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

```1c
ПредопределенныеЗначения = СтандартныеПодсистемыПовтИсп.СсылкиПоИменамПредопределенных(СПРАВОЧНИК.ВИДЫИСПОЛЬЗОВАНИЯРАБОЧЕГОВРЕМЕНИ);
```
Начисления
Теги: ЗУП 3,1С,ЗарплатаКадры

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

```1c
// 1.

СотрудникиДаты = тзТаблица.Скопировать(, "Объект, Период");

СотрудникиДаты.Колонки.Объект.Имя = "Сотрудник";

ТекущиеДанныеОплатыТруда = ПлановыеНачисленияСотрудников.ТекущиеДанныеОплатыТрудаСотрудников(Параметры.Объект.Ссылка, СотрудникиДаты);

// 2.

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

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

```1c
Модуль = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплата");
```

# Примечания

- Вот для чего это использовать, если можно напрямую обратиться к модулю. Отладка не работает при такой

- это БСП метод, повсеместно применяется для проверки вхождения подсистем
Проверяет корректность вводимых дат, не проверяет заполненность дат
Теги: ЗУП 3,1С,ЗарплатаКадры

При нахождении ошибки формирует сообщение пользователю, взводит флаг Отказ.

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

```1c
ЗарплатаКадры.ПроверитьКорректностьДаты(Ссылка, ДатаНачала, "Объект.ДатаНачала", Отказ, НСтр("ru='Новая дата начала'"), , , Ложь);
```
Получает ссылку предопределенного элемента по его полному имени
Теги: 1С,БСП

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

```1c
// 1.

ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.РаботаНочныеЧасы");

// 2.

ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.РабочееВремя");
```