Версия для печати темы (https://pro1c.org.ua/index.php?s=31ff954d62db3243860405142d85b07f&showtopic=24565)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Получить доступ к ТЧ документа из формы обработки.

Автор: valleha 12.08.15, 16:54

Добрый день. Устал бороться с поисковиками. Прошу помощи специалистов!
Платформа 8.3 (обычное), конф-я самописная.

Суть вопроса.
Из документа вызывается форма обработки, в которой настраиваются данные для заполнения ТЧ документа. В обработку могу передать значения реквизитов, а назад, по кнопке выполнить, вернуть обработанные данные в табличную часть не получается. Идей ноль. Направьте хотя бы на верную сторону.

Автор: Vofka 12.08.15, 18:04

Опишите подробнее как именно делаете.

Автор: valleha 12.08.15, 19:36

Цитата(Vofka @ 12.08.15, 19:04) *
Опишите подробнее как именно делаете.


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

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

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

На вопрос "почему это нельзя сделать в документе сразу?";
-в обработке пользователь может настраивать смесь, пользуясь большим количеством данных: пропорции, плотности, единицы, цены, остатки и т.д.
-вторая табличная часть ТЧ_СоставНаборовНоменклатуры может содержать большое количество строк, а это затрудняет восприятие информации пользователем. Вероятность того, что пользователь ошибётся, нужно свести к нулю.

Автор: TipsyKID 12.08.15, 19:48

http://pro1c.org.ua/redirect.php?http://infostart.ru/public/84119/

Автор: logist 12.08.15, 20:43

TipsyKID,

Цитата(valleha @ 12.08.15, 17:54) http://pro1c.org.ua/index.php?act=findpost&pid=101890
На вопрос "почему это нельзя сделать в документе сразу?";

Тогда другой вопрос - почему это нельзя сделать при помощи дополнительных форм документа?

Автор: valleha 12.08.15, 20:53

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

Вы имеете ввиду вместо обработки вызвать дополнительную форму документа или использовать дополнительную изначально?

Автор: logist 12.08.15, 21:07

Имею ввиду, у документа создать произвольную форму, и разместить там необходимые данные Объекта для работы, тогда передавать данные между формами не нужно.

Автор: valleha 12.08.15, 21:49

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

От этого варианта я отказался ещё на этапе планирования. Дело в том, что мне нужно вызвать одно окно для редактирования одной строки ТЧ_НаборыНоменклатуры и одной или более строк подчинённой ей ТЧ_СоставНаборовНоменклатуры. после этого обновить родительскую форму документа, добавив нужные строки.
Мне казалось, дело будет за парой строк кода инициализации формы документа и циклом вставки строк в ТЧ. А нет, судя по всему.

Автор: logist 13.08.15, 2:04

Открывайте форму модально, при закрытии возвращайте необходимые параметры.

Автор: TipsyKID 13.08.15, 6:56

Цитата(logist @ 12.08.15, 21:43) *
TipsyKID,

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

Передайте в обработку объект и творите с ним все , что хотите.
Так сделано во всех типовых с внешними обработками табличных частей.

Автор: valleha 13.08.15, 8:21

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



Выдаёт ошибку:
{Документ.ЗаказыПокупателей.Форма.ФормаДокумента.Форма(1017)}: Поле объекта не обнаружено (Документ)
    ОбработкаКомплектацияСмеси.Документ=ЭтотОбъект;

Автор: Petre 13.08.15, 8:38

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

Автор: TipsyKID 13.08.15, 8:45

1. Добавляем реквизит Документ с типом ЗаказПокупателя.
2. Из документа заполняем этот реквизит после создания обработки (фактически раскомментировать осталось)
3. В обработке "передзакрытием" ( или по любому другому обработчику) записываем в реквизит документ все что душа желает.

Автор: valleha 13.08.15, 19:39

Цитата(TipsyKID @ 13.08.15, 9:45) *
3. В обработке "передзакрытием" ( или по любому другому обработчику) записываем в реквизит документ все что душа желает.

дело в том, что с этим пунктом у меня проблемы. мне стыдно, но туплю, простите.
Как обратиться к реквизитам объекта документа?

Автор: valleha 13.08.15, 19:39

.

Автор: valleha 13.08.15, 22:02

При вызове формы обработки:

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


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


В результате ничего!

Автор: TipsyKID 14.08.15, 7:32

Передавайте не ссылку а сам объект :
Реквизит у обработки должен быть ДокументОбъект.ЗаказПокупателя.

ОбработкаКомплектацияСмеси.Наименование="Новая смесь";
    ОбработкаКомплектацияСмеси.Документ=ЭтотОбъект;

При заполнении :
//Получение непонятно чего   ////////////////////////////////////////////////
        //Объект = Документ.ПолучитьОбъект();* закоментируйте
        Строка=Объект.ТЧ_СмесиКТ.Добавить();
        Строка.СмесьНМНК = Наименование;

Автор: valleha 14.08.15, 8:36

Цитата(TipsyKID @ 14.08.15, 8:32) *
Реквизит у обработки должен быть ДокументОбъект.ЗаказПокупателя.


Как всё просто оказалось. У меня был выбран тип ДокументСсылка.
Спасибо огромное!

Автор: TipsyKID 14.08.15, 11:18

Возможность поблагодарить отвечающего

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



Если чей-то пост Вы посчитали для себя полезным - жмите на кнопку!

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua