Имя: Пароль:
1C
1С v8
запрос по предыдущему окладу и будущему окладу. в ЗУП 3.1
0 makkut
 
22.03.17
09:53
Добрый день! конф ЗУП 3.1. Возникла потребность при кадровом переводе сотрудников отображать изменение оклада в печатной форме, именно старый оклад и текущий оклад.
Помогите пожалуйста с запросом.
1 Amra
 
22.03.17
10:00
Ну показывай как пробовал
2 makkut
 
22.03.17
10:06
есть пример с 2.5

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


но в З.1 изменены некоторые объекты, а некоторых и вовсе нет

пока начал так....
ВЫБРАТЬ
    ПлановыйФОТ.Сотрудник,
    ПлановыйФОТ.Используется,
    ПлановыйФОТ.ВкладВФОТ,
    КадроваяИсторияСотрудниковСрезПервых.Сотрудник КАК Сотрудник1
ИЗ
    РегистрСведений.ПлановыйФОТ КАК ПлановыйФОТ
        ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудников.СрезПервых КАК КадроваяИсторияСотрудниковСрезПервых
        ПО ПлановыйФОТ.Сотрудник = КадроваяИсторияСотрудниковСрезПервых.Сотрудник
        ПОЛНОЕ СОЕДИНЕНИЕ Документ.КадровыйПеревод.Начисления КАК КадровыйПереводНачисления
        ПО ПлановыйФОТ.Начисление = КадровыйПереводНачисления.Начисление
3 Amra
 
22.03.17
10:13
(2) А, ну так и пиши - ЗУП 3.1 вижу первый раз в жизни. Начал правильно, разбирайся
4 makkut
 
22.03.17
10:19
(3) так то спасибо конечно за совет это и так понятно. Но я хотел ускорить процесс), может кто сталкивался...
5 Морозов Александр
 
22.03.17
10:22
Все очень просто... есть очень хорошая вещь - "Консоль запросов". Скачайте, не пожалеете
6 Alexandr_U1982
 
22.03.17
11:18
(2) В ЗУП 3.1 "размер оклада" это значение показателя "Оклад".
Его нужно получать из регистра сведений "ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников".

При этом не стоит забывать, что в ЗУП 3.1 не рекомендуется писать прямые запросы к регистрам. Вместо этого нужно обращаться к процедурам/функциям общих модулей, которые сформируют временные таблицы, и из этих временных таблиц нужно извлекать данные. В противном случае после одного из следующих обновлений доработка может перестать работать.
7 xxTANATORxx
 
22.03.17
11:22
(6)>>не рекомендуется писать прямые запросы к регистрам

интересный подход, и что мы понимаем под "прямыми запросами"?
8 Alexandr_U1982
 
22.03.17
11:28
(7) Вот это:

ВЫБРАТЬ
    ПлановыйФОТ.Сотрудник,
    ПлановыйФОТ.Используется,
    ПлановыйФОТ.ВкладВФОТ,

    КадроваяИсторияСотрудниковСрезПервых.Сотрудник КАК Сотрудник1
ИЗ
    РегистрСведений.ПлановыйФОТ КАК ПлановыйФОТ
        ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудников.СрезПервых КАК КадроваяИсторияСотрудниковСрезПервых
        ПО ПлановыйФОТ.Сотрудник = КадроваяИсторияСотрудниковСрезПервых.Сотрудник
        ПОЛНОЕ СОЕДИНЕНИЕ Документ.КадровыйПеревод.Начисления КАК КадровыйПереводНачисления
        ПО ПлановыйФОТ.Начисление = КадровыйПереводНачисления.Начисление
9 Alexandr_U1982
 
22.03.17
11:32
(2)(7)
Пример получения среза последних из регистра "ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников"

Запрос                         = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("ДатаАктуальности", ДатаАктальности);
Запрос.УстановитьПараметр("Сотрудник",        Сотрудник)

Запрос.Текст =
    "ВЫБРАТЬ
    |    &ДатаАктуальности КАК Период,
    |    Сотрудники.Ссылка КАК Сотрудник
    |ПОМЕСТИТЬ ВТСотрудники
    |ИЗ
    |    Справочник.Сотрудники КАК Сотрудники";
Запрос.Выполнить();

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

Запрос.Текст =
    "ВЫБРАТЬ
    |    ВТЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Сотрудник,
    |    ВТЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Показатель,
    |    ВТЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Период,
    |    ВТЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Значение
    |ИЗ
    |    ВТЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников КАК ВТЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников";
ТаблицаСПоказателями = Запрос.Выполнить().Выгрузить();
10 Alexandr_U1982
 
22.03.17
11:33
+(9)Для каждой процедуры/функции из общего модуля "ЗарплатаКадрыПериодическиеРегистры" в самом общем модуле есть комментарий, что она делает.
11 pavlika
 
22.03.17
11:35
Для общего развития - это где так рекомендовано?
12 Alexandr_U1982
 
22.03.17
11:35
+(6) Дополнение - не рекомендуется писать прямые запросы к типовым регистрам, т.к. разработчики ЗУПа не гарантируют, что в новых релизах структура регистра и его наименование будут оставаться неизменными.
13 Alexandr_U1982
 
22.03.17
11:38
(11)Рекомендация взята из конференции 1С. Возможно, на курсах по ЗУПу тоже так учат писать.
14 Alexandr_U1982
 
22.03.17
11:39
+(13) Ссылки на конференцию с некоторых пор здесь не приветствуются.
15 pavlika
 
22.03.17
11:41
(13) Спс
16 Alexandr_U1982
 
22.03.17
11:47
Для большей иллюстрации можно посмотреть на развитие регистра сведений "КадроваяИсторияСотрудников".
В релизах ЗУП 3.0.ХХ.ХХХ этот регистр имел ресурсы "ОрганизацияПоОкончании, ПодразделениеПоОкончании, ДолжностьПоШтатномуРасписаниюПоОкончании и т.д."
В релизах ЗУП 3.1.2.ХХХ эти ресурсы переименовали в "УдалитьОрганизацияПоОкончании, УдалитьПодразделениеПоОкончании, УдалитьДолжностьПоШтатномуРасписаниюПоОкончании и т.д.", и добавили регистр со вторичными данными "КадроваяИсторияСотрудниковИнтервальный".

Соответственно, если есть какая-либо доработка с прямыми запросами к регистру "КадроваяИсторияСотрудников", в которой есть обращения к ресурсам "ОрганизацияПоОкончании, ПодразделениеПоОкончании, ДолжностьПоШтатномуРасписаниюПоОкончании и т.д.", то эта доработка перестанет работать на релизах ЗУП 3.1.2.ХХХ и ее потребуется переделывать.
Если в доработке вместо прямых запросов использовать механизм формирования временных таблиц через программный интерфейс общих модулей, то все останется работать по-прежнему.
17 makkut
 
22.03.17
12:14
как тут вытащить поле предыдущий оклад ?


ВЫБРАТЬ
    ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Сотрудник,
    ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Период,
    ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Значение,
    ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Показатель
ИЗ
    РегистрСведений.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников КАК ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.КадровыйПереводСписком КАК КадровыйПереводСписком
        ПО ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Регистратор = КадровыйПереводСписком.Ссылка
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.КадровыйПеревод КАК КадровыйПеревод
        ПО ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Регистратор = КадровыйПеревод.Ссылка
ГДЕ
    ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Сотрудник = &сотрудник
18 makkut
 
22.03.17
12:15
(17) выходит список изменяемых окладов. Мне нужна не последняя запись а предпоследняя
19 SleepyHead
 
гуру
22.03.17
12:17
Используй лучше вот этот метод общего модуля (заодно в описании почитай, что еще доступно из полей, может пригодится)

КадровыйУчет.КадровыеДанныеСотрудников(<ТолькоРазрешенные>, <Сотрудник>, <ИменаПолей>, <дата актуальности>);

У тебя в параметре "ИменаПолей" будет "Оклад", если ничего не путаю. А в параметре "Сотрудник" или массив сотрудников, или ссылка на конкретного сотрудника.
20 Alexandr_U1982
 
22.03.17
12:43
(17)Срез последних на дату перевода минус одна секунда.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.