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

Перенос данных с ТЧ обработки в ТЧ документа

Автор Mro, 24 окт 2016, 11:46

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

Mro

Всем привет, история следующая:

есть форма документа "Тест" с табличной частью "ТЧ", реквизиты "ТЧ" - "Номер", "Количество", Номенклатура".

еще есть обработка с формой "Форма" и табличной частью "ЧТО" с реквизитом "Номер".

Обработка открывается из формы документа по кнопке.

Что я хочу сделать - в форме документа есть, к примеру, три заполненных строки, кроме реквизита "Номер". Я открываю форму обработки, создаю там три строки, заполняю реквизит "Номер" и по нажатию кнопки "Перенести" хочу перенести значения в строки документа. Т.е. из каждой строки № "n" обработки значения реквизита "Номер" должно переноситься в каждую строку № "n" документа.

Так вот, сейчас у меня получается делать это только для одной выбранной строки. А хочу, чтобы для всех :).

На кнопку на форме док-та код:
&НаКлиенте
Процедура Обработка(Команда)

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

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


ЗаполнитьЗначенияСвойств(СтрокаВыбранная,ДанныеЗакрытия,"Номер");

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


&НаКлиенте
Процедура Перенос(Команда)
   
Для каждого     Стр из Объект.ЧТО
Цикл
Номер=Стр.Номер;
КонецЦикла;   

СтруктураВозврата = Новый Структура("Номер",Номер);

Закрыть(СтруктураВозврата);

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



как мне это грамотно поправить? есть ощущение, что где-то нужно задействовать цикл при передаче структуры возврата и номера строк, но не понимаю, как это организовать.(

Заранее спасибо!

alex0402

В Обработке:
Реквизит СсылкаНаОбъек - тип Документ.
Табличная часть ТЧ
Реквизит1,
Реквизит2,
и т.д.

&НаСервере


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

ОткытьФорму("ФормаДокумента",///здесь точно не помню, если нужно показать форму...

Спасибо за Сказать спасибо

ilyay

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

cska-fanat-kz

Лучше почитать "Разработку управляемого интерфейса".
Чем-то тема подбора номенклатуры напоминает...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Mro

Та, сделал пока так:

на форме документа открываю обработку :

&НаКлиенте
Процедура Обработка(Команда)

ОткрытьФорму("Обработка.ДляПередачи.Форма.Форма",,ЭтаФорма,,,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

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


в обработке добавляю две строки, переношу по команде:

&НаКлиенте
Процедура Перенос(Команда)

Для каждого     Стр из Объект.ЧТО
Цикл
СтруктураОповещения = Новый Структура;
СтруктураОповещения.Вставить("Номер",Стр.Номер);

Оповестить("ПередачаНомеров",СтруктураОповещения,"ОбработкаЗаполнения");
КонецЦикла;

Закрыть();

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


в модуле формы документа отлавливаю оповещение:

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

Если Источник = "ОбработкаЗаполнения" Тогда
Если ИмяСобытия = "ПередачаНомеров" Тогда

Для каждого Стр из Объект.ТЧ Цикл

Стр.Номер = Параметр.Номер;

КонецЦикла;

КонецЕсли;
КонецЕсли;

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


Проблема - строки ТЧ документа заполняются значением последней строки из обработки, а мне нужно, чтобы каждым.(

Кол-во строк обработки и документа всегда равно.

Как мне поправить процедуру обработки оповещения?(

alex0402

Цитата: Mro от 26 окт 2016, 10:53СтруктураОповещения.Вставить("Номер",Стр.Номер)

сюда нужно вставлять не номер, а массив структур, например.
Спасибо за Сказать спасибо

Mro

Цитата: alex0402 от 26 окт 2016, 11:08
Цитата: Mro от 26 окт 2016, 10:53СтруктураОповещения.Вставить("Номер",Стр.Номер)

сюда нужно вставлять не номер, а массив структур, например.

что-то вроде:

&НаКлиенте
Процедура Перенос(Команда)

МассивНомеров=Новый Массив;

Для каждого     Стр из Объект.ЧТО
Цикл

Номер=Стр.Номер;
МассивНомеров.Добавить(Номер);

СтруктураОповещения = Новый Структура;
СтруктураОповещения.Вставить("Номер",МассивНомеров);

Оповестить("ПередачаНомеров",СтруктураОповещения,"ОбработкаЗаполнения");
КонецЦикла;

Закрыть();

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


??

alex0402

если нужны только номера, то да , если еще что-то, то
МассивНомеров.Добавить(Новый Структура("Номер,Контрагент",Номер,Контрагент);
Спасибо за Сказать спасибо

Mro

Цитата: alex0402 от 26 окт 2016, 11:22
если нужны только номера, то да , если еще что-то, то
МассивНомеров.Добавить(Новый Структура("Номер,Контрагент",Номер,Контрагент);

да, только номера. А в процедуре обработки оповещения нужно как-то особенно получать номера?

сейчас с таким кодом мне переносит в значения строк ТЧ документа почему-то слово "Массив".))

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

Если Источник = "ОбработкаЗаполнения" Тогда
Если ИмяСобытия = "ПередачаНомеров" Тогда

Для каждого Стр из Объект.ТЧ Цикл

Стр.Номер = Параметр.Номер;

КонецЦикла;

КонецЕсли;
КонецЕсли;

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



alex0402

Ну да все верно
Для каждого Элемент из Параметр.Номер
Сообщть(Элемент)
КонецЦикла;

что получится?
Спасибо за Сказать спасибо

Теги:

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

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

Поиск