7.7 Вычислить минимальное значение

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем 2man, 24 фев 2011.

  1. TopicStarter Overlay
    2man
    Offline

    2man Опытный в 1С

    Регистрация:
    26 ноя 2010
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    Есть обработка ПодборТоваров, в которой в таблицу значений формируются остатки товаров на счете.
    По колонке ТМЦ выполняется процедура Подобрать(), которая выполняет поиск по введенному названию по таблице значений и полученные результаты ставит первыми в списке.
    По умолчанию сортировка ТЗ установлена на Код. Задача в том, чтобы перед перебором строк для выполнения поиска нужно определить минимальное значение по колонке НомСтр в таблице значений, чтобы потом работать с полученным значением.
    Таблица большая, поэтому для вычисления минимального значения по строке НомерСтроки перебирать строки очень нежелательно.
    Объясню почему нужно вычислить минимальное: При заполнении таблицы значений первый элемент имеет номер строки 50, остальные +1. При поиске по названию или контрагенту найденным позициям присваивается номер -1 от минимального и устанавливается сортировка по номеру строки для того, чтобы они располагались вверху списка. После найденных позиций устанавливается пустая строка разделитель.
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    А если сразу сортировать по наименованию и количеству? Первыйц встретившийся по поиску и будет минимальным
  3. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Можно через переменную модуля. Начальное значение, я так понял, у вас всегда 50. Как только присвоили номер -1 от минимального сохраняйте значение и в переменную модуля.
  4. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    А еще можно делать сортировку по номеру строки перед каждым поиском (присвоением) - номер первой строки и будет искомым значением.
  5. TopicStarter Overlay
    2man
    Offline

    2man Опытный в 1С

    Регистрация:
    26 ноя 2010
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    Пробовал. Работает только если выделенная строка является первой. А чтобы перепозиционировать выделенную строку нужно опять же вычислить минимальное.

    Нельзя, т.к. для быстрого отбора по коду сортировка должна стоять по коду товара
  6. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    А как пробовали? Можно как-то так:
    Код:
    ТЗ.ВыбратьСтроки();
    Если ТЗ.ПолучитьСтроку() = 1 Тогда
    МинНомерСтроки = ТЗ.НомерСтроки;
    КонецЕсли;
    
  7. TopicStarter Overlay
    2man
    Offline

    2man Опытный в 1С

    Регистрация:
    26 ноя 2010
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    Зачем мне получать МинНомерСтроки в цикле? Из этого кода я получу номера всех строк в ТЗ.
    Мне нужен один минимальный номер без перебора строк, если такое возможно.
    Сейчас пока придумал такое решение:
    Код:
    		НомСтрТмц=1-ТабОстатков.КоличествоСтрок();
    
  8. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    А где в приведенном коде цикл и перебор строк? Выбирается только одна строка (первая).
  9. TopicStarter Overlay
    2man
    Offline

    2man Опытный в 1С

    Регистрация:
    26 ноя 2010
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    Действительно. Не заметил. Спасибо за решение
  10. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Можно обойтись и одной строкой
    Код:
    МинНомерСтроки = ТЗ.ПолучитьЗначение(1,"НомерСтроки");
    
    
    
  11. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Скорее всего нет. Насколько я понял, в НомерСтроки значения от 50 в меньшую и большую сторону, и значения 1 может просто не быть.
  12. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Не совсем. Согласен что не удачно назвал имя колонки. Вы все равно в ТаблицеЗначений не можете присваивать значение Атрибуту (НомерСтроки - только чтение)

    А если так:
    Код:
    ТЗ.НоваяКолонка("МойНомерСтроки")
    ///тут чего-то делаем
    МинНомерСтроки = ТЗ.ПолучитьЗначение(1,"МойНомерСтроки");
    
    
    
    будет работать
  13. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Точно - только чтение. Запамятовал. :angry:

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