Получить данные формы в другой форме

1. MikhailDr 16.08.18 09:12 Сейчас в теме
Здравствуйте формучане. Есть справочник номенклатура, в нем есть есть реквизит штрихкод, который является динамическим списком. В нем выводится штрихкод номенклатуры, штрихкод берется из регистра сведений ШтрихкодыНоменклатуры. Помимо этого на форме справочника есть кнопка "СоздатьШтрихкод", которая открывает форму записи регистра сведений ШтрихкодыНоменклатуры. В этой форме 2 поля Номенклатура и Штрихкод.

Задача состоит в том, чтобы при открытии формы записи регистра сведений ШтрихкодыНоменклатуры, путем нажатия кнопки "СоздатьШтрихкод", автоматически заполнялось поле номенклатура.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
10. schweigen 20.08.18 14:41 Сейчас в теме
(1)
В форме справочника:
&НаКлиенте
Процедура НачатьСозданиеШтрихкода()
	
	ТД = Элементы.Штрихкод.ТекущиеДанные;
	Если ТД = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ПараметрыФормы = новый Структура("Номенклатура", ТД.Номенклатура);
	ОткрытьФорму("РегистрСведений.ШтрихкодыНоменклатуры.ФормаЗаписи", ПараметрыФормы, Элементы.Штрихкод);
	
КонецПроцедуры
Показать


В форме записи регистра
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Если Запись.ИсходныйКлючЗаписи.Пустой() Тогда //это новая запись
		Если Параметры.Свойство("Номенклатура") Тогда
			Запись.Номенклатура = Параметры.Номенклатура;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры
Показать
12. MikhailDr 21.08.18 07:31 Сейчас в теме
(10)
Огромное спасибо, очень подробный ответ и все работает в моей базе. Есть только один вопрос, чем такой вариант кода лучше моего

в справочнике
&НаКлиенте
Процедура СоздатьШтрихкод(Команда)
    СтруктураПараметров = Новый Структура;
    СтруктураПараметров.Вставить("Номенклатура",Объект.Ссылка);
    ОткрытьФорму("РегистрСведений.ШтрихкодыНоменклатуры.ФормаЗаписи", СтруктураПараметров);
КонецПроцедуры

в регистре
&НаСервере
Функция ПолучитьПараметр()
    Возврат ЭтаФорма.Параметры.Номенклатура;
КонецФункции

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Запись.Номенклатура = ПолучитьПараметр();
КонецПроцедуры
Показать


Просто мне бы не хотелось тупо копировать чужие решения, хочется понимать чем они лучше.
16. schweigen 21.08.18 10:37 Сейчас в теме
(12)
если при открытии формы ты передаешь в нее параметры, то получать ты их должен ПриСозданииНаСервере.
в других событиях твоих параметров уже не будет, т.к. они существуют только в рамках одного серверного вызова.
В твоем примере, в форме регистра ПриСозданииНаСервере у тебя будет существовать ЭтаФорма.Параметры.Номенклатура. ПриОткрытии в параметрах уже не будет номенклатуры, на сколько я помню.
17. MikhailDr 21.08.18 10:48 Сейчас в теме
(16) Фишка в том, что мой вариант работает, может там конечно есть подводные камни, но он работает.

В вашем варианте кстати код работает не совсем корректно, или у меня есть какие-то косяки. Для созданной номенклатуры все норм, но вот при создании новой позиции ТД = Неопределно и кнопка не отрабатывает, я убрал это и немного переписал, вот так работает всегда

&НаКлиенте
Процедура НачатьСозданиеШтрихкода()
    
    ПараметрыФормы = новый Структура("Номенклатура", Объект.Ссылка);
    ОткрытьФорму("РегистрСведений.ШтрихкодыНоменклатуры.ФормаЗаписи", ПараметрыФормы, Элементы.Штрихкод);
    
КонецПроцедуры
Показать
11. antz 20.08.18 15:03 Сейчас в теме
(1) Уберите кнопку "СоздатьШтрихкод", выведите на форму штатную кнопку динамического списка "Создать", у измерения "Номенклатура" поставьте галку "Заполнять из данных заполнения" и всё, зачем огород городить.
SlavaKron; +1 Ответить
14. MikhailDr 21.08.18 08:17 Сейчас в теме
(11)
"Заполнять из данных заполнения" и всё

Не все, у меня по вашему не заработало
15. antz 21.08.18 10:18 Сейчас в теме
(14) значит, сделали не по моему, чего-то не хватает.
Прикрепленные файлы:
Пример.dt
18. MikhailDr 21.08.18 12:13 Сейчас в теме
(15)
Т.е. вы просто создали справочник и регистр и поставили у ресурса Номенклатура эту галочку. Я даже не вижу связи между регистром и справочником, платформа сама поняла как это все выводить?
19. antz 21.08.18 12:28 Сейчас в теме
13. SlavaKron 21.08.18 08:03 Сейчас в теме
(1)Старайтесь, по минимуму кодить в таких задачах, подход должен быть как (11), использовать возможности платформы. Но в вашем случае, чтобы их использовать, надо разобраться со структурой регистра. Сомневаюсь, что номенклатура как ресурс логичное решение.
2. kolya_tlt 86 16.08.18 09:33 Сейчас в теме
у формы есть параметр Ключ, заполните его
3. MikhailDr 20.08.18 07:35 Сейчас в теме
(2)
Что мне это даст? Параметры формы влияют на саму форму, или их можно как-то передавать в другие формы других объектов?
4. Xershi 1484 20.08.18 07:55 Сейчас в теме
(3) почитайте книгу разработчика, если не поняли что это вам даст.
5. MikhailDr 20.08.18 10:48 Сейчас в теме
(4) Прочитал, параметр в форму передал, правда не могу его вывести, пишет поле объекта недоступно для записи

&НаСервере
Функция ПолучитьПараметр()
    Возврат ЭтаФорма.Параметры.СсылкаСправочник;
КонецФункции
 
&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ЭтаФорма.Элементы.Номенклатура = ПолучитьПараметр();
КонецПроцедуры
Показать
6. Xershi 1484 20.08.18 11:00 Сейчас в теме
(5) параметр не нужно выводить! Он автоматически заполнит реквизиты, если правильно структуру заполнили!

Суть сводится к созданию структуры такого же формата как и объект, только табличные части придется постобработкой заполнить, ну т.е. либо передать структуры, а потом уже в объекте обрабатывать, но лучше конечно же это делать сразу в коде открытия, а не в самом объекте!
7. MikhailDr 20.08.18 11:39 Сейчас в теме
(6) Ну вот в справочнике "Номенклатура" у меня такой такой код
&НаКлиенте
Процедура СоздатьШтрихкод(Команда)
	СтруктураПараметров = Новый Структура;
	СтруктураПараметров.Вставить("Номенклатура",Объект.Ссылка);
	ОткрытьФорму("РегистрСведений.ШтрихкодыНоменклатуры.ФормаЗаписи", СтруктураПараметров);
КонецПроцедуры


В регистре сведений такой
&НаСервере
Функция ПолучитьПараметр()
	Возврат ЭтаФорма.Параметры.Номенклатура;
КонецФункции

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	Запись.Номенклатура = ПолучитьПараметр();
КонецПроцедуры
Показать


Плюс еще в регистре сведений создан параметр "Номенклатура", тип "СправочникСсылка.Номенклатура"

В таком виде все функционирует как мне надо. Но это некорректно. Судя по тому как я вас понял, все должно работать и без кода в модуле формы регистра сведений, но у меня без него ничего не происходит.

Да, к слову говоря номенклатура у меня это не реквизит, а ресурс в регистре.
8. Xershi 1484 20.08.18 11:56 Сейчас в теме
(7) вы же сказали книжку почитали?
В (2) вам сказали, что нужно сначала структуру с ключом сделать, а потом туда, что что вы написали! Перечитайте еще раз.
9. MikhailDr 20.08.18 12:40 Сейчас в теме
(8)Так я ведь создал структуру в справочнике "Номенклатура", не понимаю
Оставьте свое сообщение

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