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

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

aimp

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

8.0
 

Вложения

Darlock

Well-known member
04.01.2008
560
1
#2
Код:
Процедура СотрудникПриИзменении(Элемент)

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

aimp

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

Вложения

  • 206.7 КБ Просмотры: 170

Darlock

Well-known member
04.01.2008
560
1
#4
Запросом. Выгружаете массив сотрудников в таблицу значений, составляете запрос к регистру сведений с группировкой по сотрудникам и часам. потом загружаете обратно в таблицу документа.
 
A

aimp

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

Darlock

Well-known member
04.01.2008
560
1
#6
"Практическое пособие разработчика" М.Радченко
 
A

aimp

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

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

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

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


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

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

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

Darlock

Well-known member
04.01.2008
560
1
#8
1) Выгружаете массив (будет условием для запроса)

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

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

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

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

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

aimp

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

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

Darlock

Well-known member
04.01.2008
560
1
#10
А в запросе где параметр &МассивСотрудников? Это запрос к чему к чему? к документ или к регистру?
 
A
#11
на первом скрине, какие ещё поля нужно выбрать. В разделе таблица ни где не загарается параметры виртуальной таблицы, для того чтобы ввести Сотрудник В (&МассивСотрудников)

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

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

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

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

Вложения

  • 166.3 КБ Просмотры: 135
  • 91.6 КБ Просмотры: 130
  • 48.1 КБ Просмотры: 118
  • 64.9 КБ Просмотры: 115

Darlock

Well-known member
04.01.2008
560
1
#12
на первом скрине, какие ещё поля нужно выбрать. В разделе таблица ни где не загарается параметры виртуальной таблицы, для того чтобы ввести Сотрудник В (&МассивСотрудников)

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

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

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

нужны ли ещё какие-то пункты?
Начинаем сначала и по-порядку.

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

Вложения

  • 54.4 КБ Просмотры: 13

Darlock

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

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

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

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

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

правильно?

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

Darlock

Well-known member
04.01.2008
560
1
#16
1) Почему каждый раз запрос то к документу, то к регистру? Часы нормы хранятся в регистре (если я правильно понял), значит запрос должен быть к регистру, а не к документу.
2) Где взаимосвязь между сотрудником и его графиком?
 
A
#17
1) Почему каждый раз запрос то к документу, то к регистру? Часы нормы хранятся в регистре (если я правильно понял), значит запрос должен быть к регистру, а не к документу.
ну да, только я не понимаю ход ваших мыслей, и по этому пытаюсь тупо следовать тому что вы говорите. Вы говорите слово, я иду в родченко, исчу его, стараюсь додумать что вы имели в виду. Как я понял, Конструктор запроса вроде так работает, я выбираю все поля из взаимодействующих объектов, потом провожу соответствия и согласно соответствиям суммирую необходиме данные и вывожу их в документе. Возможно вы так и говорите, просто у меня много чего опущенно из-за пробелов в знаниях, мне даже не у кого спросить кроме вас. Курсовую сдавать в четверг надо уже готовую, так что пожалуйста, говорите как можно подробнее в своих сообщениях и больше, чтоб дело сдвинулось с мёртовой точки, а то мне не успеть
Какие поля я должен выбрать на скрине?

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

Вложения

  • 159.2 КБ Просмотры: 10

Darlock

Well-known member
04.01.2008
560
1
#18
:blush:

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

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

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

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

3) выгружаем обратно в документ.
 
A
#19
График работы - реквизит Сотрудника? Если да, то получаем данные в 2 этапа (можно пакетом запросов):
нет, есть справочник, который хранит в себе предопределённые значения. Регистр сведений получает значение графика ссылаясь на справочник

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


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

Вложения

  • 57.7 КБ Просмотры: 12
  • 50.6 КБ Просмотры: 11