Имя: Пароль:
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) Спасибо больше, у меня всё работает. Ты мне очень сильно помог на самом деле, дал уверенности так скажем. Благодарю тебя)
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший