|
|
| ||
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 | |||
Волшебник 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) Спасибо больше, у меня всё работает. Ты мне очень сильно помог на самом деле, дал уверенности так скажем. Благодарю тебя) |
|
Список тем форума |