8.х Дата приема на работу

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем mitit, 21 авг 2008.

  1. TopicStarter Overlay
    mitit
    Offline

    mitit

    Регистрация:
    9 июл 2008
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    1
    Добрый день.
    Недавно перешел на 1С 8.1 и не совсем разобрался.
    Подскажите, пожалуйста, как при открытии Спрвочника Физлиц програмно узнать дату приема на работу данного сотрудника, если она есть. Заранее благодарен.
  2. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Обратиться к РС и получить оттуда данные
  3. TopicStarter Overlay
    mitit
    Offline

    mitit

    Регистрация:
    9 июл 2008
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    1
    Если я делаю поиск из регистра сведений работники организаций, то получается очень долго открывает
  4. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Покажите, как вы там ищите.
  5. TopicStarter Overlay
    mitit
    Offline

    mitit

    Регистрация:
    9 июл 2008
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    1
    Код:
     
    ТаблицаСотрудники = Новый ТаблицаЗначений;
    ТаблицаСотрудники.Колонки.Добавить("ФИО");
    ТаблицаСотрудники.Колонки.Добавить("Табельный");
    ТаблицаСотрудники.Колонки.Добавить("Приказ");
    ТаблицаСотрудники.Колонки.Добавить("ДатаПриказа");
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |	ФизическиеЛица.Ссылка,
    |	ФизическиеЛица.Представление КАК Представление,
    |	РаботникиОрганизаций.Период,
    |	РаботникиОрганизаций.ПричинаИзмененияСостояния.Ссылка,
    |	РаботникиОрганизаций.ТабельныйНомер,
    |	ФизическиеЛица.Код КАК Код,
    |	РаботникиОрганизаций.ОбособленноеПодразделение,
    |	ПриемНаРаботуВОрганизацию.Ссылка КАК Ссылка1
    |ИЗ
    |	Справочник.ФизическиеЛица КАК ФизическиеЛица
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
    |			ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриемНаРаботуВОрганизацию КАК ПриемНаРаботуВОрганизацию
    |			ПО РаботникиОрганизаций.Регистратор = ПриемНаРаботуВОрганизацию.Ссылка
    |				И РаботникиОрганизаций.Приказ = ПриемНаРаботуВОрганизацию.Ссылка
    |		ПО ФизическиеЛица.Ссылка = РаботникиОрганизаций.Физлицо
    |
    |СГРУППИРОВАТЬ ПО
    |	ФизическиеЛица.Ссылка,
    |	ФизическиеЛица.Представление,
    |	РаботникиОрганизаций.Период,
    |	РаботникиОрганизаций.ПричинаИзмененияСостояния.Ссылка,
    |	РаботникиОрганизаций.ТабельныйНомер,
    |	ФизическиеЛица.Код,
    |	РаботникиОрганизаций.ОбособленноеПодразделение,
    |	ПриемНаРаботуВОрганизацию.Ссылка
    |АВТОУПОРЯДОЧИВАНИЕ";
    
    Результат = Запрос.Выполнить();
    
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
    ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
    
    Дата1 = ТекущаяДата();
    
    ВыборкаДетали = Результат.Выбрать();
    Пока ВыборкаДетали.Следующий() Цикл
    Если (ВыборкаДетали.Ссылка.Родитель.Наименование = "Работающие") или (ВыборкаДетали.Ссылка.Родитель.Наименование = "Работающие пенсионеры") или (ВыборкаДетали.Ссылка.Родитель.Наименование = "Внешние совместители") тогда
    Если (ВыборкаДетали.ПричинаИзмененияСостоянияСсылка <> Перечисления.ПричиныИзмененияСостояния.Увольнение) и (ВыборкаДетали.ПричинаИзмененияСостоянияСсылка <> Перечисления.ПричиныИзмененияСостояния.Перемещение) тогда
    Если ВыборкаДетали.Код = ВыборкаДетали.Ссылка.Код тогда//
    Если НачалоДня(Дата1) >= НачалоДня(ВыборкаДетали.Период) тогда
    Если ТаблицаСотрудники.Количество() = 0 тогда
    НоваяСтрока = ТаблицаСотрудники.Добавить();
    НоваяСтрока.Фио = ВыборкаДетали.Представление;
    НоваяСтрока.Табельный = ВыборкаДетали.Код;
    НоваяСтрока.Приказ = ВыборкаДетали.ПричинаИзмененияСостоянияСсылка;
    НоваяСтрока.ДатаПриказа = ВыборкаДетали.Период;
    Иначе
    ТаблицаСотрудники.Получить(ТаблицаСотрудники.Количество()-1);
    Если ТаблицаСотрудники.Получить(ТаблицаСотрудники.Количество()-1).Табельный = ВыборкаДетали.Код тогда
    ТаблицаСотрудники.Получить(ТаблицаСотрудники.Количество()-1).ДатаПриказа = ВыборкаДетали.Период
    Иначе
    НоваяСтрока = ТаблицаСотрудники.Добавить();
    НоваяСтрока.Фио = ВыборкаДетали.Представление;
    НоваяСтрока.Табельный = ВыборкаДетали.Код;
    НоваяСтрока.Приказ = ВыборкаДетали.ПричинаИзмененияСостоянияСсылка;
    НоваяСтрока.ДатаПриказа = ВыборкаДетали.Период;
    
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    
    Для каждого строка из ТаблицаСотрудники цикл
    Если Строка.Фио = Наименование тогда
    ДатаПМ = Строка.ДатаПриказа;//Дата(2003,12,31);
    РассчитатьСтаж13();
    СтажДля13Зп = СтажДля13Зарплаты;
    КонецЕсли;
    КонецЦикла;
    
    
    Я думаю, что наверное можно еще в первой выборке найти, но чего-то у меня не получается.
  6. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Ну, но код, наверное, рабочий :)
    А в какой процедуре выводиться?
  7. TopicStarter Overlay
    mitit
    Offline

    mitit

    Регистрация:
    9 июл 2008
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    1
    Да рабочий))

    Выводится при открытии формы элемента фмзического лица.

    На моей машине открывает за секунд 20.
    На пользовательской будет около минуты.
    И даже 10 сек много.
  8. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    А зачем вы в цикле перебираете условия? Что мешает вынести всё в запрос?
  9. eviloid
    Offline

    eviloid Опытный в 1С

    Регистрация:
    15 май 2008
    Сообщения:
    103
    Симпатии:
    0
    Баллы:
    26
    Код:
    Функция ПолучитьСостояниеФизЛица(ФизЛицоСсылка)
    Запрос = Новый Запрос;
    
    ТекстЗапроса = "ВЫБРАТЬ
    |    РаботникиОрганизаций.ПричинаИзмененияСостояния,
    |    РаботникиОрганизаций.Период КАК Период,
    |    РаботникиОрганизаций.Организация
    |ИЗ
    |    РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК ФизическиеЛица
    |        ПО РаботникиОрганизаций.Сотрудник.Физлицо = ФизическиеЛица.Ссылка
    |ГДЕ
    |    ФизическиеЛица.Ссылка = &ФизЛицо
    |
    |УПОРЯДОЧИТЬ ПО
    |    Период УБЫВ";
    Запрос.Текст = ТекстЗапроса;
    Запрос.УстановитьПараметр("ФизЛицо", ФизЛицоСсылка);
    ТЗ = Запрос.Выполнить().Выгрузить();
    
    Результат = "";
    
    Для Каждого Стр Из ТЗ Цикл
    Если Стр.ПричинаИзмененияСостояния = Перечисления.ПричиныИзмененияСостояния.Увольнение Тогда
    Результат = "Уволен из " + СокрЛП(Стр.Организация) + " " + Формат(Стр.Период, "ДЛФ=Д"); // Стр.Период - дата увольнения
    Прервать;
    ИначеЕсли Стр.ПричинаИзмененияСостояния = Перечисления.ПричиныИзмененияСостояния.ПриемНаРаботу Тогда
    Результат = "Принят в " + СокрЛП(Стр.Организация) + " с " + Формат(Стр.Период, "ДЛФ=Д"); // Стр.Период - дата приёма на работу
    Прервать;
    КонецЕсли;
    КонецЦикла;
    
    Возврат Результат;    
    КонецФункции
    
    
    
  10. TopicStarter Overlay
    mitit
    Offline

    mitit

    Регистрация:
    9 июл 2008
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    1
    Evld,
    У меня Результат = "".
    Не находит он того что надо.
    Но идея мне понравилась, попробую поддоработать.
  11. TopicStarter Overlay
    mitit
    Offline

    mitit

    Регистрация:
    9 июл 2008
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    1
    Evld
    У тебя этот код работает? А то у меня выпадают ошибки.
    А после исправлений не находит результат.
  12. eviloid
    Offline

    eviloid Опытный в 1С

    Регистрация:
    15 май 2008
    Сообщения:
    103
    Симпатии:
    0
    Баллы:
    26
    В УПП 1.2.17.3 работает... в ЗУП 1.6.9.4 тоже... (проверял на платформах 8.1.11.67 и 8.1.12.97 ;) )
    А что за ошибки выпадают? И какая у Вас версия конфы?
  13. TopicStarter Overlay
    mitit
    Offline

    mitit

    Регистрация:
    9 июл 2008
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    1
    1С:Предприятие 8.1 (8.1.11.67) УПП 1.2 (1.2.6.2)

    {Справочник.ФизическиеЛица.Форма.ФормаЭлемента(940)}: Ошибка при вызове метода контекста (Выполнить): {(8, 33)}: Поле не найдено "РаботникиОрганизаций.Сотрудник.Физлицо"
    ПО РаботникиОрганизаций.<<?>>Сотрудник.Физлицо = ФизическиеЛица.Ссылка
    ТЗ = Запрос.Выполнить().Выгрузить();
  14. eviloid
    Offline

    eviloid Опытный в 1С

    Регистрация:
    15 май 2008
    Сообщения:
    103
    Симпатии:
    0
    Баллы:
    26
    Ага, понял - попробуйте заменить в тексте запроса
    Код:
    |        ПО РаботникиОрганизаций.Сотрудник.Физлицо = ФизическиеЛица.Ссылка
    
    
    на
    Код:
    |        ПО РаботникиОрганизаций.Физлицо = ФизическиеЛица.Ссылка
    
  15. TopicStarter Overlay
    mitit
    Offline

    mitit

    Регистрация:
    9 июл 2008
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    1
    Я так сразу и исправлял, но ничего. Результат = "".
  16. eviloid
    Offline

    eviloid Опытный в 1С

    Регистрация:
    15 май 2008
    Сообщения:
    103
    Симпатии:
    0
    Баллы:
    26
    Такой результат у всех физических лиц? Если физ. лицо не принято на работу - то да, результат будет пустой...
  17. TopicStarter Overlay
    mitit
    Offline

    mitit

    Регистрация:
    9 июл 2008
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    1
    Работники приняты. Если сформировать Работники организации, то они там присутствует.
  18. eviloid
    Offline

    eviloid Опытный в 1С

    Регистрация:
    15 май 2008
    Сообщения:
    103
    Симпатии:
    0
    Баллы:
    26
    Странно... может в параметре дело?
    Я вот что сделал - на форму элемента справочника ФизическиеЛица кинул надпись и в процедуре ПриОткрытии устанавливаю её значение:
    Код:
    Процедура ПриОткрытии()
    ЭлементыФормы.НадписьСостояниеФизЛица.Значение = ПолучитьСостояниеФизЛица(ЭтотОбъект.Ссылка);
    ...
    
    
    
    вот что получается:
    [​IMG]
  19. TopicStarter Overlay
    mitit
    Offline

    mitit

    Регистрация:
    9 июл 2008
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    1
    Evld,

    А что за ФизЛицоСсылка в
    Код:
    Запрос.УстановитьПараметр("ФизЛицо", ФизЛицоСсылка);
    
    
  20. TopicStarter Overlay
    mitit
    Offline

    mitit

    Регистрация:
    9 июл 2008
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    1
    Получилось!!
    Спасибо, большое. У меня при вызове процедуры была ошибка.

Поделиться этой страницей