вывод количества рабочих часов из регистра сведений в документ

Тема в разделе "1C и всё что с ней связано", создана пользователем aimp, 6 июн 2010.

  1. aimp

    aimp Гость

    помогите пожалуйста, очень надо
    как в регистре сведений График работы подсчитать сумму колонки часы в документе начисление зарплаты, чтобы потом уможить на часовую ставку.
    И ещё у меня, у меня персонал который содержит реквизит Язык, как сделать так, чтобы в документе, когда я в поле выбора выбираю Ф.И.О. автоматически вводилось в другом поле выбора Реквизит язык.

    8.0
     

    Вложения:

    • ________.rar
      Размер файла:
      107,1 КБ
      Просмотров:
      8
  2. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    Код ( (Unknown Language)):
    Процедура СотрудникПриИзменении(Элемент)

    Язык = Сотрудник.Язык;
    КонецПроцедуры
    Часы по сотруднику?
    Из документа в регистр или наоборот? Какая структура регистра?
     
  3. aimp

    aimp Гость

    При заполнении документа Зарплата, надо в поле Количесвто рабочих часов вывести сумму значений ресурса Часы регистра сведений График Работы за то время, которое указано в Документе Зарплата ОтЧисла и До Числа
     

    Вложения:

    • 1.jpg
      1.jpg
      Размер файла:
      206,7 КБ
      Просмотров:
      170
  4. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    Запросом. Выгружаете массив сотрудников в таблицу значений, составляете запрос к регистру сведений с группировкой по сотрудникам и часам. потом загружаете обратно в таблицу документа.
     
  5. aimp

    aimp Гость

    :fuckyou: а можете книжку посоветовать, где есть что-то похожее :crash:
     
  6. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    "Практическое пособие разработчика" М.Радченко
     
  7. aimp

    aimp Гость

    как же всё тяжело
    мы по этому учебнику 15 лаб сделали
    на странице 349 есть то что мне нужно, но оно слишком далеко от того, чтоб я смог это реализовать

    Код ( (Unknown Language)):
    Процедура ОбработкаПроведения(Отказ, Режим)
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    Для Каждого ТекСтрокаЗарплата Из Зарплата Цикл
    // регистр Начисления
    Движение = Движения.Начисления.Добавить();
    Движение.Сторно = Ложь;
    Движение.ВидРасчета = ТекСтрокаЗарплата.ВидыНачислений;
    Движение.ПериодДействияНачало = ТекСтрокаЗарплата.ОтЧисла;
    Движение.ПериодДействияКонец = ТекСтрокаЗарплата.ДоЧисла;
    Движение.ПериодРегистрации = ТекСтрокаЗарплата.ОтЧисла;
    Движение.БазовыйПериодНачало = ТекСтрокаЗарплата.ОтЧисла;
    Движение.БазовыйПериодКонец = ТекСтрокаЗарплата.ДоЧисла;
    Движение.Сотрудник = ТекСтрокаЗарплата.Сотрудник;
    Движение.ГрафикРаботы = ТекСтрокаЗарплата.КоличествоРабочихЧасов;
    Движение.Зарплата = ТекСтрокаЗарплата.КВыплате;
    КонецЦикла;
    // записываем движения регистров
    Движения.Начисления.Записать();
    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

    Запрос = Новый Запрос(
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |   ЗарплатаЗарплата.Сотрудник
    |ИЗ
    |   Документ. Зарплата. Зарплата КАК ЗарплатаЗарплата.Сотрудник
    |ГДЕ
    |   ЗарплатаЗарплата.Ссылка = &ТекущийДокумент");
    Запрос.УстановитьПараметр("ТекущийДокумент", Ссылка);

    ТаблЗнач = Запрос.Выполнить().Выгрузить();
    МассивСотрудников = ТаблЗнач.ВыгрузитьКолонку("Сотрудник");
    СписокСотрудников = Новый СписокЗначений;
    СписокСотрудников.ЗагрузитьЗначения(МассивСотрудников);


    КонецПроцедуры
    это то что я сделал, тыкните пожалуйста пальцем, что дальше делать.

    Выгружаете массив сотрудников в таблицу значений - это сделал

    Составляете запрос к регистру сведений с группировкой по сотрудникам и часам. потом загружаете обратно в таблицу документа - как это сделать?
     
  8. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    1) Выгружаете массив (будет условием для запроса)

    МассивСотрудников = ИмяТабличнойЧасти.ВыгрузитьКолонку("Сотрудники");

    в свойствах виртуальной таблицы указываете:

    "Сотрудник В (&МассивСотрудников)".

    Запрос.УстановитьПараметр("МассивСотрудников", МассивСотрудников);

    ИмяТабличнойЧасти.Загрузить(Запрос.Выполнить().Выгрузить());
     
  9. aimp

    aimp Гость

    ничё не получается
    Код ( (Unknown Language)):
        Запрос = Новый Запрос(
    "ВЫБРАТЬ
    |   Зарплата.Сотрудник,
    |   Зарплата.КоличествоРабочихЧасов,
    |   Зарплата.ОтЧисла,
    |   Зарплата.ДоЧисла,
    |   Зарплата.КВыплате;
    |ИЗ
    |   Документ.Зарплата
    |   РегистрыСведений.ГрафикиРаботы
    |   ГДЕ
    |   Зарплата.Ссылка = &ТекущийДокумент");

    //  Зарплата.Сотрудник В (&МассивСотрудников);
    Запрос.УстановитьПараметр("МассивСотрудников", МассивСотрудников);
    ТаблЗнач = Зарплата.Загрузить(Запрос.Выполнить().Выгрузить());
    МассивСотрудников = Зарплата.ВыгрузитьКолонку("Сотрудники");
    СписокСотрудников = Новый СписокЗначений;                
    СписокСотрудников.ЗагрузитьЗначения(МассивСотрудников);
     
  10. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    А в запросе где параметр &МассивСотрудников? Это запрос к чему к чему? к документ или к регистру?
     
  11. aimp

    aimp Гость

    на первом скрине, какие ещё поля нужно выбрать. В разделе таблица ни где не загарается параметры виртуальной таблицы, для того чтобы ввести Сотрудник В (&МассивСотрудников)

    на втором скрине, я думаю что всё правильно сделал

    на третьем, вы сказали что Выгружаете массив (будет условием для запроса) какие поля туда вбить?

    на четвёртом, думаю что практически всё правильно

    нужны ли ещё какие-то пункты?
     

    Вложения:

    • 1.jpg
      1.jpg
      Размер файла:
      166,3 КБ
      Просмотров:
      135
    • 2.jpg
      2.jpg
      Размер файла:
      91,6 КБ
      Просмотров:
      130
    • 3.jpg
      3.jpg
      Размер файла:
      48,1 КБ
      Просмотров:
      118
    • 4.jpg
      4.jpg
      Размер файла:
      64,9 КБ
      Просмотров:
      115
  12. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    Начинаем сначала и по-порядку.

    1) Условие "Сотрудник В" если не получается указать в параметрах вирт.таблицы, значит указываем на закладке "Условия"
    2) Что в ресурсе "Часы" хранится? А что хранится в "КоличествоЧасов" в документе?
    3) массив - полностью колонка "Сотрудники" из документа (ВыгрузитьКолонку("ИмяКолонки") вернет массив)
     
  13. aimp

    aimp Гость

    сделал
    Ресурс "Часы" относиться к РегистрСведений.ГрафикРаботы.Часы, у меня каждый день месяца есть в этом регистре, а в ресурсе часы отображается в день сколько чаосов человек работал. Сумму часов надо вставить в документ в поле "КоличествоЧасов" за указынный период времени который указан в документе документа
    МассивСотрудники = СсылкаНаДокумент.Зарплата.ВыгрузитьКолонку("Сотрудник"); <------- так писать? Родченко перекопал и не нашёл ничего связанное с выгрузить в Конструкторе запроса, он везде пишется за его пределами
     

    Вложения:

    • 1_1.jpg
      1_1.jpg
      Размер файла:
      54,4 КБ
      Просмотров:
      13
  14. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    СсылкаНаДокумент - я так понимаю ссылка на текущий документ. И ее не надо указывать.

    Теперь получившийся массив "МассивСотрудников" передаете в запрос ("УстановитьПараметр"); Выполняете запрос и результат загружаете обратно в таблицу к себе:

    Код ( (Unknown Language)):
    Зарплата.Загрузить(Запрос.Выполнить().Выгрузить());
     
  15. aimp

    aimp Гость

    Запрос = Новый Запрос(

    "ВЫБРАТЬ
    | ЗарплатаЗарплата.Сотрудник
    |ИЗ
    | Документ.Зарплата.Зарплата КАК ЗарплатаЗарплата
    |ГДЕ
    | ЗарплатаЗарплата.Сотрудник В (&МассивСотрудников)"

    МассивСотрудники = Зарплата.ВыгрузитьКолонку("Сотрудник");
    МассивСотрудники = Зарплата.Загрузить(Запрос.Выполнить().Выгрузить());

    правильно?

    З.Ы.. Ресурс "Часы" относиться к РегистрСведений.ГрафикРаботы.Часы, у меня каждый день месяца есть в этом регистре, а в ресурсе часы отображается в день сколько чаосов человек работал. Сумму часов надо вставить согласно выбранному Графику РАботы в документ в поле "КоличествоЧасов" за указынный период времени который указан в документе документа
     
  16. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    1) Почему каждый раз запрос то к документу, то к регистру? Часы нормы хранятся в регистре (если я правильно понял), значит запрос должен быть к регистру, а не к документу.
    2) Где взаимосвязь между сотрудником и его графиком?
     
  17. aimp

    aimp Гость

    ну да, только я не понимаю ход ваших мыслей, и по этому пытаюсь тупо следовать тому что вы говорите. Вы говорите слово, я иду в родченко, исчу его, стараюсь додумать что вы имели в виду. Как я понял, Конструктор запроса вроде так работает, я выбираю все поля из взаимодействующих объектов, потом провожу соответствия и согласно соответствиям суммирую необходиме данные и вывожу их в документе. Возможно вы так и говорите, просто у меня много чего опущенно из-за пробелов в знаниях, мне даже не у кого спросить кроме вас. Курсовую сдавать в четверг надо уже готовую, так что пожалуйста, говорите как можно подробнее в своих сообщениях и больше, чтоб дело сдвинулось с мёртовой точки, а то мне не успеть
    Какие поля я должен выбрать на скрине?

    это от старой версии отсатлось, сейчас там ГрафикиРаботыСотрудников, выбирая к примеру у Иванова график работы Иванов, загружаются из РегистраСведений только его график, т.е. дни и количество часов.
     

    Вложения:

    • 1_2.jpg
      1_2.jpg
      Размер файла:
      159,2 КБ
      Просмотров:
      10
  18. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    :blush:

    был тут скрин с актуальной структурой?

    График работы - реквизит Сотрудника? Если да, то получаем данные в 2 этапа (можно пакетом запросов):

    1) запрос получаете все возможные графики сотрудников документа

    2) Получаем часы по сотрудникам документа - запрос к регистру сведений с условием "...МассивСотрудников" и условие ГрафикРаботы в (результат Шага 1)

    3) выгружаем обратно в документ.
     
  19. aimp

    aimp Гость

    нет, есть справочник, который хранит в себе предопределённые значения. Регистр сведений получает значение графика ссылаясь на справочник

    какой? там где я 4 выкладывал? я новый сделла, я думаю он правильный
    Мы должны выбирать все поля которые находятся и в документе и в регистре? или к примеру реквизит зарплата можно не брать, так как не замешан в передачах значение между объектами?


    в каком окне конфигуратора нужно проводить суммирование часы?
    и как потом эти часы засунуть в документ?
     

    Вложения:

    • 2_3.jpg
      2_3.jpg
      Размер файла:
      57,7 КБ
      Просмотров:
      12
    • 2_4.jpg
      2_4.jpg
      Размер файла:
      50,6 КБ
      Просмотров:
      11
  20. aimp

    aimp Гость

    вот моя последняя версия
     

    Вложения:

    • ________.rar
      Размер файла:
      112,2 КБ
      Просмотров:
      8
Загрузка...

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