Имя: Пароль:
1C
 
Помочь с кодом.
🠗 (Волшебник 08.10.2020 08:08)
,
0 undertale
 
07.10.20
12:08
Помогите пожауйлста. Я новенький в 1с и если будут какие-либо вопросы по теме , я вам отпишу.
Мне нужно чтобы :
1.  Когда в документе « КП_ДокументыПоСтажерам» , реквизит «ДатаТрудоустройства» тогда реквизит статус стажера необходимо поставить в значение «планируется выход».
2.  Когда в документе « КП_ДокументыПоСтажерам» , реквизит «ДатаТрудоустройства» проставлена, тогда реквизит «СтатусСтажера» необходимо поставить в значение «На испытательном сроке».
3.  Когда в базе  , руководитель заполнил элемент справочника «КП_ОценкаСотрудника», тогда реквизит «СтатусСтажера» в документе КП_ДокументыПоСтажерам  необходимо поставить в значение «Прошел испытательный срок» .


Проблема в том , что у меня не появляются записи. Я 4 часа сижу в отладке и не понимаю в чем проблема, помогите разобраться. Если какая-либо информация нужна будет, я вас ей обеспечу по теме.

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

    
    

Функция ПолучитьЛистОценки(пФизЛицо)
    
    Запрос = Новый Запрос ;
    
    Запрос.Текст =
    "ВЫБРАТЬ
    |    КП_ОценкаСотрудника.Ссылка,
    |    КП_ОценкаСотрудника.Сотрудник
    |ИЗ
    |    Справочник.КП_ОценкаСотрудника КАК КП_ОценкаСотрудника
    |ГДЕ                              
    |    КП_ОценкаСотрудника.Сотрудник = &ФизЛицо";
    
    
    Запрос.УстановитьПараметр("ФизЛицо",пФизЛицо);
    
    
    апапа = Запрос.Выполнить().Выгрузить();
    
        
    Если апапа.Количество()=0 тогда
        Возврат ложь;
    Иначе
        возврат истина;
    КонецЕсли;
КонецФункции
1 undertale
 
07.10.20
12:09
Хотя, мне кажется, что невозможно помочь не видя конфигурации, но попытка - не пытка.
2 mikecool
 
07.10.20
12:11
код работает?
3 undertale
 
07.10.20
12:17
(2) ошибок нет
4 undertale
 
07.10.20
12:18
(2) Мне сказали дословно: Тебе нужно сделать так , чтобы выдавал истину , а проверять через отладчик.
Я нифига не понимаю что и как делать в итоге.
Больше скажу, я не понимаю, что человек имел ввиду.
5 mikecool
 
07.10.20
12:19
(4) тогда пойми сначала , что заказчик имеет ввиду, чтобы не делать абы что
6 arsik
 
гуру
07.10.20
12:20
(0) Что значит - "не появляются записи."?
7 undertale
 
07.10.20
12:21
(5) Я знаю, что у меня проблемы в том, что статус стажера не выводиться.
Про это он и имел ввиду.
8 Волшебник
 
07.10.20
12:21
Ахтунг! Запросы в цикле!
9 undertale
 
07.10.20
12:23
(6) Не присваивается значение у "СтатусСтажера"
в верху писал о том, что нужно сделать, то и не появляется.
10 undertale
 
07.10.20
12:23
(8) Помилуйте
11 arsik
 
гуру
07.10.20
12:23
(7) А СтатусСтажера точно с типом Перечисления.КП_СтатусСтажера
12 undertale
 
07.10.20
12:24
(11) Да
13 undertale
 
07.10.20
12:25
(11) Говорит, что проблемы начинаются в самом присвоении
14 arsik
 
гуру
07.10.20
12:25
(12) Посмотри в модуле документа процедуру ПередЗаписью, возможно там устанавливается пустое значение в этот реквизит.
15 undertale
 
07.10.20
12:28
(14) Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    ЭтотОбъект.ДополнительныеСвойства.Вставить("Новый", ЭтоНовый());
КонецПроцедуры
16 arsik
 
гуру
07.10.20
12:28
(13) Если поставить точку останова на КарточкаСтажера.Записать(РежимЗаписиДокумента.Запись) и посмотреть что хранится в переменной КарточкаСтажера.СтатусСтажера?
17 undertale
 
07.10.20
12:29
(14) Сюда что-то нужно написать? Сам этот код, который я написал, написан через Регламентные задания если что
18 undertale
 
07.10.20
12:36
(16) КарточкаСтажера.СтатусСтажера    Прошёл испытатльный срок    ПеречислениеСсылка.КП_СтатусСтажера
Вот что храниться
19 arsik
 
гуру
07.10.20
12:47
(18) Еще посмотри эту же переменную уже после записи.
20 undertale
 
07.10.20
12:48
(19) в каком плане " после записи"?
21 Мимохожий Однако
 
07.10.20
12:51
(20) Поставь точку останова в конце процедуры ПослеЗаписи()
22 arsik
 
гуру
07.10.20
12:52
(20) Ниже строки КарточкаСтажера.Записать(РежимЗаписиДокумента.Запись)
23 arsik
 
гуру
07.10.20
12:55
И еще этот кусок бы я так переписал
Пока РезультатЗапроса.Следующий() Цикл
    КарточкаСтажера = РезультатЗапроса.Ссылка.ПолучитьОбъект();
    ПИС = ПолучитьЛистОценки(КарточкаСтажера.ФИО);
    Если ПИС = Истина тогда
        КарточкаСтажера.СтатусСтажера = Перечисления.КП_СтатусСтажера.ПрошёлИспытатльныйСрок;
    ИначеЕсли КарточкаСтажера.ДатаТрудоустройства < ТекущаяДата() тогда
        КарточкаСтажера.СтатусСтажера = Перечисления.КП_СтатусСтажера.ПланируетсяВыход;
    ИначеЕсли КарточкаСтажера.ДатаТрудоустройства > ТекущаяДата() Тогда
        КарточкаСтажера.СтатусСтажера = Перечисления.КП_СтатусСтажера.НаИспытательномСроке;
    иначе
        Сообщить("Не подходит по условиям: "+РезультатЗапроса.Ссылка);
    КонецЕсли;
    
    Если КарточкаСтажера.СтатусСтажера <> РезультатЗапроса.Ссылка.СтатусСтажера Тогда
        КарточкаСтажера.Записать(РежимЗаписиДокумента.Запись);
    КонецЕсли;
КонецЦикла;
24 arsik
 
гуру
07.10.20
12:57
Блин сам ошибся. ВОт так
Пока РезультатЗапроса.Следующий() Цикл
    КарточкаСтажера = РезультатЗапроса.Ссылка.ПолучитьОбъект();
    ПИС = ПолучитьЛистОценки(КарточкаСтажера.ФИО);
    Если ПИС = Истина тогда
        КарточкаСтажера.СтатусСтажера = Перечисления.КП_СтатусСтажера.ПрошёлИспытатльныйСрок;
    ИначеЕсли КарточкаСтажера.ДатаТрудоустройства < ТекущаяДата() тогда
        КарточкаСтажера.СтатусСтажера = Перечисления.КП_СтатусСтажера.ПланируетсяВыход;
    ИначеЕсли КарточкаСтажера.ДатаТрудоустройства > ТекущаяДата() Тогда
        КарточкаСтажера.СтатусСтажера = Перечисления.КП_СтатусСтажера.НаИспытательномСроке;
    иначе
        Сообщить("Не подходит по условиям: "+РезультатЗапроса.Ссылка);
        Продолжить;
    КонецЕсли;
    
    Если КарточкаСтажера.СтатусСтажера <> РезультатЗапроса.Ссылка.СтатусСтажера Тогда
        КарточкаСтажера.Записать(РежимЗаписиДокумента.Запись);
    КонецЕсли;
КонецЦикла;
25 undertale
 
07.10.20
13:04
(22) посмотрел, ничего не изменилось
26 undertale
 
07.10.20
13:05
(24) я бы с удовольствием переписал бы код, но я начинающий, если я перепишу , то боюсь, что буду путаться
27 arsik
 
гуру
07.10.20
13:05
Ну значит все правильно. Реквизит заполняется и записывается. Что еще нужно?
28 undertale
 
07.10.20
13:10
(27) Та я не знаю. Смотри: У меня ПИС - истина. Может быть человек говорил как раз чтобы я дождался выдачи истины и контролировал это через отладку , нет?
В итоге у меня все работает , наверное.
Я боюсь просто спросить или что-то еще , ибо и так спрашивал у него уже сегодня помощи.
29 undertale
 
07.10.20
13:13
(27) может быть мне нужно поставить точку останова на том месте, где самое первое "ЕСЛИ" и ждать когда выдаст вот этот результат?


Если ПИС = Истина тогда
            КарточкаСтажера.СтатусСтажера = Перечисления.КП_СтатусСтажера.ПрошёлИспытатльныйСрок;    
        КонецЕсли;
30 arsik
 
гуру
07.10.20
13:17
КарточкаСтажера.СтатусСтажера = Перечисления.КП_СтатусСтажера.НЕПрошелИспытательнйСрок;
31 SadrArt
 
07.10.20
13:27
(30) +1
32 undertale
 
08.10.20
06:29
(30) Спасибо больше, у меня всё работает. Ты мне очень сильно помог на самом деле, дал уверенности так скажем. Благодарю тебя)
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.