Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
15 Июн 2021, 17:00
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
МультиВход
 
collapse

Автор Тема: Перенос данных с ТЧ обработки в ТЧ документа  (Прочитано 11527 раз)

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

Оффлайн Mro

  • **
  • Регистрация: 2016-06-22
  • Сообщений: 68
  • РЕПУТАЦИЯ: 0
  • Профессия: Ученик 1С
Всем привет, история следующая:

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

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

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

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

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

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

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

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


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

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

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

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

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

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


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

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


Оффлайн alex0402

  • *****
  • Регистрация: 2010-09-10
  • Сообщений: 2000
  • РЕПУТАЦИЯ: 358
  • КПД: 18%
  • Профессия: Программист 1С
В Обработке:
Реквизит СсылкаНаОбъек - тип Документ.
Табличная часть ТЧ
Реквизит1,
Реквизит2,
и т.д.

&НаСервере

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

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

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

Оффлайн ilyay

  • 1С:Специалист, 1С:Эксперт
  • *****
  • Регистрация: 2011-06-09
  • Сообщений: 562
  • РЕПУТАЦИЯ: 104
  • КПД: 19%
  • Профессия: Разработчик 1С
Сделайте, чтобы у открываемой формы обработки был владелец, тогда исходная форма будет доступна через реквизит ВладелецФормы. И данные вы сможете через него пробросить без оповещений.

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • *****
  • Регистрация: 2010-11-06
  • Сообщений: 5748
  • РЕПУТАЦИЯ: 1105
  • КПД: 19%
  • Красная армия всех сильней!
    • Skype: cska-fanat-kz81
  • Профессия: Разработчик 1С
Лучше почитать "Разработку управляемого интерфейса".
Чем-то тема подбора номенклатуры напоминает...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн Mro

  • **
  • Регистрация: 2016-06-22
  • Сообщений: 68
  • РЕПУТАЦИЯ: 0
  • Профессия: Ученик 1С
Та, сделал пока так:

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

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

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

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

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

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

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

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

Закрыть();

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

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

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

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

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

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

КонецЦикла;

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

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

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

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

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

Оффлайн alex0402

  • *****
  • Регистрация: 2010-09-10
  • Сообщений: 2000
  • РЕПУТАЦИЯ: 358
  • КПД: 18%
  • Профессия: Программист 1С
СтруктураОповещения.Вставить("Номер",Стр.Номер)

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

Оффлайн Mro

  • **
  • Регистрация: 2016-06-22
  • Сообщений: 68
  • РЕПУТАЦИЯ: 0
  • Профессия: Ученик 1С
СтруктураОповещения.Вставить("Номер",Стр.Номер)

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

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

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

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

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

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

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

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

Закрыть();

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

??

Оффлайн alex0402

  • *****
  • Регистрация: 2010-09-10
  • Сообщений: 2000
  • РЕПУТАЦИЯ: 358
  • КПД: 18%
  • Профессия: Программист 1С
если нужны только номера, то да , если еще что-то, то
МассивНомеров.Добавить(Новый Структура("Номер,Контрагент",Номер,Контрагент);
Спасибо за Сказать спасибо

Оффлайн Mro

  • **
  • Регистрация: 2016-06-22
  • Сообщений: 68
  • РЕПУТАЦИЯ: 0
  • Профессия: Ученик 1С
если нужны только номера, то да , если еще что-то, то
МассивНомеров.Добавить(Новый Структура("Номер,Контрагент",Номер,Контрагент);

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

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

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

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

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

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

КонецЦикла;

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

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


Оффлайн alex0402

  • *****
  • Регистрация: 2010-09-10
  • Сообщений: 2000
  • РЕПУТАЦИЯ: 358
  • КПД: 18%
  • Профессия: Программист 1С
Ну да все верно
Для каждого Элемент из Параметр.Номер
Сообщть(Элемент)
КонецЦикла;
что получится?
Спасибо за Сказать спасибо


Теги:
 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Последние вакансии

* Том 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
69 Сообщений
LexaK
67 Сообщений
antoneus antoneus
32 Сообщений
Ивашка
28 Сообщений
neek666
25 Сообщений
KATERINA 861
19 Сообщений
SSC
15 Сообщений
alexandr_ll
13 Сообщений
Алексей_1985_06
12 Сообщений
BuhRust
8 Сообщений

* Кто онлайн

  • Точка Гостей: 582
  • Точка Скрытых: 0
  • Точка Пользователей: 3
  • Точка Сейчас на форуме:

* Облако тэгов

* Инструменты

* Дополнительно

Поиск