• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

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

Darlock

Вариант номер Раз:

Если платформа 8.1 и умеет работать с пакетами запросов

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

Вариант Номер 2:

И в 8.0 должен сработать

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

После всего этого

Код:
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Результат = Запрос.Выполнить();
Зарплата.Очистить();
Зарплата.Загрузить(Результат.Выгрузить());
 
A

aimp

я достал версию 8.1
К сожалению не получается, вводил и то и то, ошибок нету, но и в документе поля не заполняются
В 8.1 не могу запустить проект, так как базу не получается переконвертировать, может из за того что учебная
 
D

Darlock

нет. чтоб сконвертировать БД необходимо в конфигураторе открывать БД
 
A

aimp

этот код нало вставлять в модуль документа в процедуру Процедура ОбработкаПроведения(Отказ, Режим)?

переконвертировал, но ничего не изменилось
 
D

Darlock

этот код нало вставлять в модуль документа в процедуру Процедура ОбработкаПроведения(Отказ, Режим)?

переконвертировал, но ничего не изменилось

Можно вставлять куда угодно.

Я оставил там где у вас было. при проведении заполняется колонка "РабочихЧасов", как-то так она называется
 

Вложения

  • ________.rar
    126,6 КБ · Просмотры: 90
A

aimp

понятно, заполнение поля происходи при записи или проведении. Но теперь из за этого, или не из-за это, но все другие операции вычислени не проходят из-за того, что другие поля это поле считают пустым, и по этому умножая на пустоту в других полях пустота

пытаюсь сделать так, чтобы график работы сотрудника загружался автоматически, как сделать так, чтобы вбить значение Реквизит.График
СтрокаТабличнойЧасти.ГрафикРаботы = Справочники.Сотрудники.НайтиПоРеквизиту(.График);
 
D

Darlock

пытаюсь сделать так, чтобы график работы сотрудника загружался автоматически, как сделать так, чтобы вбить значение Реквизит.График
СтрокаТабличнойЧасти.ГрафикРаботы = Справочники.Сотрудники.НайтиПоРеквизиту(.График);

все расчеты в запрос вставь и вынеси из "проведения" в кнопку, "Рассчитать"
 
A

aimp

вот код в форме документа

Код:
Процедура ЗарплатаСотрудникПриИзменении(Элемент)
СтрокаТабличнойЧасти = ЭлементыФормы.Зарплата.ТекущиеДанные;
СтрокаТабличнойЧасти.ТарифнаяСтавка = Зарплата(Дата, Элемент.Значение);
РассчитатьКВыплате(СтрокаТабличнойЧасти);

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


Процедура Кнопка1Нажатие(Элемент)




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




Запрос.УстановитьПараметр("Ссылка", Ссылка);
Результат = Запрос.Выполнить();
Зарплата.Очистить();
Зарплата.Загрузить(Результат.Выгрузить());


СтрокаТабличнойЧасти = ЭлементыФормы.Зарплата.ТекущиеДанные;
СтрокаТабличнойЧасти.Начисленно = СтрокаТабличнойЧасти.ТарифнаяСтавка * СтрокаТабличнойЧасти.КоличествоРабочихЧасов; //<------------Ошибка----
РассчитатьКВыплате(СтрокаТабличнойЧасти);

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

Стрелочкой обозначена строка с ошибкой
Значение не является значением объектного типа (Начисленно)
СтрокаТабличнойЧасти.Начисленно = СтрокаТабличнойЧасти.ТарифнаяСтавка * СтрокаТабличнойЧасти.КоличествоРабочихЧасов;
 
D

Darlock

СтрокаТабличнойЧасти = ЭлементыФормы.Зарплата.ТекущиеДанные; СтрокаТабличнойЧасти.Начисленно = СтрокаТабличнойЧасти.ТарифнаяСтавка * СтрокаТабличнойЧасти.КоличествоРабочихЧасов; //<------------Ошибка---- РассчитатьКВыплате(СтрокаТабличнойЧасти);

Убери "ЭлементыФормы"
 
A

aimp

убрал, потом стал ругаться на СтрокаТабличнойЧасти
её убрал, поменял на зарплата
потом стал ругаться на РассчитатьКВыплате(СтрокаТабличнойЧасти);
и это убрал, потом стал ругаться так Поле объекта не обнаружено (Начисленно)
Зарплата.Начисленно = Зарплата.ТарифнаяСтавка * Зарплата.КоличествоРабочихЧасов;
 
D

Darlock

Слушай, открой секрет. Отладчиком пользовался?

1) Смени имя табличной части;
2) Измени имя процедуры (Зарплата)
3) ЗАПОМНИ: Никогда не давай одинаковые имена разным сущностям в коде

Есть правило в программировании в 1С: Никогда не давать имена своих переменных похожих на платформенные
 
A

aimp

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




Запрос.УстановитьПараметр("Ссылка", Ссылка);
Результат = Запрос.Выполнить();
Зарплата.Очистить();
Зарплата.Загрузить(Результат.Выгрузить());


СтрокаТабличнойЧасти = Зарплата.ТекущиеДанные; <-------------------------------------суда ругается----------
СтрокаТабличнойЧасти.Начисленно = СтрокаТабличнойЧасти.ТарифнаяСтавка * СтрокаТабличнойЧасти.КоличествоРабочихЧасов;
РассчитатьКВыплате(СтрокаТабличнойЧасти);

я переименовал Название документа на ЗарплатаСотрудников

он ТекущиеДанные за поле принимает
 
D

Darlock

у тебя функция есть которая зовется "Зарплата" или ее переименуй или табличную часть переименуй
 
A

aimp

переименовал функцию

Код:
Процедура ЗарплатаСотрудникПриИзменении(Элемент)
СтрокаТабличнойЧасти = ЭлементыФормы.Зарплата.ТекущиеДанные;
СтрокаТабличнойЧасти.ТарифнаяСтавка = РасчётЗарплата(Дата, Элемент.Значение);
РассчитатьКВыплате(СтрокаТабличнойЧасти);

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

Процедура ЗарплатаКоличествоРабочихЧасовПриИзменении(Элемент)
СтрокаТабличнойЧасти = ЭлементыФормы.Зарплата.ТекущиеДанные;
РассчитатьКВыплате(СтрокаТабличнойЧасти);

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


Процедура Кнопка1Нажатие(Элемент)

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




Запрос.УстановитьПараметр("Ссылка", Ссылка);
Результат = Запрос.Выполнить();
Зарплата.Очистить();
Зарплата.Загрузить(Результат.Выгрузить());

СтрокаТабличнойЧасти = РасчётЗарплата.ТекущиеДанные;
СтрокаТабличнойЧасти.Начисленно = СтрокаТабличнойЧасти.ТарифнаяСтавка * СтрокаТабличнойЧасти.КоличествоРабочихЧасов; //<------------Ошибка----
РассчитатьКВыплате(СтрокаТабличнойЧасти); 

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

если я оставляю ЭлементыФормы Ошибка: значение не является значением объектного типа (Начисленно)
Если убираю, то на ТекущиеДанные
 
D

Darlock

СтрокаТабличнойЧасти = Зарплата.ТекущиеДанные;
СтрокаТабличнойЧасти.Начисленно = СтрокаТабличнойЧасти.ТарифнаяСтавка * СтрокаТабличнойЧасти.КоличествоРабочихЧасов;
РассчитатьКВыплате(СтрокаТабличнойЧасти);
 
A

aimp

я так уже пробовал, он текущие данные за поле принимает: Поле объекта не обнаружено (ТекущиеДанные)
я даже РасчётЗарплата вместо зарплаты вставлял, ну и по разному, просто на шару, комбинации которые могли бы быть, не получается
 
D

Darlock

я так уже пробовал, он текущие данные за поле принимает: Поле объекта не обнаружено (ТекущиеДанные)
я даже РасчётЗарплата вместо зарплаты вставлял, ну и по разному, просто на шару, комбинации которые могли бы быть, не получается

На шару не надо. выкладывай БД. через час-полтора смогу посмотреть
 
D

Darlock

СтрокаТабличнойЧасти = РасчётЗарплата.ТекущиеДанные;
СтрокаТабличнойЧасти.Начисленно = СтрокаТабличнойЧасти.ТарифнаяСтавка * СтрокаТабличнойЧасти.КоличествоРабочихЧасов; //<------------Ошибка----
РассчитатьКВыплате(СтрокаТабличнойЧасти);

Сбил с толку строкой "РасчётЗарплата.ТекущиеДанные;"

Заключи в цикл:
Код:
Для Каждого СтрокаТабличнойЧасти Из Зарплата Цикл
СтрокаТабличнойЧасти.Начисленно = СтрокаТабличнойЧасти.ТарифнаяСтавка * СтрокаТабличнойЧасти.КоличествоРабочихЧасов; РассчитатьКВыплате(СтрокаТабличнойЧасти);
КонецЦикла;
 
Мы в соцсетях:

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