Имя: Пароль:
1C
1С v8
Внешняя обработка заполнения табличной части 8.3
,
0 breakthrough
 
15.12.14
10:06
Здравствуйте!
Есть обработка заполнения табличной части. Вопрос, как из нее открыть другую форму.
Делаю вот так: ОткрытьФорму("Обработка.ИзменениеТаблицыТоваров.Форма.Форма", ПараметрыОбработки, Форма, Форма.УникальныйИдентификатор);

Выдает ошибку, что такой функции нет.
Вот полный код:


Процедура ВыполнитьКоманду(ИмяКоманды, ОбъектыНазначения, ПараметрыВыполнения) Экспорт
        
    Если ИмяКоманды = "ЗаполнитьДокументПоПоступлению" Тогда
        ЗаполнитьДокумент(ПараметрыВыполнения);
КонецЕсли;
    
    
КонецПроцедуры

// Обработчик команды.

Процедура ЗаполнитьДокумент(ПараметрыВыполнения) Экспорт
Форма = ПараметрыВыполнения.ЭтаФорма;    
Объект = Форма.Объект;

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

    


//АдресХранилищаТовары = ПоместитьТоварыВоВременноеХранилищеНаСервере();

    //ПоступлениеТоваровУслугФормыКлиент.ИзменитьТовары(ЭтаФорма, Команда, АдресХранилищаТовары);

        ОткрытьФорму("Обработка.ИзменениеТаблицыТоваров.Форма.Форма", ПараметрыОбработки,
            Форма, Форма.УникальныйИдентификатор);
        


        
КонецПроцедуры
1 breakthrough
 
15.12.14
10:08
Т.е. я хочу реализовать заполнение ТЧ в форме документа, через другую форму (свою или из конфигурации).
2 Fish
 
15.12.14
10:12
А откуда открываешь-то? С сервера небось?
3 PiVa123
 
15.12.14
10:17
Процедура ЗаполнитьДокумент - без указания "наКлиенте"
4 breakthrough
 
15.12.14
10:53
(2) А откуда нужно? Пробовал и с сервера и с клиента.
5 breakthrough
 
15.12.14
10:54
(3) Если я ее делаю на клиенте, то вот такая ошибка:
{ВнешняяОбработка.ЗаполнитьДокументПередачаТоваров.МодульОбъекта(34,3)}: Процедура или функция с указанным именем не определена (ЗаполнитьДокумент)
        <<?>>ЗаполнитьДокумент(ПараметрыВыполнения); (Проверка: Сервер)
6 PiVa123
 
15.12.14
10:55
(5) Где написано что на клиенте?
Если не указано явно - то считается что "НаСервере"
7 Fish
 
15.12.14
10:56
(4) Для начала неплохо бы СП почитать:
"Глобальный контекст (Global context)
ОткрытьФорму (OpenForm)
...
...
Доступность:

Тонкий клиент, веб-клиент, толстый клиент, мобильное приложение(клиент)."
8 breakthrough
 
15.12.14
10:57
(6) Я же говорю, что если указываю на &НаКлиенте перед процедурой ЗаполнитьДокумент(), то ошибка. Не видит процедуру программа, т.к. выполняется на сервере.
9 breakthrough
 
15.12.14
10:57
(7) И??? Что здесь не так? У меня тонкий клиент.
10 breakthrough
 
15.12.14
10:58
(7) Справку я и без тебя читать умею.
11 Fish
 
15.12.14
10:58
(9) А где у тебя в (0) указание, что это клиент?
12 breakthrough
 
15.12.14
10:59
Вообще кто-нибудь может кинуть работоспособный код с открытием формы из внешней обработки?
13 breakthrough
 
15.12.14
11:01
(11) Oh my god! Здесь нет, а в моем коде уже есть.  Или мне тебе продублировать его с этой директивой??? Смотри:

&НаКлиенте
Процедура ЗаполнитьДокумент(ПараметрыВыполнения) Экспорт
Форма = ПараметрыВыполнения.ЭтаФорма;    
Объект = Форма.Объект;

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

    


//АдресХранилищаТовары = ПоместитьТоварыВоВременноеХранилищеНаСервере();

    //ПоступлениеТоваровУслугФормыКлиент.ИзменитьТовары(ЭтаФорма, Команда, АдресХранилищаТовары);

        //ОткрытьФорму("Обработка.ИзменениеТаблицыТоваров.Форма.Форма", ПараметрыОбработки,
        //    Форма, Форма.УникальныйИдентификатор);
        

КонецПроцедуры
14 Fish
 
15.12.14
11:04
(13) А откуда ты вызываешь эту процедуру? Тоже с сервера? А надо с клиента. А вообще, прежде чем тут сарказм показывать, и выдавать бессмысленные восклицания, разберись для начала, как работает 1С.
15 breakthrough
 
15.12.14
11:13
(14) Вызываю разумеется также с клиента:
&НаКлиенте

Процедура ВыполнитьКоманду(ИмяКоманды, ОбъектыНазначения, ПараметрыВыполнения) Экспорт
        
    Если ИмяКоманды = "ЗаполнитьДокументПоПоступлению" Тогда
        ЗаполнитьДокумент(ПараметрыВыполнения);
КонецЕсли;
    
    
КонецПроцедуры

А вы сами-то разобрались как работает 1С??? Если да, то что мешает подсказать, а не отвечать вопросом на вопрос.
И что касается директив наКЛиенте и НаСервере - тут я думаю мало кто разобрался полностью. А если еще и говорить о передаче реквизитов между формой и сервером, то там вообще темный лес.
16 breakthrough
 
15.12.14
11:14
(14) Поражают такие умники вроде тебя. Он как бы все знает, но ничего не говорит.
17 Fish
 
15.12.14
11:27
(15) Судя по ошибке в (5), ты где-то врёшь.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший