8.х Получить номер строки и колонки.

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем WWW123, 13 сен 2010.

  1. TopicStarter Overlay
    WWW123
    Offline

    WWW123 Опытный в 1С

    Регистрация:
    23 фев 2009
    Сообщения:
    181
    Симпатии:
    0
    Баллы:
    26
    Никак не могу найти метод получить номер колонки и строки табличной части. Извините, что не привожу примеры попыток (какие-то они не хорошие), если не сложно подскажите пожалуйста.
  2. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    У строки "НомерСтроки"
    А зачем нужен номер колонки?
  3. Dvdovin
    Offline

    Dvdovin

    Регистрация:
    9 сен 2010
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    А в какой момент Вам нужно это получить. Если в цикле, при обходе всех значаний ТЗ, то можно создать любую переменную, и при каждом следующем шаге цикла увеличивать её на единицу. Так Вы получите номер строки.

    А что касается номера колонуи: Вы могли бы более подробно объяснить задачу. для чего и т.д. Может там и не обязательно знать номер колонки?
  4. TopicStarter Overlay
    WWW123
    Offline

    WWW123 Опытный в 1С

    Регистрация:
    23 фев 2009
    Сообщения:
    181
    Симпатии:
    0
    Баллы:
    26
    Подробнее не получится, попробую объясниться проще:
    - Процедура: ТабличноеПоле1ПриАктивизацииЯчейки(Элемент);
    Грубо говоря, надо чтобы при активизации ячейки, сообщился номер колонки (название) и номер строки.
  5. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    Код:
     Процедура ТабличноеПоле1ПриАктивизацииЯчейки(Элемент)
    ВыбКолонка = Элемент.ТекущаяКолонка.Данные;
    ВыбСтрокаТЗ= Элемент.ТекущаяСтрока;
    Если ВыбСтрокаТЗ = Неопределено Тогда
    НомерСтроки = "строка не выбранна";
    Иначе
    Сч = 0;
    Для каждого СтрокаТЗ Из ТабличноеПоле1 Цикл
    Сч = Сч + 1;
    Если СтрокаТЗ = ВыбСтрокаТЗ Тогда
    НомерСтроки = "Строка "+Сч+" (программный номер "+(Сч-1)+")";
    Прервать;
    КонецЕсли; 
    
    ОбработкаПрерыванияПользователя();
    КонецЦикла; 		
    КонецЕсли; 
    Сообщить("Колонка = "+ВыбКолонка+" Строка="+НомерСтроки);
    КонецПроцедуры
    
    
  6. TopicStarter Overlay
    WWW123
    Offline

    WWW123 Опытный в 1С

    Регистрация:
    23 фев 2009
    Сообщения:
    181
    Симпатии:
    0
    Баллы:
    26
    Гениально!!!
  7. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Зачем так сложно?
    Код:
    Процедура ТабличноеПоле1ПриАктивизацииЯчейки(Элемент)
    Если Элемент.ТекущаяСтрока <> Неопределено Тогда
    Сообщить("Колонка: " + Элемент.ТекущаяКолонка.Данные + " строка: " + (Элемент.Значение.Индекс(Элемент.ТекущаяСтрока) + 1));
    КонецЕсли;
    КонецПроцедуры
    
    
  8. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Разберитесь пожалуйста что такое табличное поле и табличная часть, а то в заблуждения вводите.
  9. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    Я наверное уже старый пердун, но когда я учился в институте (академии, а затем в универе) - нас несчадно пиз... били
    по голове за такие длинные строки кода. Так то да, можно сказать "зачем так сложно и просто в одну
    строку переписать сотню строчек кода ;)

    И да, в моем случае IMHO более наглядно программисту показывается тот факт, что строка может быть не выбранна, а колонку
    уже узнать можно, и тот факт (выясняемый при запуске), что данное событие происходит не только в момент работы с конкретной строкой,
    но может происходить и вообще при инициализации формы.

    P.S.
    К тому функция вложенная в параемтр функции... Декстра ворочается в гробу а Вирт смотрит на тебя как на...
    Вот почитай на досуге
  10. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Когда я учился перлу, то считалось, что чем короче программа, тем круче :)

    Данный пример не короткости записи и наглядности кода, а к вопросу зачем здесь цикл :)

    Красиво будет вот так:
    Код:
    Процедура ТабличноеПоле1ПриАктивизацииЯчейки(Элемент)
    Если Элемент.ТекущаяСтрока <> Неопределено Тогда //Проверим активирована ли строка
    НазваниеКолонки = Элемент.ТекущаяКолонка.Данные;
    ТекущаяСтрока = Элемент.ТекущаяСтрока;
    ИндексСтроки = Элемент.Значение.Индекс(ТекущаяСтрока);
    НомерСтрокиПоПорядку = ИндексСтроки + 1;
    Сообщить("Колонка: " + НазваниеКолонки + " строка: " + НомерСтрокиПоПорядку);
    КонецЕсли; //Проверим активирована ли строка
    КонецПроцедуры
    
    
  11. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    Ну да, про цикл - это честно затупил (вечер, усталость и еще с десяток оправданий).

    А по поводу короткости программы - разницы нет, что записать:
    а = Функция1();
    б = Функция2(а);
    в = Функция3(б);

    или

    в = Функция3(Функция2(Функция1()));

    На уровне нулей и единиц прога будет испольняться в виде первой конструкции. А вот читабельность падает и отладка усложняется.
  12. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    А как же выделение памяти по а и б?
    Тогда уж так:
    Код:
    а = Функция1();
    б = Функция2(а);
    в = Функция3(б);
    a = Неопределено;
    б = Неопределено;
    
    
  13. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    Ну я уж не настолько олдфагер, чтобы мандражить над парой байт/килобайт оперативы. Да и это, сборщик мусора сам все соберет - уж это то было уже и когда я учился (не считая начальных этапов си и прочих паскелей)
  14. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Да к тому же это и не поможет, НЕОПРЕДЕЛЕНО это тип.
  15. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    mialord, Неопределено тип, но вопрос в том, сколько на него отводится памяти, а сколько на ТЗ из 200 строк :)
    uza, а Вы уверены, что сборщик мусора в 1С хорошо работает, я очень сильно в этом сомневаюсь, о чем говорят ошибки о нехватке памяти :)
    Ладно, тему лучше закрыть, а то пошел сплошной офтопик...

Поделиться этой страницей