Имя: Пароль:
1C
 
Помогите решить задачку. Документ Перемещение сотрудника
0 Бурундук
 
29.10.21
12:54
Перед тем, как провести документ Перемещение сотрудника, мне  нужно убедиться, что данный сотрудник не был уволен и что он вообще был принят на работу другим документом. Запрет на перемещение уволенного сотрудника у меня получилось написать и эта функция успешно работает. Однако функция, которая проверяет, был ли принят сотрудник на работу, у меня не срабатывает и у меня получается произвести поведение документа Кадровое Перемещение по сотруднику, который даже не был принят на работу. Что я делаю не так? Может не правильно вызываю функцию в процедуре ОбработкаПроведения? Буду признательна за ответ

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

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

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



    Процедура ОбработкаПроведения(Отказ, РежимПроведения)
        //Проверка
        Если СотрудникУволен(Сотрудник) Тогда
            Сообщить("Документ нельзя провести! Данный сотрудник был уволен!");
            Отказ = Истина;
            Возврат;
        КонецЕсли;

        //Проверка
        Если СотрудникНеПринятНаРаботу(Сотрудник) Тогда
            Сообщить("Документ не проведён! Сотрудник ещё не был принят на работу!");
            Отказ = Ложь;
            Возврат;
            КонецЕсли;

        // регистр КадровыеПеремещения
    Движения.КадровыеПеремещения.Записывать = Истина;
    Движения.КадровыеПеремещения.Очистить();
    Движение = Движения.КадровыеПеремещения.Добавить();
    Движение.Период = Дата;
    Движение.Сотрудник = Сотрудник;
    Движение.Должность = Должность;
    Движение.Подразделение = Подразделение;  
    Движение.Оклад = Оклад;
    Движение.ПричинаИзмененияСостояния = Перечисления.ПричиныИзмененияСостояний.Перемещение;
    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
1 Михаил Козлов
 
29.10.21
12:57
В функции СотрудникНеПринятНаРаботу вроде наоборот нужно возвращать?
2 Волшебник
 
модератор
29.10.21
12:57
функция СотрудникНеПринятНаРаботу возвращает инвертированное значение для своего названия
3 Pprog151713
 
29.10.21
12:59
СотрудникНеПринятНаРаботу(Сотрудник) Так это принят сотрудник. :)
4 Бурундук
 
29.10.21
13:01
Мне нужно убедиться, что сотрудник был принят на работу, и если нет, то отказать в проведении документа Кадровые Перемещения.
Так что мне нужно написать в коде в таком случае?
5 lubitelxml
 
29.10.21
13:05
Функция СотрудникНеПринятНаРаботу(Сотрудник)
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                |    ПриёмНаРаботу.Ссылка КАК Ссылка
                |ИЗ
                |    Документ.ПриёмНаРаботу КАК ПриёмНаРаботу
                |ГДЕ ПриёмНаРаботу.Проведен
                |    И ПриёмНаРаботу.Сотрудник = &Сотрудник";
    Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    Если Выборка.Следующий() Тогда
        Возврат ЛОЖЬ;
    КонецЕсли;
    Возврат ИСТИНА;
    КонецФункции
6 lubitelxml
 
29.10.21
13:06
а еще проверка наверное нужна что он числится в том подразделении, откуда его перемещают
7 Базис
 
naïve
29.10.21
13:08
Возможно, надо смотреть совсем другой регистр сведений.
8 ГдеСобака Зарыта
 
29.10.21
13:13
+(6) И что числится на момент перевода. Короче не документ нужно смотреть а регистр кадровой истории
9 Бурундук
 
29.10.21
13:17
Lubitelxml, СПАСИБО ВАМ ОГРОМНОЕ! Получилось! Да, вы правы, нужна ещё и проверка, что сотрудник числится в том подразделении, откуда его перемещают
10 2S
 
29.10.21
13:19
(9) до вас все давно придумано.
изучайте
https://infostart.ru/public/942569/
11 Бурундук
 
29.10.21
13:24
2S, Спасибо большое. Я только начала осваивать программирование 1С и думаю, мне это пригодится
12 ГдеСобака Зарыта
 
29.10.21
13:25
(10) Так у него ж не ЗУП а нетленка какая-то
13 Бурундук
 
29.10.21
13:31
ГдеСобакаЗакрыта, всмысле нетленка какая-то??
14 lubitelxml
 
29.10.21
13:33
(13) нетленка - не типовая 1с
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший