Вход | Регистрация


1С:Предприятие ::

Метки:

Проблема с Контекстом

Я
   CzujMao
24.01.04 - 13:50
Я в полном охренении... Передаю во внешнююю обработку Контекст открытой формы документа. Передаётся нормально, атрубуты читаются, но ни НоваяСтрока(), ни ЗагрузитьТабличнуюЧасть() не срабатывают, но и не ругаются 8((( УдалитьСтроки() по крайней мере честно сказала, что "невозможно удалить строку" 8((( Хелп, хелп ми...
 
 
   skunk
 
2 - 24.01.04 - 14:05
передай обработке не контекст а сам документ.
   CzujMao
3 - 24.01.04 - 14:12
Вместо Контекст использовать ТекущийДокумент()... хм, попробую
   CzujMao
4 - 24.01.04 - 14:39
Не помогло 8( Ругаться на УдалитьСтроки() перестал, но новые добавлять так и не хочет 8((
   bs
 
5 - 24.01.04 - 14:40
У меня тоже из вне ничего не получилось. Можно из ВО активизировать предопределенную процедуру документа ОбработкаПодбора() в которую можем что то передать и которая может добавлять строки.
   CzujMao
6 - 24.01.04 - 14:48
Не помогло 8( Ругаться на УдалитьСтроки() перестал, но новые добавлять так и не хочет 8((
   bs
 
7 - 24.01.04 - 14:55
Скорее всего я не прав. Активизировать ОбработкаПодбора() можно из формы, открытой для подбора или выбора значения. У меня нет вариантов.
   skunk
 
8 - 24.01.04 - 14:57
//*******************************************

Procedure Print()
    OpenFormModal("Отчет", Context, "d:\1\1.ert");
EndProcedure

//*******************************************

Procedure OnOpen()
    Doc = Form.Parameter;
    Doc.UnloadTable(Tab);
EndProcedure

Без проблем все выгружает
   GrayT
 
9 - 24.01.04 - 14:58
ОткрытьФорму("Отчет", Контекст, КаталогИБ()+"\ExtForms\1.ert");

------------------------------
Процедура ПриОткрытии()
    Форма.Параметр.НоваяСтрока()
    СтатусВозврата(0); 
КонецПроцедуры//ПриОткрытии


То-же работает
   skunk
 
11 - 24.01.04 - 15:16
Если получааем каки, не есть гуд.
   skunk
 
12 - 24.01.04 - 15:16
тьфу если не модально получаем каки.
   GrayT
 
13 - 24.01.04 - 15:18
Согласен
   345
14 - 24.01.04 - 16:54
Активней, товарищи, активней ....

Озвучены еще не все варианты ...
   skunk
 
15 - 24.01.04 - 17:05
(14)а ваши предложения
   345
16 - 24.01.04 - 17:27
Да я подожду ... Куда торопиться ...

Насчет модальности уже ошиблись ....
   skunk
 
17 - 24.01.04 - 17:57
на нет и суда нет. млин так неохота конфигуратор запускать
   345
18 - 24.01.04 - 18:34
Фиг с тобой.. Вот первый способ - через подбор ...

все почему то считают, что подбор можно осуществлять только через форму списка справочника... Но можно и через обработку - открываемую так

проц-ра ПОДБОР
КФП = CreateObject("ValueList");
КФП.AddValue( ДатаДок,"ДатаДок");
КФП.AddValue( Контрагент,"Контрагент"); 
КФП.AddValue( МестоХранения,"МестоХранения"); 
КФП.AddValue( Context,"Конт");
сюды можно впендюрить и ТЗ, загрузив ее в СписокЗначений
ОткрытьПодбор ("Обработка.ВыборТовараИзРезерва",,КФП);
конецПроц

Ловля выбранных значений
------------------------------------------
Процедура ОбработкаПодбора(ВыбрТовар)
    if ValueTypeStr(ВыбрТовар) ="СписокЗначений" then 
        тз=ВыбрТовар.Get("ТЗ");
        if тз.LinesCnt() =0 then DoMessageBox ("Нет выбранных товаров");     return; endIf; 
       тз_КолСтрок=тз.LinesCnt();
               .....далее обтяпываем свои делишки ....
                ....................................... КонецПроц-ры// ОбработкаПодбора()





в обработке ВыборТовараИзРезерва
---------------------------------------
Процедура ВозвратитьЧЁнасобирали()         
    Сз=CreateObject("ValueList");
       // ТЗ - элемент формы!!!! 

    Сз.AddValue( КонтрагентФ,"Контрагент");
    Сз.AddValue( ТЗ,"ТЗ");  
    Form.MakeChoice(СЗ );// ПНУЛИ ДОК - чтобы принял ответ ....

    Form.Close(0);// ЗАКРЫЛИ ОБРАБОТКУ - чтобы зверь не косячил (ВАЖНО!!!)

    return;
КонецПроцедуры   
------------------------------
procedure OnOpen()  // ПриОткрытии

    if ValueTypeStr(Form.Parameter) <> "СписокЗначений"  then 
        ReturnStatus(0); 
        Return; 
    endIf; 
    Пар = Form.Parameter;
    Контрагент=Form.Parameter.Get("Контрагент"); 
    КонтрагентФ=Form.Parameter.Get("Контрагент");
    ДатаДока =Form.Parameter.Get("ДатаДок");    
    МестоХранения =Form.Parameter.Get("МестоХранения");   
    ДатаНаФорме =Form.Parameter.Get("ДатаДок");  
    Конт = Form.Parameter.Get("Конт");
    Form.тз.Visible(0);
       .... далее делаем что надо .......
КонецПроц


ЗАМЕЧАНИЯ
=========
Замечание 1. Данная обработка РАБОТАЕТ НЕ МОДАЛЬНО ....

Замечание 2. Надо в ней (обработке) делать обработку вызовов от нескольких доков, требующих подбора...
для чего использовать процедуру OnReOpen.  
Разберись, что при этом будет ....

и разобраться с реакцией платформы при вызове обработки подбора из нескольких доков одновременно...


В качестве примера - посмотри в последних ТиС форму списка справочника Номенклатура - ДляПодбора .... там реализация несколько отличается от тривиальной ...


Замечание 3. Обработка подбора не может быть внешней ... что меня сильно обломало в свое время ....

в примерах - куски текста... так, для понятия... Все внутренние процедуры с действиями выброшены
   skunk
 
19 - 24.01.04 - 18:55
(18)фэнкс, более плотно посмотрю завтра, а то сегодня головка бобо, результат вчерашнего расслабления.

PS задачка как раз и требует работать с внешней обработкой.
   345
20 - 24.01.04 - 20:27
Ну тогда с этим методом обломись ... Подбор - только через ФормуСписка или ВнутренниеОбработки ...

Вообще то есть много способов .... Но они вызывают хлопанье доков на экране... Это не есть гуд...
   skunk
 
21 - 25.01.04 - 03:00
Ну вообще-то про подбор ни кто и не говорил, а кромя bs, который пытался через него решить задачку. А так судя по всему человек собираеться загрузать и выгружать табличные части доков в файлы(txt, xml и т.п. нужное подчеркнуть). Для этого подходит то что написано в (8).

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

1)Из дока открывать форму обработки модально.
2)При открытии выгружать в таблицу значений табличную часть
3)Травить обработку на таблицу значений. Можно используя методы новаястрока(), получитьстроку() и удалитьстроку() работать прямо с формой документа, тогда не надо выгружать и загружать табличную часть.
4)При закрытии обработки загружаешь таблицу значений в табличную часть.

то есть что типа того

в доке пишем

//******************************************* 

procedure RunExtReport()
    openformmodal("Отчет", Context, "имя файла обработки");
endprocedure

в самой процедуре

//******************************************* 

procedure onopen()
    form.parameter.unloadtable(tab);
endprocedure

//******************************************* 

procedure onclose()
    form.parameter.loadtable(tab);
endprocedure

//******************************************* 
procedure НеВажноКак()
   изголяемся над tab - таблица значений, может прям лежать на форме а можно создать через createobject("ТаблицаЗначений");
   или
   form.parameter.newline() - добовляем в док новую строку
   form.parameter.deleteline() - удаляем ее из дока
   
   form.parameter.selectlines()         - перебираем строки дока
   while form.parameter.getline() > 0 do
   enddo;
   тогда процедуры onopen() and onclose() не нужны.
endprocedure

все работает.

если открывать обработку не модально все это работает пока не открылась сама форма обработки то есть между строк

procedure onopen()
   делаем обработку, не видя формы.
   по конце обламываем откытие через статус возрата, так как уже на фих не нужна.
endprocedure

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


Никак не использовал вожможности ole и недокументированых фич. Если честно то даже не смотрел с олей было лень, недокументированные фичи знаю плохо, да к томуже нет гарантии, что они будут работать в других релизах.

Вообщето pit cкорее всего на этом деле собаку съел и говорит нет значит нет.



Список тем форума
  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует