|   |   | 
| 
 | Как правильно проверить сотрудника на состояние? ЗУП 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] Что то странно, в консоле все работает, при выполнении из внешней обработки нет. Отладчиком встаю на выборке, пишет ошибка чтения... ( | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |