Заполнение табличной части одного документа - данными из табличных частей документов выбранных из ФормыВыбора. (управляемые формы)

1. AlexeyMalko 21.08.17 07:26 Сейчас в теме
В документе сделал кнопку - по ней открываю форму выбора с отбором . Задача в том чтобы пользователь выбрал в этом списке несколько нужных ему документов (через ctrl) и с этих документов заполнить табличную часть документа основного с которого делали выбор. Практичней - Приходную накладную заполнить данными из заказов поставщиков. Форму выбора открываю , что делать дальше без понятия.
Может я не то что то делаю - скажите как заполнить табличную часть Приходной накладной из Поступлений поставщиков?
Найденные решения
19. EVKash 14 22.08.17 08:04 Сейчас в теме
(18) Процедура пытается изменить передаваемое ей значение...
Попробуй так
&НаКлиенте
Процедура ПолучитьМассивЗначенийВыбора(ВыбранныеЗначения, Парам2) Экспорт
    
    ВыделенныеСтроки = ВыбранныеЗначения.ВыделенныеСтроки;
    ЗаполнитьПоЗаказамПоставщикаНаСервере(ВыделенныеСтроки);    

КонецПроцедуры
AlexeyMalko; +1 Ответить
5. AlexeyMalko 21.08.17 12:26 Сейчас в теме
Оказывается) В ОткрытьФорму один из параметров принимает значения из открытой формы - вот он ОписаниеОповещенияОЗакрытии и там всё что нужно получить.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. AlexeyMalko 21.08.17 11:10 Сейчас в теме
Ника не могу поймать в каком месте ОбработкаВыбора должна сработать.
3. EVKash 14 21.08.17 11:21 Сейчас в теме
Обработки выбора у кнопки нет и быть не может. Через Оповестить у формы выбора и ОбработкаОповещения у основной формы делать нужно.
4. AlexeyMalko 21.08.17 11:46 Сейчас в теме
(3) Оповестить у формы выбора можно подробней , это где и как , какое событие нужно брать не могу отладить
5. AlexeyMalko 21.08.17 12:26 Сейчас в теме
Оказывается) В ОткрытьФорму один из параметров принимает значения из открытой формы - вот он ОписаниеОповещенияОЗакрытии и там всё что нужно получить.
6. Boneman 298 21.08.17 12:34 Сейчас в теме
можно еще в форме выбора, через владельца формы заполнить.
Типа например такого
&НаКлиенте
Процедура Выбрать(Команда)
	ЭтаФорма.ВладелецФормы.ТекущийЭлемент.ТекущиеДанные[ЭтаФорма.Параметры.ИмяПоля]  = Элементы.ОстаткиВЯчейках.ТекущиеДанные.Ячейка;
	Закрыть();

КонецПроцедуры

можно, перед закрытием
вызвать в форме обработку оповещения и там обработать.
типа такого
&НаКлиенте
Процедура ЗаполнитьУпаковку(Команда)

	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("МассивУпаковок", МассивУпаковок);
	ПараметрыФормы.Вставить("Дата", Объект.Дата);
	ПараметрыФормы.Вставить("Документ", Объект.Ссылка);
	
	
	ОткрытьФорму("Документ.СборкаЗапасов.Форма.ФормаВыбораУпаковки", ПараметрыФормы);
	
	
КонецПроцедуры



// Процедура - обработчик события ОбработкаОповещения формы.
//
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)

	Если ИмяСобытия = "ВыбранаУпаковкаВПроизводство" Тогда	
		
		Если Параметр.Документ = Объект.Ссылка тогда
			
			Если  Объект.ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперацийСборкаЗапасов.Сборка") Тогда
				
				//	    		Если Объект.ЯчейкиВСтрокахЗапасов = Ложь И ЗначениеЗаполнено(Строка.Ячейка) И НЕ Объект.ЯчейкаЗапасов = Строка.Ячейка  Тогда
				
				Объект.ЯчейкиВСтрокахЗапасов = Истина;
				Для Каждого СтрокаЗапасы из Объект.Запасы Цикл
					
					СтрокаЗапасы.Ячейка = Объект.ЯчейкаЗапасов;
					
				КонецЦикла;
				ВидимостьЯчеекЗапасов();
				
				//				КонецЕсли;
...и так далее

Показать

в форме которую вызываем по кнопке выбор, типа такого
&НаКлиенте
Процедура Выбрать(Команда)
	Оповестить("ВыбранаУпаковкаВПроизводство",Новый Структура("Документ, ВыходнойМассив",Документ, ВыходнойМассив));
	Закрыть();

КонецПроцедуры

7. AlexeyMalko 21.08.17 14:48 Сейчас в теме
всё вроде бы нормально но ошибка , не понимаю немного почему, помогите :
&НаКлиенте
Процедура ПолучитьМассивЗначенийВыбора(ВыбранныеЗначения) Экспорт
	
	ЗаполнитьПоЗаказамПоставщикаНаСервере(ВыбранныеЗначения.ВыделенныеСтроки);	

КонецПроцедуры

ВыбранныеЗначения.ВыделенныеСтроки - это массив
Передаю на сервер чтобы заполнить таб часть документа значениями этого массива
&НаСервере  
Процедура ЗаполнитьПоЗаказамПоставщикаНаСервере(МассивЗначений)

	НовыйОбъект =объект.Ссылка.ПолучитьОбъект();	
	
	НовыйОбъект.Запасы.Очистить();
	Для каждого ЭлементМассива из МассивЗначений Цикл 
		Для каждого СтрокаТабличнойЧасти из ЭлементМассива.Запасы Цикл
		ЗаполнитьЗначенияСвойств(НовыйОбъект.Запасы.Добавить(),СтрокаТабличнойЧасти);
		КонецЦикла;
	КонецЦикла;
	
	НовыйОбъект.Записать();

КонецПроцедуры
Показать

Ругается - Поле объекта недоступно для записи (ВыделенныеСтроки) ,почему ? что не так?
9. Boneman 298 21.08.17 14:54 Сейчас в теме
(7)
Ругается - Поле объекта недоступно для записи (ВыделенныеСтроки) ,почему ? что не так?

на какой строке ? В какой момент ?
Где-то идет попытка записи в выделенныестроки, а там должно быть только чтение. Может имя переменных гдето совпало
8. AlexeyMalko 21.08.17 14:53 Сейчас в теме
Не силен в упр формах, понимаю что тут элементарщина какая то которую я не знаю к сожалению
10. Boneman 298 21.08.17 14:56 Сейчас в теме
НовыйОбъект =объект.Ссылка.ПолучитьОбъект();

а это что за строка ? Зачем ? мне концептуально не очень понятно, где это все происходит
11. AlexeyMalko 21.08.17 15:01 Сейчас в теме
(10)Это в форме документа происходит. НовыйОбъект чтобы табличную часть достать делаю. А ошибка,после НовыйОбъект.Записать(); вываливается, сейчас шагаю отладчиком но ничего не вижу такого.
13. Boneman 298 21.08.17 15:14 Сейчас в теме
(11) ну, для начала - если документ новый, у него ссылки еще нет.
И даже если это уже записанный в базу документ, то получение по ссылке и запись, будет равноценно тому, что другой пользователь отредактировал документ когда у вас он открыт. Оно не прокатит.
Не нужно ничего такого.
На сервере просто, Объект.Запасы.Очистить()
и т.д., никаких получений объекта не требуется.

А для того чтобы ссылку получить, и к примеру вызвать функции модуля объекта, то применять РеквизитФормыВЗначение
14. EVKash 14 21.08.17 15:16 Сейчас в теме
(11) Белиберда...
Зачем получать объект, если он уже открыт и доступен в форме?
Просто Объект.Запасы.Очистить(); и т.д.
Запись будет штатно-интерактивно пользователем.
12. AlexeyMalko 21.08.17 15:10 Сейчас в теме
Скорей всего неправильно делаю, если новый документ будет то там объекта нет. Подскажите как правильно что то недоходит мне
15. AlexeyMalko 21.08.17 15:33 Сейчас в теме
стёр всю свою ересь по объекту, всё равно ругается на ВыбранныеСтроки. Может дело в том что я их получаю из формы выбора , но не меняю ж ничего

ФормаВыбора = ОткрытьФорму("Документ.ЗаказПоставщику.ФормаВыбора",Параметр, ЭтаФорма, ЭтаФорма, , , Новый ОписаниеОповещения("ПолучитьМассивЗначенийВыбора", ЭтаФорма));
17. Boneman 298 21.08.17 15:36 Сейчас в теме
(15)
всё равно ругается на ВыбранныеСтроки

ты нам скажешь, в какой момент, и на какой строке ? или будем в гадалки играть ?
отладку включи, остановку на ошибке - на худой конец
AlexeyMalko; +1 Ответить
16. AlexeyMalko 21.08.17 15:35 Сейчас в теме
Может что не закрываю её эту формуВыбора , уже не знаю куда смотреть
18. AlexeyMalko 21.08.17 15:46 Сейчас в теме
да точно! включил остановка по ошибке, заполняет табличную часть документа возвращается опять в
&НаКлиенте
Процедура ПолучитьМассивЗначенийВыбора(ВыбранныеЗначения, Парам2) Экспорт
	
	ЗаполнитьПоЗаказамПоставщикаНаСервере(ВыбранныеЗначения.ВыделенныеСтроки);	

КонецПроцедуры	

и ошибка. Остановка по ошибке тоже там и ругается на ВыделенныеСтроки
19. EVKash 14 22.08.17 08:04 Сейчас в теме
(18) Процедура пытается изменить передаваемое ей значение...
Попробуй так
&НаКлиенте
Процедура ПолучитьМассивЗначенийВыбора(ВыбранныеЗначения, Парам2) Экспорт
    
    ВыделенныеСтроки = ВыбранныеЗначения.ВыделенныеСтроки;
    ЗаполнитьПоЗаказамПоставщикаНаСервере(ВыделенныеСтроки);    

КонецПроцедуры
AlexeyMalko; +1 Ответить
20. AlexeyMalko 22.08.17 10:07 Сейчас в теме
(19) да так работает. Спасибо.
Оставьте свое сообщение

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