Имя: Пароль:
1C
1C 7.7
v7: Формула в столбце табличной части документа
,
0 AL CAPONE
 
23.12.11
15:58
Есть процедура автоматического заполнения строк документа, она довольно длительная. В табличной части документа есть колонка "Пиктограмма", с формулой ВернутьНомерПиктограммы().

Когда табличная часть уже заполнена, любое следующее действие по ручному удалению или добавлению строки приводит к пересчёту формулы ВернутьНомерПиктограммы() по всей таблице, а это страшно долго.

Как можно выкрутиться, чтобы для новых или удалённых строк эта формула уже не вызывалась, а отрабатывала лишь 1 раз при первичном заполнении ? Ну или как вариант чтобы она отрабатывала, но только для текущей изменяемой строки, а не для всей табличной части ?
1 Эльниньо
 
23.12.11
16:01
Что там за комп? 386-SX с 16 Мб ОЗУ?
2 AL CAPONE
 
23.12.11
16:02
(1)
комп нормальный, но в документе десятки тысяч строк, и каждая строка проверяет пиктограмму по ТЗ с ещё одним десяткой тысяч строк и 4-м условиям.
3 GLazNik
 
23.12.11
16:03
(2) Может тогда имеет смысл не расчитывать номер пиктограммы постоянно, а расчитать раз, а затем хранить
4 Джордж1
 
23.12.11
16:04
НомерПиктограммы хранить в ТЧ, и рассчитывать только при необходимости
5 viktor_vv
 
23.12.11
16:04
(1) Каждый раз рисуют картинку через вызов фотошопа :).

А так добавь реквизит в табличную часть и заполняй при заполнении ТЧ.
6 AL CAPONE
 
23.12.11
16:05
(5)
реквизитом выкрутиться было бы проще всего, но не хочу лишнего мусора в базе ) документ вводится довольно редко

(4)
а можно его хранить без реквизита ТЧ ?
7 viktor_vv
 
23.12.11
16:05
(2) Насчет десяткОВ тысяч строк ты загнул, максимум штатно 1 десяток.
8 viktor_vv
 
23.12.11
16:06
Если религия не запрещает ВК, то вместо ТЗ индексированная таблица с индексом.
9 Джордж1
 
23.12.11
16:07
(6)Вам шашечки или ехать?
10 GLazNik
 
23.12.11
16:07
(6) если документ вводится достаточно редко, то "мусора" не будет. Всего лишь дополнительная колонка в таблице, которая редко используется. причем минимальной размерности
11 Ёпрст
 
23.12.11
16:10
(0) убери идентификатор у текстовой колонки
12 AL CAPONE
 
23.12.11
16:11
(8)
никогда с ними не работал (

(9)
о_О ?

(10)
хотелось бы выкрутиться только правкой модуля документа без того, чтобы выгонять всех юзверей
13 AL CAPONE
 
23.12.11
16:12
(11)
тоже не могу, я по идентификатору управляю её видимостью на форме )
14 GLazNik
 
23.12.11
16:19
(13) а может тогда ну её, эту пиктограмму? :)
15 Ёпрст
 
23.12.11
16:20
(12) turbomd.dll и выгонять никого не надо
16 Джордж1
 
23.12.11
16:21
(12)а юзвери тут причем?
//
Вам надо выбирать или допреквизит или тормоза
//
Можно еще вспомогательную ТЗ использовать
17 Ёпрст
 
23.12.11
16:21
а формула не для всех строк работает, а только для активной.
И лишь при открытии для всех, ежели назначен идентификатор колонки
18 AL CAPONE
 
23.12.11
16:25
(14)
нельзя, юзер просит )

(15)
да, пора бы уже поставить, а то подзадолбало всех просить выйти каждый раз

(17)
судя по времени тормозов отрабатывает для каждой строки дока, а не для активной
19 viktor_vv
 
23.12.11
16:27
(17) Для всех видимых или для всех вообще которые есть в ТЧ ? Это я для себя уяснить.
20 AL CAPONE
 
23.12.11
16:27
(16)
эх, ладно, на этот раз добавлю реквизит ТЧ.

Спасибо всем за помощь !
21 Ёпрст
 
23.12.11
16:32
(18) ошибаешься, вставь Сообщить(НомерСтроки) в формулу функции.
Если ты только принудительно форму не обновляешь каждый раз.
22 AL CAPONE
 
23.12.11
16:40
(21)
попробовал, бегут с первой до последней строки все, принудительно форма нигде не обновляется )
23 TeddySlaf
 
23.12.11
16:42
ну, как вариант, оставить пересчет колонки пиктограммой в ПриОткрытии(), но в ТЧ завести еще одну колонку (пусть невидимую) с заполнением ее дублями из пиктограммы.
Затем в функцию вставить проверку на активность строки и на заполненность колонки-дубля: если уже заполнена, то дальше неперерасчитывать.
как-то так.
24 viktor_vv
 
23.12.11
16:45
(22) Это если есть идентификатор. Если идентификатора нет, то первый раз только для всех видимых строк. Потом только для текущей.
25 AL CAPONE
 
23.12.11
16:46
(24)
ответ в (13), к сожалению ...
26 AL CAPONE
 
23.12.11
17:00
(24)
хотя попробую как вариант, обработка формулы для текущей было бы наилучшим выходом, ну а видимость стобца тогда фиг с ней ) пусть бедут видимым всегда )
27 AL CAPONE
 
23.12.11
18:07
Ёпрст3, viktor_vv, без идентификатора отрабатывает только для текущей строки и относительно недолго. Ещё раз спасибо за помощь !
28 Tatitutu
 
23.12.11
18:18
не подойдет ?

ВыполнятьФормулуТолькоПриИзменении(<?>);
Синтаксис:
ВыполнятьФормулуТолькоПриИзменении(<Режим>)
Назначение:
Установка режима выполнения формулы выбранного поля табличной части документа.
Параметры:
<Режим> - число: 1 - формула вызывается только при изменении значения поля, 0 - вызывается и при переходе между полями.
Замечание:
Доступ к методу возможен только в контексте Модуля формы через атрибут Форма.
Подробнее см. в документации, глава 'Атрибуты и методы контекста Модуля формы'
29 Ёпрст
 
23.12.11
18:20
(28) для текстовой колонки то ? :)
не катит
30 Tatitutu
 
23.12.11
18:26
(29) про текстовую колонку это я понял

я имел ввиду другое (28) в колонку тч
в нее формулу
а текстовая колонка = ....
31 Torquader
 
23.12.11
21:39
А если сделать таблицу значений, где каждой строке сопоставить номер пиктограммы и заглядывать в неё вместо того, чтобы что-то перерасчитывать.
А перерасчёт делать в ПриУдалении,ПриДобавление,ПриИзмененииПорядкаСтрок и т.п.