Имя: Пароль:
1C
1С v8
ОбработкаЗаполнения(<ДанныеЗаполнения>)
,
0 Mikhail Volkov
 
01.04.18
18:05
В документе есть реквизит справочник. В структуру <ДанныеЗаполнения> этого справочника можно документ добавить, как?
1 RomanYS
 
01.04.18
19:30
Переведи.
2 Darych
 
01.04.18
19:46
(1)+1 нажрался-спи
3 Zhuravlik
 
02.04.18
01:48
ОбъектСправочника.Заполнить(ДокументИлиСтруктураСДаннымиИлиЧтоУгодно);
4 Mikhail Volkov
 
02.04.18
04:54
(3) Но где ДокументИлиСтруктураСДаннымиИлиЧтоУгодно указать? Из документа открывается форма списка справочника с заданными параметрами отбора по документу. В форме списка пользователь не нашел ничего подходящего, создает новый элемент. В этот момент хотелось задать свои <ДанныеЗаполнения>, точнее поправить их. Например, Владелец нового элемента справочника присутствует в <ДанныеЗаполнения>, но если он один. А если задан " в списке", то отсутствует в <ДанныеЗаполнения>.
5 Mankubus
 
02.04.18
06:15
(4) в событии ПередНачаломДобавления
6 Mikhail Volkov
 
02.04.18
15:58
(5) Спс, в спСписокПередНачаломДобавления() не учитывался случай, когда отбор задан списком. Добавил:
//если отбор установлен, будем заполнять реквизиты
Для Каждого ЭлементОтбора Из СписокСправочника.Отбор Цикл
    Если (Не обЗначениеНеЗаполнено(ЭлементОтбора.Значение)) И (ЭлементОтбора.Использование) Тогда
        Если ЭлементОтбора.ВидСравнения = ВидСравнения.ВСписке Тогда    //+МВ 02.04.2018 Если отбор задан списком, то преложим выбрать конкретное заначение
            ЗначениеИзСписка = ЭлементОтбора.Значение.ВыбратьЭлемент("Выберите из списка значение '" + ?(ПустаяСтрока(ОбъектМетаданных.Реквизиты.Найти(ЭлементОтбора.Имя)), ЭлементОтбора.Имя, ОбъектМетаданных.Реквизиты.Найти(ЭлементОтбора.Имя)) + "'");
            Если ЗначениеИзСписка <> Неопределено Тогда
                ЭлементОтбора.ВидСравнения = ВидСравнения.Равно;
                ЭлементОтбора.Значение = ЗначениеИзСписка.Значение;
            КонецЕсли;
        КонецЕсли;    //-МВ
        ИмяРеквизита = ЭлементОтбора.Имя;
        Если Найти("Код|Наименование|Владелец",ИмяРеквизита) > 0 Тогда
            НовыйЭлемент[ИмяРеквизита] = ЭлементОтбора.Значение;
            НовыйЭлемент.ОбработкаРеквизита(ИмяРеквизита);  
        Иначе
            Реквизит = ОбъектМетаданных.Реквизиты.Найти(ИмяРеквизита);
        КонецЕсли;
        Если Реквизит = Неопределено Тогда
            Продолжить;
        КонецЕсли;

По сути заменяю в отборе ВидСравнения.ВСписке на Равно, в форме списка справочника, и данные отбора переносятся в создаваемый элемент. Но полноты счастья нужно еще некоторые данные самого документа, которые отсутствуют в отборе.
Как перенести ссылку документа, из которого открывается справочник, в создаваемый элемент этого справочника?
7 Вафель
 
02.04.18
16:08
ВладелецФормы
8 Mikhail Volkov
 
02.04.18
17:51
(7) Открываю из списка справочника ЭтаФорма.ВладелецФормы - табличное поле, а из документа - ничего!?
9 Mikhail Volkov
 
03.04.18
07:43
+ Открываю справочник из документа ЭтаФорма.ВладелецФормы = Неопределено! Как получить ссылку документа, из которого он открыт?
10 Mikhail Volkov
 
03.04.18
07:55
(7) ВладелецФормы - это вроде как для подчиненных справочников?
Из справки: Если у формы есть владелец, то в свойстве ЗакрыватьПриЗакрытииВладельца устанавливается необходимость закрытия данной формы при закрытии формы-владельца.
11 Mikhail Volkov
 
03.04.18
11:21
Нарыл Трюки 1С http://catalog.mista.ru/public/199307/ там показан способ передачи способ передачи ссылки документа, но только в форму выбора (списка) справочника:
- в форме документа:
Процедура ДоверенностьНачалоВыбора(Элемент, СтандартнаяОбработка)
    Элемент.Подсказка = Элемент.Подсказка + "$Link$" + ЗначениеВСтрокуВнутр(Ссылка);
КонецПроцедуры

- в форме списка справочника:
Процедура ПриОткрытии()
    Если НЕ спСписокПриОткрытии(ЭтаФорма,,глСтруктураОтбора) Тогда Возврат КонецЕсли;
    //+МВ 02.04.2018 Автомобиль по ссылке заказ-наряда
    ЭлементУправления = ЭтаФорма.ВладелецФормы;
    ТекстПодсказки = ЭлементУправления.Подсказка;
    ПозицияСсылки = Найти(ТекстПодсказки, "$Link$");
    Если ПозицияСсылки > 0 Тогда
        ЗаказНаряд = ЗначениеИзСтрокиВнутр(Сред(ТекстПодсказки, ПозицияСсылки + 6));
        Автомобиль = ЗаказНаряд.Автомобиль;
        ЭлементУправления.Подсказка = Лев(ТекстПодсказки, ПозицияСсылки - 1);
    КонецЕсли; //-МВ
    СправочникСписок.Порядок.Установить("ДатаВыдачи Возр");
    ПоказыватьУстаревшие = Ложь;
    ПоказыватьУстаревшиеПриИзменении(ЭлементыФормы.ПоказыватьУстаревшие);
КонецПроцедуры // ПриОткрытии()

А в форме самого справочника этот способ не работает... Почему?
12 Mikhail Volkov
 
03.04.18
16:46
Напрямую в форму справочника не передать ссылку документа, только через форму списка при создании нового элемента справочника?