ТЗ на форме - узнать количество фиксированных строк..?

Автор Злоп, 10 июля 2025, 23:40

« назад - далее »

Злоп


item

Тебе не понравится.

Функция КоличествоФиксированныхСтрок(ТЗ)
    Перем Результат, СохрНомерСтроки, Счётчик;
    КоличествоСтрок = ТЗ.КоличествоСтрок();
    Если КоличествоСтрок = 0 Тогда
        Возврат 0;
    КонецЕсли;
    СохрНомерСтроки = ТЗ.ТекущаяСтрока();
    Для Счётчик = 1 По КоличествоСтрок Цикл
        ТЗ.ТекущаяСтрока(Счётчик);
        Если ТЗ.ТекущаяСтрока() = Счётчик Тогда
            Если СохрНомерСтроки > 0 Тогда    
                ТЗ.ТекущаяСтрока(СохрНомерСтроки);
            КонецЕсли;
            Возврат (Счётчик - 1);
        КонецЕсли;
    КонецЦикла;
    Возврат КоличествоСтрок;
КонецФункции

Харлампий Дымба

#1 А по-моему достаточно изящный хак - в рамках отсутствия других штатных возможностей получить результат.

item

Цитата: Харлампий Дымба от 11 июля 2025, 11:07#1 А по-моему достаточно изящный хак ...
Злоп не любит много буков ))
Да и я тоже

Злоп

Цитата: Харлампий Дымба от 11 июля 2025, 11:07#1 А по-моему достаточно изящный хак - в рамках отсутствия других штатных возможностей получить результат.
такой финт мне пришел сразу на ум, но я решил с ним повременить, может что-то адекватное есть...
С ТекущаяСтрока() - надо аккуратно, когда после ТЗ.ТекущаяСтрока() нет обновления экрана...
Не случалось, у вас что ТЗ.ТекущаяСтрока() и ТЗ.НомерСтроки - разные значения..? - у меня случалось...

Злоп

Можно чуток упростить
.
Функция КоличествоФиксированныхСтрок(ТЗ)
    Перем Результат, СохрНомерСтроки, Счётчик;
    КоличествоСтрок = ТЗ.КоличествоСтрок();
    Если КоличествоСтрок = 0 Тогда
        Возврат 0;
    КонецЕсли;
    СохрНомерСтроки = ТЗ.ТекущаяСтрока();
    Для Счётчик = 1 По КоличествоСтрок Цикл
        ТЗ.ТекущаяСтрока(Счётчик);
        Если ТЗ.ТекущаяСтрока() = Счётчик Тогда
            Если СохрНомерСтроки > 0 Тогда    
                ТЗ.ТекущаяСтрока(СохрНомерСтроки);
            КонецЕсли;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    Возврат (Счётчик - 1);
КонецФункции

item

Цитата: Злоп от 11 июля 2025, 15:25Можно чуток упростить

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


Злоп

Цитата: item от 11 июля 2025, 15:47Ошибочка выйдет, если все строки фиксированы.
нормально выйдет. если есть 10 строк и они все фиксированы - пройдет весь цикл и вывалится со счетчик = 11

Злоп

Положил в Копилку

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

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

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

  ТЗ.ТекущаяСтрока(СохрНомерСтроки);		
  Возврат (Счётчик - 1);
КонецФункции // КоличествоФиксированныхСтрок()

item

Цитата: Злоп от 11 июля 2025, 16:47...если есть 10 строк и они все фиксированы - пройдет весь цикл и вывалится со счетчик = 11

Вывалится в 9, ты же Счетчик отнимаешь в конце

Злоп

Цитата
Вывалится в 9, ты же Счетчик отнимаешь в конце

Если пройдет весь цикл без прервать, то после цикла Счётчик = 11

Злоп

Неоднократно таким приемом пользовался, когда надо определить отработало в цикле/нашли нужное или цикл закончился безрезультатно

item

Ну дела.
Этож зло в чистом виде!
Дураком помру.

Злоп