Имя: Пароль:
1C
 
Вызов функции из другого модуля
0 DasTPID
 
04.07.11
16:19
Привет всем!

Допустим я пишу внешнюю обработку, в которой добавляются и заполняются строки документа РеализацияТоваровУслуг. Если я заполняю документ руками, то мне достаточно указать количество и цену, после ввода последней сработает событие и заполнит НДС, сумму и прочее. Так вот, в моей обработке я тоже хочу заполнить количество и цену, после чего вызвать функцию чтобы она сама всё остальное заполнила. Слазил в конфигурацию и узнал, что она называется Процедура ТоварыЦенаПриИзменении(Элемент) и находится в модуле "ФормаДокумента" документа РеализацияТоваровУслуг. Вопрос: как мне из моей внешней обработки выполнить эту процедуру?
1 AaNnDdRrEeYy
 
04.07.11
16:21
Скопируй все что есть в этой процедуре и вставь себе в обработку.
2 Господин ПЖ
 
04.07.11
16:21
щас тайну открою - в ТоварыЦенаПриИзменении(Элемент) тоже что-то вызывается... а за дерганье обработчиков gui надо по рукам бить
3 Dmitriy_76
 
04.07.11
16:22
для начала сделай ее экспортной...
4 MatrosoV AleXXXand_R
 
04.07.11
16:22
Пятничный выпуск анекдотов уже закончился, до следующего - еще 5 дней ждать, что же вы так торопитесь ... :)
5 AaNnDdRrEeYy
 
04.07.11
16:22
(3) для начала пусть не трогает обработчик.
6 Господин ПЖ
 
04.07.11
16:23
(3) а за такое по яйкам с ноги...
7 and2
 
04.07.11
16:23
тут намедни один форму вызывал..... :(
8 Pro-tone
 
04.07.11
16:24
(0)

Лучше вызывать процедуры из модуля объекта, тогда

ОбъектКонфы = Новый РеализацияТоваровУслуг;
ОбъектКонфы.МояПроцедура();

Но корректнее сказано в (1), потому что модуль объекта тянет за собой вереницу целую переменных, которых у тебя нет
9 МишельЛагранж
 
04.07.11
16:26
(8) и много вы так вызываете чего? Работает, видимо?
Эт не считая того, что предлагаете для вызова КАЖДОЙ внешней функции создавать целый объект ))
10 Pro-tone
 
04.07.11
16:28
(9) ответ был на вопрос был по сабжу, автор же не обеспокоен тем, что ресурс увеличится =)
11 DasTPID
 
04.07.11
16:31
(1) При следующем обновлении конфы фирма 1С перепишет логику работы этой обработки, и в результате конфигурация и моя копипаста будут работать по-разному. Нехорошо.
(2) Простите, не понял.
(3) Конфигурацию не трогаем, так что менять ничего не будем
(4) Расскажите мне где я неправ - вместе посмеёмся
(8) Это если у меня в цикле 10000 строк добавляется, то мне придётся создать 10000 ненужных объектов. Как-то монструозно, не находите?

(all) Блин, ну в сях же #include <чегонибудь> и вызывай из чегонибудь всё, что там есть. В 1С не так?
12 AaNnDdRrEeYy
 
04.07.11
16:46
(11) в обработчике при изменении вызывается другая процедура что то типа "ПеречитатьСтроку" вот если что то и изменят в типовой то точно не вызов этой процедуры а только ее реализацию. и вообще ты что обработку на века пишеш?
13 DasTPID
 
04.07.11
16:56
(12) Логика ясна :) Но всё-таки с точки зрения программирования это неверно. А правильно эту задачу решить можно?
14 AaNnDdRrEeYy
 
04.07.11
17:25
(13) в (12) верно, можешь объяснить посему не верно?
15 DasTPID
 
04.07.11
18:01
Потому что логика "я обработку не на века пишу" неправильная :))) Потому что копипаста - это всегда логическая ошибка в коде и последующие проблемы с поддержкой и доработкой.
16 AaNnDdRrEeYy
 
04.07.11
18:08
(15) ошибка потому что ошибка и потому что не правильно, серьезные аргументы, раз такой умный зачем вопросы такие тупые задаешь?
17 DasTPID
 
04.07.11
18:11
Потому что я в 1С чайник и не скрываю этого. Но когда я писал на дельфях или C# - меня бы не поняли если бы я начал копировать содержимое обработчика вместо того, чтобы подключить просто модуль и вызвать функцию оттуда.
18 bazvan
 
04.07.11
18:13
(17) Ну так и работал бы на сях, что ты на это поделку перешол. Всем жу известно что 1С УГ. Вот Си это круто
19 DasTPID
 
04.07.11
18:15
Оно работает замечательно; и наверняка 1С в реализацию этого метода не полезет пока НДС не заменят чем-нибудь повеселее или НСП не вернут; и наверняка моя эта обработка и пяти лет не проживёт - всё это я прекрасно понимаю. Просто мне кажется что это нельзя назвать хорошим стилем программирования, хотя повторюсь, в 1С я чайник и может быть здесь так принято :)
20 Господин ПЖ
 
04.07.11
18:17
никуа не верю что в c# дергать из объекта класса процедуры gui - хороший стиль...
21 AaNnDdRrEeYy
 
04.07.11
18:19
(17) напишика как в С# подключится к обработчику, только не говри что забыл или я новичок.
22 DasTPID
 
04.07.11
18:41
(21) Не особо понял вопроса, но пусть на форме лежит одна кнопка которая показывает содержимое Edit:
void button1_Click(object sender, EventArgs e)
{
ShowMessage(Edit1->Text);
}

Менять обработчик нельзя (изменение конфигурации). Нужно показывать Edit из разных модулей из разных мест из разных потоков наконец. Разумеется вызывать button1_Click с параметрами это тоже нехорошо, но в любом случае это лучше чем по коду плодить бесконечные ShowMessage, потому что впоследствие при изменении Edit1 на Edit2 возникнут серьёзные проблемы. Пример может и неудачный, но надеюсь основную мысль донёс.
23 DasTPID
 
04.07.11
18:47
(20) Нехороший. Хороший - это вынести эту функцию в общий модуль и вызывать её и из моей обработки, и из стандартной. Но конфигурацию-то менять нельзя
24 DasTPID
 
04.07.11
18:47
И вообще мы от темы немного отклонились, не?
25 AaNnDdRrEeYy
 
04.07.11
20:16
(22) ерунда какая то. я просто спросил про
B.Click += new System.EventHandler(this.B_Click);
и в C# нет -> (стрелочек)

вот процедуры из
конфигурации УПП

// Рассчитать реквизиты табличной части.
   ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
   ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);

те че трудно в свою обработку скопировать вызовы этих процедур.

если ты их скопируеш в свою обработку то думаю мир от этого не рухнет.
26 hhhh
 
04.07.11
20:58
(24) Процедура ТоварыЦенаПриИзменении(Элемент) - это вообще-то процедура формы, то есть ты хочешь из-за какой-то формулы хочешь держать в памяти целую форму?