![]() |
![]() |
![]() |
|
Текстовое поле в ТЧ дока – как убрать «лишние» вызовы ф-ций из формулы. Ø |
☑ | ||
---|---|---|---|---|
0
EuVod
15.12.06
✎
23:02
|
Чего-то в поиске ничего путного не нашел. Итак имеем документ с большой таб.частью (порядка 2-3 тыс. строк). В нем два текстовых поля, которые соответственно как-то вычисляются. При любом изменении в этом документе происходит пересчет всех таких полей для каждой строки документа. Это тормозит работу. И я чего-то не соображу, каким образом можно организовать пересчет таких полей, например, по кнопке – без автообновления. Я так понимаю, что непосредственно указывать из программы значение текста в строке нельзя, а функция, вызываемая из формулы данной колонки, будет отрабатывать всегда. Есть какой-то выход, кроме как эмуляция ТЧ через ТЗ? Я делаю «лист инвентаризации» - типа сидят 4 оператора и забивают каждый в свой лист результаты разных пересчетчиков – надо, чтобы они видели суммарный результат своей работы (по факту записанных листов). Видимо придется «сводную ведомость» выносить в виде ТЗ на отдельную закладку. (две сводных колонки в ТЧ – конечно хорошо, но тормозит).
|
|||
1
Дурочка 1С ®
15.12.06
✎
23:11
|
Попробуй спросить по-русски ...
|
|||
2
leosoft
16.12.06
✎
01:11
|
Вряд ли им надо просматривать все 3000 расчетных колонок!
Можно их убрать и сделать кнопку, по которой посчитаются итоги и будут показаны на экране. |
|||
3
VZ
16.12.06
✎
01:39
|
"Я так понимаю, что непосредственно указывать из программы значение текста в строке нельзя" - неправильно понимешь.
"функция, вызываемая из формулы данной колонки, будет отрабатывать всегда" - некоторые включают опцию "только при изменении". Но это редкие экземпляры, читающие мануалы. "При любом изменении в этом документе происходит пересчет всех таких полей для каждой строки документа" - молодец, что сумел добиться этого. Помедитируй над (1) - возможно, получишь желаемое. |
|||
4
Vlad55
16.12.06
✎
02:11
|
(0)
Я думаю что Вы лезете "через печь в двери" Вряд ли что из этого получится. "Делай проще дурак" |
|||
5
EuVod
18.12.06
✎
14:40
|
Свой текст всегда понятен – попробую разъяснить. (хотя я уже «переделал проще»).
В ТЧ на форму документа добавляю реквизит типа «текст» (пусть с идентификаторм «Текст1»). под словами «нельзя непосредственно указывать из программы значение текста» я имел в виду, что не могу присвоить значение в стиле Текст1 = «1» при выбранной строке ТЧ, чтобы именно в этой строке проставилось нужное мне значение; Буду признателен уважаемым донам за разъяснение, как я могу отображать в ТЧ документа нужные мне значения (зависящие от номера строки) – не реквизиты. Я умею только через текстовое поле, в свойстве «формула» которого прописана функция возвращающая нужное мне значение. Я был бы вполне счастлив, если бы мог эта функция не вызывалась всякий раз (а формулы в текстовых поля пересчитываются на форме всегда, разве нет?). Метод ВыполнятьФормулуТолькоПриИзменении() – не сильно поможет – ибо мне надо чтобы перевычисление вообще происходило по разовому нажатию кнопки, а ни при каждом изменении любого реквизита. Если я применяю этот метод к собственно вычисляемому текстовому полю – это ничего не дает. |
|||
6
КонецЦикла
18.12.06
✎
15:02
|
Вызывает сомнение необходимость что-то долго вычислять для 3000 элементов
Их кто-то видит одноврененно? Надо ли вообще что-то вычислять? Можно попробовать показывать информацию для текущей строки, внизу |
|||
7
Oops
18.12.06
✎
15:07
|
2(0) В памяти ТЗ.
При обращении проверятся "вычисляли уже для этого параметра/строки?" Да-берём из ТЗ (как из кэша), Нет-вычисляем и кладём в ТЗ |
|||
8
EuVod
18.12.06
✎
15:14
|
(7) мерси, но сама фукнция очень быстрая, но сам факт 3000*2 = 6000 вызов - ~0.8 сек. операторы набивают данные в стрки документа существенно быстре и не могут ждать. (буду ошибки). Я думал будет пересчитываться только то, что помещается в отображаемую область (как происходит с формами списков справочника) но вычисляеются значения текста для всех строк.
В общем сводную ТЗ я вынес на отдельную закладку, текстовый колонки убрал. |
|||
9
Uho
18.12.06
✎
15:24
|
все не осилил, но ты ж сам говоришь через кнопку сделать:
в текстовых полях пишешь ?(Автообновление=1, считаем, несчитаем); а в кнопке присваивай значение переменной Автообновление |
|||
10
Oops
18.12.06
✎
15:26
|
2(8) Что-то ты ошибаешься. "пересчитываться только то, что помещается в отображаемую область" - так и есть.
|
|||
11
Дурочка 1С ®
18.12.06
✎
15:32
|
>> вычисляеются значения текста для всех строк.
Что за бред? |
|||
12
КонецЦикла
18.12.06
✎
15:35
|
2(11) У него значит такое разрешение на монике :)
|
|||
13
EuVod
18.12.06
✎
15:37
|
(12) разершение к сожалению не такое... но отладчик показывает, что функция вызывалась именно то количество раз сколько есть строк в ТЧ.
|
|||
14
Дурочка 1С ®
18.12.06
✎
15:37
|
(12) Скажи ему: пусть уберет кота от экрана ... ©Реклама
|
|||
15
Uho
18.12.06
✎
15:56
|
(12) неа, у него релиз небось какой-нибудь 27 :))
|
|||
16
smaharbA
18.12.06
✎
15:59
|
Если НомерСтроки<>НомерСтрокиПрежн Иначе
... |
|||
17
Oops
18.12.06
✎
16:09
|
2(13) кажи код
|
|||
18
EuVod
18.12.06
✎
17:22
|
Было примерно так:
ПолучитьСводнПодсчет("Ост") – в формуле текстовой колонки. Функция ПолучитьСводнПодсчет(ИмяПоказателя) Если ИмяПоказателя = "Ост" Тогда ЗначВозвр = ТЗСвод.ПолучитьЗначение(НомерСтроки, "ОстатокФакт"); ИначеЕсли ИмяПоказателя = "ИзлНед" Тогда ЗначВозвр = ТЗСвод.ПолучитьЗначение(НомерСтроки, "ОстатокФакт") - ОстатокПлан; КонецЕсли; //ИмяПоказателя =.. Возврат ЗначВозвр; КонецФункции // ПолучитьСводнПодсчет() В поле «формула» некоторых других реквизитов тоже есть свои вызовы процедур которые устанавливают значения реквизитов в той же строке. (12) - шутки-шутками, но релиз 23. |
|||
19
EuVod
18.12.06
✎
17:25
|
на 25 правда тоже самое.
|
|||
20
Oops
18.12.06
✎
17:33
|
2(18) попробуй:
Функция ПолучитьСводнПодсчет(ИмяПоказателя) Сообщить(НомерСтроки); Кстати, как вариант - использовать общую (для модуля) переменную и считать только 1 раз на строку (как в ТиС). Ещё вопрос - что делаешь когда строки удаляют/меняют? |
|||
21
EuVod
18.12.06
✎
19:19
|
строки закреплены жестко - это остатки по регистру, определенным образом упорядоченные; изменение порядка/добавление/удаление - не предусмотрены и заблокированы.
|
|||
22
Uho
18.12.06
✎
22:15
|
(21) что-то я не пойму, ты не на один из вариантов не дал своего согласия/несогласия (желательно, аргументированного)
|
|||
23
EuVod
19.12.06
✎
10:39
|
Честно говоря перестал экспериментировать. Сейчас немного не до того.
Из обсуждения я понял что 1. не должна ф-ция из формулы текстового столбца вызываться больше чем надо (чем строк на экране), почему вызывается - не знаю. 2. других способов заполнять текстовое поле ТЧ кроме как возвращать из прописанной ф-ции нужное значение нет (я так и думал – но мало ли). 3. Вариант (20) – не уловил, что имеется в виду, надо будет мне глянуть в ТиС (в какое место?). Расчет мне надо время от времени обновлять, чтобы подхватывались изменения внесенные другими пользователями в свои листы. Да ив любом случае – откуды бы я не заполнял текстовые столбцы, основное время уходит из-за непоняток с п.1. Выводить в подвал для текущей строки - очевидно быстро - но в данном случае не удобно: пользователь не согласится. Так что я вывел свод на отдельную закладку – соответсвенно в табличной части не осталось вычисляемых колонок, а свод пересчитывается при выборе его закладки. (в любом случае это разовая операция). Всем спасибо большое за участие и попытку разобраться. |
|||
24
EuVod
19.12.06
✎
10:55
|
кстати попутный вопрос - почему если размещаем ТЗ в форме документа, то когда на ней сфокусированы, текстовый поиск (бинокль со строкой поиска и стрелки "вперед-назад") - недоступен. В форме обработки-отчета поиск по ТЗ нормально работает...
|
|||
25
Uho
19.12.06
✎
11:00
|
(24) у меня доступен
|
|||
26
Oops
19.12.06
✎
11:02
|
2(23.3) ТиС, Спр.Номенклатура, ФормыСписка-ДляПодбора
См. колонку "Остаток". Там вызывается "ПолучитьОстатокЗаполнитьЦену()", а в след. колонках уже используется вычисленное в функции "ТекОстатокПоФирме" и "ЦенаТекНоменклатуры" и т.п. Т.е. на две (и более) вычисляемых колонки - один вызов функции. |
|||
27
EuVod
19.12.06
✎
11:43
|
(25) хм... от чего же это может зависеть (не от слоев же)
(26) спасибо - понял. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |