Публикации

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

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


Записать текстовый файл без BOM

Для тех кому нужно записать текстовый файл без BOM-раздела. Основная суть в записи через файловый поток
ПутьФайла = ПолучитьИмяВременногоФайла();

СтрокаТекста = "текст";

ТекстовыйФайл = Новый ТекстовыйДокумент;
ТекстовыйФайл.УстановитьТекст(СтрокаТекста);		
ТекстовыйФайл.Записать(ПутьФайла, КодировкаТекста.UTF8, Символы.ПС);

ФайловыйПоток = Новый ФайловыйПоток(ПутьФайла,РежимОткрытияФайла.Создать);
ТекстовыйФайл.Записать(ФайловыйПоток,КодировкаТекста.UTF8, Символы.ПС, Ложь);

ФайловыйПоток.Закрыть();

Дублирование тегов

Теги OneScript и теги БСП, существуют в нескольких экземлярах

Установить отбор пользовательских настроек динамического списка

Установка отбора списка при программном открытии управляемой формы списка. Помогает в тех случаях, если нужно установить значение отбора, которое потом может быть отредактировано пользователем. Если устанавливать отбор через параметры открытия формы, то отбор добавляется в фиксированные настройки компоновки и при изменении этого отбора пользователем на форме возникнет ошибка
//Если есть БСП
мФорма = ОткрытьФорму("Справочник.Номенклатура.ФормаСписка");
	
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(мФорма.Список, "ПометкаУдаления", Истина, ВидСравненияКомпоновкиДанных.Равно, , Истина, РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный, Новый УникальныйИдентификатор);

//Если нет БСП то используем велосипед
//Вызывающий код
мФорма = ОткрытьФорму("Справочник.Номенклатура.ФормаСписка");
УстановитьПользовательскийОтборДинамическогоСписка(мФорма.Список, "ПометкаУдаления", Ложь, ВидСравненияКомпоновкиДанных.Равно);
		

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

Конвертация даты из формата ISO8601 в дату 1С с учетом миллисекунд

Возвращает структуру с полями "Дата" и "Миллисекунды", стандартный способ преобразования даты округляет время, а в некоторых случаях важна особая точность
Функция КонвертироватьДатуISO8601ВДату(Дата) Экспорт

	КонвертированнаяДата = Новый Структура("Дата, Миллисекунды");
	
	АвтоконвертированнаяДата = XMLЗначение(Тип("Дата"), Дата);

	Миллисекунды = Сред(Дата, 21);
	Миллисекунды = СокрЛП(СтрЗаменить(Миллисекунды, "Z", ""));

	Если НЕ ПустаяСтрока(Миллисекунды) Тогда
		
		ЧислоМиллисекунд = Число(Миллисекунды);
		
		Если ЧислоМиллисекунд >= 500 Тогда
			
			АвтоконвертированнаяДата = АвтоконвертированнаяДата - 1;
			
		КонецЕсли;
		
	КонецЕсли;
	
	КонвертированнаяДата.Дата = АвтоконвертированнаяДата;
	
	КонвертированнаяДата.Миллисекунды = Миллисекунды;
	
	Возврат КонвертированнаяДата;

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

Пауза

Предоставляет функционал паузы в 1С, длительностью до 20 секунд
Функция Ожидать(ВремяОжиданияВСекундах) Экспорт
    
    Если ВремяОжиданияВСекундах<> 0 Тогда
        
        НастройкиПрокси = Новый ИнтернетПрокси(Ложь);
        НастройкиПрокси.НеИспользоватьПроксиДляЛокальныхАдресов = Истина;
        НастройкиПрокси.НеИспользоватьПроксиДляАдресов.Добавить("127.0.0.0");
        
        Попытка
            Замыкание = Новый HTTPСоединение(
                "127.0.0.0",,,,НастройкиПрокси,
                ВремяОжиданияВСекундах);
            Замыкание.Получить(Новый HTTPЗапрос());
        Исключение
            Возврат Неопределено;
        КонецПопытки;
        
    КонецЕсли;
    
КонецФункции

Шаблон внешней печатной формы

Шаблон внешней печатной формы
Функция СведенияОВнешнейОбработке() Экспорт
		
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
	
	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
	
	ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
	ПараметрыРегистрации.ВерсияБСП = "2.1.3.2";
	ПараметрыРегистрации.Вставить("Версия", "1.0");
	//ПараметрыРегистрации.Вставить("Информация", "");
	
	ПараметрыРегистрации.Назначение.Добавить("Документ.ВедомостьНаВыплатуЗарплатыПеречислением");
	//ПараметрыРегистрации.Назначение.Добавить("Документ.*"); // все документы
	
	НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
	НоваяКоманда.Представление = Метаданные().Представление();   //Синоним
	НоваяКоманда.Идентификатор = Метаданные().ПолноеИмя();   //ПолноеИмя
	НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
	НоваяКоманда.Модификатор = "ПечатьMXL"; // Обязательно
	
	//НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
	//НоваяКоманда.Представление = Метаданные().Представление();
	//НоваяКоманда.Идентификатор = Метаданные().ПолноеИмя();
	//НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовКлиентскогоМетода();
	//
	//НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
	//НоваяКоманда.Представление = Метаданные().Представление();
	//НоваяКоманда.Идентификатор = Метаданные().ПолноеИмя();
	//НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
	
	Возврат ПараметрыРегистрации;
	
КонецФункции

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

Функция ПечатьСписокПеречислений(МассивОбъектов, ОбъектыПечати)
	
	ТабличныйДокумент = Новый ТабличныйДокумент;
	ТабличныйДокумент.КлючПараметровПечати = Метаданные().ПолноеИмя();

	Макет = ПолучитьМакет("ПФ_MXL_СписокПеречисленийНаЛицевыеСчета"); 
	
	// получаем данные для печати
	ВыборкаШапок = ВыборкаДляПечатиШапки(МассивОбъектов);
	ВыборкаСтрок = ВыборкаДляПечатиТаблицы(МассивОбъектов);
	
	ПервыйДокумент = Истина;
	
	Возврат ТабличныйДокумент;
	
КонецФункции

Заполнить первоначальные значения в форме (Организация)

Заполнить первоначальные значения в форме (Организация) в ЗУП 3
Процедура ПриСозданииНаСервере

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

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

Преобразовать строку в число

Преобразовать строку в число в ЗУП 3
// Преобразует исходную строку в число без вызова исключений.
//
// Параметры:
//   Значение - Строка - Строка, которую необходимо привести к числу.
//                       Например, "10", "+10", "010", вернет 10;
//                                 "(10)", "-10",вернет -10;
//                                 "10,2", "10.2",вернет 10.2;
//                                 "000", " ", "",вернет 0;
//                                 "10текст", вернет Неопределено.
//
// Возвращаемое значение:
//   Число, Неопределено - Полученное число, либо Неопределено, если строка не является числом.
//

ВведеннаяОчередность = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(СтрокаТаблицы.ПредставлениеОчередности);

Преобразовать строку в дату

Преобразовать строку в дату в ЗУП 3
// Преобразует исходную строку в дату.
//
// Параметры:
//  Значение - Строка - Строка, которую необходимо привести к дате.
//                      Формат даты должен быть в виде "ДД.ММ.ГГГГ" или "ДД/ММ/ГГ" или "ДД-ММ-ГГ",
//                      Например, "23.02.1980" или "23/02/80".
// 
// Возвращаемое значение:
//  Дата - полученная дата.
//
Для Каждого СтрокаТаблицы Из ЗагружаемыеДанные Цикл
		
		СтрокаСотрудник = Сотрудники.Добавить();
		СтрокаСотрудник.Идентификатор 	= СтрокаТаблицы.Идентификатор;
		СтрокаСотрудник.ДатаНачала 		= СтроковыеФункцииКлиентСервер.СтрокаВДату(СтрокаТаблицы.ДатаНачала);
		СтрокаСотрудник.ДатаОкончания 	= СтроковыеФункцииКлиентСервер.СтрокаВДату(СтрокаТаблицы.ДатаОкончания);
	
КонецЦикла;

Удалить префикс объекта и лидирующие нули

Удалить префикс объекта и лидирующие нули в ЗУП 3
// Удаляет префикс информационной базы и префикс организации из переданной строки НомерОбъекта.
// Переменная НомерОбъекта должна соответствовать шаблону: ООГГ-ХХХ...ХХ или ГГ-ХХХ...ХХ, где:
//    ОО - префикс организации;
//    ГГ - префикс информационной базы;
//    "-" - разделитель;
//    ХХХ...ХХ - номер/код объекта.
//
// Пример:
//    УдалитьПрефиксыИзНомераОбъекта("0ФГЛ-000001234", Истина, Истина) = "000001234"
//    УдалитьПрефиксыИзНомераОбъекта("0ФГЛ-000001234", Ложь, Истина)   = "Ф-000001234"
//    УдалитьПрефиксыИзНомераОбъекта("0ФГЛ-000001234", Истина, Ложь)   = "ГЛ-000001234"
//    УдалитьПрефиксыИзНомераОбъекта("0ФГЛ-000001234", Ложь, Ложь)     = "ФГЛ-000001234"

ДокПрием.НомерДок = ПрефиксацияОбъектовКлиентСервер.УдалитьПрефиксыИзНомераОбъекта(СокрЛП(Объект.Номер), Истина, Истина);


// Получает номер документа для вывода на печать; из номера удаляются префиксы и лидирующие нули.
// Функция:
// отбрасывает префикс организации,
// отбрасывает префикс информационной базы (опционально),
// отбрасывает пользовательские префиксы (опционально),
// удаляет лидирующие нули в номере объекта.

ДокПрием.НомерДок = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(СокрЛП(Объект.Номер), Истина, Истина);

Склонение ФИО

Просклонять ФИО в ЗУП 3
РезультатСклонения = "";

Если ФизическиеЛицаЗарплатаКадры.Просклонять(Строка(Руководитель), 3, РезультатСклонения, Руководитель.Пол) Тогда
					Шапка.Параметры.ФИОРуководителя = РезультатСклонения
КонецЕсли;

Фамилия инициалы

Получить фамилию инициалы (Фамилия ИО) в ЗУП 3
ДанныеПечати.ФИОРуководителяСокращенное = ФизическиеЛицаЗарплатаКадрыКлиентСервер.ФамилияИнициалы(ДанныеДляПечатиСотрудники.ФизическоеЛицо)

Инициалы фамилия

Получить инициалы фамилию (ИО Фамилия) в ЗУП 3
ДанныеПечати.ФИОРуководителяСокращенное = ФизическиеЛицаЗарплатаКадры.РасшифровкаПодписи(ДанныеФИО);

Ответственные организации

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

	КонецЕсли;	
	
	ОбластьМакетаПриказ.Параметры.ФИОГлавныйБухгалтер					= ФизическиеЛицаЗарплатаКадрыКлиентСервер.ФамилияИнициалы(ФИОГлБух);
	ОбластьПодписиРуководитель.Параметры.ФИО 								= ФизическиеЛицаЗарплатаКадры.РасшифровкаПодписи(ЗапрашиваемыеЗначения.Руководитель);
	ОбластьПодписиРуководитель.Параметры.Должность 						= ЗапрашиваемыеЗначения.ДолжностьРуководителя;


	//ОТВЕТСТВЕННЫЕ ЛИЦА НА ЗАДАННУЮ ДАТУ

	ДатаВЗапросОтветственных = ДАТА(2019,09,02);
		
	ЗапрашиваемыеЗначения = СведенияОбОтветственныхЛицах.СведенияОбОтветственныхЛицах(Выборка.Организация, "Руководитель,ДолжностьРуководителя", ДатаВЗапросОтветственных);

Сведения об организации

Получить сведения об организации в ЗУП 3
&НаСервере
Процедура СведенияОбОрганизацииНаСервере()
	
	//Без передачи списка показателей возвращаются все доступные значения показатели
	//Если нужно значение конкретного показателя см. подробнее ЗарплатаКадрыБазовый.ПолучитьСведенияОбОрганизации 
	
	СведенияОбОрганизации = ЗарплатаКадрыБазовый.ПолучитьСведенияОбОрганизации(Объект.Организация,ТекущаяДата(), );
		
КонецПроцедуры

Данные бухгалтерского учета

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

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

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

Данные среднего заработка, остатка отпусков, резерва отпусков

Получить данные среднего заработка, остатка отпусков, резерва отпусков в ЗУП 3
&НаСервере
Процедура ПолучитьДанныеСреднегоЗаработкаНаСервере()
	
	ДатаОтпуска     = Дата(2018,01,01);
	
	//Расчетный год отпуска
	ДатаНачала         = Дата(2017,01,01);
	ДатаОкончания     = Дата(2017,12,31);
	
	ИсходнаяТаблица = УчетСреднегоЗаработка.ПустаяТаблицаИсходныхДанныхРасчетаОбщегоСреднегоЗаработка();
	мПараметры = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
	мПараметры.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", "0000000000");
	мПараметры.НачалоПериода     		= ДатаОтпуска;
	мПараметры.ОкончаниеПериода    	= ДатаОтпуска;
	//мПараметры.КадровыеДанные       	= "Подразделение";
	
	ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
				мПараметры.Отборы, "ФизическоеЛицо", "=", Справочники.ФизическиеЛица.НайтиПоНаименованию("Иванов Иван Иванович"));
	
	// 1. получаем сотрудников организации
	
	СотрудникиОрганизации = КадровыйУчет.СотрудникиОрганизации(Истина, мПараметры);
	
	// 2. получаем средний заработок сотрудников
	
	СотрудникиОрганизации.Колонки.Добавить("СреднийЗаработок", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2)));
	СотрудникиОрганизации.Колонки.Добавить("ОстатокОтпуска", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(4, 0)));
	СотрудникиОрганизации.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2)));
	
	ОграничитьКоличество = 10;
	// получем данные для расчета среднего
	СтрокиКУдалению = Новый Массив;
	Индекс = 1;
	
	Для каждого СтрокаСотрудник из СотрудникиОрганизации Цикл
		Если Индекс <= ОграничитьКоличество Тогда
			СтрокаТаблицы = ИсходнаяТаблица.Добавить();
			СтрокаТаблицы.Сотрудник                         = СтрокаСотрудник.Сотрудник;
			СтрокаТаблицы.ПорядокРасчета                     = Перечисления.ПорядокРасчетаСреднегоЗаработкаОбщий.Постановление2010;
			СтрокаТаблицы.ДатаНачалаСобытия                 = ДатаОтпуска;
			СтрокаТаблицы.НачалоПериодаРасчетаСреднего         = ДатаНачала;
			СтрокаТаблицы.ОкончаниеПериодаРасчетаСреднего     = ДатаОкончания;
			Индекс = Индекс + 1;
		Иначе 
			СтрокиКУдалению.Добавить(СтрокаСотрудник);
		КонецЕсли;
	КонецЦикла;
	
	Для каждого пСтрока из СтрокиКУдалению Цикл
		СотрудникиОрганизации.Удалить(пСтрока);
	КонецЦикла;
	
	ДанныеДляРасчета = УчетСреднегоЗаработка.ДанныеДляРасчетаОбщегоСреднегоЗаработкаСотрудников(ИсходнаяТаблица, Неопределено, Неопределено, Истина);
	
	Для каждого СтрокаСотрудник из СотрудникиОрганизации Цикл
		
		Отбор = Новый Структура("Сотрудник",СтрокаСотрудник.Сотрудник);
		
		ДанныеОВремени         = ДанныеДляРасчета.ДанныеОВремени;
		ДанныеОНачислениях     = ДанныеДляРасчета.ДанныеОНачислениях;
		ДанныеОбИндексации     = ДанныеДляРасчета.ДанныеОбИндексации;
		
		ДанныеДляРасчетаСотрудник = Новый Структура("ДанныеОВремени,ДанныеОНачислениях,ДанныеОбИндексации");
		
		ДанныеДляРасчетаСотрудник.ДанныеОВремени         = ДанныеОВремени.Скопировать(ДанныеОВремени.НайтиСтроки(Отбор));
		ДанныеДляРасчетаСотрудник.ДанныеОНачислениях     = ДанныеОНачислениях.Скопировать(ДанныеОНачислениях.НайтиСтроки(Отбор));
		ДанныеДляРасчетаСотрудник.ДанныеОбИндексации     = ДанныеОбИндексации.Скопировать(ДанныеОбИндексации.НайтиСтроки(Отбор));
		
		ДополнительныеПараметры = УчетСреднегоЗаработкаКлиентСервер.ДополнительныеПараметрыРасчетаСреднегоЗаработка();
		
		ДополнительныеПараметры.ДатаНачалаСобытия = ДатаОтпуска;
		
		Если Не ЗначениеЗаполнено(ДополнительныеПараметры.НачалоПериода) 
			Или Не ЗначениеЗаполнено(ДополнительныеПараметры.ОкончаниеПериода) Тогда
			ПериодРасчета = УчетСреднегоЗаработка.ПериодРасчетаОбщегоСреднегоЗаработкаСотрудника(ДатаОтпуска, СтрокаСотрудник.Сотрудник, ДополнительныеПараметры.Начисление);
			ДополнительныеПараметры.НачалоПериода = ДатаНачала;
			ДополнительныеПараметры.ОкончаниеПериода = ДатаОкончания;
		КонецЕсли;
		
		Если ДополнительныеПараметры.ПорядокРасчета = Неопределено Тогда
			ДополнительныеПараметры.ПорядокРасчета = УчетСреднегоЗаработкаКлиентСервер.ПорядокРасчетаОбщегоСреднегоЗаработка(ДатаОтпуска);
		КонецЕсли;
		ДополнительныеПараметры.ПорядокРасчета         = Перечисления.ПорядокРасчетаСреднегоЗаработкаОбщий.Постановление2010;
		ДополнительныеПараметры.СпособРасчетаОтпуска = Перечисления.СпособыРасчетаНачислений.ОплатаОтпускаПоКалендарнымДням;
		
		ДополнительныеПараметры.Индексации = ДанныеДляРасчета.ДанныеОбИндексации;
		
		СтрокаСотрудник.СреднийЗаработок = УчетСреднегоЗаработкаКлиентСервер.СреднийЗаработокОбщий(ДанныеДляРасчетаСотрудник.ДанныеОНачислениях, ДанныеДляРасчетаСотрудник.ДанныеОВремени, ДополнительныеПараметры);
		
	КонецЦикла;
	
	// 3. считаем остатки отпусков
	
	СписокСотрудников = СотрудникиОрганизации.ВыгрузитьКолонку("Сотрудник");
	ВидыОтпусков = Неопределено;
	//ВидыОтпусков = Новый Массив;
	//ВидыОтпусков.Добавить(Справочники.ВидыОтпусков.Основной);
	
	ТаблицаОстаткиОтпусков = ОстаткиОтпусков.ОстаткиОтпусковСотрудниковНаДату(СписокСотрудников, ДатаОтпуска, ВидыОтпусков);
	
	Для каждого СтрокаСотрудник из СотрудникиОрганизации Цикл
		
		Отбор = Новый Структура("Сотрудник",СтрокаСотрудник.Сотрудник);
		СтрокиОтпуска = ТаблицаОстаткиОтпусков.НайтиСтроки(Отбор);
		
		ОстатокОтпуска = 0;
		
		Для каждого СтрокаОтпуска из СтрокиОтпуска Цикл
			ОстатокОтпуска = ОстатокОтпуска + СтрокаОтпуска.КоличествоДней;
		КонецЦикла;
		
		СтрокаСотрудник.ОстатокОтпуска = ОстатокОтпуска;
		СтрокаСотрудник.Сумма = ОстатокОтпуска * СтрокаСотрудник.СреднийЗаработок;
		
	КонецЦикла;
	
	//СотрудникиОрганизации.Колонки.Добавить("СреднийЗаработок",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(15, 2)));
	//Сообщить(УчетСреднегоЗаработка.СреднийЗаработок(СотрудникиОрганизации[0].Сотрудник,Дата(2017,12,31)));
	
	//ЗаполнитьТаблицуЗначенийНаФорме(СотрудникиОрганизации,"ТЗ2");
	
КонецПроцедуры

Данные отработанного времени

Получить данные рабочего (отработанного) времени, данные табеля Т-13
//В ДАННОМ ПРИМЕРЕ МОЖНО ПОЛУЧИТЬ ДАННЫЕ ВРЕМЕНИ ТОЛЬКО ЗА ОДИН МЕСЯЦ

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

&НаКлиенте
Процедура Команда1(Команда)
    Команда1НаСервере();
КонецПроцедуры

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

Работающие сотрудники

Получить работающих сотрудников по заданным параметрам отбора
//Пример функция для получения актуальных работающих сотрудников за период
//Возвращается таблица значений

Функция ПроверитьНаличиеПодработки(Сотрудник, ДатаНазначения)
	
	СтруктураДанных = Новый Структура();
	
	СтруктураДанных.Вставить("ДатаНачала",);
	СтруктураДанных.Вставить("ДатаОкончания",);
	СтруктураДанных.Вставить("РазмерОклада",);
	
	ПараметрыПолучения = ПолучитьПараметры();
	ПараметрыПолучения.Организация = ЭтотОбъект.Организация;
	
	//Если ЗначениеЗаполнено(Подразделение) Тогда
	//	ПараметрыПолучения.Подразделение = Подразделение;	
	//КонецЕсли;
	
	//Если ВключаяУволенныхНаНачалоПериода Тогда
	//	ПараметрыПолучения.ВключаяУволенныхНаНачалоПериода = Истина;
	//КонецЕсли;
	
	ПараметрыПолучения.НачалоПериода = НачалоМесяца(ДатаНазначения);
	ПараметрыПолучения.ОкончаниеПериода = КонецМесяца(ДатаНазначения);
	ПараметрыПолучения.ПодработкиРаботниковПоТрудовымДоговорам = Истина;
	ПараметрыПолучения.РаботникиПоДоговорамГПХ = Ложь;
	
	// ОТБОР ПО ВИДУ ЗАНЯТОСТИ РАБОТАЕТ ТОЛЬКО НАЧИНАЯ С РЕДАКЦИИ 3.1.7
	//ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
	//			ПараметрыПолучения.Отборы, "ВидЗанятости", "=", Перечисления.ВидыЗанятости.Подработка);
				
	ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
				ПараметрыПолучения.Отборы, "ФизическоеЛицо", "=", Сотрудник.ФизическоеЛицо);

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


&НаСервере
Функция ПолучитьПараметры()
	Возврат КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();	
КонецФункции

Паспортные данные физического лица

Получить паспортные данные физического лица
ДанныеФизЛица = КадровыйУчет.ДокументыФизическихЛиц(ВыборкаСтрок.ФизическоеЛицо, Истина); 
			
ОбластьМакетаСтрока.Параметры.Паспорт = "" + ДанныеФизЛица[0].ВидДокумента + ", " 
+ ДанныеФизЛица[0].Серия + ", " + ДанныеФизЛица[0].Номер + ", выдан: " + ДанныеФизЛица[0].КемВыдан;