Программный выбор реквизита шапки с типом справочник
Подскажите пожалуйста, есть документ с реквизитом шапки ОтпускРазрешил. Тип значения реквизита - Справочник.Сотрудники. В документе есть флажок, по выбору которого должен заполниться реквизит шапки. В данном случае заполнение не происходит.
//Филиал подбор значений
Функция ФилиалПриИзменении()
Если Филиал = 1 Тогда
СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.НайтиПоКоду("91141");
ОтпускРазрешил = СпрСотр.ТекущийЭлемент();
КонецЕсли;
КонецФункции
ПоказатьПо теме из базы знаний
- Программное управление обычными формами документов и справочников в УПП/КА
- Табличная часть из дополнительных реквизитов с обработкой событий в расширении
- Как автоматически заполнить обработкой табличную часть документа "Ввод начальных остатков" (Тип операции = "Расчеты с партнерами"). 1С: ERP
- Блокировка элементов справочников от изменений
- Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(3) P1rate, прочитай как отладку делать. Если бы я не умел пользоваться отладкой, то сделал бы так
Функция ФилиалПриИзменении()
сообщить("Филиал = "+Строка(Филиал));
Если Филиал = 1 Тогда
СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.НайтиПоКоду("91141");
сообщить("Сотрудник = "+Строка(СпрСотр.ТекущийЭлемент()));
ОтпускРазрешил = СпрСотр.ТекущийЭлемент();
КонецЕсли;
КонецФункции
Показать
(10) sonne, Это я уже понял. Пробовал через процедуру - эффект тот же. Вообще справочник с периодическими реквизитами.
Сейчас пробую так и ничего не получается:
Сейчас пробую так и ничего не получается:
Процедура ФилиалПриИзменении()
Если Филиал = 1 Тогда
СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.ИспользоватьДату(ТекущаяДата());
СпрСотр.НайтиПоКоду("91141");
сообщить("Сотрудник = "+Строка(СпрСотр.ТекущийЭлемент()));
ОтпускРазрешил = СпрСотр.ТекущийЭлемент();
КонецЕсли;
КонецПроцедуры
Показать
(24) P1rate, а вы точно проверяете в измененной базе? :)) Ну и из этой же области: 91141 - это точно код справочника, а не какой-нибудь еще реквизит?
Если код справочника числовой, то и искать по коду нужно число, а не строку. Больше там ничего и быть-то не может...
Если код справочника числовой, то и искать по коду нужно число, а не строку. Больше там ничего и быть-то не может...
(29) P1rate, давайте тогда все картинки :) Из конфигуратора свойства справочника Сотрудники, свойство колонки Код из списка справочника.
P.S. Когда скрины выкладываете, замазывайте наименование Организации и несущественные для текущей проблемы данные типа оклада...
P.S. Когда скрины выкладываете, замазывайте наименование Организации и несущественные для текущей проблемы данные типа оклада...
(17) P1rate, еще бывает что на форму не реквизит документа вынесен, а просто элемент добавлен и идентификатор у него другой (какая-нибудь буковка другая - например О английская или в коде у вас "О" английская и фактически происходит присвоение значения в переменную а не в реквизит - перепишите в коде а лучше скопируйте из реквизита документа)
Попробуйте так
Процедура ФилиалПриИзменении()
Если Филиал = 1 Тогда
СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.ИспользоватьДату(ТекущаяДата());
СпрСотр.НайтиПоКоду("91141");
сообщить("Сотрудник = "+Строка(СпрСотр.ТекущийЭлемент()));
ОтпускРазрешил = СпрСотр.ТекущийЭлемент();
сообщить(ОтпускРазрешил);
КонецЕсли;
Показать
А сам возврат значения запрограммировали? Значение должно же как-то вернуться из функции?
Что-то великоват код 91141 для справочника сотрудников, может Вы где-то ошиблись?
Функция ФилиалПриИзменении()
// ...
ФилиалПриИзменении = ОтпускРазрешил ;
КонецФункции
Что-то великоват код 91141 для справочника сотрудников, может Вы где-то ошиблись?
Если код числовой - без кавычек.
Вообще-то я всегда делаю проверку
А у справочника сотрудники уникальность кодов какая? Если в пределах подчинения = тогда ищи по полному коду.
Вообще-то я всегда делаю проверку
Если СпрСотр.НайтиПоКоду(Код)=1 Тогда
// Что-то делаем
Иначе
Сообщить("Не найден");
КонецЕсли;
А у справочника сотрудники уникальность кодов какая? Если в пределах подчинения = тогда ищи по полному коду.
(36) P1rate, Полный код вернет метод ПолныйКод().
ПолныйКод()
Синтаксис:
ПолныйКод()
Назначение:
Возвращает строку, содержащую полный код выбранного элемента справочника со всеми вышестоящими уровнями, разделенными символом /.
Но в Вашем случае, я думаю, это не совсем удобно. Я бы все-таки искал по наименованию. Обратите внимание на второй и третий параметры этого метода. По умолчанию он ищет внутри установленного подчинения и по совпадению первых символов.
НайтиПоНаименованию(<?>,,);
Синтаксис:
НайтиПоНаименованию(<Наименование>,<Режим>,<ФлагПоиска>)
Назначение:
Найти элемент справочника по наименованию.
Возвращает: 1 - если действие выполнено;
0 - если действие не выполнено (элемент не найден).
Параметры:
<Наименование> - строка с наименованием искомого элемента справочника,
<Режим> - необязательный параметр. Число: 1 - поиск внутри установленного подчинения (родителя); 0 - поиск во всем справочнике вне зависимости от родителя. Значение по умолчанию - 1.
<ФлагПоиска> - необязательный параметр. Число: 1 - найти точное соответствие наименования; 0 - найти наименование по первым символам. Значение по умолчанию - 0.
Попробуйте
P.S. а вообще, поиск по коду/наименованию лучше не использовать. Это не универсальный алгоритм.
ПолныйКод()
Синтаксис:
ПолныйКод()
Назначение:
Возвращает строку, содержащую полный код выбранного элемента справочника со всеми вышестоящими уровнями, разделенными символом /.
Но в Вашем случае, я думаю, это не совсем удобно. Я бы все-таки искал по наименованию. Обратите внимание на второй и третий параметры этого метода. По умолчанию он ищет внутри установленного подчинения и по совпадению первых символов.
НайтиПоНаименованию(<?>,,);
Синтаксис:
НайтиПоНаименованию(<Наименование>,<Режим>,<ФлагПоиска>)
Назначение:
Найти элемент справочника по наименованию.
Возвращает: 1 - если действие выполнено;
0 - если действие не выполнено (элемент не найден).
Параметры:
<Наименование> - строка с наименованием искомого элемента справочника,
<Режим> - необязательный параметр. Число: 1 - поиск внутри установленного подчинения (родителя); 0 - поиск во всем справочнике вне зависимости от родителя. Значение по умолчанию - 1.
<ФлагПоиска> - необязательный параметр. Число: 1 - найти точное соответствие наименования; 0 - найти наименование по первым символам. Значение по умолчанию - 0.
Попробуйте
СпрСотр.НайтиПоНаименованию("Наименование",0,1);
P.S. а вообще, поиск по коду/наименованию лучше не использовать. Это не универсальный алгоритм.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот