8.х Выбор Должности Сотрудника из РегистраСведений

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем Graf1000, 9 фев 2012.

  1. TopicStarter Overlay
    Graf1000
    Offline

    Graf1000

    Регистрация:
    1 фев 2012
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Доброго времени суток товарищи программеры и те кто стремится им стать !!!
    У меня возникла не большая проблемка.
    Народ вообщем подскажите, как сделать так, чтобы при выборе РуководителяПодразделения. и отправки его напечать прога автоматом подставляла должность в макет из РегистраСведений,Сотрудники?
    Код:
    регистр = РегистрыСведений.Сотрудники.Выбрать();
    Пока регистр.Следующий() Цикл
    ОбластьПодвал.Параметры.Должность = регистр.Должность;
    
    КонецЦикла;
    
    ОбластьПодвал.Параметры.Заполнить(Выборка);// доработка
    ТабДок.Вывести(ОбластьПодвал, Выборка.Уровень());
    
    
  2. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    попробуйте так
    Код:
    Отбор = новый Структура;
    Отбор.Вставить("Сотрудник",ВашСотрудник);
    Рег = РегистрыСведений.сотрудники.СрезПоследних(Дата,Отбор);
    Должность = Рег[0].Должность;
  3. TopicStarter Overlay
    Graf1000
    Offline

    Graf1000

    Регистрация:
    1 фев 2012
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Я не совсем понял зачем тут нужен отбор?
    Код:
    Отбор = новый Структура;
    Отбор.Вставить("Сотрудник",ВашСотрудник);
    Рег = РегистрыСведений.сотрудники.СрезПоследних(Дата,Отбор);// и зачем нужна дата?
    Должность = Рег[0].Должность;
  4. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    ну дак вам же надо должность 1 сотрудника? если не так, по опишите задачу по другому
    Дата для того, чтобы знать на какое число получить должность, можете не указывать, тогда будет самая последняя запись, вот и все
  5. TopicStarter Overlay
    Graf1000
    Offline

    Graf1000

    Регистрация:
    1 фев 2012
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Задача такая.
    На форме документа у меня есть Реквизит "РуководительПодразделения" Я его выбираю. Нажимаю на печать В макет программа должна подставить РуководительПодразделения и его должность(должна автоматом выйти)
  6. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Вам уже объяснили что нужно сделать. Этот код нужно добавить в формирование печатной формы.
  7. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    и чем вас мой алгоритм не устраивает? он ищет по конкретному сотруднику должность, вам просто свой алгоритм несколько поправить надо, иначе вы просто перебором все данные регистра выводите и все...
  8. TopicStarter Overlay
    Graf1000
    Offline

    Graf1000

    Регистрация:
    1 фев 2012
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    У меня познания не такие большие так,что про ваш код ни что не могу сказать. Я пробовал ваш код,но у меня выходит ошибка
    Код:
    Процедура Печать(ТабДок, Ссылка) Экспорт
    //{{_КОНСТРУКТОР_ПЕЧАТИ(Печать)
    Макет = Документы.СлужебноеЗадание.ПолучитьМакет("Печать");
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | СлужебноеЗадание.Дата,
    | СлужебноеЗадание.Работник.Ссылка.Код,
    | СлужебноеЗадание.ДатаОт,
    | СлужебноеЗадание.Комментарий,
    | СлужебноеЗадание.Номер,
    | СлужебноеЗадание.РуководительОрганизации,
    | СлужебноеЗадание.РуководительПодразделения,
    | СлужебноеЗадание.ЦельКомандировки,
    |   СлужебноеЗадание.Участник.(
    |	   Работник,
    |	   Работник.Ссылка.Код КАК ТН,
    |  КолДней,
    |  С,
    |  По,
    |  Специальность,
    |  СтруктураПодразделения,
    | СлужебноеЗадание.МестоНазначение,
    | СлужебноеЗадание.Основание,
    |			)
    |ИЗ
    | Документ.СлужебноеЗадание КАК СлужебноеЗадание
    |ГДЕ
    | СлужебноеЗадание.Ссылка В (&Ссылка)";
    Запрос.Параметры.Вставить("Ссылка", Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Шапка");
    ОбластьУчастник = Макет.ПолучитьОбласть("Участник");
    ОбластьТаблица = Макет.ПолучитьОбласть("Таблица");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ТабДок.Очистить();
    ВставлятьРазделительСтраниц = Ложь;
    Пока Выборка.Следующий() Цикл
    Если ВставлятьРазделительСтраниц Тогда
    ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;
    
    //Вывод информации
    ОбластьЗаголовок.Параметры.Заполнить(Выборка);// доработка
    ТабДок.Вывести(ОбластьЗаголовок, Выборка.Уровень());
    
    ВыборкаУчастник = Выборка.Участник.Выбрать();
    Пока ВыборкаУчастник.Следующий() Цикл
    ОбластьУчастник.Параметры.Заполнить(ВыборкаУчастник);
    ТабДок.Вывести(ОбластьУчастник, ВыборкаУчастник.Уровень());
    КонецЦикла;
    
    ОбластьТаблица.Параметры.Заполнить(Выборка);// доработка
    ТабДок.Вывести(ОбластьТаблица, Выборка.Уровень());
    
    // Выборка из регистра
    
    Отбор = новый Структура;
    Отбор.Вставить("Сотрудник",ВашСотрудник);
    Рег = РегистрыСведений.Сотрудники.СрезПоследних(Дата,Отбор);
    Должность = Рег[0].Должность;
    ОбластьПодвал.Параметры.Заполнить(Выборка);// доработка
    ТабДок.Вывести(ОбластьПодвал, Выборка.Уровень());
    ВставлятьРазделительСтраниц = Истина;
    КонецЦикла;
    //}}
    КонецПроцедуры
    
    
  9. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    чтобы мой код заработал надо:
    1. определиться со структурой вашего регистра сведений, приведите ее пожалуйста.
    2. ВашСотрудник - заменить на выборка.РуководительПодразделения.
    3. Правильно указать поле для отбора - это надо сделать исходя из 1 пункта.
    4. Если вам надо всегда только самую последнюю запись регистра, уберите параметр Дата
  10. TopicStarter Overlay
    Graf1000
    Offline

    Graf1000

    Регистрация:
    1 фев 2012
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Работаю в конфе 1С УНФ. При создание нового сотрудника (часть инфы хранится в спр Сотрудники) а часть в регистре сведений "Сотрудники".
    В регистреСведенийСотрудники (Хранится инфа о должности, структурной единицы и занимаемая ставка).
    Тоесть реквизит "РуководительПодразделения " ссылается на спр "Сотрудники".
    А из регистра сведений мне нужно только получить "Должность" этого сотрудника.
    Ну вроде вообщем как-то так
  11. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    ну дак так и будет, просто при отборе надо знать название поля из регистра. Я его в своем коде обозвала Сотрудник, а у вас оно может по другому называется... псмотрите сами и поправьте код по своим данным. И все будет работать.
  12. TopicStarter Overlay
    Graf1000
    Offline

    Graf1000

    Регистрация:
    1 фев 2012
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Хотелось бы узнать, для чего мы Рег = РегистрыСведений.сотрудники.СрезПоследних(Дата,Отбор); дату ставим для чего?
  13. Неназываемый
    Offline

    Неназываемый Опытный в 1С Команда форума

    Регистрация:
    2 фев 2007
    Сообщения:
    507
    Симпатии:
    7
    Баллы:
    29
    Что бы получить должность на дату документа.
  14. TopicStarter Overlay
    Graf1000
    Offline

    Graf1000

    Регистрация:
    1 фев 2012
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Попытался я код реализовать и вот, у меня получилось:
    Код:
    Отбор = новый Структура;
    Отбор.Вставить("РуководительПодразделения",Сотрудники);
    Рег = РегистрыСведений.Сотрудники.СрезПоследних(Дата,Отбор);
    Должность = Рег[0].Должность;
    Но прога мне говорит,что переменные дата и сотрудник не определенна. Пробовал ставить перед этим "Объект", но результат тот же
  15. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.978
    Симпатии:
    397
    Баллы:
    104
    Есть такое понятие как отладка.
  16. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    на этот вопрос я отвечала в посте №4

    Если вам нужна строго последняя запись регистра, то уберите параметр Дата. В противном случае определите его до передачи

    Что содержится в Сотрудники?
  17. Неназываемый
    Offline

    Неназываемый Опытный в 1С Команда форума

    Регистрация:
    2 фев 2007
    Сообщения:
    507
    Симпатии:
    7
    Баллы:
    29
    Я так понимаю это внешняя печ. форма?
    Если да то все обращения к реквизитам документа, судя листингу выше, через Ссылка. Т.е. Ссылка.Дата, Ссылка.РуководительПодразделения (а не Сотрудник)
  18. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    А так:
    Код:
    Отбор = новый Структура;
    Отбор.Вставить("Сотрудник", Выборка.РуководительПодразделения);
    Рег = РегистрыСведений.Сотрудники.СрезПоследних(Выборка.Дата,Отбор);
    Должность = Рег[0].Должность;
  19. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    2Неназываемый - Зачем? если код вызывается после запроса не проще ли вот так сделать?
    Код:
      Отбор = новый Структура;
    Отбор.Вставить("РуководительПодразделения",Выборка.РуководительПодразделения);
    Рег = РегистрыСведений.Сотрудники.СрезПоследних(,Отбор);
    Должность = Рег[0].Должность;
    только перед этим проверить, а получили ли значение из запроса


    З.Ы. опредили малость...
  20. Неназываемый
    Offline

    Неназываемый Опытный в 1С Команда форума

    Регистрация:
    2 фев 2007
    Сообщения:
    507
    Симпатии:
    7
    Баллы:
    29
    Верно.
    Думал Руководитель в шапке, не заметил что он в цикле выборки.

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