Имя: Пароль:
1C
1С v8
Как программно активизировать нужную строку таблицы в тонком клиенте?
,
0 veronika1888
 
14.05.12
17:35
Как программно активизировать нужную строку таблицы в тонком клиенте?
1 shamannk
 
14.05.12
17:36
500р без налогов.
2 veronika1888
 
14.05.12
17:37
И почему работает в тонком клиенте следующий код
СтрокаТабличнойЧасти = Элементы["ОбъектыНедвижимости"].ТекущиеДанные?

В справке ТекущиеДанные работают только на толстом клиенте

ТабличноеПоле.ТекущиеДанные (TableBox.CurrentData)
ТабличноеПоле (TableBox)
ТекущиеДанные (CurrentData)
Использование:

Только чтение.
Описание:

Содержит данные текущей строки табличного поля.

Доступность:

Толстый клиент.
Примечание:

Тип значения данных строки табличного поля приведен в описаниях расширений табличного поля у соответствующих объектов.
Для табличных полей, отображающих иерархический список в виде дерева, свойство может принимать значение Неопределено.
3 Defender aka LINN
 
14.05.12
17:37
(0) В (1) выгодное предложение, соглашайся
4 veronika1888
 
14.05.12
17:54
КоличествоСтрок = Объект.ОбъектыНедвижимости.Количество();
   
   Для ш = 0 По КоличествоСтрок-1 Цикл
       Элементы.ОбъектыНедвижимости.ТекущаяСтрока = ш;
       РассчитатьСуммуНДССтрокиТабличнойЧастиНаКлиенте();
       РассчитатьСуммуДоговораБезРассрочкиПоСтроке();
   КонецЦикла;
5 Defender aka LINN
 
14.05.12
17:58
(4) Ты решила эту тему в качестве записной книжки использовать?
6 veronika1888
 
14.05.12
18:01
(5) чтобы другие 500 рублей не платили
7 Defender aka LINN
 
14.05.12
18:02
(6) Ничего, что код нерабочий?
8 veronika1888
 
14.05.12
18:03
(7) это почему нерабочий?
9 veronika1888
 
14.05.12
18:03
+(8) только что оттестировала, работает

&НаКлиенте
Процедура ЦенаВключаетНДСПриИзменении(Элемент)
   
   КоличествоСтрок = Объект.ОбъектыНедвижимости.Количество();
   
   Для ш = 0 По КоличествоСтрок-1 Цикл
       Элементы.ОбъектыНедвижимости.ТекущаяСтрока = ш;
       РассчитатьСуммуНДССтрокиТабличнойЧастиНаКлиенте();
       РассчитатьСуммуДоговораБезРассрочкиПоСтроке();
   КонецЦикла;
   
   //шапка
   РассчитатьСуммуДоговораБезРассрочки();
   РассчитатьСуммуУслуг();
   РассчитатьСуммуНДС();
   
   Если Объект.ГрафикПлатежей.Количество() > 0
       И (Объект.ВидОперации = ПредопределенноеЗначение("Перечисление.УПН_ВидыОперацийДоговоровПоНедвижимости.Договор")
       ИЛИ Объект.КорректироватьГрафикПлатежей) Тогда
       Если Вопрос("Пересчитать график платежей?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда
           Объект.ГрафикПлатежей.Очистить();
           РассчитатьГрафикПлатежейНаКлиенте();
       КонецЕсли;
   КонецЕсли;
   
   РассчитатьСуммуДоговора();
   
КонецПроцедуры
10 experimentator76
 
14.05.12
18:07
опять из мисты мозги выкачиваются на ИС ((
11 Defender aka LINN
 
14.05.12
18:07
(8) Потому что идентификатор строки <> индексу. Они МОГУТ совпадать. А могут и нет.
12 veronika1888
 
14.05.12
18:08
(11) а как тогда пересчитать на клиенте?
13 experimentator76
 
14.05.12
18:09
(12) считать не на клиенте
14 experimentator76
 
14.05.12
18:09
(9) жесть )) я так понимаю кол строк в мильон не планируется ?
15 shamannk
 
14.05.12
18:10
(12) Сам то по скока сие чуда на ИС загонять буш? Может % с тебя взять?
16 experimentator76
 
14.05.12
18:10
не куплю
17 experimentator76
 
14.05.12
18:10
(15) сама
18 veronika1888
 
14.05.12
18:12
(11) Если таблица заполняется программно, строки пользователем не добавляются и не удаляются, то идентификатор всегда будет совпадать
19 shamannk
 
14.05.12
18:13
(17) Это не ашот? 0_о
20 experimentator76
 
14.05.12
18:13
(18) копайте дальше... открытий чудных вам еще открыть предстоит
21 experimentator76
 
14.05.12
18:14
(19) нужен личный осмотр - как у гинеколога - по высказываниям ОНА
22 experimentator76
 
14.05.12
18:15
(18) а это не ДС
тогда все проще но не на клиенте точно
23 veronika1888
 
14.05.12
18:15
короче да, код не всегда работает
24 veronika1888
 
14.05.12
18:16
+(23) кто без выпендрежа подскажет как на клиенте получить строку и пересчитать?
25 experimentator76
 
14.05.12
18:16
(23) читай книжки по 8.2
приходи к пониманию клиент-сервер
потом продавай поделки
26 veronika1888
 
14.05.12
18:17
Ведь если у таблицы формы присуствтует ТекущаяСтрока(чтение запись), значит можно как-то её установить надежно
27 veronika1888
 
14.05.12
18:18
(25) предлагаешь продублировать клиентские процедуры серверными вызовами?
28 experimentator76
 
14.05.12
18:18
(26) я правильно понимаю что ты хочешь текущую строку передавать в расчет построчно чтобы заполнять текущиеданные?
29 fisher
 
14.05.12
18:19
Что-то я не понял. Тебе сабж нужен или просто всю табличную часть пересчитать?
30 experimentator76
 
14.05.12
18:19
(27) все расчеты делать не на клиенте
31 experimentator76
 
14.05.12
18:20
(29) судя по всему куйню хочет сделать
32 experimentator76
 
14.05.12
18:20
и продать)
33 veronika1888
 
14.05.12
18:23
(29) у меня все клиентскими процедурами рассчитывается

Надо пересчитать в цикле всю таблицу на форме
34 experimentator76
 
14.05.12
18:24
(33) зря
35 experimentator76
 
14.05.12
18:24
тему можно закрывать...
36 fisher
 
14.05.12
18:28
(33) Желание понятное. Хочется минимизировать трафик и латенси на плохом канале.
Но полный пересчет придется делать на сервере. УФ в общем случае данные как бы и не хранит, а просто выступает динамическим окошком по серверным данным.
37 fisher
 
14.05.12
18:30
А вот на сабжевый вопрос я бы сам хотел узнать ответ. Я в УФ тоже не настоящий сварщик...
38 veronika1888
 
14.05.12
18:31
(36) Создала дубли клиентских процедур с серверным вызовом, работает, не это не красиво.

Проще было бы конечно программно активизировать строку таблицы на форме и пересчитать её клиенской процедурой.

&НаКлиенте
Процедура ЦенаВключаетНДСПриИзменении(Элемент)
   
   ПересчетТабличнойЧастиНаСервере();
   
   //шапка
   РассчитатьСуммуДоговораБезРассрочки();
   РассчитатьСуммуУслуг();
   РассчитатьСуммуНДС();
   
   Если Объект.ГрафикПлатежей.Количество() > 0
       И (Объект.ВидОперации = ПредопределенноеЗначение("Перечисление.УПН_ВидыОперацийДоговоровПоНедвижимости.Договор")
       ИЛИ Объект.КорректироватьГрафикПлатежей) Тогда
       Если Вопрос("Пересчитать график платежей?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда
           Объект.ГрафикПлатежей.Очистить();
           РассчитатьГрафикПлатежейНаКлиенте();
       КонецЕсли;
   КонецЕсли;
   
   РассчитатьСуммуДоговора();
   
КонецПроцедуры

&НаСервере
Процедура ПересчетТабличнойЧастиНаСервере()
   
   Для Каждого СтрокаТаблицы из Объект.ОбъектыНедвижимости Цикл
       РассчитатьСуммуНДССтрокиТабличнойЧастиНаСервере(СтрокаТаблицы);
       РассчитатьСуммуДоговораБезРассрочкиПоСтрокеНаСервере(СтрокаТаблицы);
   КонецЦикла;
   
КонецПроцедуры
39 veronika1888
 
14.05.12
18:32
(34) ты, кстати, сам не понимаешь, что Объект.ОбъектыНедвижимости присутствует как на клиенте, так и на сервере и это разные вещи
40 experimentator76
 
14.05.12
18:36
(39) чей-то? разве я не говорил делать все на сервере?
41 veronika1888
 
14.05.12
18:37
(40) иди дальше в свой толстый клиент
42 experimentator76
 
14.05.12
18:37
(38) через активацию строки - это убогое решение
и минимизация трафике не отмазка
мильон строк положит клиент надолго
43 experimentator76
 
14.05.12
18:37
(41) сними штаны\юбку и иди в то место что увидишь там
44 veronika1888
 
14.05.12
18:38
(42) представь себе договор купли продажи недвижимости с мильеном строк
45 experimentator76
 
14.05.12
18:38
(44) не куплю
46 veronika1888
 
14.05.12
18:38
(45) тебе и не по карману
47 Defender aka LINN
 
14.05.12
18:40
(42) Минимизацией трафика тут и не пахнет.
Предлагаю всем желающим в ПриСозданииНаСервере добавить в табличную часть пару тысяч строк и на клиенте ее просто перебрать циклом.
48 fisher
 
14.05.12
18:40
(38) Если дубли полные, то достаточно их объявить &НаКлиентеНаСервереБезКонтекста
Тогда они и там и там скомпилируются.
49 veronika1888
 
14.05.12
18:42
(48)
Как эти дубли объединить в один?

&НаСервере
Процедура РассчитатьСуммуНДССтрокиТабличнойЧастиНаСервере(СтрокаТабличнойЧасти)
       
   ПроцентНДС = УправлениеНебольшойФирмойПовтИсп.ПолучитьЗначениеСтавкиНДС(СтрокаТабличнойЧасти.СтавкаНДС)/100;
   
   КоэффициентНДС = ?(Объект.ЦенаВключаетНДС, ПроцентНДС / (1 + ПроцентНДС), ПроцентНДС);
   
   Сумма = СтрокаТабличнойЧасти.ЦенаЗаКвМ*СтрокаТабличнойЧасти.ОбщаяПлощадь;    
   
   СтрокаТабличнойЧасти.СуммаНДС = Окр(Сумма * КоэффициентНДС, 2, РежимОкругления.Окр15как20);
   
КонецПроцедуры

&НаКлиенте
Процедура РассчитатьСуммуНДССтрокиТабличнойЧастиНаКлиенте(СтрокаТабличнойЧасти = Неопределено)
   
   Если СтрокаТабличнойЧасти = Неопределено Тогда
       СтрокаТабличнойЧасти = Элементы["ОбъектыНедвижимости"].ТекущиеДанные;
   КонецЕсли;
   
   ПроцентНДС = УправлениеНебольшойФирмойПовтИсп.ПолучитьЗначениеСтавкиНДС(СтрокаТабличнойЧасти.СтавкаНДС)/100;
   
   КоэффициентНДС = ?(Объект.ЦенаВключаетНДС, ПроцентНДС / (1 + ПроцентНДС), ПроцентНДС);
   
   Сумма = СтрокаТабличнойЧасти.ЦенаЗаКвМ*СтрокаТабличнойЧасти.ОбщаяПлощадь;    
   
   СтрокаТабличнойЧасти.СуммаНДС = Окр(Сумма * КоэффициентНДС, 2, РежимОкругления.Окр15как20);
   
КонецПроцедуры
50 fisher
 
15.05.12
07:19
&НаКлиентеСервереБезКонтекста
Процедура РассчитатьСуммуНДССтрокиТабличнойЧасти(СтрокаТабличнойЧасти, ЦенаВключаетНДС)
       
   ПроцентНДС = УправлениеНебольшойФирмойПовтИсп.ПолучитьЗначениеСтавкиНДС(СтрокаТабличнойЧасти.СтавкаНДС)/100;
   
   КоэффициентНДС = ?(ЦенаВключаетНДС, ПроцентНДС / (1 + ПроцентНДС), ПроцентНДС);
   
   Сумма = СтрокаТабличнойЧасти.ЦенаЗаКвМ*СтрокаТабличнойЧасти.ОбщаяПлощадь;    
   
   СтрокаТабличнойЧасти.СуммаНДС = Окр(Сумма * КоэффициентНДС, 2, РежимОкругления.Окр15как20);
   
КонецПроцедуры
51 veronika1888
 
15.05.12
09:55
(50) вчера рубняк под вечер был... сейчас почитала - реально не то.

Спасибо за помощь
52 veronika1888
 
15.05.12
10:07
(50) Процедура или функция с указанным именем не определена (РассчитатьСуммуНДССтрокиТабличнойЧасти)

Если ставить директиву &НаКлиентеСервереБезКонтекста
53 veronika1888
 
15.05.12
10:08
+(52) модуль формы её не видит с такой директивой
54 fisher
 
15.05.12
10:31
В (50) описка. &НаКлиентеНаСервереБезКонтекста, конечно же.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший