|
Как правильно проверить сотрудника на состояние? ЗУП 2.5 | ☑ | ||
---|---|---|---|---|
0
ultrannge89
18.11.13
✎
07:29
|
Регистр ИтПодразделенияОК имеет структуру как у базы УПП Подразделения организаций, каждый сотрудник фактически находится одновременно в двух подразделениях :).
Делаю обработку, которая будет грузить табели из листа excel и формировать документ НеявкиИБолезниОрганизаций. Передаю в нее строку из листа excel. [code] Запрос = Новый Запрос( "ВЫБРАТЬ | РаботникиОрганизаций.Сотрудник.Ссылка КАК Ссылка |ИЗ | РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций |ГДЕ | (РаботникиОрганизаций.Период МЕЖДУ НАЧАЛОПЕРИОДА(&НаДату, МЕСЯЦ) И КОНЕЦПЕРИОДА(&НаДату, МЕСЯЦ) | И РаботникиОрганизаций.Сотрудник.Наименование = &Сотрудник | И РаботникиОрганизаций.итПодразделениеОК В ИЕРАРХИИ (&Подразделение) | И РаботникиОрганизаций.Сотрудник.ДатаПриемаНаРаботу <= КОНЕЦПЕРИОДА(&НаДату, МЕСЯЦ) | И (РаботникиОрганизаций.Сотрудник.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1) | ИЛИ РаботникиОрганизаций.Сотрудник.ДатаУвольнения >= НАЧАЛОПЕРИОДА(&НаДату, МЕСЯЦ)))"); [/code] |
|||
1
ultrannge89
18.11.13
✎
07:30
|
Тут я просто хочу получить либо ссылку на сотрудника, либо пустую ссылку...
|
|||
2
Wobland
18.11.13
✎
07:36
|
а зачем пустая?
|
|||
3
ultrannge89
18.11.13
✎
07:48
|
Чтобы потом проанализировать в теле основной программы, если ссылка не пустая, то двигаемся, дальше, иначе сообщить("сотрудник не найден").
Я получается сначала проверяю работает ли сотрудник, затем пробегаюсь по дням в листе excel и смотрю в какой день стоит пропуск, если в этом дне имеется состояние работает или пустая ссылка (не заполнено состояние), то я формирую по данному дню документ, вернее я ищу периоды таких пропусков и затем вношу их в табличную часть документа. Но что-то стал проверять и не получается даже сотрудника получить по наименованию. |
|||
4
Ofizer
18.11.13
✎
08:04
|
(3) а что ты хочешь добиться при таком условии?
РаботникиОрганизаций.Период МЕЖДУ НАЧАЛОПЕРИОДА(&НаДату, МЕСЯЦ) И КОНЕЦПЕРИОДА(&НаДату, МЕСЯЦ) |
|||
5
Wobland
18.11.13
✎
08:08
|
(3) как насчёт сразу достать запросом нужное, чтоб не бегать?
|
|||
6
ultrannge89
18.11.13
✎
08:18
|
(4) Я хочу чтобы выбирался только сотрудник работавший в этом месяце. На форме есть реквизит НаДату, он показывает каким месяцем ведется загрузка табеля. Соответственно по нему же и проверяется дата увольнения тек. сотрудника.
|
|||
7
Ofizer
18.11.13
✎
08:22
|
(6) если сотрудник принят на работу, например, 01.01.13, а смотришь месяц февраль, думаешь этот сотрудник попадет по твоему условию?
|
|||
8
aka AMIGO
18.11.13
✎
08:23
|
ИМХО, где-то в недрах модуля вывода сотров по списку есть блочок определения состояния на "сей секунд"
зачем изобретать изобретенное непосрэдственно фирмой 1С?.. |
|||
9
ultrannge89
18.11.13
✎
08:27
|
(8) Попробую найти =)
|
|||
10
Apokalipsec
18.11.13
✎
08:27
|
(8) да, и регистр используется СотрудникиОрганизаций, он же кадровая история по юрлицам.
|
|||
11
ultrannge89
18.11.13
✎
08:36
|
(10) нету такого регистра
|
|||
12
Ofizer
18.11.13
✎
08:39
|
(11) РаботникиОрганизаций
|
|||
13
ultrannge89
18.11.13
✎
08:39
|
Ладно, щас просто попробую в консоле построчно комментировать строки, может получится чего...
|
|||
14
Apokalipsec
18.11.13
✎
08:40
|
(11) да это РаботникиОрганизаций, не проснулся я ещё.))
|
|||
15
ultrannge89
18.11.13
✎
10:33
|
Стал делать через СрезПоследних и понял что нужно проверять еще и подразделение, на начало периода и на полный период, Объединить все и если хоть где то встречается данное подразделение, то этого работника следует обрабатывать. Но далее уже при проверке состояния на день, проверять и текущее его подразделение, т.к. в нашей организации часто делают перемещения в ходе месяца.
|
|||
16
ultrannge89
18.11.13
✎
13:34
|
[code]
Функция ПроверитьСотрудника(Сотрудник) Запрос = Новый Запрос( "ВЫБРАТЬ | РаботникиОрганизацийСрезПоследних.Сотрудник.Ссылка КАК СотрудникСсылка |ИЗ | РегистрСведений.РаботникиОрганизаций.СрезПоследних( | НАЧАЛОПЕРИОДА(&НаДату, МЕСЯЦ), | Сотрудник.Наименование = &Сотрудник | И Сотрудник.итПодразделениеОК В ИЕРАРХИИ (&Подразделение) | И Сотрудник.ДатаПриемаНаРаботу <= КОНЕЦПЕРИОДА(&НаДату, МЕСЯЦ) | И (Сотрудник.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1) | ИЛИ Сотрудник.ДатаУвольнения >= НАЧАЛОПЕРИОДА(&НаДату, МЕСЯЦ))) КАК РаботникиОрганизацийСрезПоследних | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | РаботникиОрганизаций.Сотрудник.Ссылка КАК СотрудникСсылка |ИЗ | РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций |ГДЕ | РаботникиОрганизаций.Период МЕЖДУ НАЧАЛОПЕРИОДА(&НаДату, МЕСЯЦ) И КОНЕЦПЕРИОДА(&НаДату, МЕСЯЦ) | И РаботникиОрганизаций.Сотрудник.Наименование = &Сотрудник | И РаботникиОрганизаций.Сотрудник.итПодразделениеОК В ИЕРАРХИИ(&Подразделение) | И РаботникиОрганизаций.Сотрудник.ДатаПриемаНаРаботу <= КОНЕЦПЕРИОДА(&НаДату, МЕСЯЦ) | И (РаботникиОрганизаций.Сотрудник.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1) | ИЛИ РаботникиОрганизаций.Сотрудник.ДатаУвольнения >= НАЧАЛОПЕРИОДА(&НаДату, МЕСЯЦ))"); Запрос.УстановитьПараметр("Сотрудник",Сотрудник); Запрос.УстановитьПараметр("НаДату",НаДату); Запрос.УстановитьПараметр("Подразделение",Подразделение); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Если Выборка.Ссылка <> Справочники.СотрудникиОрганизаций.ПустаяСсылка() И Выборка.Количество() = 1 Тогда Возврат Выборка.Ссылка; Иначе Сообщить("Сотрудник: "+Сотрудник+" не найден, при запросе к БД. Сотрудник отсутствует или их несколько в списке."); Возврат Справочники.СотрудникиОрганизаций.ПустаяСсылка(); КонецЕсли; Иначе Сообщить("Сотрудник: "+Сотрудник+" не найден, при запросе к БД. Пустая выборка данных."); Возврат Справочники.СотрудникиОрганизаций.ПустаяСсылка(); КонецЕсли; КонецФункции [\code] Что то странно, в консоле все работает, при выполнении из внешней обработки нет. Отладчиком встаю на выборке, пишет ошибка чтения... ( |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |