среда, 7 ноября 2018 г.

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

//ПараметрШаблона в качестве параметра передается массив или единичный параметр из возможных указанных выше

ДанныеФизическогоЛица = КадровыйУчет.КадровыеДанныеСотрудников(Истина, Объект.Сотрудник, ПараметрШаблона);
Если ДанныеФизическогоЛица.Количество() > 0 Тогда
  ИскомыйРеквизит=ДанныеФизическогоЛица[0][ПараметрШаблона]);
КонецЕсли;






Список возможных значений ПараметровШаблона:

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


Стандартная функция КадровыеДанныеСотрудников:

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

среда, 31 октября 2018 г.

Преобразование прикладных объектов (СправочникСсылка, ДокументОбъект) в данные управляемой формы (ДанныеФормыСтруктура, ДанныеФормыКоллекция) и наоборот (Толстый клиент, тонкий клиент)

Назначение: в управляемой форме в качестве реквизитов могут быть следующие типы: примитивные (дата, число, строка, булево) и ссылки (СправочникСсылка.Контрагенты, ДокументСсылка.ЗаказПокупателя и т.д.).
Прикладные объекты (СправочникОбъект, ДокументОбъект и т.д.) храниться в управляемой форме не могут. Поэтому для управляемых форм созданы аналогичные специальные типы значений (ДанныеФормыСтруктура, ДанныеФормыКоллекция и т.д). На форме эти типы обозначаются в скобках, причем в скобках указываются не сами типы, а соответствующие им прикладные объекты:



В работе часто требуется преобразовать такие типы значений управляемой формы в прикладной объект и наоборот. Для этого созданы специальные операторы (показаны ниже в коде). Важно, что:
- с их помощью можно преобразовывать только «специальные» типы значений (ДанныеФормыСтруктура, ДанныеФормыКоллекция и т.д). Для ссылок и примитивных типов преобразование не требуется;
- по синтакс-помощнику нужно смотреть, где эти операторы доступны (какие на клиенте, какие на сервере).
Источник: 
Номенклатура объектов: модуль формы объекта (справочника, документа и т.д).


&НаСервере
Процедура ПрочитатьЗаполнитьСвойстваИЗначения()
   // преобразование реквизита управляемой формы в прикладной объект
   // пример:
   // ДокументОбъект = РеквизитФормыВЗначение("Объект");
   ДокументОбъект = РеквизитФормыВЗначение("[Реквизит формы]");
   //-------------------------------------------------------------
   // преобразование прикладного объекта в реквизит управляемой формы
   // пример:
   // ЗначениеВРеквизитФормы(ДокументОбъект, "Объект");
   ЗначениеВРеквизитФормы([Прикладной объект], "[Реквизит формы]");
   //-------------------------------------------------------------
   // преобразование реквизита управляемой формы в прикладной объект
   // пример:
   // ОбъектБД = ДанныеФормыВЗначение(Объект, Тип("СправочникОбъект.Фонды"));
   ОбъектБД = ДанныеФормыВЗначение([Реквизит формы], Тип("[имя типа]"));
   //-------------------------------------------------------------
   // преобразование прикладного объекта в реквизит управляемой формы
   // пример:
   // ЗначениеВДанныеФормы(ОбъектБД, Объект);
   ЗначениеВДанныеФормы([Прикладной объект], [Реквизит формы]);
КонецПроцедуры


Проверка, что документ уже проведен (Толстый клиент, тонкий клиент)

Назначение: чтобы при повторном проведении не повторялось то, что не должно повторяться.
Источник:
Номенклатура объектов: модуль объекта документа.

Перем флПроведен Экспорт;
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
 флПроведен = Проведен;
КонецПроцедуры

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
 Если Не Отказ И Не флПроведен Тогда
    ... // вносим то, что должно произойти при первом проведении
 КонецЕсли;
КонецПроцедуры


Сортировка по измерению или ресурсу в регистре сведений (Толстый клиент).

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

Процедура ПриОткрытии()
   // пример:
//ЭлементыФормы.РаботникиОрганизации.НастройкаПорядка.ПодразделениеОрганизации.Доступность = Истина;
ЭлементыФормы.[ИмяРегистраСведений].НастройкаПорядка.[Измерение].Доступность = Истина;
КонецПроцедуры

Создание в управляемой форме реквизита с типом динамический список с отбором по владельцу формы (Толстый клиент, тонкий клиент)


Назначение: создание на управляемой форме динамического списка с отбором по владельцу формы.
Номенклатура объектов: документ «Электронное письмо», реквизит «Вложения письма» (динамический список). В этот реквизит должны входить все вложения, относящиеся к данному электронному письму.
Разработка на форме:
1.Добавляем реквизит «ВложенияПисьма».




2.Свойства реквизита «ВложенияПисьма» заполняем как на рисунке



3.Нажимаем на «Настройка списка Открыть» из рис. 2 и на вкладке «Запрос» вводим код:
//-----------------------------------
ВЫБРАТЬ
ВложенияЭлектронныхПисем.Наименование,
ВложенияЭлектронныхПисем.ИмяФайла
ИЗ
Справочник.ВложенияЭлектронныхПисем КАК ВложенияЭлектронныхПисем
ГДЕ
ВложенияЭлектронныхПисем.ПометкаУдаления = ЛОЖЬ
И ВложенияЭлектронныхПисем.Объект = &Объект
//-----------------------------------

4.Перетаскиваем реквизит «ВложенияПисьма» на форму, так чтобы появилась вкладка, как на рисунке.



5.Чтобы подставить значение параметра "Объект" (который в запросе), делаем следующее: у Формы создаем событие "ПриСозданииНаСервере" (как на рисунке), в отладчике заходим в "параметры" (пкм - вычислить выражение - в поле пишем "параметры"), там находим ссылку на владельца формы (например, "СсылкаНаОбъект = Параметры.Ключ;"), далее присваиваем владельца параметру в запросе.






// код в модуле формы
//-----------------------------------
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
 СсылкаНаОбъект = Параметры.Ключ;
ВложенияПисьма.Параметры.УстановитьЗначениеПараметра("Объект",СсылкаНаОбъект);
КонецПроцедуры
//-----------------------------------

Создание документа на основании другого документа (Толстый клиент, тонкий клиент)

Назначение: создание документа на основании другого документа.
Номенклатура объектов: документ «Корректировка долга» вводится на основании «Возврат товаров от покупателя».
Разработка на форме:
1.
 
2.Если использовать Конструктор ввода на основании, то процедура «обработка заполнения» будет замещена. Чтобы этого не произошло, изменения в процедуру «обработка заполнения» нужно добавить вручную.

3.


Процедура ОбработкаЗаполнения(Основание)
Если ТипЗнч(Основание) = Тип("ДокументСсылка.ВозвратТоваровОтПокупателя") Тогда
   Организация = Основание.Организация;
   КонтрагентДебитор = Основание.Контрагент;
   КонтрагентКредитор = Основание.Контрагент;
   ОснованиеОбъект = Основание.ПолучитьОбъект();
   ТЗ = ОснованиеОбъект.Товары;
   ТЗ.Свернуть("ДокументПартии,ИРВ_Проект","Сумма");
   Для Каждого Стр из ТЗ Цикл
      нСтр = СуммыДолга.Добавить();
 нСтр.ВидЗадолженности = Перечисления.ВидыЗадолженности.Дебиторская;
 нСтр.ДоговорКонтрагента = Основание.ДоговорКонтрагента;
 нСтр.Сделка = Основание.Сделка;
 нСтр.ДокументРасчетовСКонтрагентом = Стр.ДокументПартии;
 нСтр.Сумма = Стр.Сумма;
 нСтр.СуммаРегл = Стр.Сумма;
 нСтр.КурсВзаиморасчетов = 1;
 нСтр.ИРВ_Проект = Стр.ИРВ_Проект; 
 ИРВ_ЗаполнитьСчетаУчетаВСтроке(нСтр, Истина);//Добавил чтобы Заполнялись счета 
 Нстр2 = СуммыДолга.Добавить();
 Нстр2.ВидЗадолженности = Перечисления.ВидыЗадолженности.Кредиторская;
 Нстр2.ДоговорКонтрагента = Основание.ДоговорКонтрагента;
 Нстр2.Сделка = Основание.Сделка;
 Нстр2.ДокументРасчетовСКонтрагентом = Основание;
 Нстр2.Сумма = Стр.Сумма;
 Нстр2.СуммаРегл = Стр.Сумма;
 Нстр2.КурсВзаиморасчетов = 1;
 Нстр2.ИРВ_Проект = Стр.ИРВ_Проект; 
 ИРВ_ЗаполнитьСчетаУчетаВСтроке(Нстр2, Истина);//Добавил чтобы Заполнялись счета    
   КонецЦикла;
КонецЕсли;
 
КонецПроцедуры 



Пояснения:
Если требуется программно поймать момент, когда создается новый документ на основании (например, чтобы в этот момент вывести какое-нибудь сообщение), то этот момент отслеживается в процедуре «обработка заполнения» создаваемого на основании документа.

Программный вызов ВНЕШНЕГО отчета (обработки) из обычной формы (Толстый клиент)

Назначение: программный вызов внешнего отчета или обработки из обычной формы. ВНИМАНИЕ: Получение управляемой формы внешней обработки/отчета для обычного режима работы приложения не поддерживается.
Номенклатура объектов:  обычная форма документа «Заказ покупателя», внешний отчет «Журнал уведомлений».
Разработка на форме:
1.На обычной форме документа «Заказ покупателя» создаем кнопку «Журнал уведомлений».


2.В свойствах кнопки в разделе «Основные» создаем действие «ДействияФормыоЖурналУведомлений".


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