Форум Кладовочки АЛьФ`а

Общие вопросы => 7.7 => Тема начата: Злоп от 10 июля 2025, 23:40

Название: ТЗ на форме - узнать количество фиксированных строк..?
Отправлено: Злоп от 10 июля 2025, 23:40
Собственно сабж.
Название: Re: ТЗ на форме - узнать количество фиксированных строк..?
Отправлено: item от 11 июля 2025, 10:44
Тебе не понравится.

Функция КоличествоФиксированныхСтрок(ТЗ)
    Перем Результат, СохрНомерСтроки, Счётчик;
    КоличествоСтрок = ТЗ.КоличествоСтрок();
    Если КоличествоСтрок = 0 Тогда
        Возврат 0;
    КонецЕсли;
    СохрНомерСтроки = ТЗ.ТекущаяСтрока();
    Для Счётчик = 1 По КоличествоСтрок Цикл
        ТЗ.ТекущаяСтрока(Счётчик);
        Если ТЗ.ТекущаяСтрока() = Счётчик Тогда
            Если СохрНомерСтроки > 0 Тогда   
                ТЗ.ТекущаяСтрока(СохрНомерСтроки);
            КонецЕсли;
            Возврат (Счётчик - 1);
        КонецЕсли;
    КонецЦикла;
    Возврат КоличествоСтрок;
КонецФункции
Название: Re: ТЗ на форме - узнать количество фиксированных строк..?
Отправлено: Харлампий Дымба от 11 июля 2025, 11:07
#1 А по-моему достаточно изящный хак - в рамках отсутствия других штатных возможностей получить результат.
Название: Re: ТЗ на форме - узнать количество фиксированных строк..?
Отправлено: item от 11 июля 2025, 11:31
Цитата: Харлампий Дымба от 11 июля 2025, 11:07#1 А по-моему достаточно изящный хак ...
Злоп не любит много буков ))
Да и я тоже
Название: Re: ТЗ на форме - узнать количество фиксированных строк..?
Отправлено: Злоп от 11 июля 2025, 15:24
Цитата: Харлампий Дымба от 11 июля 2025, 11:07#1 А по-моему достаточно изящный хак - в рамках отсутствия других штатных возможностей получить результат.
такой финт мне пришел сразу на ум, но я решил с ним повременить, может что-то адекватное есть...
С ТекущаяСтрока() - надо аккуратно, когда после ТЗ.ТекущаяСтрока() нет обновления экрана...
Не случалось, у вас что ТЗ.ТекущаяСтрока() и ТЗ.НомерСтроки - разные значения..? - у меня случалось...
Название: Re: ТЗ на форме - узнать количество фиксированных строк..?
Отправлено: Злоп от 11 июля 2025, 15:25
Можно чуток упростить
.
Функция КоличествоФиксированныхСтрок(ТЗ)
    Перем Результат, СохрНомерСтроки, Счётчик;
    КоличествоСтрок = ТЗ.КоличествоСтрок();
    Если КоличествоСтрок = 0 Тогда
        Возврат 0;
    КонецЕсли;
    СохрНомерСтроки = ТЗ.ТекущаяСтрока();
    Для Счётчик = 1 По КоличествоСтрок Цикл
        ТЗ.ТекущаяСтрока(Счётчик);
        Если ТЗ.ТекущаяСтрока() = Счётчик Тогда
            Если СохрНомерСтроки > 0 Тогда   
                ТЗ.ТекущаяСтрока(СохрНомерСтроки);
            КонецЕсли;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    Возврат (Счётчик - 1);
КонецФункции
Название: Re: ТЗ на форме - узнать количество фиксированных строк..?
Отправлено: item от 11 июля 2025, 15:47
Цитата: Злоп от 11 июля 2025, 15:25Можно чуток упростить

Ошибочка выйдет, если все строки фиксированы.
Можно снять первую проверку на количество строк.

Название: Re: ТЗ на форме - узнать количество фиксированных строк..?
Отправлено: Злоп от 11 июля 2025, 16:47
Цитата: item от 11 июля 2025, 15:47Ошибочка выйдет, если все строки фиксированы.
нормально выйдет. если есть 10 строк и они все фиксированы - пройдет весь цикл и вывалится со счетчик = 11
Название: Re: ТЗ на форме - узнать количество фиксированных строк..?
Отправлено: Злоп от 11 июля 2025, 17:06
Положил в Копилку (https://forum.dorex.pro/index.php?topic=191.43)

//******************************************************************
// Функция КоличествоФиксированныхСтрок(ТЗ)
// Параметры:
// ТЗ - ТаблицаЗначений, в которой надо определить
// количество фиксированных строк
// Результат:
// Возвращает число фиксированных строк
//
// Предполагается, что количество фиксированных строк
// не более количества строк ТЗ
//
Функция КоличествоФиксированныхСтрок(ТЗ)
  Перем СохрНомерСтроки, Счётчик;

  СохрНомерСтроки = ТЗ.ТекущаяСтрока();
  КоличествоСтрок = ТЗ.КоличествоСтрок();

  Для Счётчик = 1 По КоличествоСтрок Цикл
    ТЗ.ТекущаяСтрока(Счётчик);
    Если ТЗ.ТекущаяСтрока() = Счётчик Тогда
      Прервать;
    КонецЕсли;
  КонецЦикла;

  ТЗ.ТекущаяСтрока(СохрНомерСтроки);
  Возврат (Счётчик - 1);
КонецФункции // КоличествоФиксированныхСтрок()
Название: Re: ТЗ на форме - узнать количество фиксированных строк..?
Отправлено: item от 11 июля 2025, 18:00
Цитата: Злоп от 11 июля 2025, 16:47...если есть 10 строк и они все фиксированы - пройдет весь цикл и вывалится со счетчик = 11

Вывалится в 9, ты же Счетчик отнимаешь в конце
Название: Re: ТЗ на форме - узнать количество фиксированных строк..?
Отправлено: Злоп от 11 июля 2025, 18:29
Цитата
Вывалится в 9, ты же Счетчик отнимаешь в конце

Если пройдет весь цикл без прервать, то после цикла Счётчик = 11
Название: Re: ТЗ на форме - узнать количество фиксированных строк..?
Отправлено: Злоп от 11 июля 2025, 18:31
Неоднократно таким приемом пользовался, когда надо определить отработало в цикле/нашли нужное или цикл закончился безрезультатно
Название: Re: ТЗ на форме - узнать количество фиксированных строк..?
Отправлено: item от 11 июля 2025, 18:44
Ну дела.
Этож зло в чистом виде!
Дураком помру.
Название: Re: ТЗ на форме - узнать количество фиксированных строк..?
Отправлено: Злоп от 11 июля 2025, 22:00
Цитата: item от 11 июля 2025, 18:44Дураком помру.
Не баись! Вместе будем ;-)