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

Как добавить созданный реквизит во внешнюю обработку?

Автор vienya, 08 мая 2024, 18:14

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

vienya

fruitella, спасибо! Пытался действовать по мурзилке, ничего не получилось.
Я перенёс в расширение и СправочникФизическиеЛица и Документ РеализацияТоваровУслуг, насоздавал и там и там реквизитов, в т.ч. и в табличной части Услуги, табличной части Товары. Далее, в расширении в поле реквизитов ФормыПодписиТовары документа РеализацияТоваровУслуг нажимаю (Alt+Shift+F2) Добавить в расширение - чуда не происходит, поле реквизит из расширения не подхватывается. По второй картинке кнопка Добавить в расширение для всех объектов не активно, а выборочно на третьей картинке не видит.
Может их как-то кодом можно связать?

fruitella

Я ничего не понял, ты все сделал, в чем вопрос?

vienya

fruitella, ну я как бы сделал всё по инструкции:

1 добавил новый реквизит в расширение:
- Добавил в расширение  документ РеализацияТоваровУслуг и справочник ФизическиеЛица
- в Документе РеализацияТоваровУслуг в ФормаПодписиТовары создал реквизит Инициатор1 с типом данных: СправочникСсылка.ФизическиеЛица
2 добавил объект в расширение:
- в дереве конфигурации доработки создавал реквизиты  (в т.ч. и в табличной части Услуги, табличной части Товары)
- через Alt+Shift+F2 Добавить в расширение добавил (строка Инициатор 1 стала чёрной).
3 вывел новый реквизит на форму:
- перетащил мышкой объект на форму, запустил отладку

но в режиме пользователя (см. картинку) поле Инициатор 1 заполняется, но не сохраняется.

fruitella

Запись надо тоже обработать. Ты же создал и добавил, что-то новое. Типовая процедура с записью по кнопкам: "Сохранить" или "Сохранить и закрыть" еще ничего не знает о твоем новом реквизите "Инициатор1". Поэтому оно и не сохраняется.

Можешь вызвать  запись после или перед основным выполнением команды, либо в событии это сделать.

vienya

fruitella, Спасибо!
Цитата: fruitella от 17 мая 2024, 09:17Запись надо тоже обработать. Ты же создал и добавил, что-то новое. Типовая процедура с записью по кнопкам: "Сохранить" или "Сохранить и закрыть" еще ничего не знает о твоем новом реквизите "Инициатор1". Поэтому оно и не сохраняется.
Я забыл это написать, документ провожу и закрываю.
Цитата: fruitella от 17 мая 2024, 09:17Можешь вызвать  запись после или перед основным выполнением команды, либо в событии это сделать.
Модуль формы у меня действительно пустой, в палитре свойств выбрал событие НачалоВыбора
&НаКлиенте
Процедура ДК1_Инициатор1НачалоВыбораПосле(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ЗначениеОтбора = ПолучитьФИОИнициатора1();
КонецПроцедуры
&НаСервере
Функция ПолучитьФИОИнициатора1()
ФИОИнициатора1 = // как здесь обратиться к дополнительному реквизиту?
Возврат ФИОИнициатора1;
КонецФункции
Застопорелся на том, как вызвать реквизит.

fruitella

Начало выбора - это обработка выбора данных списка значений, чтобы пользователю показать доступные значения. Это конечно немного не то, так-то можно конечно записать, но я бы не стал так делать.
Можешь обработать 2 события (перед закрытием, при изменении, хотя тоже бред будет (при каждом изменении документ будет записываться).

В общем заходишь в модуль формы типового документа, заимствуешь в расширение эти две кнопки которые отвечают за запись и используешь после, ну или перед.
Только документ будет 2 раза записываться, не супер критично, но будет работать.


Если делать все грамотно, тогда надо будет переписывать процедуры в общих модулях.

vienya

Итак, начну с начала:
Необходимо через расширение в документе РеализацияТоваровУслуг внести дополнительный реквизит Инициатор1 в поле Подписи, который заносится из выпадающего списка вручную.
Что я сделал:
1 добавил новый реквизит в расширение:
- скопировал в расширение документ РеализацияТоваровУслуг и справочник ФизическиеЛица
- в дереве конфигурации доработки в Документе РеализацияТоваровУслуг создал реквизит Инициатор1 с типом данных: СправочникСсылка.ФизическиеЛица (в т.ч. и в табличной части Услуги, табличной части Товары)
2 добавил объект в расширение:
- в ФормаПодписиТовары через Alt+Shift+F2 Добавить в расширение добавил (строка Инициатор 1 стала чёрной).
3 вывел новый реквизит на форму:
- перетащил мышкой объект на форму
4 в расширении в модуле ФормаПодписиТовары разместил код:
Процедура дор_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Заполним реквизиты формы из параметров.
    ЗаполнитьЗначенияСвойств(ЭтаФорма, Параметры,
        "Инициатор11
        |");
    ПолноеНаименованиеКонтрагента = "";
КонецПроцедуры
 
Процедура дор_ПриЗакрытии(ЗавершениеРаботы)
    Если ПеренестиВДокумент И Модифицированность Тогда
        СтруктураРезультат = Новый Структура("
            | Инициатор11
            |");
        ЗаполнитьЗначенияСвойств(СтруктураРезультат, ЭтаФорма);
        //ОповеститьОВыборе(СтруктураРезультат); //закомментировал, т.к. не нашёл в ФормаДокументаТовары
    КонецЕсли;
КонецПроцедуры
При отладке выходит ошибка:
ЦитироватьМетод объекта не обнаружен (ПриОпределенииНастроекВерсионированияОбъектов)
{ОбщийМодуль.ВерсионированиеОбъектов.Модуль(3022)}: МенеджерОбъекта.ПриОпределенииНастроекВерсионированияОбъектов(Настройки);

vienya

Это конечно не правильно, но я закомментировал строку 3022 и ошибка пропала. Но проблему это не решило.
Цель - сохранить (в 1С:Предприятие 8.3 (8.3.23.1865) Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.148.41)) значение из выпадающего списка. В режиме пользователя поле Инициатор 11 заполняется, но не сохраняется. Проблема с кодом модуля формы. Пользуясь инструкцией пробовал добавить программно с www.koderline.ru/expert/programming/article-varianty-programmnogo-dobavleniya-elementov-na-formu:

Процедура доп_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) 

        НовыйЭлемент = Элементы.Добавить("Инициатор11", Тип("ПолеФормы")); //отличие Форма.
                НовыйЭлемент.ПутьКДанным                = "Инициатор11"; //отличие Объект.
                НовыйЭлемент.Вид                        = ВидПоляФормы.ПолеВвода;//
               
Элементы. Инициатор11.УстановитьДействие("ПриИзменении", "Инициатор11")
КонецПроцедуры

Выдаёт Ошибка при вызове метода контекста (Добавить) и Вставить тоже. По причине:
Недопустимое значение параметров

Максим75

vienya, а реквизит Вы добавили?
вначале в форму добавляется реквизит, а уже потом добавляется новый элемент на форму и связывается с реквизитом.

vienya

Максим75, Да, конечно добавлял, я также пробовал добавить реквизит на Объект - всё легко добавляется без кода.

Но мой реквизит не на объекте, это реквизит формы, поэтому и пытаюсь добавить его программно.
В предыдущем коде выходит ошибка при вызове метода контекста Добавить (и на Вставить тоже), да и
НовыйЭлемент.ПутьКДанным = Инициатор11должен быть как-то заполнен и сохранен.
Может быть в этом случае вообще надо вместо ПриСозданииНаСервере использовать ПриЧтенииНаСервере и ПриЗаписиНаСервере или как-то через События в свойствах?

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

Рейтинг@Mail.ru

Поиск