Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Получить доступ к ТЧ документа из формы обработки.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
valleha
Добрый день. Устал бороться с поисковиками. Прошу помощи специалистов!
Платформа 8.3 (обычное), конф-я самописная.

Суть вопроса.
Из документа вызывается форма обработки, в которой настраиваются данные для заполнения ТЧ документа. В обработку могу передать значения реквизитов, а назад, по кнопке выполнить, вернуть обработанные данные в табличную часть не получается. Идей ноль. Направьте хотя бы на верную сторону.
Vofka
Опишите подробнее как именно делаете.
valleha
Цитата(Vofka @ 12.08.15, 19:04) необходимо зарегистрироваться для просмотра ссылки
Опишите подробнее как именно делаете.


Документ ЗаказПокупателя:
-ТЧ_НаборыНоменклатуры, (содержит ссылки на стандартные наборы из справочника и наборные в ручную)
-ТЧ_СоставНаборовНоменклатуры (содержит список входящих в набор материалов)

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

Далее в обработке в двух похожих табличных частях (как в документе) создаётся или редактируется набор и по кнопке выполнить необходимо заполнить данными этих ТЧ табличные части документа владельца. Совет и помощь мне нужны на этом этапе. Как в обработке поймать форму открытого документа и начинить его данными из обработки?

На вопрос "почему это нельзя сделать в документе сразу?";
-в обработке пользователь может настраивать смесь, пользуясь большим количеством данных: пропорции, плотности, единицы, цены, остатки и т.д.
-вторая табличная часть ТЧ_СоставНаборовНоменклатуры может содержать большое количество строк, а это затрудняет восприятие информации пользователем. Вероятность того, что пользователь ошибётся, нужно свести к нулю.
TipsyKID
необходимо зарегистрироваться для просмотра ссылки
logist
TipsyKID,
Цитата(valleha @ 12.08.15, 17:54) необходимо зарегистрироваться для просмотра ссылки
Платформа 8.3 (обычное),



Цитата(valleha @ 12.08.15, 20:36) необходимо зарегистрироваться для просмотра ссылки
На вопрос "почему это нельзя сделать в документе сразу?";

Тогда другой вопрос - почему это нельзя сделать при помощи дополнительных форм документа?
valleha
Цитата(logist @ 12.08.15, 21:43) необходимо зарегистрироваться для просмотра ссылки
Тогда другой вопрос - почему это нельзя сделать при помощи дополнительных форм документа?

Вы имеете ввиду вместо обработки вызвать дополнительную форму документа или использовать дополнительную изначально?
logist
Имею ввиду, у документа создать произвольную форму, и разместить там необходимые данные Объекта для работы, тогда передавать данные между формами не нужно.
valleha
Цитата(logist @ 12.08.15, 22:07) необходимо зарегистрироваться для просмотра ссылки
Имею ввиду, у документа создать произвольную форму, и разместить там необходимые данные Объекта для работы, тогда передавать данные между формами не нужно.

От этого варианта я отказался ещё на этапе планирования. Дело в том, что мне нужно вызвать одно окно для редактирования одной строки ТЧ_НаборыНоменклатуры и одной или более строк подчинённой ей ТЧ_СоставНаборовНоменклатуры. после этого обновить родительскую форму документа, добавив нужные строки.
Мне казалось, дело будет за парой строк кода инициализации формы документа и циклом вставки строк в ТЧ. А нет, судя по всему.
logist
Открывайте форму модально, при закрытии возвращайте необходимые параметры.
TipsyKID
Цитата(logist @ 12.08.15, 21:43) необходимо зарегистрироваться для просмотра ссылки
TipsyKID,

Проглядел, тогда я не понимаю в чем вообще сложность.
Строчка которую закомментировали все решает :
//ОбработкаКомплектацияСмеси.Документ=ЭтотОбъект;

Передайте в обработку объект и творите с ним все , что хотите.
Так сделано во всех типовых с внешними обработками табличных частей.
valleha
Цитата(TipsyKID @ 13.08.15, 7:56) необходимо зарегистрироваться для просмотра ссылки
Строчка которую закомментировали все решает :
//ОбработкаКомплектацияСмеси.Документ=ЭтотОбъект;



Выдаёт ошибку:
{Документ.ЗаказыПокупателей.Форма.ФормаДокумента.Форма(1017)}: Поле объекта не обнаружено (Документ)
    ОбработкаКомплектацияСмеси.Документ=ЭтотОбъект;
Petre
Так добавьте это поле в обработке. Или реквизит обработки, или экспортную переменную модуля...
TipsyKID
1. Добавляем реквизит Документ с типом ЗаказПокупателя.
2. Из документа заполняем этот реквизит после создания обработки (фактически раскомментировать осталось)
3. В обработке "передзакрытием" ( или по любому другому обработчику) записываем в реквизит документ все что душа желает.
valleha
Цитата(TipsyKID @ 13.08.15, 9:45) необходимо зарегистрироваться для просмотра ссылки
3. В обработке "передзакрытием" ( или по любому другому обработчику) записываем в реквизит документ все что душа желает.

дело в том, что с этим пунктом у меня проблемы. мне стыдно, но туплю, простите.
Как обратиться к реквизитам объекта документа?
valleha
.
valleha
При вызове формы обработки:
Процедура КоманднаяПанель6СоздатьСмесь(Кнопка)
        ОбработкаКомплектацияСмеси = Обработки.КомплектацияСмеси.ПолучитьФорму("Форма", ЭтаФорма);
    ОбработкаКомплектацияСмеси.ЗакрыватьПриЗакрытииВладельца=Истина;
    ОбработкаКомплектацияСмеси.Наименование="Новая смесь";
    ОбработкаКомплектацияСмеси.Документ=ЭтотОбъект.Ссылка;
    ОбработкаКомплектацияСмеси.ПолучитьФорму().ОткрытьМодально();
КонецПроцедуры


Выполнение обработки:
Процедура КнопкаВыполнитьНажатие(Кнопка)
    Если ПроверитьЗаполнение()=Ложь ИЛИ СмесьКТ.Количество()=0 Тогда
        Сообщить("Ошибка заполнения!");
        Возврат;
    ИначеЕсли Окр(СмесьНМНК.Итог("ПроцентВоВладельце")/СмесьКТ.Количество(), 2)=100 Тогда
        
               //Получение непонятно чего   ////////////////////////////////////////////////
                Объект = Документ.ПолучитьОбъект();
        Строка=Объект.ТЧ_СмесиКТ.Добавить();
        Строка.СмесьНМНК = Наименование;    
        
        Для Каждого СтрокаТаб из СмесьНМНК Цикл
            
            //заполнить ТЧ_Ёмкости
            
        КонецЦикла;
        /////////////////////////////////////////////////////////////////////////////////
    КонецЕсли;
    ЭтаФорма.Закрыть();    
КонецПроцедуры


В результате ничего!
TipsyKID
Передавайте не ссылку а сам объект :
Реквизит у обработки должен быть ДокументОбъект.ЗаказПокупателя.
ОбработкаКомплектацияСмеси.Наименование="Новая смесь";
    ОбработкаКомплектацияСмеси.Документ=ЭтотОбъект;

При заполнении :
//Получение непонятно чего   ////////////////////////////////////////////////
        //Объект = Документ.ПолучитьОбъект();* закоментируйте
        Строка=Объект.ТЧ_СмесиКТ.Добавить();
        Строка.СмесьНМНК = Наименование;
valleha
Цитата(TipsyKID @ 14.08.15, 8:32) необходимо зарегистрироваться для просмотра ссылки
Реквизит у обработки должен быть ДокументОбъект.ЗаказПокупателя.


Как всё просто оказалось. У меня был выбран тип ДокументСсылка.
Спасибо огромное!
TipsyKID
Возможность поблагодарить отвечающего

У нас на форуме есть "хорошая" кнопка, нажав на которую можно без лишних слов выразить человеку благодарность за его сообщение. У новичков возникнет вопрос: "А где же она?". А вот она:



Если чей-то пост Вы посчитали для себя полезным - жмите на кнопку!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.