Имя: Пароль:
1C
1C 7.7
v7: Выполнить процедуру документа из внешней обработки
0 kupec
 
30.12.14
11:16
День добрый, имеется обработка, которая набивает строки в новые документы при определенных условиях, в модуле документа есть процедура ОбработкаСтроки(), в ней обрабатывается выбранный товар и в зависимости от характеристик товара (указанных в элементе в качестве реквизитов) заполняются реквизиты ТЧ документа. Как запустить данную процедуру из текущей обработки, почитал форум, нашел вариант с 1СРР, но у меня что то не получается реализовать, там сказано якобы конт.Обработкастроки()

//Пример кода
Док=СоздатьОбъект("Документ.Приход");
Док.НоваяСтрока();
Док.Товар = Товар;
Док.ОбработкаСтроки();

в итоге выдает что поле агрегатного объекта ОбработкаСтроки() не найдено, компонента загружена в глобальнике методом ЗагрузитьВнешнююКомпоненту();

Помогите разобраться
1 kupec
 
30.12.14
11:17
2 Остап Сулейманович
 
30.12.14
11:22
(0) Перенести (скопировать) код процедуры в обработку и не делать людЯм моск. Или вынести в глобальный модуль.
3 silent person
 
30.12.14
11:32
ВыполнитьПроцедуру / CallAsProcedure

Синтаксис: ВыполнитьПроцедуру(Контекст, ИмяПроцедуры, СписокАргументов)

Параметры:

Контекст - тип: ГрупповойКонтекст. Контекст, в котором необходимо выполнить процедуру. Необязательный. По умолчанию - текущий контекст.
ИмяПроцедуры - тип: Строка. Имя процедуры.
СписокАргументов - тип: СписокЗначений. Список значений, содержащий аргументы процедуры. Если размер списка меньше, чем количество аргументов процедуры, то в оставшиеся аргументы передаются пустые значения. Лишние значения игнорируются. Значения по умолчанию игнорируются. Необязательный. По умолчанию - пустой список.
Возвращает: результат выполнения метода в виде числа: 1 в случае успеха, 0 в противном случае.

Описание: Метод предназначен для выполнения процедуры в заданном контексте.

Пример:

Перем Конт;
Сервис = СоздатьОбъект("Сервис");
Если ОткрытьФорму("Обработка.Демо", Конт) = 1 Тогда
        Список = СоздатьОбъект("СписокЗначений");
        Список.ДобавитьЗначение("Первый параметр");
        Список.ДобавитьЗначение("Второй параметр");
        Список.ДобавитьЗначение("Третий параметр");
        Сервис.ВыполнитьПроцедуру(Конт, "Выполнить", Список);
КонецЕсли;
4 kupec
 
30.12.14
11:43
спасибо, попробуем
5 kupec
 
30.12.14
11:56
Док=СоздатьОбъект("Документ.Приход");
Док.НоваяСтрока();
Док.Товар = Товар;
Сервис.ВыполнитьПроцедуру(Док,"ОбработкаСтроки");

Возвращает 0
6 kupec
 
30.12.14
11:58
я как понимаю на закрытой форме не сработает?
7 trad
 
30.12.14
12:00
надо постичь отличие контекста от прочего агрегатного объекта
8 kupec
 
30.12.14
12:01
у меня открыта форма обработки - это контекст, а док это объект, следовательно передаю всместо контекста объект и не срабатывает?
9 Cap_1977
 
30.12.14
12:03
(0) Дешевле и быстрее будет выдернуть процедуру ОбработкаСтроки из документа, и ее вставка в твою поделку с коррективами под поделку...
10 kupec
 
30.12.14
12:04
(9) а вдруг она поменяется, а там забудется...
11 1Сергей
 
30.12.14
12:05
(10) в ГМ её перенеси
12 varelchik
 
30.12.14
12:08
(0) Док=СоздатьОбъект("Документ.Приход");
ОткрытьФорму()
тогда ты получишь контекст формы с его процедурами и функциями.
НЕ путайте 7.7 и 8.х
13 trad
 
30.12.14
12:24
(8) процедура у тебя в модуле формы документа, следовательно вызывать эту процедуру можно только в контексте формы этого документа. Вызывать ее можно из любого модуля, хоть из обработки, Но вызов должен быть привязан к контексту документа, а не к объекту документа.
КонтДокумента="";
ОткрытьФорму("Документ.Приход",КонтДокумента);
КонтДокумента.ОбработкаСтроки();
14 Мимохожий Однако
 
30.12.14
12:35
(10)Не гадай. Просто сделай, что советуют. в (2) и (9)
15 varelchik
 
30.12.14
12:54
(13) ну я это ж и имел ввиду в (12).