Автоматическая подстановка данных 1с 8.3
Всем привет.
Суть проблемы заключается в следующем: есть справочник Сотрудники, в котором находятся реквизиты Наименование (стандартный, тип строка), Должность (тип СправочникСсылка.Должность), периодический регистр сведений Оклады: измерение Должность (СправочникСсылка.Должности) и ресурс РазмерОклада, оборотный регистр Продажи: измерение Сотрудник (СправочникСсылка.Сотрудники) и ресурс Стоимость(тип число), где хранится сумма продаж конкретного сотрудника. Так же есть документ НачисленияСотрудникам с табличной формой Начисления, в которой реквизиты Сотрудники (СправочникСсылка.Сотрудники), Должность (тип СправочникСсылка.Должность), Оклад (число) и СуммаПродаж (число).
Собственно сам вопрос: возможно ли, используя запросы, сделать автоматическую подстановку этих данных при выборе сотрудника в табличной части документа?
Заранее спасибо за ответы
Суть проблемы заключается в следующем: есть справочник Сотрудники, в котором находятся реквизиты Наименование (стандартный, тип строка), Должность (тип СправочникСсылка.Должность), периодический регистр сведений Оклады: измерение Должность (СправочникСсылка.Должности) и ресурс РазмерОклада, оборотный регистр Продажи: измерение Сотрудник (СправочникСсылка.Сотрудники) и ресурс Стоимость(тип число), где хранится сумма продаж конкретного сотрудника. Так же есть документ НачисленияСотрудникам с табличной формой Начисления, в которой реквизиты Сотрудники (СправочникСсылка.Сотрудники), Должность (тип СправочникСсылка.Должность), Оклад (число) и СуммаПродаж (число).
Собственно сам вопрос: возможно ли, используя запросы, сделать автоматическую подстановку этих данных при выборе сотрудника в табличной части документа?
Заранее спасибо за ответы
По теме из базы знаний
- Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2
- Создание в 1С 7.7 XML в формате EnterpriseData (универсальный формат обмена), версия 1.5. Инструкции и примеры переноса данных из устаревшей конфигурации 1С 7.7 в любую современную 1С 8.3, поддерживающую EnterpriseData, через Конвертацию данных 3
- Ошибка загрузки большого архива 1Cv8.dt в PostgresSQL на платформе 1С 8.3.19
- Автоматическая подстановка электронной почты в чек (Розница, УТ, УНФ)
- Автоматическая подстановка адреса электронной почты в чек, 1С: Розница
Найденные решения
Да, СрезПоследних возвращает Таблицу значений. Нужно еще обратиться к строке ТЗ.
&НаСервере
Функция ПолучитьОклад(Должность)
Отбор = Новый Структура;
Отбор.Вставить("Должность", Должность);
тзДанные = РегистрыСведений.Оклады.СрезПоследних(Объект.Дата, Отбор);
Если тзДанные.Количество() = 0 Тогда
Возврат 0;
Иначе
Возврат тзДанные[0].РазмерОклада;
КонецЕсли;
КонецФункции
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2)по какой-то причине, не работает вывод Оклада. Так понимаю, вряд ли остальное заработает. Или я где-то ошибся?
&НаКлиенте
Процедура НачисленияСотрудникПриИзменении(Элемент)
ТекСтрока = Элементы.Начисления.ТекущиеДанные;
ТекСтрока.Должность = ПолучитьДолжность(ТекСтрока.Сотрудник);
ТекСтрока.Оклад = ПолучитьОклад(ТекСтрока.Должность);
КонецПроцедуры
&НаСервере
Функция ПолучитьДолжность (Сотрудник)
Возврат Сотрудник.Должность;
КонецФункции
&НаСервере
Функция ПолучитьОклад(Должность)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОкладыСрезПоследних.РазмерОклада КАК РазмерОклада
|ИЗ
| РегистрСведений.Оклады.СрезПоследних(&Дата, Должность = &Должность) КАК ОкладыСрезПоследних";
Запрос.УстановитьПараметр("Дата", Объект.Дата);
Запрос.УстановитьПараметр("Должность", Должность);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.РазмерОклада;
КонецЕсли;
КонецФункции
Показать
Немного ошибся, исправил:
&НаСервере
Функция ПолучитьОклад(Должность)
Отбор = Новый Структура;
Отбор.Вставить("Должность", Должность);
РазмерОклада = РегистрыСведений.Оклады.Получить(Объект.Дата, Отбор).РазмерОклада;
Возврат РазмерОклада;
КонецФункции
Да
выдает точно на дату.
Нужно использовать срез последних:
РазмерОклада = РегистрыСведений.Оклады.Получить(Объект.Дата, Отбор).РазмерОклада;
выдает точно на дату.
Нужно использовать срез последних:
&НаСервере
Функция ПолучитьОклад(Должность)
Отбор = Новый Структура;
Отбор.Вставить("Должность", Должность);
РазмерОклада = РегистрыСведений.Оклады.СрезПоследних(Объект.Дата, Отбор).РазмерОклада;
Возврат РазмерОклада;
КонецФункции
(20) Теперь ругается:
Поле объекта не обнаружено (РазмерОклада)
{Документ.НачислениеСотрудникам.Форма.ФормаДокумента.Форма(19)}: РазмерОклада = РегистрыСведений.Оклады.СрезПоследних(Объект.Дата, Отбор).РазмерОклада;
{Документ.НачислениеСотрудникам.Форма.ФормаДокумента.Форма(6)}: ТекСтрока.Оклад = ПолучитьОклад(ТекСтрока.Должность);
Поле объекта не обнаружено (РазмерОклада)
{Документ.НачислениеСотрудникам.Форма.ФормаДокумента.Форма(19)}: РазмерОклада = РегистрыСведений.Оклады.СрезПоследних(Объект.Дата, Отбор).РазмерОклада;
{Документ.НачислениеСотрудникам.Форма.ФормаДокумента.Форма(6)}: ТекСтрока.Оклад = ПолучитьОклад(ТекСтрока.Должность);
&НаСервере
Функция ПолучитьОклад(Должность)
Отбор = Новый Структура;
Отбор.Вставить("Должность", Должность);
РазмерОклада = РегистрыСведений.Оклады.СрезПоследних(Объект.Дата, Отбор);
Возврат РазмерОклада[0].РазмерОклада;
КонецФункции
Попробуйте так
(22)Тоже ругает вас при проведении:
Индекс находится за границами массива
{Документ.НачислениеСотрудникам.Форма.ФормаДокумента.Форма(20)}: Возврат РазмерОклада[0].РазмерОклада;
{Документ.НачислениеСотрудникам.Форма.ФормаДокумента.Форма(6)}: ТекСтрока.Оклад = ПолучитьОклад(ТекСтрока.Должность);
Индекс находится за границами массива
{Документ.НачислениеСотрудникам.Форма.ФормаДокумента.Форма(20)}: Возврат РазмерОклада[0].РазмерОклада;
{Документ.НачислениеСотрудникам.Форма.ФормаДокумента.Форма(6)}: ТекСтрока.Оклад = ПолучитьОклад(ТекСтрока.Должность);
(30) Установите тип не строку, а СправочникСсылка.Должности.
Или передавайте параметр должность так:
Или передавайте параметр должность так:
&НаКлиенте
Процедура НачисленияСотрудникПриИзменении(Элемент)
ТекСтрока = Элементы.Начисления.ТекущиеДанные;
Должность = ПолучитьДолжность(ТекСтрока.Сотрудник);
ТекСтрока.Должность = Должность;
ТекСтрока.Оклад = ПолучитьОклад(Должность);
КонецПроцедуры
Да, СрезПоследних возвращает Таблицу значений. Нужно еще обратиться к строке ТЗ.
&НаСервере
Функция ПолучитьОклад(Должность)
Отбор = Новый Структура;
Отбор.Вставить("Должность", Должность);
тзДанные = РегистрыСведений.Оклады.СрезПоследних(Объект.Дата, Отбор);
Если тзДанные.Количество() = 0 Тогда
Возврат 0;
Иначе
Возврат тзДанные[0].РазмерОклада;
КонецЕсли;
КонецФункции
ПоказатьБыть может вам всем скинуть конфигурацию? Возможно, звезды сойдутся и общая картина всей конфигурации даст вам представление проблемы?
Да, скиньте пожалуйста на k1dajsjuda@yandex.ru Можно было бы взглянуть поближе на проблему. Или выложите и скиньте ссылку.
В документе тип Строка с неограниченной длинной. В регистре Оклады тип СправочникСсылка.Должности
Это так по заданию? Вообще то в документе по идее тоже должен быть СправочникСсылка.Должности.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот