Собственно сабж.
Тебе не понравится.
Функция КоличествоФиксированныхСтрок(ТЗ)
Перем Результат, СохрНомерСтроки, Счётчик;
КоличествоСтрок = ТЗ.КоличествоСтрок();
Если КоличествоСтрок = 0 Тогда
Возврат 0;
КонецЕсли;
СохрНомерСтроки = ТЗ.ТекущаяСтрока();
Для Счётчик = 1 По КоличествоСтрок Цикл
ТЗ.ТекущаяСтрока(Счётчик);
Если ТЗ.ТекущаяСтрока() = Счётчик Тогда
Если СохрНомерСтроки > 0 Тогда
ТЗ.ТекущаяСтрока(СохрНомерСтроки);
КонецЕсли;
Возврат (Счётчик - 1);
КонецЕсли;
КонецЦикла;
Возврат КоличествоСтрок;
КонецФункции
#1 А по-моему достаточно изящный хак - в рамках отсутствия других штатных возможностей получить результат.
Цитата: Харлампий Дымба от 11 июля 2025, 11:07#1 А по-моему достаточно изящный хак ...
Злоп не любит много буков ))
Да и я тоже
Цитата: Харлампий Дымба от 11 июля 2025, 11:07#1 А по-моему достаточно изящный хак - в рамках отсутствия других штатных возможностей получить результат.
такой финт мне пришел сразу на ум, но я решил с ним повременить, может что-то адекватное есть...
С ТекущаяСтрока() - надо аккуратно, когда после ТЗ.ТекущаяСтрока() нет обновления экрана...
Не случалось, у вас что ТЗ.ТекущаяСтрока() и ТЗ.НомерСтроки - разные значения..? - у меня случалось...
Можно чуток упростить
.
Функция КоличествоФиксированныхСтрок(ТЗ)
Перем Результат, СохрНомерСтроки, Счётчик;
КоличествоСтрок = ТЗ.КоличествоСтрок();
Если КоличествоСтрок = 0 Тогда
Возврат 0;
КонецЕсли;
СохрНомерСтроки = ТЗ.ТекущаяСтрока();
Для Счётчик = 1 По КоличествоСтрок Цикл
ТЗ.ТекущаяСтрока(Счётчик);
Если ТЗ.ТекущаяСтрока() = Счётчик Тогда
Если СохрНомерСтроки > 0 Тогда
ТЗ.ТекущаяСтрока(СохрНомерСтроки);
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат (Счётчик - 1);
КонецФункции
Цитата: Злоп от 11 июля 2025, 15:25Можно чуток упростить
Ошибочка выйдет, если все строки фиксированы.
Можно снять первую проверку на количество строк.
Цитата: item от 11 июля 2025, 15:47Ошибочка выйдет, если все строки фиксированы.
нормально выйдет. если есть 10 строк и они все фиксированы - пройдет весь цикл и вывалится со счетчик = 11
Положил в Копилку (https://forum.dorex.pro/index.php?topic=191.43)
//******************************************************************
// Функция КоличествоФиксированныхСтрок(ТЗ)
// Параметры:
// ТЗ - ТаблицаЗначений, в которой надо определить
// количество фиксированных строк
// Результат:
// Возвращает число фиксированных строк
//
// Предполагается, что количество фиксированных строк
// не более количества строк ТЗ
//
Функция КоличествоФиксированныхСтрок(ТЗ)
Перем СохрНомерСтроки, Счётчик;
СохрНомерСтроки = ТЗ.ТекущаяСтрока();
КоличествоСтрок = ТЗ.КоличествоСтрок();
Для Счётчик = 1 По КоличествоСтрок Цикл
ТЗ.ТекущаяСтрока(Счётчик);
Если ТЗ.ТекущаяСтрока() = Счётчик Тогда
Прервать;
КонецЕсли;
КонецЦикла;
ТЗ.ТекущаяСтрока(СохрНомерСтроки);
Возврат (Счётчик - 1);
КонецФункции // КоличествоФиксированныхСтрок()
Цитата: Злоп от 11 июля 2025, 16:47...если есть 10 строк и они все фиксированы - пройдет весь цикл и вывалится со счетчик = 11
Вывалится в 9, ты же Счетчик отнимаешь в конце
Вывалится в 9, ты же Счетчик отнимаешь в конце
Если пройдет весь цикл без прервать, то после цикла Счётчик = 11
Неоднократно таким приемом пользовался, когда надо определить отработало в цикле/нашли нужное или цикл закончился безрезультатно
Ну дела.
Этож зло в чистом виде!
Дураком помру.
Цитата: item от 11 июля 2025, 18:44Дураком помру.
Не баись! Вместе будем ;-)