Имя: Пароль:
1C
1С v8
Пересчет суммы ПриИзмененииКоличества в управляемой форме
0 Управляемые Формы
 
02.02.12
13:34
Добрый день.

Есть управляемая форма документа. Необходимо при изменении количества вызывать процедуру общего модуля, которая используется для обычных форм. Как правильно это сделать?
Пока обошелся следующим кодом:

&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
   Сервер_ТоварыКоличествоПриИзменении();
КонецПроцедуры

&НаСервере
Процедура Сервер_ТоварыКоличествоПриИзменении()
   
   ДокументОбъект = РеквизитФормыВЗначение("Объект");
   Для Каждого СтрокаТовары Из ДокументОбъект.Товары Цикл
       ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТовары, ДокументОбъект);
       ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТовары, ДокументОбъект);
       СтрокаТовары.СуммаСНДС = СтрокаТовары.Сумма + СтрокаТовары.СуммаНДС;
   КонецЦикла;    
   
   ЗначениеВРеквизитФормы(ДокументОбъект,"Объект");

КонецПроцедуры    

Но это, мне кажется, неверно. Вопрос:
Как правильно преобразовать а) текущую строку ЭЛЕМЕНТА формы (Клиент) в б) текущую строку РЕКВИЗИТА формы (сервер) и потом в в) строку табличного документа (Толстый клиент, Сервер), передать ее в качестве параметра в процедуру ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТовары, ДокументОбъект), и потом обновить данные?

Спасибо!
1 Defender aka LINN
 
02.02.12
13:37
Странно видеть такие вопросы от человека с таким ником...
2 Управляемые Формы
 
02.02.12
13:42
(1) Постановка вопроса некорректна? Формулировки не видны? Или на этом форуме не принято общаться по 1С? Вопрос в группе "Политика" и "Игры" получит более быстрый ответ?
3 Defender aka LINN
 
02.02.12
13:48
(2) Да. Идиотские вопросы тут не любят. Хотя иногда и отвечают, ХЗ почему.
4 Управляемые Формы
 
02.02.12
13:54
(3) Объясните, пожалуйста, в чем "идиотство" вопроса?
5 Defender aka LINN
 
02.02.12
13:55
(4) 1. Ты не потрудился заглянуть в типовую
2. Ты не потрудился выяснить, какие типы данных можно передавать между клиентом и сервером
3. Ты не потрудился даже заглянуть в СП, чтобы выяснить ответы на (0).
4. Ты даже не потрудился подумать, прежде чем нагадить кодом из (0) в базе.

Достаточно?
6 Управляемые Формы
 
02.02.12
13:57
(5) Но на обсуждение вопроса v8: Есть тут v8.УФ-ники? Как раскрасить динамический список.... вы потратили свое время, несмотря на очевидность ответа.

Вы знаете ответ на мой вопрос? Или нет?
7 Управляемые Формы
 
02.02.12
13:58
(5) И может не стоит "тыкать" незнакомому человеку? :)
8 Defender aka LINN
 
02.02.12
14:00
(7) Это интернеты. На "Вы" тут переходят, когда уже в реале морду бьют
9 Управляемые Формы
 
02.02.12
14:02
(5) Вы же модератор? Почему вы тогда не стараетесь соблюдать кодекс модератора?
"Уважайте участников, требуйте уважения к себе, но гораздо более решительно пресекайте неуважение к новичкам. Если кто-то назовёт новичка дятлом, да треснет его собственный клюв!

Модератор — это всегда образец для подражания, пример поведения на форуме. Если модератор что-то разрешает себе, то остальные участники тоже себе это разрешают. Если модератор плюёт на культуру общения, то форум начинает зарастать сорняками. "

(8) Может тогда стоит с этого начать, что бы вы не начинали называть незнакомого человека идиотом?
10 Управляемые Формы
 
02.02.12
14:03
Впрочем, с Defender aka LINN понятно, и я не готов кормить тролля, который почему-то модератор.

Может кто-нибудь еще поделится опытом?
11 shuhard
 
02.02.12
14:04
(10) с тобой - нет
12 aleks-id
 
02.02.12
14:06
(10) тебе ответ дали в (5) п.2
13 Управляемые Формы
 
02.02.12
14:06
Спасибо.
14 aleks-id
 
02.02.12
14:08
а вообще жесть - взять вот так и захерачить в сервант ботинком через РеквизитФормыВЗначение("Объект")
15 DexterMorgan
 
02.02.12
14:10
Зачем вызывать сервер это все можно (нужно) делать на клиенте.
У текущей строки "ПолучитьУникальныйИдентификатор", по нему найти строку в Объект.Товары - это реквизит формы. Если хочешь найти строку в объекте БД можно например через поиск по номеру строки (НомерСтроки = ИсходныйНомерСтроки на форме)
16 Управляемые Формы
 
02.02.12
14:19
(15) В типовой торговле 10.3 есть процедура пересчета строки табличной части с учетом скидок, ставок ндс, и прочих параметров. Конечно, я могу переписать эту процедуру, взяв пример из типовой УТ 11, но у меня тут не практический, а скорее учебный.

Так что, если нужно на сервер передать именно строку табличной части документа - именно такого типа "ДокументТабличнаяЧастьСтрока.МойДокумент.Товары", при событии в управляемой форме, это невозможно? Сейчас попробую через индекс строки "Элементы.Товары.ТекущаяСтрока"
17 aleks-id
 
02.02.12
14:24
заняться больше нечем? передавай туда номер строки. а на сервере обрабатывай через Объект.ИмяТабЧасти
18 DexterMorgan
 
02.02.12
14:34
(16) Ты 10.3 так под УФ переписываешь?)))))))))))))) Ну если тебе очень надо то в (0) все верно, только передавай еще номер строки и вместо обхода цикла:
ДокОбъект.Товары.Найти(НомерСтроки, "НомерСтроки") вот тебе будет твоя строка XDDDDDDDDDDD
19 Управляемые Формы
 
02.02.12
14:35
(17) Спасибо большое, благодаря мысли про индекс удалось оптимизировать, и избежать пересчета всей табличной части.

&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)  
   Сервер_ТоварыКоличествоПриИзменении_ПоИндексу(Элементы.Товары.ТекущаяСтрока);
КонецПроцедуры

&НаСервере
Процедура Сервер_ТоварыКоличествоПриИзменении_ПоИндексу(Индекс)
   
   ДокументОбъект = РеквизитФормыВЗначение("Объект");
   СтрокаТовары = ДокументОбъект.Товары[Индекс];
   
   ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТовары, ДокументОбъект);
   ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТовары, ДокументОбъект);
   
   ЗначениеВРеквизитФормы(ДокументОбъект,"Объект");

КонецПроцедуры    

Я думаю, что избежать
ДокументОбъект = РеквизитФормыВЗначение("Объект");
Не переписывая процедуру на сервере - там именно из реквизитов объекта определяются ставка НДС, скидки по договору, и т.п.
20 Управляемые Формы
 
02.02.12
14:38
(18) Я не то, что бы переписываю какую-то рабочую базу. Я а) изучаю управляемые формы и б) пока только прикидываю возможность перехода очень сильно дописанной 10.3 на УФ. Перехода на 11 УТ не будет еще года два, или какая там будет.

Спасибо большое за советы.
21 Mort
 
02.02.12
14:53
Ну да, сервер, то простаивает, почему бы ему количество на цену умножить, зачем клиента напрягать...
22 Управляемые Формы
 
02.02.12
14:57
(21) Понимаете - " количество на цену умножить" тут не обойдешься, потому что есть сумма НДС, ставка НДС, скидка(наценка) ручная, скидка (наценка) автоматическая, курс опять-таки. Не буду же я все это на клиенте считать.
23 DexterMorgan
 
02.02.12
14:58
(21) Не кошерно?
24 DexterMorgan
 
02.02.12
14:59
сорри это было (22)
25 DexterMorgan
 
02.02.12
15:02
Если тебе нужен курс тогда и вызывай сервер, и то только для того чтобы этот курс получить, для этого в УТ11 и формируют структуру в которой есть ("НеобходимВызовСервера", Булево), а не всегда когда количество меняется
26 aleks-id
 
02.02.12
15:04
(19) пля.. у тебя есть уже Объект на сервере!!!

&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
   Сервер_ТоварыКоличествоПриИзменении_ПоИндексу(Элемент.Родитель.ТекущаяСтрока);
КонецПроцедуры

&НаСервере
Процедура Сервер_ТоварыКоличествоПриИзменении_ПоИндексу(Индекс)
   
   СтрокаТовары = Объект.Товары[Индекс];
   ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТовары, Объект);
   ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТовары, Объект);
   
КонецПроцедуры
27 Управляемые Формы
 
02.02.12
15:07
(26) Так это не тот "Объект", к сожалению. Этот объект имеет тип "ДанныеФормыСтруктура", а мне нужен "ДокументОбъект.МойДокумент". Поэтому и использую  ДокументОбъект = РеквизитФормыВЗначение("Объект")
28 aleks-id
 
02.02.12
15:08
(27) так получи его! Объект.Ссылка.ПолучитьОбъект()
29 Mort
 
02.02.12
15:09
Концерт с вариациями...
30 DexterMorgan
 
02.02.12
15:09
(28) Ты заболел? =))))))))))
31 aleks-id
 
02.02.12
15:11
(30) вроде нет. а что не так?
32 Управляемые Формы
 
02.02.12
15:16
(28) Документ может быть еще не записан.
33 cw014
 
02.02.12
15:17
(31) Ты получишь исходный объект до каких либо изменений на форме
34 DexterMorgan
 
02.02.12
15:17
(30) То что документ может быть новый и ссылки у него нету и получить объект ты не сможешь
35 hhhh
 
02.02.12
15:19
(32) а зачем тебе именно ДокументОбъект? Ты что, фанат этого ДокументОбъекта? Работай с ДанныеФормыСтруктура.
36 Mort
 
02.02.12
15:21
(35) Тут две мегасложные функции, принимают ДокОбъект.
37 DexterMorgan
 
02.02.12
15:22
(32) Потому что (16)
38 DexterMorgan
 
02.02.12
15:23
Блин да че такое я ослеп совсем=)))(36) потому что (16)
39 Управляемые Формы
 
02.02.12
15:26
(35) Конечно, я добавлю процедуры общего модуля, принимающие структуру, и это будет ПРАВИЛЬНО. Спасибо еще раз всем.
40 hhhh
 
02.02.12
15:45
(39) чего-то ты нам мозги компостируешь. Эта функция ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти - это же для обычных форм.
41 Управляемые Формы
 
02.02.12
15:45
(40) Да, именно так.
42 hhhh
 
02.02.12
15:47
(41) ну значит тебе документ объект ни к чему.
43 Управляемые Формы
 
02.02.12
15:53
(42) Не очень понял, почему "ни к чему". Я отлично понимаю, что использовать процедуру ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти", изначально написанную так, что в нее надо передавать строку табличного документа из обычной формы (тип СтрокаТабличногоДокумента, тип, который отсутствует в управляемой форме), и объект типа "ДокументОбъект" для использования в управляемой форме некорректно. Но, тем не менее, если вдруг в процессе перехода на управляемые формы сталкиваешься с тем, что очень прямо сейчас нужно, то можно и так, как в (19), в качестве временной меры. Но использовать это в качестве конечного решения нельзя. Ибо "некошерно"
44 Поpyчик-4
 
02.02.12
16:34
Какой чоткий пацанчик, только зарегался, сразу всех по местам, так мне не тыкать, пальцы не гнуть, прочитали первый пост, бросили всё и метнулись мне объяснять.