Текстовое поле в ТЧ дока – как убрать «лишние» вызовы ф-ций из формулы. #243760


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

В этой группе 1С