| 
    
            
         
         | 
    
    
  | 
Как по "полю ввода" определить имя колонки табличного поля | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        andryuhin    
     26.11.13 
            ✎
    13:00 
 | 
         
        Всем привет.
 
        Есть процедура, которая вызывается при изменении реквизита колонки табличного поля. В процедуру передается сам элемент управления, т.е. "ПолеВвода". А как определить имя колонки? (вариант с обращением к имени ТекущейКолонки НЕ предлагать! Не тот случай, т.к. процедура не всегда вызывается интерактивно)  | 
|||
| 
    1
    
        Ерепень    
     26.11.13 
            ✎
    13:01 
 | 
         
        элемент управления и не интерактивно?     
         | 
|||
| 
    2
    
        andryuhin    
     26.11.13 
            ✎
    13:02 
 | 
         
        Иногда НЕ интерактивно     
         | 
|||
| 
    3
    
        andryuhin    
     26.11.13 
            ✎
    13:17 
 | 
         
        Вопрос остается:   как по элементу управления получить колонку табличного поля, с которой этот элемент связан.     
         | 
|||
| 
    4
    
        Пятница Мен    
     26.11.13 
            ✎
    13:19 
 | 
         
        реквизита колонки табличного поля - как не интерактивно? может реквизит не табличного поля, а чего то другого?     
         | 
|||
| 
    5
    
        andryuhin    
     26.11.13 
            ✎
    13:21 
 | 
         
        Вот именно табличного поля, будь он не ладен     
         | 
|||
| 
    6
    
        Пятница Мен    
     26.11.13 
            ✎
    13:22 
 | 
         
        каким образом он может меняться не интерактивно? он привязан к данным?     
         | 
|||
| 
    7
    
        andryuhin    
     26.11.13 
            ✎
    13:26 
 | 
         
        Да, к данным привязан.
 
        Я уже сам запутался. На пальцах попытаюсь озвучить. Есть документ с табличной частью. Табличная часть содержит колонки (реквизиты документа, вроде номенклатура, цена, кол-во, сумма. Все просто.). Есть процедура "РасчетСумм", которая вызывается при изменении реквизитов в табличной части. В эту процедуру передается элемент управления. Нужно узнать, какой реквизит вызвал процедуру.  | 
|||
| 
    8
    
        Повелитель    
     26.11.13 
            ✎
    13:29 
 | 
         
        Ну так ТекущейКолонки.Имя
 
        Цель то озвучь, а то похоже на бред  | 
|||
| 
    9
    
        andryuhin    
     26.11.13 
            ✎
    13:31 
 | 
         
        В документе есть кнопка Заполнить, с ней связана процедура "Заполнить". Из нее тоже вызывается "РасчетСумм".     
         | 
|||
| 
    10
    
        andryuhin    
     26.11.13 
            ✎
    13:31 
 | 
         
        Задача сводится к следующей: 
 
        До элемента управления я достучаться могу: ЭлементыФормы.ИмяТабличнойЧасти.Колонки.Номенклатура.ЭлементУправления А вот как имея "ЭлементУправления" получить его родителя, в приведенном примере "Номенклатура"  | 
|||
| 
    11
    
        1Сергей    
     26.11.13 
            ✎
    13:33 
 | 
         
        (10) .Родитель     
         | 
|||
| 
    12
    
        Повелитель    
     26.11.13 
            ✎
    13:35 
 | 
         
        Ну так:
 
        Процедура РасчетСум(ТекСтрока) ТекСтрока.Сумма = ТекСтрока.Цена * ТекСтрока.Количество; КонецПроцедуры; Процедура Заполонить(); Цикл РасчетСум(ТекСтрока); КонецЦикла; КонецПроцедуры; Процедура НажалиПолеВводаВТабЧасти() ТекущейКолонки.Имя Всякая мутата РасчетСум(ТекСтрока); КонецПроцедуры;  | 
|||
| 
    13
    
        andryuhin    
     26.11.13 
            ✎
    13:39 
 | 
         
        (11) не катит. Нет у поля ввода такого свойства и метода.
 
        (12) да, похоже, что этот способ и остается. Делать через 2 процедуры, а не через 1. Спасибо.  | 
|||
| 
    14
    
        andryuhin    
     26.11.13 
            ✎
    13:43 
 | 
         
        А вот еще один способ додумал:
 
        Процедура РасчетСумм(Элемент) Для Каждого тк из ЭлементыФормы.ИмяТЧ.Колонки Цикл Если Элемент = тк.ЭлементУправления Тогда ВыщемленноеИмяКолонки = тк.Имя; КонецЕсли; КонецЦикла; //--- алгоритм расчета по колонке "ВыщемленноеИмяКолонки" //... КонецПроцедуры  | 
|||
| 
    15
    
        Рэйв    
     26.11.13 
            ✎
    13:47 
 | 
         
        Поставь в ячейку свой обработчик ПриИзменении и не парь себе моск.     
         | 
|||
| 
    16
    
        Рэйв    
     26.11.13 
            ✎
    13:48 
 | 
         
        тогда ты точно будешь знать какая колонка вызвала процедуру     
         | 
|||
| 
    17
    
        andryuhin    
     26.11.13 
            ✎
    13:51 
 | 
         
        (15) Нужно, чтобы во всех ячейках стояла ОДНА процедура, а не 15 штук для каждой ячейки. Так удобнее при связанных расчетах, когда предыдущая ячейка вызывает пересчет последующих.     
         | 
|||
| 
    18
    
        zakidonoff    
     26.11.13 
            ✎
    13:53 
 | 
         
        (0) Никак.
 
        Если встаёт такая необходимость, значит такой код=гавнакод  | 
|||
| 
    19
    
        Рэйв    
     26.11.13 
            ✎
    13:54 
 | 
         
        (17)Сделай одну БОЛЬШУЮ процедуру пересчета всего что там у тебя есть, а в процедурах ПриИзменении ячеек просто ее вызывай.     
         | 
|||
| 
    20
    
        George Wheels    
     26.11.13 
            ✎
    13:55 
 | 
         
        (17) Может ПриВыводеСтроки?     
         | 
|||
| 
    21
    
        andryuhin    
     26.11.13 
            ✎
    13:56 
 | 
         
        (18) Ух ты, уже и принюхался. Поздравляю с хорошим обонянием. Или ты на вкус определил? В любом случае приятного аппетита. 
 
        (19) Все, работает. Спасибо за помощь. Код из поста (14) катит. И из поста (12) тоже.  | 
|||
| 
    22
    
        andryuhin    
     26.11.13 
            ✎
    13:58 
 | 
         
        (19) Так так и сделано в самом начале.  Одна БОЛЬШАЯ процедура, которая вызывается ПриИзменении ячеек. НО засада была в том, что эта же процедура вызывается не интерактивно при автопересчете по отдельной кнопке     
         | 
|||
| 
    23
    
        Рэйв    
     26.11.13 
            ✎
    14:01 
 | 
         
        (22)Да какая разница если она все пересчитывает?     
         | 
|||
| 
    24
    
        andryuhin    
     26.11.13 
            ✎
    14:04 
 | 
         
        (23) НЕТ не все.  Только ячейки с 3й по 15ю, или например с 10й по 15ю. В зависимости от того, на какой ячейке стартанули     
         | 
|||
| 
    25
    
        НЕА123    
     26.11.13 
            ✎
    14:17 
 | 
         
        как вариант
 
        .Подсказка  | 
|||
| 
    26
    
        palpetrovich    
     26.11.13 
            ✎
    14:25 
 | 
         
        как вариант, если сильно надо:
 
        Процедура ОднаБольшаяПроцедура(ОткудаВызвана="") ... Процедура ТоварыНоменклатураПриИзменении(Элемент) ОднаБольшаяПроцедура("Номенклатура")  | 
|||
| 
    27
    
        andryuhin    
     26.11.13 
            ✎
    15:03 
 | 
         
        (26) Да, это и предлагали в посте (12). Оно самое.  Тем не менее, спасибо.     
         | 
|||
| 
    28
    
        zakidonoff    
     26.11.13 
            ✎
    15:07 
 | 
         
        (21) Просто ты нарушаешь базовые принципы.
 
        Любая дочерняя функция или процедура должна быть предельно "тупой". Всё, что можно посчитать\задать в родительской процедуре, должно быть задано в ней. В твоём случае - это имя колонки. "Откуда считать" должно определяться не в "одной БОЛЬШОЙ процедуре", а там, откуда она вызывается.  | 
|||
| 
    29
    
        andryuhin    
     26.11.13 
            ✎
    15:23 
 | 
         
        (28) мммм, чтобы не вдаваться в полемику лучше приведу свою проблему:
 
        Есть 15 колонок. На каждой колонке своя формула. Меняем значение 1й колонки, должны пересчитаться все до 15й. Меняем 2ю, должны пересчитаться со 2й по 15ю и т.д. Вполне логично иметь ОДНУ процедуру, описывающую логику расчета всего документа. В результате этот алгоритм расчета можно вызывать как интерактивно (пользователь меняет значение ячейки), так и при неких общих расчетах для всех строк табличной части. В результате не плодится множество процедур, вся логика в одном месте и в нее при необходимости просто вносить изменения. ------ Может я действительно мудрю, предложи вариант, как это реализовать проще.  | 
|||
| 
    30
    
        zakidonoff    
     26.11.13 
            ✎
    15:55 
 | 
         
        (29)
 
        ПроцеДура ПриИзмененииЭлементаКолонка1(Элемент) ТекСтрока = ЭлементыФормы.ТабличноеПоле.ТекущиеДанные(); ПересчитатьФормулы(1, ТекСтрока); КонецПроцеДуры ПроцеДура ПриИзмененииЭлементаКолонка2(Элемент) ТекСтрока = ЭлементыФормы.ТабличноеПоле.ТекущиеДанные(); ПересчитатьФормулы(2, ТекСтрока); КонецПроцеДуры ПроцеДура ПересчитатьФормулы(Коэффициент, ТекСтрока) Если Коэффициент < 2 Тогда //Знач = Формуларассчёта... ТекСтрока["Колонка1"] = Знач; КонецЕсли; Если Коэффициент < 3 Тогда //Знач = Формуларассчёта... ТекСтрока["Колонка2"] = Знач; КонецЕсли; ... КонецПроцеДуры  | 
|||
| 
    31
    
        andryuhin    
     26.11.13 
            ✎
    16:19 
 | 
         
        (30) Да, это сработает, но в таком подходе есть минус (во всяком случае для меня). В модуле много процедур, что не гут для "читаемости" кода. Лишний не нужный код.
 
        Хотя по сути все то же самое.  | 
|||
| 
    32
    
        zakidonoff    
     26.11.13 
            ✎
    16:46 
 | 
         
        (31) А как ещё ты инициируешь срабатывание события по клику на ячейку? Через процедуру изменения таб.поля?     
         | 
|||
| 
    33
    
        zakidonoff    
     26.11.13 
            ✎
    16:55 
 | 
         
        (31) Ну так 12 тогда тебя абсолютно всем устраивать должен.
 
        Читаемость это абсолютно не портит. Или ты хотел сразу событие на изменение в ячейке кидать на процедуру расчётссумм()? -) Это явно не тру - запутаешься в условиях только.  | 
|||
| 
    34
    
        andryuhin    
     26.11.13 
            ✎
    18:07 
 | 
         
        (33) да, так и делал. Событие на изменение в ячейке сразу кидал на "РасчетСумм".     
         | 
|||
| 
    35
    
        andryuhin    
     26.11.13 
            ✎
    18:12 
 | 
         
        (33) все верно, вариант из (12) вполне устраивает.
 
        (хотя в итоге стал использовать свой с вызовом события из ячейки на "РасчетСумм" и определением внутри, какая ячейка вызвала)  | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |