Имя: Пароль:
1C
 
Добавление допреквизита через расширение
,
0 vienya
 
17.05.24
13:39
Необходимо через расширение в документе РеализацияТоваровУслуг внести дополнительный реквизит Инициатор1 в поле Подписи, который заносится из выпадающего списка вручную.

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



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



В  модуль формы ФормаПодписиТовары ничего не писал, нужно ли в моём случае через палитру свойств вызывать какое-либо событие или я просто где-то косякнул?
3 FIXXXL
 
17.05.24
13:26
реквизит ФОРМЫ не записывается в ИБ
4 Мультук
 
гуру
17.05.24
13:30
(0)

1) Открываем форму "ФормаПодписиТовары", смотрим метод "ПриСозданииНаСервере"
Читаем строчку "Заполним реквизиты формы из параметров."
Думаем, дописываем

2) Далее всё в той же форме смотрим в метод "ПриЗакрытии"
Читаем, и говорим волшебную фразу "Ах ты ёкарный бабай"
Опять же думаем, дописываем

3) Далее еще нужно читать как минимум форму "ФормаДокументаТовары"
ибо там есть код, который обрабатывает ОповеститьОВыборе
Но это уже вы сами.

P.S.

>>> или я просто где-то косякнул

Вы пропустили момент "разобраться, а как сейчас данные из полей (например) Руководитель и глБух
Путешествуют туда/сюда"
5 vienya
 
17.05.24
13:39
(3) Извините, я неправильно написал в 1 пункте, надо так:
- в дереве конфигурации доработки в Документе РеализацияТоваровУслуг создал реквизит Инициатор1 с типом данных: СправочникСсылка.ФизическиеЛица (в т.ч. и в табличной части Услуги, табличной части Товары)
Т.е реквизит Инициатор1 (помечен на рисунке цифрой 1) создан в документе, а в ФормаПодписиТовары я только добавил объект в расширение.

* В нулевом посте подправил.
6 Мультук
 
гуру
17.05.24
13:41
(5)

У каждой строчки в таб.части Товары будет свой инициатор ?
Прикольно, да.
7 vienya
 
17.05.24
15:30
(6) Это не то что для каждой строчки, просто нужно добавить выбор 3-х инициаторов и 5-ти исполнителей одновременно на один документ. Да я и сам в шоке.
(4) Спасибо за подсказку. Думал обойтись без записей в модуле формы.
Если я копирую процедуру с добавлением дополнительных реквизитов, мне пишет:
Процедура или функция с указанным именем уже определена (ПриСозданииНаСервере)
И не будет ли в этом случае документ 2 раза записываться?

А если через Событие, то какое выбрать? Через НачалоВыбора у меня не пошло.
8 vienya
 
24.05.24
06:18
В модуле формы создал процедуру ПриСозданииНаСервере1, иначе пишет:
Процедура или функция с указанным именем уже определена (ПриСозданииНаСервере)

В функции прописал только дополнительные реквизиты, чтобы не дублировалось.

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

Процедура дор_ПриЗакрытии(ЗавершениеРаботы)
    Если ПеренестиВДокумент И Модифицированность Тогда
        СтруктураРезультат = Новый Структура("
            | Инициатор11
            |");
        ЗаполнитьЗначенияСвойств(СтруктураРезультат, ЭтаФорма);
        //ОповеститьОВыборе(СтруктураРезультат); //закомментировал, т.к. не нашёл в ФормаДокументаТовары
    КонецЕсли;
КонецПроцедуры
Скрыть

При отладке выходит ошибка:
Метод объекта не обнаружен (ПриОпределенииНастроекВерсионированияОбъектов)
{ОбщийМодуль.ВерсионированиеОбъектов.Модуль(3022)}: МенеджерОбъекта.ПриОпределенииНастроекВерсионированияОбъектов(Настройки);
10 Мультук
 
гуру
24.05.24
16:58
(9)

1) Сделайте копию базы
2) Снимите нужные формы с поддержки
3) Решите этот вопрос БЕЗ расширений, непосредственно меняя конфигурацию

Решили? Работает? без ошибок (имеется в виде ошибки бизнес-процесса) ?


4) Возвращаемся к базе с расширениями
И повторяем то же самое, только с помощью расширений.

P.S.
Я бы "в свое время" делал именно так.


P.P.S.
Советую погуглить "курсы 1С расширения"
11 vienya
 
24.05.24
20:44
(10) Мультук, спасибо за советы. А то я запутался совсем. Буду пробовать отдельно.
12 Chameleon1980
 
25.05.24
14:37
(11) а я не пойму в чем тут путаться. хоть убей.
13 Мимохожий Однако
 
26.05.24
08:15
(9) Если "начинать с начала", то начни с тех.задания, а не одного из вариантов реализации. В чём цель? Какая конфигурация? Возможно, можно обойтись более простыми средствами
14 vienya
 
28.05.24
09:18
(9) Это конечно не правильно, но я закомментировал строку 3022 и ошибка пропала. Но проблему это не решило.

(13) Цель - сохранить значение из выпадающего списка. В режиме пользователя поле Инициатор 1 заполняется, но не сохраняется.
1С:Предприятие 8.3 (8.3.23.1865) Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.148.41)
15 Климов Сергей
 
28.05.24
10:20
Конфигурация, я так понимаю, БП? Тогда можно обойтись без программирования вовсе. Механизм дополнительных реквизитов и свойств вам в помощь. Во всяком случае, в интерфейсной части.
16 vienya
 
28.05.24
12:01
(15) Интерфейсную часть мы прошли. Код нужен - (4).
Пробовал программно создать реквизит:

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

Ошибка при вызове метода контекста Добавить (и на Вставить тоже)
17 Климов Сергей
 
28.05.24
12:07
(16) Я говорил о том, что добавить реквизит можно вообще без программирования. Не открывая конфигуратор, за 2.5 минуты с перекуром.

Если таки хочется программировать, то есть вопрос: вот здесь,

НовыйЭлемент.ПутьКДанным                = "Инициатор11";

что такое Инициатор11? Реквизит объекта? Если да, то надо писать Объект.Инициатор11. А если это реквизит формы, то надо озаботиться его заполнением в ПриЧтенииДанныхНаСервере() и сохранением в ПриЗаписиНаСервере().
18 vienya
 
28.05.24
13:08
(17) На Объект было бы легко добавить, согласен. А он у меня не на объекте.
Спасибо, буду искать как вписать в ПриЧтенииДанныхНаСервере() и в ПриЗаписиНаСервере().
19 vienya
 
31.05.24
10:54
&После("ПриСозданииНаСервере")
   Процедура доп_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)  
                  
ДобавляемыеРеквизиты = Новый Массив;
ТипРеквизита = Новый ОписаниеТипов("Строка");
НовыйРеквизит = Новый РеквизитФормы(
        "Инициатор11",     //Имя реквизита формы
        ТипРеквизита,     //Тип
        "",                      //Путь  (Пусто, "Объект.Инициатор1", ИмяТЧ)    
        "Инициатор11");    //Заголовок  
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
//ЭтаФорма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);  //Заставляем форму создать новые реквизиты
  
                //Вывод реквизита на форму
                НовыйЭлемент = Элементы.Добавить("Инициатор11", Тип("ПолеФормы")); //Вставить
                НовыйЭлемент.ПутьКДанным                = "Инициатор11"; //отличие Объект. //Здесь реквизит объекта
                НовыйЭлемент.Вид                        = ВидПоляФормы.ПолеВвода;
                
                НовыйЭлемент.ТолькоПросмотр             = Истина;
                НовыйЭлемент.Видимость                  = Истина;
                НовыйЭлемент.Доступность                = Истина;
                
                Элементы. Инициатор11.УстановитьДействие("ПриИзменении", "Инициатор11")
   КонецПроцедуры


Ошибка при вызове метода контекста (Добавить)
{ДоработкаКорп Документ.РеализацияТоваровУслуг.Форма.ФормаРеквизитыОрганизацииКонтрагентаУслуги.Форма(15)}:НовыйЭлемент = Элементы.Добавить("Инициатор11", Тип("ПолеФормы")); //Вставить
{Документ.РеализацияТоваровУслуг.Форма.ФормаДокументаУслуги.Форма(362)}:ОткрытьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаРеквизитыОрганизацииКонтрагентаУслуги", ПараметрыФормы, ЭтотОбъект);
по причине: Недопустимое значение параметров
20 Волшебник
 
31.05.24
12:47
(19) Инициатор11 - плохое имя реквизита
21 vienya
 
31.05.24
14:39
(20) Спасибо! Заменил везде на ИнициаторОдиннадцать - ошибка пропала!
Сейчас решаю, как добиться, чтобы значение из выпадающего списка вносились, а то у меня тип "Строка". Пробовал заменить в ТипеРеквизита на ссылку СправочникСсылка.ФизическиеЛица - не работает.
22 Волшебник
 
31.05.24
14:44
(21) Попробуйте тип "число", должно помочь