Помогите обратиться к полю

1. user2070470 08.05.24 13:13 Сейчас в теме
1С БП Корп. Внешняя обработка выводит значения по столбцу в эксель. Возможно ли получить в ней значение поля Инициатор1 (см.картинку), созданного в Документе РеализацияТоваровУслуг в ФормаПодписиТовары?
Реквизит подтягивается из СправочникСсылка.ФизическиеЛица
Пишу на форме вот так:
НовСтр.Инициатор1 = Реализация.Инициатор1; 

При запуске обработки пишет, что поле не обнаружено.
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
21. scarl1n 16.05.24 07:08 Сейчас в теме
(20)Да, вы создали реквизит прямо в объекте, а не на форме, но он на форме недоступен не из-за этого. Чтобы на расширяемую форму добавить реквизит объекта, необходимо добавить сам объект в расширение (т.е объект формы. Нужно добавить форму в расширение, открыть ее, найти на закладке "Реквизиты" строку "Объект" (может по другому называться, это реквизит с галкой "Основной реквизит", он выделяется жирным). Да, такое действие надо проделать, даже если вы хотите вынести на форму реквизит, добавленный в расширении.
Прикрепленные файлы:
user2070470; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. ActionBlog 08.05.24 13:35 Сейчас в теме
(1)А в форму Инициатор1 откуда тянется?
6. Vitaly1C8 08.05.24 14:06 Сейчас в теме
(1) Потому что нужно убедиться что это реквизит ! Зайди в конфигуратор, клик на объект, реквизиты
Если в списке нет Инициатор1 ... означает что это Дополнительные реквизиты и доступ к ним так просто не получишь )
8. user2070470 08.05.24 14:21 Сейчас в теме
(6) Вот это?
Прикрепленные файлы:
9. Vitaly1C8 08.05.24 14:39 Сейчас в теме
(8) В конфигураторе найти Документы - РеализацияТоваров - Реквизиты
Посмотреть есть ли там Инициатор1
Если нет посмотреть есть ли табличная часть ДополнительныеРеквизиты
Если есть посмотреть какие реквизиты у этой табличной части
Обращаться далее в своей обработке к этой ТабЧасти типа:
Док = Реализация.ПолучитьОбъект();
тчДопРеквизиты =  Док.ДополнительныеРквизиты;
Для каждого Стр из тчДопРеквизиты Цикл
   Наименование = Стр.Наименование;   // "Инициатор1"
   Значение = Стр.Значение;
КонецЦикла;
user2070470; +1 Ответить
12. user2070470 08.05.24 15:38 Сейчас в теме
(9) Большое спасибо за подробный ответ.
В моём случае, в вкладке Данные Документа РеализацияТоваровУслуг нет Инициатор1 в Реквизитах и в Табличной части нет ДополнительныеРеквизиты. Значит ли это, что Инициатора невозможно внести без использования расширения?
2. Vlan 36 08.05.24 13:29 Сейчас в теме
Скорее всего, обращение идет к реквизиту формы, а не объекта.
user2070470; +1 Ответить
4. user2070470 08.05.24 13:39 Сейчас в теме
(2) Я сделал по аналогии обращения к полю Руководитель, там прокатывает
При:
НовСтр.Инициатор1 = Объект.Реализация.Инициатор1

Так тоже Поле объекта не обнаружено (Реализация)
5. user2070470 08.05.24 13:40 Сейчас в теме
(3) Реквизит подтягивается из СправочникСсылка.ФизическиеЛица
ФИО вносит пользователь из выпадающего списка.
11. ActionBlog 08.05.24 15:31 Сейчас в теме
(5)В документе "РеализацияТоваровУслуг" есть форма "ФормаДокументаОбщая", в этой форме есть процедура "ДекорацияПодписиНажатие", в этой процедуре заполняется структура "ПараметрыФормы"
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("ТолькоПросмотр", ТолькоПросмотр);
....

Вот там должно быть что-то типа такого
ПараметрыФормы.Вставить("Инициатор1", ..........);

Что там написано?
user2070470; +1 Ответить
13. user2070470 08.05.24 15:57 Сейчас в теме
(11) Там было пусто,
я прописал в ФормаДокументаОбщая
&НаКлиенте
Процедура ДекорацияПодписиНажатие(Элемент)
ПараметрыФормы.Вставить("Инициатор1",	Объект.Инициатор1);
...

но пока безрезультатно.
7. user2070470 08.05.24 14:10 Сейчас в теме
(2) При:
НовСтр.Инициатор1 = Реализация.Объект.Инициатор1; 

Поле объекта не обнаружено (Объект)
10. Vlan 36 08.05.24 14:41 Сейчас в теме
(7) Не нужно гадать, нужно знать. Нет у объекта такого реквизита. Он существует, только когда есть форма.
В модуле формы документа ищите, как заполняется Инициатор, и переносите в свою обработку.
user2070470; user1671936; +2 Ответить
14. ActionBlog 08.05.24 16:06 Сейчас в теме
(13) Вы просто на форму подписантов добавили реквизит и хотите из него какие-то данные считывать? Так не получится. Вам надо добавить реквизит документа "Инициатор1" и тогда эти данные будут храниться в базе данных и вы сможете к ним обращаться хоть через точку, хоть запросами. реквизит формы существует только пока инициализирована форма, как только форма закроется, то что Вы ввели в поле "Инициатор 1" исчезнет.
user2070470; +1 Ответить
15. user2070470 08.05.24 17:14 Сейчас в теме
(14) Спасибо
Возможно добавить данный реквизит в базу данных?
Достаточно того, что я прописал в ФормаДокументаОбщая как Объект.Инициатор1?
Так же обращаюсь во внешней обработке:
НовСтр.Инициатор1 = Объект.Инициатор1;

При этом при открытии через внешнюю обработку пишет, что Поле объекта не обнаружено (Инициатор1)
16. user2070470 15.05.24 15:38 Сейчас в теме
Опишу все действия, которые я сделал при попытке внести новый реквизит на форму в 1С БП Корп.:

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


На что при сохранении пишет:
{ДоработкаКорп Документ.РеализацияТоваровУслуг.Форма.ФормаПодписиТовары.Форма(14,9)}: Переменная не определена (РеализацияТоваровУслуг)

Я думаю, это связано с тем, что реквизит не прописался как Объект. Опытные наставники, подскажите пожалуйста, как это можно подправить?
Прикрепленные файлы:
17. scarl1n 15.05.24 15:51 Сейчас в теме
(16)Что за "РеализацияТоваровУслуг"? Скорее всего, тут нужно писать "Объект". Также "ПолучитьОбъект()" не требуется в данной ситуации, да и на клиенте он недоступен. Еще реквизит "Инициатор1" находится в табличной части "Товары", значит и обходить нужно эту табличную часть:
Для Каждого СтрокаТовар Из Объект.Товары Цикл
	Инициатор1 = СтрокаТовар.Инициатор1;
	//...
КонецЦикла;

Не забывать, что из "Инициатор1" реквизиты достать на клиенте не получится.
user2070470; +1 Ответить
18. user2070470 15.05.24 16:49 Сейчас в теме
(17) Спасибо за подсказку.
На Объект тоже ругается.
Да и тут вроде всё проще, не надо никакого цикла, ведь ФИО вносятся вручную из СправочникСсылка.ФизическиеЛица. Получается и никакого кода в модуле формы не надо, правильно?
Почему же тогда при внесении в пользовательском режиме данные не сохраняются и не активна кнопка ОК в вплывающем окне Подписи?
19. scarl1n 15.05.24 18:07 Сейчас в теме
(18)Раз это реквизит табличной части "Товары", то почему он должен редактироваться в окне "Подписи"?
user2070470; +1 Ответить
20. user1837694 15.05.24 22:37 Сейчас в теме
(19) Цель такая - через расширение в документе РеализацияТоваровУслуг внести дополнительный реквизит Инициатор1 в поле Подписи, который заносится из выпадающего списка вручную.

Возможно, весь этот код на модуле формы и не нужен, просто я понимаю что данные должны выбираться из СправочникСсылка.ФизическиеЛица, а вот где они сохранятся, у меня вопрос. Отсюда и возникла ТабличнаяЧасть.

Проблема в том, что я добавил в расширении реквизит прям в дереве конфигурации и на форме. Поэтому у меня на поле формы Реквизит Объект не присутствует. Возможность создания реквизита в самом документе на закладке Данные в расширении недоступна. Вкладка Данные доступна только в Конфигурации, а я делаю на расширении. Как быть? У меня мало понимания, как это работает.
21. scarl1n 16.05.24 07:08 Сейчас в теме
(20)Да, вы создали реквизит прямо в объекте, а не на форме, но он на форме недоступен не из-за этого. Чтобы на расширяемую форму добавить реквизит объекта, необходимо добавить сам объект в расширение (т.е объект формы. Нужно добавить форму в расширение, открыть ее, найти на закладке "Реквизиты" строку "Объект" (может по другому называться, это реквизит с галкой "Основной реквизит", он выделяется жирным). Да, такое действие надо проделать, даже если вы хотите вынести на форму реквизит, добавленный в расширении.
Прикрепленные файлы:
user2070470; +1 Ответить
22. user2070470 16.05.24 15:07 Сейчас в теме
(21) Большое спасибо за мурзилку.
Вот где оказывается собака зарыта!
Итак, (1) я перенёс в расширение СправочникФизическиеЛица и Документ РеализацияТоваровУслуг, (2) в нём насоздавал реквизитов, в т.ч. и в табличной части Услуги, табличной части Товары.
(3) Далее, в расширении в поле реквизитов ФормыПодписиТовары документа РеализацияТоваровУслуг нажимаю (Alt+Shift+F2) Добавить в расширение.
Но чуда не происходит, поле реквизит из расширения не подхватывается.
(Аналогично я пробовал подхватить реквизиты из справочника, а не из документа - тоже не видит)
Прикрепленные файлы:
23. user2070470 17.05.24 09:11 Сейчас в теме
Ну я как бы сделал всё по инструкции:

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


но в режиме пользователя (см. картинку) поле Инициатор 1 заполняется, но не сохраняется.
Я не понимаю, где ошибка.
Возможно, необходимо создать отдельный справочник для поля Инициатор, но тогда он будет просто дублировать справочник ФизическиеЛица. Зачем множить сущности без необходимости.
Возможно, нужно как-то вызвать запись после или перед основным выполнением команды, либо как-то в событии это сделать.
Прикрепленные файлы:
24. scarl1n 17.05.24 09:49 Сейчас в теме
(23)Покажите скриншот этой формы в конфигураторе. Реквизит "Инициатор1" добавили в объект в расширении?
25. user2070470 17.05.24 10:57 Сейчас в теме
(24)
Реквизит "Инициатор1" добавили в объект в расширении?

В дереве конфигурации в расширении РеализацияТоваровУслуг создавал реквизиты, на всякий случай создал те же реквизиты и в табличной части Услуги и табличной части Товары.
Последовательность переноса отметил цифрами на картинке.
Прикрепленные файлы:
26. user2070470 24.05.24 06:49 Сейчас в теме
Похоже, без кода на форме мне не обойтись.
Пробовал копировать с формы "ФормаПодписиТовары" метод "ПриСозданииНаСервере" и метод "ПриЗакрытии", заполнив реквизиты формы из параметров

В модуле формы переименовал в процедуру ПриСозданииНаСервере1, иначе пишет:
Процедура или функция с указанным именем уже определена (ПриСозданииНаСервере)


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

Код формы



При отладке стрелочка встаёт в общем модуле ВерсионированиеОбъектов в функции ДанныеДляХранения(Знач Объект) на:
МенеджерОбъекта.ПриОпределенииНастроекВерсионированияОбъектов(Настройки);


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

При отладке выходит ошибка:
Метод объекта не обнаружен (ПриОпределенииНастроекВерсионированияОбъектов)
{ОбщийМодуль.ВерсионированиеОбъектов.Модуль(3022)}: МенеджерОбъекта.ПриОпределенииНастроекВерсионированияОбъектов(Настройки);
28. user2070470 28.05.24 09:26 Сейчас в теме
(27) Это конечно не правильно, но я закомментировал строку 3022 и ошибка пропала. Но проблему это не решило.
1С:Предприятие 8.3 (8.3.23.1865) Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.148.41)
Цель - сохранить значение из выпадающего списка. В режиме пользователя поле Инициатор 1 заполняется, но не сохраняется.

Проблема с кодом модуля формы. Пользуясь инструкцией с www.koderline.ru/expert/programming/article-varianty-programmnogo-dobavleniya-elementov-na-formu пробовал такой вариант:

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


Но тоже не сработало.
29. user2070470 28.05.24 16:24 Сейчас в теме
Пробовал добавить реквизит на Объект - всё легко добавляется без кода.
Но мой реквизит не на объекте, это реквизит формы, поэтому и пытаюсь добавить его программно.
В предыдущем коде выходит ошибка при вызове метода контекста Добавить (и на Вставить тоже), да и
НовыйЭлемент.ПутьКДанным = Инициатор11
должен быть как-то заполнен и сохранен.
Главное, я нигде не могу найти решение, будто бы никто и никогда этого не делал.
Прикрепленные файлы:
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот