Имя: Пароль:
1C
1C 7.7
v7: Насчет Сервис.ВыполнитьПроцедуру()
0 DES
 
02.02.13
20:11
Такая тема:
Есть Документ Док1 с табличной частью 2 поля.
"Сотрудник" и "Сумма"
Сотрудник заполняется от руки из справочника, а Сумма вычисляется при запуске процедуры Расчет() по кнопке.

И документе есть
Процедура РасчетСуммы()
Сумма = 0;
Если Сотрудник.Хитрый=Да Тогда
 Сумма = 100;
КонецЕсли
КонецПроцедуры

Которая выполняется в

Процедура Расчет()
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл
 РасчетСуммы();
КонецЦикла
КонецПроцедуры

Все работает, теперь нужно их другого документа получать расчетную Сумму для Сотрудника из этого документа.

Делаю
Если ОткрытьФорму("Документ.Док1", Конт)=1 Тогда
Список = СоздатьОбъект("СписокЗначений");
Конт.Сотрудник = Сотрудник; // тут ха-ха
Сервис.ВыполнитьПроцедуру(Конт, "Расчет", Список);
КонецЕсли;

Сотрудник не передается. Как сделать правильно ?
1 DES
 
04.02.13
17:50
Апну ?
2 Ёпрст
 
гуру
04.02.13
17:56
Ну и нафига там твой список, у тя Расчет() без параметров.
Мог бы и так написать:
Конт.Расчет();
3 monsterZE
 
04.02.13
20:53
не понял.. если у тебя есть документ с уже рассчитанной суммой - зачем ее еще раз рассчитывать? найди док, выгрузи тч и отфильтруй по сотруднику.. или по списку.
тем более, судя по тому, что ты привел, "расчет" у тебя обрабатывает тч документа, в котором сидит. что ты ему собрался передавать?
скопировать процедуру в глобальник или в новый документ не предлагать? =)
4 DES
 
04.02.13
22:58
Мне нужно понять механизм возможности использования алгоритма процедуры без параметров.
Процедура оперирует с табличной частью документа.
Как мне подсунуть этой процедуре данные чтобы она отработала с ними также как с табличной частью.
Мне нужен результат изменения данных.
Ничего не нужно переписывать и переделывать и перемещать в глобальник или еще куда.
Нужно из своего документа вызвать процедуру из другого документа подставить свои  данные и получить результат изменения данных.
5 DES
 
04.02.13
23:00
(2) поясни
6 DES
 
05.02.13
17:26
апну ?
7 Ёпрст
 
гуру
05.02.13
17:32
(5) чего пояснять ?
8 DES
 
05.02.13
17:44
можно ли конт. изменить чтобы передать нужные данные или нужно заполнять вновь созданный Документ ?
9 Ёпрст
 
гуру
05.02.13
17:45
изменяй, что мешает
10 DES
 
05.02.13
17:46
меняю, проверяю на воде процедуры - а там пусто.
11 Ёпрст
 
гуру
05.02.13
17:48
чего где меняешь, что где не получаешь?
12 DES
 
05.02.13
17:53
Конт.Сотрудник = Сотрудник

на входе Процедуры
смотрю Сорудник =
13 Ёпрст
 
гуру
05.02.13
17:54
На входе какой процедуры ?
14 Ёпрст
 
гуру
05.02.13
17:54
в какой момент ?
15 DES
 
05.02.13
18:00
Процедура РасчетСуммы()
брекпоинт => Сумма = 0;
16 Ёпрст
 
гуру
05.02.13
18:07
17 DES
 
05.02.13
18:20
а если форма документа,
а Федя это элемент табличной части
Пойдет ?
18 ADirks
 
05.02.13
18:53
(12) а перед этим сказать
Конт.НоваяСтрока();
нельзя?

а так то извращение конечно
19 DES
 
05.02.13
19:20
спс.
20 DES
 
05.02.13
19:40
а как бы сделать чтобы форма Документа не открывалась на экране?
21 ADirks
 
05.02.13
19:44
создать документ
записать его в базу
открыть форму
сделать свои чёрные дела
закрыть форму (Конт.Форма.Закрыть();)

и всё это в транзакции
(форма конечно откроется, но это хоть минимальное зло)
22 ADirks
 
05.02.13
19:46
когда говоришь
ОткрытьФорму("Документ.Док1", Конт);
и у пользователя уже открыта форма нового документа, то именно она и активизируется, и туда ты и зафигачишь все свои данные. И пользователь обрадуется, ага.
23 DES
 
12.02.13
23:46
так это заработало, спасибо.
вот на другое наткнулся.
Как бы так сделать:
Создать документ,
заполнить пару атрибутов,
выполнить процедуру документа ПриОткрытии()
записать и закрыть документ.
и чтобы не моргало.
Застрял на Записи документа без вопроса.
Или не сохраняет или спрашивает


Конт = 0;
ОткрытьФорму("Документ." + _ТипДок,Конт,0);
Конт.ДатаДок = _ДтДок;
Конт.НомерДок = _НомДок;
FormEx.ВыполнитьПроцедуру(Конт,"ПриОткрытии",);
//Конт.Форма.Записать(); // не работает
Конт.Форма.Закрыть(0);
24 Ёпрст
 
гуру
13.02.13
11:04
(23) какой-то х..й занимаешься.
ПриОткрытии и так всегда выполняется при ОткрытьФорму, вызывать его спецом не надо.
А в твоём случае, надо делать Док.Новый() и не открывать форму. Это в разы быстрее и правильнее.
25 DES
 
14.02.13
00:42
так если Новый() - то не выполнится ПриОткрытии(), а там инициализируется некоторые атрибуты
26 Zhuravlik
 
14.02.13
00:56
(25) ВводНового()?
27 DES
 
14.02.13
01:37
(26) что вводнового ?
28 Ёпрст
 
гуру
14.02.13
09:49
(25) прописать их в поделке в разы быстрее, чем открывать форму для этого.
29 Ёпрст
 
гуру
14.02.13
09:50
если что, ежели код универсальный (как в типовых), достаточно вызвать пару процедур глобальничка и привет, типа глПриИзмененииФирмы/Клиентоса и т.д
30 DES
 
14.02.13
14:17
(28) да это понятно
но создается куча разных документов, при том что в последствии могут изменить код ПриОткрытии() в любом из них.