Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
21 ноя 2024, 21:24

заполнение документа из справочника

Автор Дмитрий Ефимов, 13 янв 2018, 18:12

0 Пользователей и 1 гость просматривают эту тему.

Дмитрий Ефимов

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

&НаСервереБезКонтекста
Функция ФормированиеДокумента(Наименование)
    Запрос = Новый Запрос("ВЫБРАТЬ
                          |   Номенклатура.Марка,
                                                   |ИЗ
                          |   Справочник.Номенклатура КАК Номенклатура
                          |ГДЕ
                          |   Номенклатура.Ссылка = &Наименование");
    Запрос.УстановитьПараметр("Наименование",Наименование);
       Выборка = Запрос.Выполнить().Выбрать();
    Выборка.Следующий();
   
    Возврат Выборка.Марка;
   КонецФункции
А для ЕдиницыИзмерения данный способ не проходит.
Подскажите как подставить в документ реквизит из справочника который является ссылкой на перечисление?

IL2016

Цитата: Дмитрий Ефимов от 13 янв 2018, 18:12Подскажите как подставить в документ реквизит из справочника который является ссылкой на перечисление?
через запрос можно (но не нужно), тоже работает , параметр в запросе устанавливать не надо, он и так передается в функцию из процедуры. 

лучше использовать объектную модель:

функция ...
  возврат Номенклатура.ЕдИзмерения;
конецФункции;

LexaK

а еще лучше напишите одну функцию, которая будет возвращать значение по имени реквизита
(смотрится красиво, но все равно не оптимально)

&НаКлиенте
Процедура ТабличнаяЧасть1НаименованиеПриИзменении(Элемент)
    Стр = Элементы.ТабличнаяЧасть1.ТекущиеДанные;
    Стр.Марка = ЗначениеРеквизита(Стр.Наименование, "Марка");
    Стр.ЕдИзм = ЗначениеРеквизита(Стр.Наименование, "ЕдиницаИзмерения"); //заполнение реквизитов с разными именами
    //и т.д.   
КонецПроцедуры

&НаСервереБезКонтекста
Функция ЗначениеРеквизита(Ссылка, ИмяРеквизита)
    //одна функция, возвращает значение любого(почти) реквизита, любого объекта
    Возврат Ссылка[ИмяРеквизита];
конецФункции;


еще как вариант можно использовать процедуру
ЗаполнитьЗначенияСвойств(<Приемник>, <Источник>, <СписокСвойств>, <ИсключаяСвойства>)
но это при условии что у вас совпадают наименования реквизито в строке ТЧ документа и элемента справочника

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

Дмитрий Ефимов

Огромное спасибо за помощь
К сожалению способ с процедурой не сработал.Имена реквизитов полностью совпадают, но значения не заполняются.
С функцией получилось замечательно, все работает.:zebzdr:
Еще раз грандиозное спасибо за помощь

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск