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

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

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

Автор: dobruan 27.08.15, 15:46

Всем приветь.

Не выход сделать такую вещь....

Из табличной части Документа для выбора ТМЦ окрывается модально форма обработки, на форме которой есть реквезит типа Справочник.ТМЦ.

Так вот, нужно при выборе этого реквизита остатки выводились(расчитывались) по конкретному складу, задаётся в документе.

В форме Справочника.ТМЦ имееется возможность выбора склада и она работает. Пользователю лень делать один клик мышью. А у меня не выходит програмно сделать это.

Кто сталкивался подскажите.


 ! 

Правила, п.5
 

Автор: igmig65 27.08.15, 17:22

Если ТиС, то кнопка подбор, там все реализовано, склад берется из контекста документа, который передается как параметр.
Если нет, то передавайте в обработку контекст документа, соответственно Склад = Конт.Склад;

Автор: dobruan 27.08.15, 17:47

Цитата(igmig65 @ 27.08.15, 18:22) *
Если ТиС, то кнопка подбор, там все реализовано, склад берется из контекста документа, который передается как параметр.
Если нет, то передавайте в обработку контекст документа, соответственно Склад = Конт.Склад;

Конфигурация самописная. Есть куски взятые из ТиС, но это не более чем 20%.
Обработке склад получен. Как при открытии справочника из обработки задать(передать) склад. В этом и есть основная загвоздка.

Автор: igmig65 27.08.15, 18:29

Сначала передавайте контекст в обработку, потом этот же контекст документа передавайте в форму справочника.
Склад = Форма.Параметр.Склад, если реквизит в документе - Склад.

Автор: dobruan 27.08.15, 20:58

Цитата(igmig65 @ 27.08.15, 19:29) *
Сначала передавайте контекст в обработку, потом этот же контекст документа передавайте в форму справочника.
Склад = Форма.Параметр.Склад, если реквизит в документе - Склад.

В обработке
Склад = ДокументПодбора.Склад; //получает название склада
В справочнике
Склад = Форма.Параметр.Склад;// Значение не представляет агрегатный объект (Склад)
Что не так? 44000000.gif

Автор: dobruan 27.08.15, 22:25

В документе

    спПарам = СоздатьОбъект("СписокЗначений");
    спПарам.Установить("ДокументПодбора", Контекст);
    спПарам.Установить("ТМЦ", ?(ТМЦ.Выбран()=1, ТМЦ, 0));
    спПарам.Установить("Склад", ?(Склад.Выбран()=1, Склад, 0));
    спПарам.Установить("ТабПодбора", 0);
    ОткрытьФормуМодально("Обработка.ПодборТМЦДляДокумента", спПарам);

В обработке
Процедура ПриОткрытии()  
            Если (ТипЗначенияСтр(Форма.Параметр) = "СписокЗначений") Тогда
        Попытка
            ДокументПодбора = Форма.Параметр.Получить("ДокументПодбора");
            ТМЦ = Форма.Параметр.Получить("ТМЦ");
        Исключение
            Сообщить("В обробку підбору ТМЦ передано некоректні параметри!", "!");
            СтатусВозврата(0);
        КонецПопытки;
    Иначе
        Сообщить("Обробка підбору ТМЦ викликається тільки з документів!", "!");
        СтатусВозврата(0);
    КонецЕсли;
    СкладДок = ДокументПодбора.Склад;  
    ТМЦ.ВыборГруппы(0);
КонецПроцедуры

В справочнике
Процедура ПриОткрытии()
    Конт = Форма.Параметр;
         склад=Форма.Параметр.Склад;
****
        КонецПроцедуры

Автор: igmig65 28.08.15, 3:59

Во первых: зачем передавать в параметр список значений, если передаете контекст документа, все реквизиты доступны ч-з контекст.
Тем более ТМЦ, нужно получать в цикле. Достаточно в док-те:

ОткрытьФормуМодально("Обработка.ПодборТМЦДляДокумента", Контекст)

в обработке:
Процедура ПриОткрытии() 
    Конт =  Форма.Параметр;
    Если (ТипЗначенияСтр(Конт) = "ГрупповойКонтекст") Тогда
           Склад = Конт.Склад;

    Иначе
        Сообщить("Обробка підбору ТМЦ викликається тільки з документів!", "!");
        СтатусВозврата(0);
    КонецЕсли;
    ТМЦ.ВыборГруппы(0);
КонецПроцедуры

+
Процедура ПриНачалеВыбораЗначения(Рекв,Флаг)
    Флаг=0;
    Если Рекв = "ТМЦ" Тогда
            ОткрытьПодбор("Справочник.ТМЦ",,Контекст,0,ТМЦ);//если в обработке есть реквизит склад
    Иначе
        Флаг=1;
    КонецЕсли;
КонецПроцедуры

Тут можно и просто ОткрытьФорму("Справочник.ТМЦ", Контекст)
Тогда в справочнике в
ПриОткрытии()
       Конт =  Форма.Параметр;
       Склад = Конт.Склад;//если в обработке есть реквизит склад

Если же в обработке в ПриНачалеВыбораЗначения(Рекв,Флаг)
       Конт =  Форма.Параметр; 
       ОткрытьФорму("Справочник.ТМЦ", Конт);

здесь в Справочник.ТМЦ передается уже контекст документа
У вас же в обработке справочник открывается просто кнопкой и никакие параметры не передаются....

Автор: dobruan 28.08.15, 9:53

Цитата(igmig65 @ 28.08.15, 4:59) *
Во первых: зачем передавать в параметр список значений, если передаете контекст документа, все реквизиты доступны ч-з контекст.
Тем более ТМЦ, нужно получать в цикле. Достаточно в док-те:
ОткрытьФормуМодально("Обработка.ПодборТМЦДляДокумента", Контекст)

в обработке:
Процедура ПриОткрытии() 
    Конт =  Форма.Параметр;
    Если (ТипЗначенияСтр(Конт) = "ГрупповойКонтекст") Тогда
           Склад = Конт.Склад;

    Иначе
        Сообщить("Обробка підбору ТМЦ викликається тільки з документів!", "!");
        СтатусВозврата(0);
    КонецЕсли;
    ТМЦ.ВыборГруппы(0);
КонецПроцедуры

+
Процедура ПриНачалеВыбораЗначения(Рекв,Флаг)
    Флаг=0;
    Если Рекв = "ТМЦ" Тогда
            ОткрытьПодбор("Справочник.ТМЦ",,Контекст,0,ТМЦ);//если в обработке есть реквизит склад
    Иначе
        Флаг=1;
    КонецЕсли;
КонецПроцедуры

Тут можно и просто ОткрытьФорму("Справочник.ТМЦ", Контекст)
Тогда в справочнике в
ПриОткрытии()
       Конт =  Форма.Параметр;
       Склад = Конт.Склад;//если в обработке есть реквизит склад

Если же в обработке в ПриНачалеВыбораЗначения(Рекв,Флаг)
       Конт =  Форма.Параметр; 
       ОткрытьФорму("Справочник.ТМЦ", Конт);

здесь в Справочник.ТМЦ передается уже контекст документа
У вас же в обработке справочник открывается просто кнопкой и никакие параметры не передаются....


Чуток не то что нужно.
В обработке нет реквизита Склад.
Добавил в обработку Процедура ПриНачалеВыбораЗначения(Рекв,Флаг)
В обработке нет склада.
В справочник добавил
Конт =  Форма.Параметр; 
склад=конт.склад;

Вылетает с ошибкой поле агрегатного типа не обнаружено....
44000000.gif
Список значений нужно для других целей.
Нужно "передать С документа Значение реквизита в форму справочника через форму обработки отрываемую модально".
Пока не выходит.
Запутался с контекстами.

Автор: igmig65 28.08.15, 11:24

Цитата
Склад = Конт.Склад;//если в обработке есть реквизит склад

тяжело его кинуть в форму обработки? если да, то нужно передавать контекст документа из документа в обработку, и его же потом из обработки передавать в справочник.
в документе:
Процедура ПриНачалеВыбораЗначения(Рекв,Флаг)
    Флаг=0;
    Если Рекв = "ТМЦ" Тогда
            ОткрытьПодбор("Справочник.ТМЦ",,Контекст,0,ТМЦ);
    Иначе
        Флаг=1;
    КонецЕсли;
КонецПроцедуры

В справочнике:
Процедура ПриОткрытии()
    Конт =  Форма.Параметр;
    склад=конт.склад;
КонецПроцедуры

и зачем обработка?
Если же она нужна? мало ли, то:
В док-те:
Процедура ПриНачалеВыбораЗначения(Рекв,Флаг)
    Флаг=0;
    Если Рекв = "ТМЦ" Тогда
            ОткрытьФормуМодально("Обработка.ПодборТМЦДляДокумента", Контекст);
    Иначе
        Флаг=1;
    КонецЕсли;
КонецПроцедуры

в обработке:
Процедура ПриНачалеВыбораЗначения(Рекв,Флаг)
    Флаг=0;
    Если Рекв = "ТМЦ" Тогда
            Конт =  Форма.Параметр;
            ТМЦ = Конт.ТМЦ;
            ОткрытьПодбор("Справочник.ТМЦ","Для подбора",Конт,0,ТМЦ);
    Иначе
            Флаг=1;
    КонецЕсли;
КонецПроцедуры

и в справочнике:
Процедура ПриОткрытии()
    Конт =  Форма.Параметр;
    склад=конт.склад;
КонецПроцедуры



Да и вообще в Тисе все это реализовано просто через кнопку Подбор, там склад передается сразу в справочник ТМЦ, и он (реквизит Склад) уже при открытии заполнен....в форме"ДляПодбора", и в этой форме реализован вывод остатка в самой форме.
Поэтому можно в этой форме брать ТМЦ из контекста док-та, чтобы на нем и спозиционироваться.

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