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

  • Автор темы aimp
  • Дата начала
A

aimp

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

8.0
 

Вложения

  • ________.rar
    107,1 КБ · Просмотры: 130
D

Darlock

Код:
Процедура СотрудникПриИзменении(Элемент)

Язык = Сотрудник.Язык;
КонецПроцедуры

Часы по сотруднику?
Из документа в регистр или наоборот? Какая структура регистра?
 
A

aimp

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

Вложения

  • 1.jpg
    1.jpg
    113,4 КБ · Просмотры: 637
D

Darlock

Запросом. Выгружаете массив сотрудников в таблицу значений, составляете запрос к регистру сведений с группировкой по сотрудникам и часам. потом загружаете обратно в таблицу документа.
 
A

aimp

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

Darlock

"Практическое пособие разработчика" М.Радченко
 
A

aimp

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

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

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

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


КонецПроцедуры

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

Запросом. Выгружаете массив сотрудников в таблицу значений, составляете запрос к регистру сведений с группировкой по сотрудникам и часам. потом загружаете обратно в таблицу документа.

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

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

Darlock

1) Выгружаете массив (будет условием для запроса)

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

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

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

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

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

aimp

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

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

Darlock

А в запросе где параметр &МассивСотрудников? Это запрос к чему к чему? к документ или к регистру?
 
A

aimp

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

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

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

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

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

Вложения

  • 1.jpg
    1.jpg
    91,1 КБ · Просмотры: 665
  • 2.jpg
    2.jpg
    49,1 КБ · Просмотры: 260
  • 3.jpg
    3.jpg
    25,9 КБ · Просмотры: 252
  • 4.jpg
    4.jpg
    34,7 КБ · Просмотры: 607
D

Darlock

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

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

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

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

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

Начинаем сначала и по-порядку.

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

aimp

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

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

Вложения

  • 1_1.jpg
    1_1.jpg
    29,7 КБ · Просмотры: 523
D

Darlock

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

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

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

aimp

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

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

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

правильно?

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

Darlock

1) Почему каждый раз запрос то к документу, то к регистру? Часы нормы хранятся в регистре (если я правильно понял), значит запрос должен быть к регистру, а не к документу.
2) Где взаимосвязь между сотрудником и его графиком?
 
A

aimp

1) Почему каждый раз запрос то к документу, то к регистру? Часы нормы хранятся в регистре (если я правильно понял), значит запрос должен быть к регистру, а не к документу.

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

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

Вложения

  • 1_2.jpg
    1_2.jpg
    86,1 КБ · Просмотры: 498
D

Darlock

:blush:

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

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

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

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

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

aimp

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

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

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


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

Вложения

  • 2_3.jpg
    2_3.jpg
    31,2 КБ · Просмотры: 510
  • 2_4.jpg
    2_4.jpg
    26,4 КБ · Просмотры: 253
A

aimp

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

Вложения

  • ________.rar
    112,2 КБ · Просмотры: 156
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!