Каким образом использовать текст запроса в программном коде 1С. Пример использования выборки. Проверка в обработке проведения. Читайте статьи по 1С на нашем сайте: programmist1s.ru/materialyi-po...
Спасибо за то что видео уроки в основном короткие. А то невозможно стерпеть чувство изнеможения от поступающей информации с одновременным интересом к тому о чем говорится. Спасибо от души !!!
С таким запросом не возникнут проблемы при приёме на работу если сотрудник уже работает. Спасибо за уроки Илья) ВЫБРАТЬ КадровыеПеремещенияСрезПоследних.Период, КадровыеПеремещенияСрезПоследних.Сотрудник, КадровыеПеремещенияСрезПоследних.ПричинаИзмененияСостояния ПОМЕСТИТЬ ВТ ИЗ РегистрСведений.КадровыеПеремещения.СрезПоследних КАК КадровыеПеремещенияСрезПоследних ГДЕ (КадровыеПеремещенияСрезПоследних.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояний.Перемещение) ИЛИ КадровыеПеремещенияСрезПоследних.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояний.ПриемНаРаботу)) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ.Период, ВТ.Сотрудник, ВТ.ПричинаИзмененияСостояния ИЗ ВТ КАК ВТ ГДЕ ВТ.Сотрудник = &Сотрудник
Ну наконец то! Ну нельзя же так долго одну тему) всю ночь потратил. Но видео супер! За ночь решил вопрос для нашей фирме - выборка емейлов у кого роль получение счетов и вставка строки в кому почтового отправления
Собственно говоря сумел решить рспространненные проблему приема-увольнения сотрудников с возможностью повторно приема обрабно на работу. Решение достаточно простое: Нужна 1 функция с 2-мя запросами. В итоге эта функция вернет нам значение = количество принятий на работу минус количество увольнений. Таким образом мы знаем, что если эта функуция равна 1 - сотрудник уже принят, соответственно во всех остальных случаях можно выполнять заполнение регистра или регистров данными о приёме.
сделал так как ты написал): функция сотрудникПринятНаРаботу(Сотрудник) запрос = новый запрос; запрос.текст = "ВЫБРАТЬ | КадровыеПеремещения.Период |ИЗ | РегистрСведений.КадровыеПеремещения КАК КадровыеПеремещения |ГДЕ | КадровыеПеремещения.Сотрудник = &Сотрудник | И КадровыеПеремещения.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(перечисление.причиныИзмененияСОСТОЯНИЯ.приемНаработу)"; запрос.УстановитьПараметр("сотрудник", сотрудник) ; запрос2 = новый запрос; запрос2.Текст = "ВЫБРАТЬ | КадровыеПеремещения.Период |ИЗ | РегистрСведений.КадровыеПеремещения КАК КадровыеПеремещения |ГДЕ | КадровыеПеремещения.Сотрудник = &Сотрудник | И КадровыеПеремещения.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(перечисление.причиныИзмененияСостояния.увольнение)"; запрос2.УстановитьПараметр("сотрудник", сотрудник) ; результат = запрос.Выполнить(); результат2 = запрос2.Выполнить(); выборка1 = результат.Выбрать(); выборка2 = результат2.Выбрать(); если выборка1.Количество() - выборка2.Количество() = 1 тогда возврат Истина конецесли; возврат ложь;
конецФункции Процедура ОбработкаПроведения(Отказ, РежимПроведения) если сотрудникПринятНаРаботу(сотрудник) = 1 тогда сообщить("Документ не проведен. Сотрудник уже принят на работу другим документом и не был уволен."); отказ = истина; возврат; конецесли; Движения.КадровыеПеремещения.Записывать = Истина; Движения.КадровыеПеремещения.Очистить(); Движение = Движения.КадровыеПеремещения.Добавить(); Движение.Период = Дата; Движение.Сотрудник = Сотрудник; Движение.Должность = Должность; Движение.Подразделения = Подразделения; Движение.Оклад = Оклад; Движение.ПричинаИзмененияСостояния = Перечисления.ПричиныИзмененияСостояния.ПриемНаРаботу; КонецПроцедуры
Огромное спасибо! После остальных уроков, этот кажется хардкорным. Но все-таки получилось в нём разобраться. Даже сделал обработку на документах "Увольнение", чтобы несуществующего сотрудника нельзя было уволить. И она заработала. Короче, радости полные штаны, продолжаем учиться)!
Каким образом использовать текст запроса в программном коде 1С. Пример использования выборки. Проверка в обработке проведения Услуги 1С программиста в Москве: 1cproger.ru/ Читайте статьи по 1С на нашем сайте: programmist1s.ru/materialyi-po-1s/
Спасибо большое, Илья! В печальное время приходится учиться и пригодится теперь это вообще или нет, никто не знает(. Наставил лайков, хотя ээто сейчас наверно совершенно не актуально стало. Удачи Вам и здоровья!
Да, действительно. Но тогда нужно было бы объяснять как пользоваться Синтаксис-помощником, чтобы вызвать его для поиска описания функции "Следующий()". Где бы мы увидели, что она(функция) возвращает значения типа Булево. Т.е. при положительном результате функция вернёт "Истина", а при противоположном "Ложь".
Спасибо смотрю с первого урока, Признаюсь пару видео пересматривал по несколько раз пока не допер. Надеюсь все досмотрю до конца обязательно. Смотрю видео 2017 года не пойму неужели с того момента ничего не изменилось или впереди полностью исчерпывающий материал?
А что будет если провести прием на работу, сделать кадровое перемещение и затем отметить проведение документа прием на работу? Ведь получается, что провести его назад мы не сможем, т.к. в регистре будет запись, сделанная кадровым перемещением. Или я не прав?
Куда пропали из таблицы поля Код и Наименование? Никак не могу от них избавиться. Хочу, чтобы в шапке и полях ввода были мои специфические поля. Или в справочниках это невозможно?
Подскажите, пожалуйста, в чем может быть ошибка. Вроде все сделала правильно, но синтаксический контроль выводит сообщение, что недостаточно фактических параметров (СотрудникПринятНаРаботу)...
У меня до выставления параметра "Удалять автоматически" документ не мог ни провестись повторно, ни записаться. После установки данного параметра в свойствах документа "ПриемНаРаботу", у меня проводится первая запись неограниченное кол-во раз. И при нажатии на кнопку "запись" в документе не возникает дубликата.
Конечно! Проще всего через отладчик посмотреть значение выполнения выражения РезультатЗапроса.Выгрузить(). Это будет вполне наглядная таблица значений.
У меня не получилось, вроде все также делал. А где-то можно базу с примером скачать? Если я скопирую запрос, созданный в конструкторе запроса и запущу его в Консоле запроса - запрос должен сработать?
При вызове функции СотрудникПринятНаРаботу мы передаём в неё параметр Сотрудник, но как в него записались введённые ФИО если нижняя часть кода ещё не выполнялась?? код же должен построчно выполняться, так?
Совершенно верно, я об этом также сразу подумал. Но тема урока не об этом. Вы уже дальше мыслите и правильно. А многие, изучая с нуля, ещё не могут об этом задумываться, так как не имеют опыта работы, чтобы понимать что это пригодиться потом в реальной работе. А кто-то, просто, ещё сам синтаксис не знает, чтобы это мог на данном уровне реализовать. Мы все разные :)
Урок хороший. Но вот очередной раз наталкиваюсь что в большинстве случаев учителя не рассказывают про функции для обработки запросов. Будет где-то поподробнее рассказано?
Здравствуйте. Подскажите пожалуйста ошибку. Не удается выполнить отмену проведения ""Приема на работу". Принажатии кнопки отмена проведения и закрытии формы, документ автоматически проводиться. Где искать ошибку?
Не пойму, почему то выдает ошибку что {Документ.ПриемНаРаботу.МодульОбъекта(31,32)}: Переменная не определена (сотрудник) если сотрудникПринятНаРаботу(
Возврат Истина и Возврат Ложь в функции что означают? Т.е. Если Возврат Истина то функция выполнилась, если ложь - то нет? И тогда можно делать движения?
Добрый день. Попробовала не указывать "Возврат" в //Проверке, второй документ не проводится ( как и должно быть). Тем же экспериментальным путем попробовала прописать Возврат, но не указать Отказ=Истина (вот здесь документ провелся+ показано служебное сообщение "Документ не проведен"). Таким образом, "Возврат", как я понимаю, можно всё-таки не прописывать 🤔, по крайней мере, в моей версии. Но на всякий случай, думаю, лучше "приучить" себя прописывать "Возврат"😅
А почему выбран Регистр КадровыеПеремещения, а не КадровыеПеремещенияСрезПоследних? Т.к. сотрудник, на день создания нового Приема на работу, мог уже быть уволен. Т.е. первый Прием на работу уже не актуален.
Он вначале этого видео об этом говорит. Что в типовых решениях принято При принятии вновь сотрудника заводить новый элемент объекта Справочник. т.е. Будет в справочнике уже два одинаковых элемента по полю Наименование. То что вы спрашивает это логично, и я бы также сделал, но тема урока не об этом. Ваш вариант нужно дорабатывать и ставить ограничения. Я еще несколько занятий назад уже так сделал. Это дело каждого.
Не понятно зачем в процедуре Обработка проведения писали Возврат. Ведь если функция отработала, то и получили Отказ = Истина, дальше же код не должен отрабатываться в теле Процедуры?
Отказ - это свойство/параметр процедуры, а не оператор прерывания процедуры. А вот оператор "Возврат" предназначен для прерывания работы процедуры. (Не важно, что этот ответ человеку не нужен, я себя проверяю, да для тех, кто читать будет потом комментарии.)
Если использовать не весь регистр, а СрезПоследних, тогда Прием по сотруднику, который работал, уволился, а потом опять решил оформиться - проведется без проблем.
Блин, та же беда, что с Посчитайкой. Параметр (сотрудник) устанавливается нормально. А вот Результат = Запрос.Выполнить(); приводит к неопределенному значению (если этот же запрос выполнить в консоле, то он нормально выбирает нужного сотрудника). В итоге Выборка.Следующий() - Ложь и функция работает неверно. В чем может быть ошибка!? ((
Запрос.УстановитьПараметр("Сотрудник", Сотрудник); Вот так пишите? Сначала в кавычках название параметра, потом какой реквизит передаем. Выложите часть кода которая не правильно работает.
Почему пишем Движение.ПризнакИзмененияСостояния = ПеречислениЯ....., а в запросе уже проверяем КадровыеПеремещения.ПричинаИзмененияСостояния = ПеречеслениЕ....?
Сначала не понял про что спрашиваете, так как у вас указан ПРИЗНАК...., а не ПРИЧИНАизмененияСостояния. Но это, просто, ваша опечатка как я понял. А по вопросу действительно, в запросе единственное число, а в процедуре модуля уже множественное число. Как я, то я не пытаюсь запомнить где да как, так как всё равно ошибетесь. Я для себя запомнил только сам факт, что где-то нужно в единств. числе, а где-то во множественном. Всё равно конфигуратор вам выдаст ошибку при сохранении, всегда можно исправить.
Ниже в комментариях уже "Александр Мукаев 2 года назад" спрашивал об этом и Илья ответил, что "В программном коде мы пишем во множественном числе ("Перечисления..."), а в запросе - в единственном ("Перечисление...")."
Что за ошибка? Не дает построить запрос Неверные параметры "Перечисления.ПричиныИзмененияСостояний.ПриемНаРаботу" Перечисления.ПричиныИзмененияСостояния = ЗНАЧЕНИЕ(
На данный момент версия 8.3 Вместо "пока выборка" написал "если выборка" , все работает PS При "пока" программа выдаёт ошибку в переходе к булевой переменной и требует конец цикла
Я бы лучше написал: Возврат Не Запрос.Выполнить().Пустой(); Вместо всего этого куска кода: Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Если Выборка.Следующий() Тогда Возврат Истина; КонецЕсли; Возврат Ложь; Так и логика более явная и кода в разы меньше
А что будет если провести прием на работу, сделать кадровое перемещение и затем отметить проведение документа прием на работу? Ведь получается, что провести его назад мы не сможем, т.к. в регистре будет запись, сделанная кадровым перемещением. Или я не прав?
Спасибо за то что видео уроки в основном короткие. А то невозможно стерпеть чувство изнеможения от поступающей информации с одновременным интересом к тому о чем говорится. Спасибо от души !!!
Классно рассказываете, спасибо большое!
Очень доходчиво! Спасибо!
На этом уроке я подробно остановлюсь!!! Очень познавательно!!!
Илья, благодарю Вас!
это шутка или что?
Очень круто, спасибо за уроки, вы лучший
Очень познавательное видео.
Отличный урок! Напишу подобное на увольнение. Заодно проверю, как усвоено.
С таким запросом не возникнут проблемы при приёме на работу если сотрудник уже работает. Спасибо за уроки Илья)
ВЫБРАТЬ
КадровыеПеремещенияСрезПоследних.Период,
КадровыеПеремещенияСрезПоследних.Сотрудник,
КадровыеПеремещенияСрезПоследних.ПричинаИзмененияСостояния
ПОМЕСТИТЬ ВТ
ИЗ
РегистрСведений.КадровыеПеремещения.СрезПоследних КАК КадровыеПеремещенияСрезПоследних
ГДЕ
(КадровыеПеремещенияСрезПоследних.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояний.Перемещение)
ИЛИ КадровыеПеремещенияСрезПоследних.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояний.ПриемНаРаботу))
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ.Период,
ВТ.Сотрудник,
ВТ.ПричинаИзмененияСостояния
ИЗ
ВТ КАК ВТ
ГДЕ
ВТ.Сотрудник = &Сотрудник
Ну наконец то! Ну нельзя же так долго одну тему) всю ночь потратил. Но видео супер! За ночь решил вопрос для нашей фирме - выборка емейлов у кого роль получение счетов и вставка строки в кому почтового отправления
Собственно говоря сумел решить рспространненные проблему приема-увольнения сотрудников с возможностью повторно приема обрабно на работу. Решение достаточно простое: Нужна 1 функция с 2-мя запросами. В итоге эта функция вернет нам значение = количество принятий на работу минус количество увольнений. Таким образом мы знаем, что если эта функуция равна 1 - сотрудник уже принят, соответственно во всех остальных случаях можно выполнять заполнение регистра или регистров данными о приёме.
сделал так как ты написал):
функция сотрудникПринятНаРаботу(Сотрудник)
запрос = новый запрос;
запрос.текст = "ВЫБРАТЬ
| КадровыеПеремещения.Период
|ИЗ
| РегистрСведений.КадровыеПеремещения КАК КадровыеПеремещения
|ГДЕ
| КадровыеПеремещения.Сотрудник = &Сотрудник
| И КадровыеПеремещения.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(перечисление.причиныИзмененияСОСТОЯНИЯ.приемНаработу)";
запрос.УстановитьПараметр("сотрудник", сотрудник) ;
запрос2 = новый запрос;
запрос2.Текст = "ВЫБРАТЬ
| КадровыеПеремещения.Период
|ИЗ
| РегистрСведений.КадровыеПеремещения КАК КадровыеПеремещения
|ГДЕ
| КадровыеПеремещения.Сотрудник = &Сотрудник
| И КадровыеПеремещения.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(перечисление.причиныИзмененияСостояния.увольнение)";
запрос2.УстановитьПараметр("сотрудник", сотрудник) ;
результат = запрос.Выполнить();
результат2 = запрос2.Выполнить();
выборка1 = результат.Выбрать();
выборка2 = результат2.Выбрать();
если выборка1.Количество() - выборка2.Количество() = 1 тогда
возврат Истина
конецесли;
возврат ложь;
конецФункции
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
если сотрудникПринятНаРаботу(сотрудник) = 1 тогда
сообщить("Документ не проведен. Сотрудник уже принят на работу другим документом и не был уволен.");
отказ = истина;
возврат;
конецесли;
Движения.КадровыеПеремещения.Записывать = Истина;
Движения.КадровыеПеремещения.Очистить();
Движение = Движения.КадровыеПеремещения.Добавить();
Движение.Период = Дата;
Движение.Сотрудник = Сотрудник;
Движение.Должность = Должность;
Движение.Подразделения = Подразделения;
Движение.Оклад = Оклад;
Движение.ПричинаИзмененияСостояния = Перечисления.ПричиныИзмененияСостояния.ПриемНаРаботу;
КонецПроцедуры
5 лет прошло, надеюсь ты понял почему такое решение лажа.
@@v-2schneider264 почему и как можно решить иначе.
@@v-2schneider264
А лучше просто срез последних применить в запросе? Если в срезе последних значение - Приём или перемещение.
Получилось. Срез последних нужно применить и условие выборки в запросе добавить
Огромное спасибо! После остальных уроков, этот кажется хардкорным. Но все-таки получилось в нём разобраться. Даже сделал обработку на документах "Увольнение", чтобы несуществующего сотрудника нельзя было уволить. И она заработала. Короче, радости полные штаны, продолжаем учиться)!
Сделал аналагочную обработку, чтобы нельзя было увольнять два раза, и нельзя было увольнять сотрудника непринятого на работу.
спасибо,ты крут..
Спасибо за урок. И как вы и просили: - "Какой нибудь классный комент".
Полезное видео, мозг кипит,!
Каким образом использовать текст запроса в программном коде 1С. Пример использования выборки. Проверка в обработке проведения
Услуги 1С программиста в Москве:
1cproger.ru/
Читайте статьи по 1С на нашем сайте:
programmist1s.ru/materialyi-po-1s/
Спасибо за урок. -"Какой нибудь, классный коммент."
Спасибо большое, Илья! В печальное время приходится учиться и пригодится теперь это вообще или нет, никто не знает(. Наставил лайков, хотя ээто сейчас наверно совершенно не актуально стало. Удачи Вам и здоровья!
спасибо!
Лайк!
Спасибо за доступность и доходчивость объяснений. Чистов отдыхает!)
Чистов красавчик! А вам спасибо на добром слове ;)
Чистов готовит к сдаче экзамена Специалист - поэтому к нему с "нулем" знаний нечего соваться.
В функции СотрудникПринятНаРаботу в конце достаточно написать:
Возврат Выборка.Следующий();
Точно, я бы никогда сам не догодался!!!
Так то да, но в обучающем видео это не добавит наглядности и понятности.
Да, действительно. Но тогда нужно было бы объяснять как пользоваться Синтаксис-помощником, чтобы вызвать его для поиска описания функции "Следующий()". Где бы мы увидели, что она(функция) возвращает значения типа Булево. Т.е. при положительном результате функция вернёт "Истина", а при противоположном "Ложь".
Спасибо смотрю с первого урока, Признаюсь пару видео пересматривал по несколько раз пока не допер. Надеюсь все досмотрю до конца обязательно. Смотрю видео 2017 года не пойму неужели с того момента ничего не изменилось или впереди полностью исчерпывающий материал?
А будет видео с работой с конструктором запроса с обработкой результата?.
Оставлю ка я классный коммент
класний комент :)
подскажите пожалуйста , какой процент курса по программированию мы прошли ?
Процентов 60, всё зависит от вдохновения. Тема программирования - бесконечная :)
Спасибо , а не подскажите , на каком моменте уже можно пытаться на этом зарабатывать ?
и есть возможность по чаще выкладывать уроки ?
А что будет если провести прием на работу, сделать кадровое перемещение и затем отметить проведение документа прием на работу? Ведь получается, что провести его назад мы не сможем, т.к. в регистре будет запись, сделанная кадровым перемещением. Или я не прав?
Если эту логику отдельно самим не прописать, то она соблюдаться не будет.
В программировании все нужно предусматривать самостоятельно.
НАКОНЕЦТО! Если бы еще научил как учиться пользоваться справочником, тогда тебе был бы еще один жирный плюс!
Так есть видос про справочники на этом же канале.
@@NikeBat-ol6mf Спасибо за совет!
Куда пропали из таблицы поля Код и Наименование? Никак не могу от них избавиться. Хочу, чтобы в шапке и полях ввода были мои специфические поля. Или в справочниках это невозможно?
Подскажите, пожалуйста, в чем может быть ошибка. Вроде все сделала правильно, но синтаксический контроль выводит сообщение, что недостаточно фактических параметров (СотрудникПринятНаРаботу)...
Удален параметр Период, вы удалили параметр? Вы точно тот параметр удалили?
У меня до выставления параметра "Удалять автоматически" документ не мог ни провестись повторно, ни записаться. После установки данного параметра в свойствах документа "ПриемНаРаботу", у меня проводится первая запись неограниченное кол-во раз. И при нажатии на кнопку "запись" в документе не возникает дубликата.
Возможно как-нибудь вывести результат запроса на экран?
Конечно! Проще всего через отладчик посмотреть значение выполнения выражения РезультатЗапроса.Выгрузить(). Это будет вполне наглядная таблица значений.
У меня не получилось, вроде все также делал. А где-то можно базу с примером скачать?
Если я скопирую запрос, созданный в конструкторе запроса и запущу его в Консоле запроса - запрос должен сработать?
Про копирование в консоль в следующем уроки об этом говорится.
При вызове функции СотрудникПринятНаРаботу мы передаём в неё параметр Сотрудник, но как в него записались введённые ФИО если нижняя часть кода ещё не выполнялась?? код же должен построчно выполняться, так?
Тот же вопрос интересует
В 1С порядок расположения не имеет значения.
Так же задался этим вопросом, все просто, в этом документе уже имеется реквизит "Сотрудник" со значением СправочникСсылка.Сотрудники
Можно было бы возвращать регистратор, а не период. И в сообщении пользователю как раз показать, каким документом сотрудник уже был принят на работу.
Совершенно верно, я об этом также сразу подумал. Но тема урока не об этом. Вы уже дальше мыслите и правильно. А многие, изучая с нуля, ещё не могут об этом задумываться, так как не имеют опыта работы, чтобы понимать что это пригодиться потом в реальной работе. А кто-то, просто, ещё сам синтаксис не знает, чтобы это мог на данном уровне реализовать. Мы все разные :)
Урок хороший. Но вот очередной раз наталкиваюсь что в большинстве случаев учителя не рассказывают про функции для обработки запросов. Будет где-то поподробнее рассказано?
это обработчики событий вы сами можете увидеть их Ctrl+Alt+P и почитать в интернете
Здравствуйте. Подскажите пожалуйста ошибку. Не удается выполнить отмену проведения ""Приема на работу". Принажатии кнопки отмена проведения и закрытии формы, документ автоматически проводиться. Где искать ошибку?
У меня кстати после изменение значения свойства удаление движений в значение удалять автоматически, перепроведение все равно не проходит
Если в Движении стоит не стоит Удалять автоматически при отмене проведения всегда результат выборки НЕТ. ПОчему?
А почему переменная Запрос не конфликтует с классом Запрос, названия же одинаковые а конфликта имен нету?
Разные виды: то переменная, а то оператор/функция.
Не пойму, почему то выдает ошибку что
{Документ.ПриемНаРаботу.МодульОбъекта(31,32)}: Переменная не определена (сотрудник)
если сотрудникПринятНаРаботу(
В функцию в скобочки добавьте или проверьте правильность написания "сотрудник". Пользуйтесь чаще копировать вставить, чтобы избежать опечаток.
Возврат Истина и Возврат Ложь в функции что означают? Т.е. Если Возврат Истина то функция выполнилась, если ложь - то нет? И тогда можно делать движения?
Добрый день.
Попробовала не указывать "Возврат" в //Проверке, второй документ не проводится ( как и должно быть).
Тем же экспериментальным путем попробовала прописать Возврат, но не указать Отказ=Истина (вот здесь документ провелся+ показано служебное сообщение "Документ не проведен").
Таким образом, "Возврат", как я понимаю, можно всё-таки не прописывать 🤔, по крайней мере, в моей версии.
Но на всякий случай, думаю, лучше "приучить" себя прописывать "Возврат"😅
тут в другом смысл
А почему выбран Регистр КадровыеПеремещения, а не КадровыеПеремещенияСрезПоследних?
Т.к. сотрудник, на день создания нового Приема на работу, мог уже быть уволен. Т.е. первый Прием на работу уже не актуален.
Он вначале этого видео об этом говорит. Что в типовых решениях принято При принятии вновь сотрудника заводить новый элемент объекта Справочник. т.е. Будет в справочнике уже два одинаковых элемента по полю Наименование. То что вы спрашивает это логично, и я бы также сделал, но тема урока не об этом. Ваш вариант нужно дорабатывать и ставить ограничения. Я еще несколько занятий назад уже так сделал. Это дело каждого.
Не понятно зачем в процедуре Обработка проведения писали Возврат. Ведь если функция отработала, то и получили Отказ = Истина, дальше же код не должен отрабатываться в теле Процедуры?
Отказ - это свойство/параметр процедуры, а не оператор прерывания процедуры. А вот оператор "Возврат" предназначен для прерывания работы процедуры. (Не важно, что этот ответ человеку не нужен, я себя проверяю, да для тех, кто читать будет потом комментарии.)
А если мы уволили сотрудника, а потом приняли, то в кадровых перемещениях он тоже его найдет и не даст принять его на работу?
Если использовать не весь регистр, а СрезПоследних, тогда Прием по сотруднику, который работал, уволился, а потом опять решил оформиться - проведется без проблем.
Измените логику запроса - если использовать срез последних, то проверяйте на "прием на работу" и "перемещение", уволенных заново принимать можно.
Леонтев возвращайся в 1С!! Захер теле этот пайтен ?? Там конкуренкция зашкаливает!!
То есть если сотрудник был принят на работу, потом уволился, а потом опять решил вернуться, то его уже не смогут оформить.
Смогут, но будут заводить новый элемент справочника сотрудник и на его основании проводить документ "ПриемНаРаботу"
Это логика программы ЗУП 2.5 ) Считается, что повторно принятый сотрудник - это уже другой сотрудник.
Блин, та же беда, что с Посчитайкой. Параметр (сотрудник) устанавливается нормально. А вот Результат = Запрос.Выполнить(); приводит к неопределенному значению (если этот же запрос выполнить в консоле, то он нормально выбирает нужного сотрудника). В итоге Выборка.Следующий() - Ложь и функция работает неверно. В чем может быть ошибка!? ((
Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
Вот так пишите? Сначала в кавычках название параметра, потом какой реквизит передаем. Выложите часть кода которая не правильно работает.
Да, все так. Не беда, все равно, не все понятно. Еще учить и учить ))
В функции не проще было написать Возврат Выборка.Следующий(); без конструкции если
Почему пишем Движение.ПризнакИзмененияСостояния = ПеречислениЯ....., а в запросе уже проверяем КадровыеПеремещения.ПричинаИзмененияСостояния = ПеречеслениЕ....?
Сначала не понял про что спрашиваете, так как у вас указан ПРИЗНАК...., а не ПРИЧИНАизмененияСостояния. Но это, просто, ваша опечатка как я понял. А по вопросу действительно, в запросе единственное число, а в процедуре модуля уже множественное число. Как я, то я не пытаюсь запомнить где да как, так как всё равно ошибетесь. Я для себя запомнил только сам факт, что где-то нужно в единств. числе, а где-то во множественном. Всё равно конфигуратор вам выдаст ошибку при сохранении, всегда можно исправить.
Ниже в комментариях уже "Александр Мукаев 2 года назад" спрашивал об этом и Илья ответил, что "В программном коде мы пишем во множественном числе ("Перечисления..."), а в запросе - в единственном ("Перечисление...")."
Ты, конечно, парень неплохой Илья..... Но вот чем тебя Бог обделил, так это художественными способностями......😂
что за злодеи ставят дизлойсы :thonk:
Тоже не понимаю этого )
Что за ошибка? Не дает построить запрос
Неверные параметры "Перечисления.ПричиныИзмененияСостояний.ПриемНаРаботу"
Перечисления.ПричиныИзмененияСостояния = ЗНАЧЕНИЕ(
Возможно потому что надо писать "ПеречислениЕ. ..."
Да не возможно, а точно )
В программном коде мы пишем во множественном числе ("Перечисления..."), а в запросе - в единственном ("Перечисление...").
давай медленее!!!!!!! ваще не успеваю смотреть и делать
Зачем выборка, можно сделать условие: если запрос не пустой, возвращаем истина, за условием возвращаем лож
На данный момент версия 8.3
Вместо "пока выборка" написал "если выборка" , все работает
PS При "пока" программа выдаёт ошибку в переходе к булевой переменной и требует конец цикла
Я бы лучше написал:
Возврат Не Запрос.Выполнить().Пустой();
Вместо всего этого куска кода:
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
Возврат Истина;
КонецЕсли;
Возврат Ложь;
Так и логика более явная и кода в разы меньше
А что будет если провести прием на работу, сделать кадровое перемещение и затем отметить проведение документа прием на работу? Ведь получается, что провести его назад мы не сможем, т.к. в регистре будет запись, сделанная кадровым перемещением. Или я не прав?
Если эту логику отдельно самим не прописать, то она соблюдаться не будет.
В программировании все нужно предусматривать самостоятельно.