Имя: Пароль:
1C
1С v8
Имитация интерактивного ввода.
0 SivanT
 
21.10.14
13:06
Имеется типовая УТ11 (упр. формы). Написал обработку заполнения для документа "Заказ клиента" которая меняет цены в табличной части в соответствии с полученным от пользователя числом.
Проблема - что при программном изменении цены не срабатывают обработчики событий формы документа, соответственно не пересчитываются суммы, НДС и т.д.
В интернете ничего подходящего не нашел, наиболее близко здесь
http://infostart.ru/public/16985/
но все равно не получилось.

Кто-либо решал такую проблемму?
1 Maxus43
 
21.10.14
13:09
переноси куски по изменению нужного к себе в код заполнения
2 vicof
 
21.10.14
13:10
(0) Если ты копнешь глубже, о, юный падаван, ты узнаешь, что обработчики интерактивных событий ссылаются на процедуры общих модулей. Достаточно обратиться к ним с твоими параметрами.
3 SivanT
 
21.10.14
13:42
(2) Тогда следующий вопрос.. Вызов общих модулей происходит на клиенте, а у меня перезаполнение цен происходит в цикле по на сервере

Если НовыйОбъект.Товары.Количество() > 0 Тогда
    Для Каждого значтч Из НовыйОбъект.Товары Цикл
    значтч.Цена = 33;
                            
    КонецЦикла;            
КонецЕсли;    

Как лучше вызывать эти процедуры?
4 kosts
 
21.10.14
14:08
(3) > Как лучше вызывать эти процедуры?
Не помешает помолиться.
5 kosts
 
21.10.14
14:08
(3) "Если-Тогда" - тут лишнее
6 SivanT
 
21.10.14
14:14
(3) Если - Тогда  - ошибка копипаста )
А по поводу вызова процедур общего модуля, все-таки как их лучше вызывать? И откуда?
7 kosts
 
21.10.14
14:18
(6) Это можно посмотреть в твоей форме.

Открой, например, событие "при изменении цены" посмотри какая процедура там вызывается и скопируй в свою процедуру.
8 SivanT
 
21.10.14
14:27
(7) Не все так просто.  Обработка внешняя, поэтому напрямую обращаться к форме документа и обработчикам события не получается.
Доступ к форме получаю так:
Форма = ОткрытьФорму("Документ.ЗаказКлиента.Форма.ФормаДокумента", КлючПоиска,,,Окно);
НовыйОбъект = Форма.Объект;
ЗаполнитьОбъект(НовыйОбъект, СуммаКРаспределению);
КопироватьДанныеФормы(НовыйОбъект, Форма.Объект);

Процедура ЗаполнитьОбъект работает на сервере.
9 Fish
 
гуру
21.10.14
14:29
(8) Не надо обращаться из обработке к форме объекта. Заполняй сразу данные в объекте.
10 SivanT
 
21.10.14
14:55
(8) А пример можно?

И еще, пробую обратиться к ЭКСПОРТНОЙ функции ОбработатьСтрокуТЧ общего модуля ОбработкаТабличнойЧастиКлиент   пишет что Переменная не определена (ОбработкаТабличнойЧастиКлиент)
Как так?
11 kosts
 
21.10.14
15:00
(10) >Переменная не определена (ОбработкаТабличнойЧастиКлиент)

На сервере возможно вызываешь
12 SivanT
 
21.10.14
15:05
На сервере. Я и спрашиваю, как вызвать процедуры из общего модуля, если обработка ТЧ происходит на сервере? Получается, что надо после обработки каждой строки на сервере возвращаться на клиент и вызывать стандартный обработчик события? Это совсем плохо. А как вызвать его один раз, после изменений ТЧ, не представляю.
13 kosts
 
21.10.14
15:11
(12) Если не удается вызвать процедуру, можно попробовать сделать похожую свою.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой