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

Заполнение табличной части документа из другого документа.

Автор Александр Александр0, 19 фев 2020, 16:28

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

Александр Александр0

Здравствуйте, начинаю только писать в конфигурации, волнует такой вопрос. Есть "Документ1" с табличной частью, у него есть кнопка "Подобрать" при нажатии должен выходить список документов "Документ2"...щелкая по ним они добавляются в табл. часть "Документ1"
&НаКлиенте
Процедура КнопкаВыбор(Команда)
   РезультатОтбора = ОткрытьФорму("Документ.Документ2.ФормаВыбора");   //при нажатии открывает форму выбора документ2
   НоваяСтрока = Объект.ТабЧастьДокумент1.Добавить();
   НоваяСтрока.Реквизит1=РезультатОтбора.Реквизит1;  // ругается и не отправляет в документ 1

КонецПроцедуры
Подскажите как правильно написать или где посмотреть. Спасибо Заранее)

alexandr_ll

Цитата: Александр Александр0 от 19 фев 2020, 16:28
Здравствуйте, начинаю только писать в конфигурации, волнует такой вопрос. Есть "Документ1" с табличной частью, у него есть кнопка "Подобрать" при нажатии должен выходить список документов "Документ2"...щелкая по ним они добавляются в табл. часть "Документ1"
&НаКлиенте
Процедура КнопкаВыбор(Команда)
   РезультатОтбора = ОткрытьФорму("Документ.Документ2.ФормаВыбора");   //при нажатии открывает форму выбора документ2
   НоваяСтрока = Объект.ТабЧастьДокумент1.Добавить();
   НоваяСтрока.Реквизит1=РезультатОтбора.Реквизит1;  // ругается и не отправляет в документ 1

КонецПроцедуры
Подскажите как правильно написать или где посмотреть. Спасибо Заранее)
Я конечно не коллекционер нецензурной лексики, но напишите - как ругается?
Какие значения имеют "НоваяСтрока.Реквизит1" и "РезультатОтбора.Реквизит1"?

Александр Александр0

Ругается на РезультатОтбора.Реквизит1 (поле объекта не обнаружено Реквизит1) , скорее всего там не так надо писать, а значения одинаковые текстовые

bsn-chita

Я бы начал с того что вы сформулируете что у вас есть и что в конечном итоге хотите получить. Из того что вы писали выше пока ясно что есть два документа(Документ1 и Документ2). У Документа1 есть табличная часть(предположительно ТабЧастьДокумент1) и один из реквизитов этой табличной части имеет тип ДокументСсылка.Документ2(допустим это будет Реквизит1). У Документ2 тоже есть Реквизит1(исходя из этого РезультатОтбора.Реквизит1)?
Возможны варианты от спец формы подбора и до стандартной формы выбора(одиночный выбор, множественный выбор).
Если разрешить использовать модальные окна и запустив отладку в толстом клиенте можно почти ни чего не менять в коде.

   РезультатОтбора = ОткрытьФормуМодально("Документ.Документ2.ФормаВыбора");
   НоваяСтрока = Объект.ТабЧастьДокументы.Добавить();
   НоваяСтрока.Документ2 = РезультатОтбора;

Александр Александр0

Вот скриншоты, при нажатии кнопки ВыборВагона выходит список документов (ФормаВыбора) и щелкая по документам добавляются в табличную часть документа 2

ef0din

Насколько помню, "ОткрытьФорму" - это метод асинхронного режима. Т.е. отладка идет дальше по строкам до конца процедуры. Результат Вы получите, добавив оповещение. Тогда, после открытия формы, Вы выбираете нужные данные и, при закрытии этой формы выбора, отладка "проходит" в процедуру обработки оповещения, которую вы указали в параметрах "ОткрытьФорму". Продура обработки оповещения должна быть экспортной, на клиенте. Первый параметр процедуры - результат закрытия формы(при закрытии формы возвращаете данные выбора), вторая - доп. параметры, если вы указали их при создании обработкиоповещения. Там по результату закрытия формы выбора(первый параметр обработки оповещения) Вы и заполняете то, что Вам нужно заполнять. На память мог что-то перепутать, но вроде так. Почитайте про этот метод в синтаксис-помощнике.

bsn-chita

Вариант 1:

&НаКлиенте
Процедура ВыборВагона(Команда)
ПараметрыФормыВыбора = Новый Структура;
ПараметрыФормыВыбора.Вставить("ЗакрыватьПриВыборе", Истина);
ПараметрыФормыВыбора.Вставить("МножественныйВыбор", Истина);
ОткрытьФорму("Документ.Документ1.ФормаВыбора",ПараметрыФормыВыбора,ЭтаФорма,,,, Новый ОписаниеОповещения("ВыборВагонаЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры

&НаКлиенте
Процедура ВыборВагонаЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если ЗначениеЗаполнено(Результат) И ТипЗнч(Результат) = Тип("Массив") Тогда
ЗаполнитьТЧ(Результат);
КонецЕсли;
КонецПроцедуры

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


Вариант 2:

&НаКлиенте
Процедура ВыборВагона(Команда)
ПараметрыФормыВыбора = Новый Структура;
ПараметрыФормыВыбора.Вставить("ЗакрыватьПриВыборе", Ложь);
ПараметрыФормыВыбора.Вставить("МножественныйВыбор", Истина);
ОткрытьФорму("Документ.Документ1.ФормаВыбора",ПараметрыФормыВыбора,ЭтаФорма,,,,, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)//Событие у формы
ЗаполнитьТЧ(ВыбранноеЗначение);
КонецПроцедуры

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

У Чистова на его ютуб канале по моему был пример где он делал форму подбора отдельную куда передавалась табличная часть, в форме она модифицировалась и возвращалась при закрытии.

Александр Александр0

Цитата: bsn-chita от 21 фев 2020, 03:11
Вариант 1:

&НаКлиенте
Процедура ВыборВагона(Команда)
ПараметрыФормыВыбора = Новый Структура;
ПараметрыФормыВыбора.Вставить("ЗакрыватьПриВыборе", Истина);
ПараметрыФормыВыбора.Вставить("МножественныйВыбор", Истина);
ОткрытьФорму("Документ.Документ1.ФормаВыбора",ПараметрыФормыВыбора,ЭтаФорма,,,, Новый ОписаниеОповещения("ВыборВагонаЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры

&НаКлиенте
Процедура ВыборВагонаЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если ЗначениеЗаполнено(Результат) И ТипЗнч(Результат) = Тип("Массив") Тогда
ЗаполнитьТЧ(Результат);
КонецЕсли;
КонецПроцедуры

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


Вариант 2:

&НаКлиенте
Процедура ВыборВагона(Команда)
ПараметрыФормыВыбора = Новый Структура;
ПараметрыФормыВыбора.Вставить("ЗакрыватьПриВыборе", Ложь);
ПараметрыФормыВыбора.Вставить("МножественныйВыбор", Истина);
ОткрытьФорму("Документ.Документ1.ФормаВыбора",ПараметрыФормыВыбора,ЭтаФорма,,,,, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)//Событие у формы
ЗаполнитьТЧ(ВыбранноеЗначение);
КонецПроцедуры

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

У Чистова на его ютуб канале по моему был пример где он делал форму подбора отдельную куда передавалась табличная часть, в форме она модифицировалась и возвращалась при закрытии.
Спасибо огромное, помогло.:zebzdr: Осталось настроить что бы форма выбора не закрывалась при  выборе одного документа. С меня бутылка коньяка) скажите как только с вами связаться:)

bsn-chita

Цитата: Александр Александр0 от 21 фев 2020, 05:58Осталось настроить что бы форма выбора не закрывалась при  выборе одного документа.
Через параметры формы решается("ЗакрыватьПриВыборе"). А "МножественныйВыбор" позволяет выбирать несколько элементов.

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

Рейтинг@Mail.ru Rambler's Top100

Поиск