Вход | Регистрация
 

Помочь с кодом.

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


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

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

    
    

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

   arsik
 
24 - 07.10.20 - 12:57
Блин сам ошибся. ВОт так
Пока РезультатЗапроса.Следующий() Цикл
    КарточкаСтажера = РезультатЗапроса.Ссылка.ПолучитьОбъект();
    ПИС = ПолучитьЛистОценки(КарточкаСтажера.ФИО);
    Если ПИС = Истина тогда
        КарточкаСтажера.СтатусСтажера = Перечисления.КП_СтатусСтажера.ПрошёлИспытатльныйСрок;
    ИначеЕсли КарточкаСтажера.ДатаТрудоустройства < ТекущаяДата() тогда
        КарточкаСтажера.СтатусСтажера = Перечисления.КП_СтатусСтажера.ПланируетсяВыход;
    ИначеЕсли КарточкаСтажера.ДатаТрудоустройства > ТекущаяДата() Тогда
        КарточкаСтажера.СтатусСтажера = Перечисления.КП_СтатусСтажера.НаИспытательномСроке;
    иначе
        Сообщить("Не подходит по условиям: "+РезультатЗапроса.Ссылка);
        Продолжить;
    КонецЕсли;
    
    Если КарточкаСтажера.СтатусСтажера <> РезультатЗапроса.Ссылка.СтатусСтажера Тогда
        КарточкаСтажера.Записать(РежимЗаписиДокумента.Запись);
    КонецЕсли;
КонецЦикла;

   undertale
 
25 - 07.10.20 - 13:04
(22) посмотрел, ничего не изменилось
   undertale
 
26 - 07.10.20 - 13:05
(24) я бы с удовольствием переписал бы код, но я начинающий, если я перепишу , то боюсь, что буду путаться
   arsik
 
27 - 07.10.20 - 13:05
Ну значит все правильно. Реквизит заполняется и записывается. Что еще нужно?
   undertale
 
28 - 07.10.20 - 13:10
(27) Та я не знаю. Смотри: У меня ПИС - истина. Может быть человек говорил как раз чтобы я дождался выдачи истины и контролировал это через отладку , нет?
В итоге у меня все работает , наверное.
Я боюсь просто спросить или что-то еще , ибо и так спрашивал у него уже сегодня помощи.
   undertale
 
29 - 07.10.20 - 13:13
(27) может быть мне нужно поставить точку останова на том месте, где самое первое "ЕСЛИ" и ждать когда выдаст вот этот результат?


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


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.