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

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

↓ [Волшебник, 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 или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.