Автоматическая подстановка данных 1с 8.3

1. YA_1312004013 28.09.21 15:56 Сейчас в теме
Всем привет.
Суть проблемы заключается в следующем: есть справочник Сотрудники, в котором находятся реквизиты Наименование (стандартный, тип строка), Должность (тип СправочникСсылка.Должность), периодический регистр сведений Оклады: измерение Должность (СправочникСсылка.Должности) и ресурс РазмерОклада, оборотный регистр Продажи: измерение Сотрудник (СправочникСсылка.Сотрудники) и ресурс Стоимость(тип число), где хранится сумма продаж конкретного сотрудника. Так же есть документ НачисленияСотрудникам с табличной формой Начисления, в которой реквизиты Сотрудники (СправочникСсылка.Сотрудники), Должность (тип СправочникСсылка.Должность), Оклад (число) и СуммаПродаж (число).
Собственно сам вопрос: возможно ли, используя запросы, сделать автоматическую подстановку этих данных при выборе сотрудника в табличной части документа?
Заранее спасибо за ответы
По теме из базы знаний
Найденные решения
26. provadyuga 99 28.09.21 16:46 Сейчас в теме
Да, СрезПоследних возвращает Таблицу значений. Нужно еще обратиться к строке ТЗ.
&НаСервере
Функция ПолучитьОклад(Должность)
    Отбор = Новый Структура;
    Отбор.Вставить("Должность", Должность);
    тзДанные = РегистрыСведений.Оклады.СрезПоследних(Объект.Дата, Отбор);
	Если тзДанные.Количество() = 0 Тогда
		Возврат 0;
	Иначе
		Возврат тзДанные[0].РазмерОклада;
	КонецЕсли;	
КонецФункции	
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. lefthander 28.09.21 16:03 Сейчас в теме
(1)Конечно... если Вам нужен сам запрос, то того что Вы написали мало. В табличной части на поле сотрудник надо повесить ПриИзменении, или ОБработкаВыбора
6. YA_1312004013 28.09.21 16:05 Сейчас в теме
(3)Я и вешал ПриИзменении. По непонятной мне причине, не все функции работают. Посмотрите код выше, если не сложно.
8. lefthander 28.09.21 16:08 Сейчас в теме
(6)Что происходит когда выборка размера оклада пустая?
11. YA_1312004013 28.09.21 16:12 Сейчас в теме
(8)Ничего не происходит, просто пустое значение
15. lefthander 28.09.21 16:17 Сейчас в теме
(11)Потому и не выводит оклад. Сообщите что если выборка пустая то сообщение - оклад не установлен
16. YA_1312004013 28.09.21 16:21 Сейчас в теме
(15)В том-то и беда, что оклад установлен
2. homer_ 78 28.09.21 16:01 Сейчас в теме
4. YA_1312004013 28.09.21 16:04 Сейчас в теме
(2)по какой-то причине, не работает вывод Оклада. Так понимаю, вряд ли остальное заработает. Или я где-то ошибся?
&НаКлиенте
Процедура НачисленияСотрудникПриИзменении(Элемент)
	ТекСтрока = Элементы.Начисления.ТекущиеДанные;
	ТекСтрока.Должность = ПолучитьДолжность(ТекСтрока.Сотрудник);
	ТекСтрока.Оклад = ПолучитьОклад(ТекСтрока.Должность);
КонецПроцедуры 

&НаСервере
Функция ПолучитьДолжность (Сотрудник)  
	Возврат Сотрудник.Должность;
КонецФункции

&НаСервере
Функция ПолучитьОклад(Должность)
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ОкладыСрезПоследних.РазмерОклада КАК РазмерОклада
		|ИЗ
		|	РегистрСведений.Оклады.СрезПоследних(&Дата, Должность = &Должность) КАК ОкладыСрезПоследних";
	
	Запрос.УстановитьПараметр("Дата", Объект.Дата);
	Запрос.УстановитьПараметр("Должность", Должность);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Выборка = РезультатЗапроса.Выбрать();
	
	Если Выборка.Следующий() Тогда  
		Возврат Выборка.РазмерОклада;
	КонецЕсли;
	
КонецФункции
Показать
9. homer_ 78 28.09.21 16:08 Сейчас в теме
(4) ну надо немного поработать и включить отладчик и посмотреть что передается в параметрах.
5. пользователь 28.09.21 16:04
Сообщение было скрыто модератором.
...
7. dehro 5 28.09.21 16:07 Сейчас в теме
А что в текущих данных?
И есть ли по этой должности записи в регистре сведений ранее даты документа?
13. YA_1312004013 28.09.21 16:15 Сейчас в теме
(7)В ТекущихДанных ДанныеФормыЭлементКоллекции
10. provadyuga 99 28.09.21 16:11 Сейчас в теме
Можно период установки оклада в рег.сведений посмотреть. Дата документа должна быть позже периода установки оклада.
12. YA_1312004013 28.09.21 16:13 Сейчас в теме
(10)Дата документа позже записей в регистре сведений. Через запрос в Оклад передается 0, а должно 30.000
14. provadyuga 99 28.09.21 16:17 Сейчас в теме
&НаСервере
Функция ПолучитьОклад(Должность)
	Отбор = Новый Структура;
	Отбор.Вставить("Должность", Должность);
	Оклад = РегистрыСведений.Оклады.Получить(Объект.Дата, Отбор);
	Возврат Оклад;
КонецФункции
17. YA_1312004013 28.09.21 16:21 Сейчас в теме
(14)Все равно оклад пустой
18. provadyuga 99 28.09.21 16:23 Сейчас в теме
Немного ошибся, исправил:
&НаСервере
Функция ПолучитьОклад(Должность)
    Отбор = Новый Структура;
    Отбор.Вставить("Должность", Должность);
    РазмерОклада = РегистрыСведений.Оклады.Получить(Объект.Дата, Отбор).РазмерОклада;
    Возврат РазмерОклада;
КонецФункции
19. YA_1312004013 28.09.21 16:26 Сейчас в теме
(18) Тоже никак. Почему-то Оклад равен 0 и все.
20. provadyuga 99 28.09.21 16:29 Сейчас в теме
Да
РазмерОклада = РегистрыСведений.Оклады.Получить(Объект.Дата, Отбор).РазмерОклада;

выдает точно на дату.

Нужно использовать срез последних:
&НаСервере
Функция ПолучитьОклад(Должность)
    Отбор = Новый Структура;
    Отбор.Вставить("Должность", Должность);
    РазмерОклада = РегистрыСведений.Оклады.СрезПоследних(Объект.Дата, Отбор).РазмерОклада;
    Возврат РазмерОклада;
КонецФункции
21. YA_1312004013 28.09.21 16:36 Сейчас в теме
(20) Теперь ругается:
Поле объекта не обнаружено (РазмерОклада)
{Документ.НачислениеСотрудникам.Форма.ФормаДокумента.Форма(19)}: РазмерОклада = РегистрыСведений.Оклады.СрезПоследних(Объект.Дата, Отбор).РазмерОклада;
{Документ.НачислениеСотрудникам.Форма.ФормаДокумента.Форма(6)}: ТекСтрока.Оклад = ПолучитьОклад(ТекСтрока.Должность);
22. Yulia_Bird 28.09.21 16:37 Сейчас в теме
&НаСервере
Функция ПолучитьОклад(Должность)
    Отбор = Новый Структура;
    Отбор.Вставить("Должность", Должность);
    РазмерОклада = РегистрыСведений.Оклады.СрезПоследних(Объект.Дата, Отбор);
    Возврат РазмерОклада[0].РазмерОклада;
КонецФункции

Попробуйте так
23. YA_1312004013 28.09.21 16:40 Сейчас в теме
(22)Тоже ругает вас при проведении:
Индекс находится за границами массива
{Документ.НачислениеСотрудникам.Форма.ФормаДокумента.Форма(20)}: Возврат РазмерОклада[0].РазмерОклада;
{Документ.НачислениеСотрудникам.Форма.ФормаДокумента.Форма(6)}: ТекСтрока.Оклад = ПолучитьОклад(ТекСтрока.Должность);
25. Yulia_Bird 28.09.21 16:45 Сейчас в теме
(23)Вы уверены, что по этой должности вообще есть оклад на дату меньше или равно Объект.Дата? Данная ошибка говорит о том, что таких совпадений с таким отбором не выявлено.
27. YA_1312004013 28.09.21 16:48 Сейчас в теме
(25)Да, уверен, что есть оклады (ниже скрин). Документ же я пытаюсь провести на сегоднящнее число (28.09.2021).
Прикрепленные файлы:
29. Yulia_Bird 28.09.21 16:53 Сейчас в теме
(27) Возможно, проблема в должности. Какой тип значения должности вы передаете и какой тип стоит в регистре?
30. YA_1312004013 28.09.21 16:54 Сейчас в теме
(29)В документе тип Строка с неограниченной длинной. В регистре Оклады тип СправочникСсылка.Должности
31. Yulia_Bird 28.09.21 16:58 Сейчас в теме
(30) Установите тип не строку, а СправочникСсылка.Должности.

Или передавайте параметр должность так:

&НаКлиенте
Процедура НачисленияСотрудникПриИзменении(Элемент)
    ТекСтрока = Элементы.Начисления.ТекущиеДанные;
    Должность = ПолучитьДолжность(ТекСтрока.Сотрудник);
    ТекСтрока.Должность = Должность;
    ТекСтрока.Оклад = ПолучитьОклад(Должность);
КонецПроцедуры
32. YA_1312004013 28.09.21 17:01 Сейчас в теме
(31)Да... Понимаю... Не сердитесь, я еще только учусь, студент СПО.
24. dehro 5 28.09.21 16:44 Сейчас в теме
Ну пасьянс похоже сошёлся: нет там записей. Должность задвоилась или с датой траблы.
26. provadyuga 99 28.09.21 16:46 Сейчас в теме
Да, СрезПоследних возвращает Таблицу значений. Нужно еще обратиться к строке ТЗ.
&НаСервере
Функция ПолучитьОклад(Должность)
    Отбор = Новый Структура;
    Отбор.Вставить("Должность", Должность);
    тзДанные = РегистрыСведений.Оклады.СрезПоследних(Объект.Дата, Отбор);
	Если тзДанные.Количество() = 0 Тогда
		Возврат 0;
	Иначе
		Возврат тзДанные[0].РазмерОклада;
	КонецЕсли;	
КонецФункции	
Показать
28. YA_1312004013 28.09.21 16:52 Сейчас в теме
(26) Тоже 0 возвращает. Быть может вам всем скинуть конфигурацию? Возможно, звезды сойдутся и общая картина всей конфигурации даст вам представление проблемы?
33. provadyuga 99 28.09.21 17:21 Сейчас в теме
Быть может вам всем скинуть конфигурацию? Возможно, звезды сойдутся и общая картина всей конфигурации даст вам представление проблемы?
Да, скиньте пожалуйста на k1dajsjuda@yandex.ru Можно было бы взглянуть поближе на проблему. Или выложите и скиньте ссылку.
В документе тип Строка с неограниченной длинной. В регистре Оклады тип СправочникСсылка.Должности
Это так по заданию? Вообще то в документе по идее тоже должен быть СправочникСсылка.Должности.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот