[РЕШЕНО] Удаление пустых значений в колонках таблицы значений

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

  1. TopicStarter Overlay
    Tranguol
    Offline

    Tranguol Опытный в 1С

    Регистрация:
    5 дек 2011
    Сообщения:
    69
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте! Имеется предположим таблица значений:
    [​IMG]
    а мне нужно вот так :
    [​IMG]
    Как это можно сделать по умному ?

    Вложения:

    • tz.PNG
      tz.PNG
      Размер файла:
      12,8 КБ
      Просмотров:
      32
    • tz2.PNG
      tz2.PNG
      Размер файла:
      4,9 КБ
      Просмотров:
      32
  2. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Сверните таблицу, отсортируйте и удалите либо первую строку таблицы, либо последнюю в зависимости от направления сортировки.
  3. TopicStarter Overlay
    Tranguol
    Offline

    Tranguol Опытный в 1С

    Регистрация:
    5 дек 2011
    Сообщения:
    69
    Симпатии:
    0
    Баллы:
    26
    Код:
     Табзнач.Свернуть("сер0, сер1, сер2, сер3, сер4");
      Табзнач.Сортировать("сер0 Убыв, сер1 Убыв, сер2 Убыв, сер3 Убыв, сер4 Убыв");
    
    С Убыв точно такой же результат, с Возр зеркальный.
  4. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    А значения в колонках(хотя бы пустые) одного типа?
  5. TopicStarter Overlay
    Tranguol
    Offline

    Tranguol Опытный в 1С

    Регистрация:
    5 дек 2011
    Сообщения:
    69
    Симпатии:
    0
    Баллы:
    26
    Да, одного типа
  6. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Тогда после свертки должна быть 1 строка со всеми пустыми значениями.
    Если после свертки ничего не меняется, значит такой комбинации просто не существует в ТЗ.
  7. TopicStarter Overlay
    Tranguol
    Offline

    Tranguol Опытный в 1С

    Регистрация:
    5 дек 2011
    Сообщения:
    69
    Симпатии:
    0
    Баллы:
    26
    если сортирую по одной колонке ( Табзнач.Сортировать("сер0 Убыв");), то данная колонка встает как нужно, прям не знаю как сделать
  8. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Так и делайте сортировку тогда по одной колонке - пустая строка же для всех колонок будет.
  9. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    nomad_irk чет я не понял, а чем здесь свертка поможет? С чего это строки схлопнутся должны?
  10. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    ну там же пустые значения есть в каждой из колонок, они и схлопнуться, останутся только строки с уникальными значениями в колонках
  11. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    в таблице значений? это как?
    --- Объединение сообщений, 18 сен 2015 ---
    Если бы у ТС ТЗ была из одной колонки - понятно. Но колонок 5. Каким образом они свернутся?
    --- Объединение сообщений, 18 сен 2015 ---
    2 ТС:
    Цикл по колонкам ТЗ.
    Внутри это цикла, сортировка строк данной колонки методом пузырька.
    На все про все 10 строк кода наверно.

    Это если безразличен порядок значений в строках итоговой таблицы. Если порядок важен - ну тот же самый метод пузырька, только условие обмена строк не > или <, а не <> пустому значению.
    Последнее редактирование: 18 сен 2015
  12. TopicStarter Overlay
    Tranguol
    Offline

    Tranguol Опытный в 1С

    Регистрация:
    5 дек 2011
    Сообщения:
    69
    Симпатии:
    0
    Баллы:
    26
    ага, спасибо за подсказку, буду пробовать!
  13. TopicStarter Overlay
    Tranguol
    Offline

    Tranguol Опытный в 1С

    Регистрация:
    5 дек 2011
    Сообщения:
    69
    Симпатии:
    0
    Баллы:
    26
    Код:
    Для Каждого Строка Из  Табзнач Цикл
        Для просмотр = 0 По номинал.Количество()-1 Цикл
            // Собственно, просмотр массива
            Для индекс = 0 По номинал.Количество()-1 Цикл
                // Если достигли конца массива то прервём цикл,
                            // чтобы не выполнять условие ниже
                Если индекс = номинал.Количество()-1 Тогда
                    Прервать;
                КонецЕсли;
                // Сравнение элементов и их перестановка (если требуется)
                Если Строка(Строка["сер"+индекс]) > Строка(Строка["сер"+(индекс+1)]) Тогда
                    СтаршийЭлемент = Строка["сер"+индекс];
                    МладшийЭлемент = Строка["сер"+(индекс+1)];
                    Строка["сер"+индекс] = МладшийЭлемент;
                    Строка["сер"+(индекс+1)] = СтаршийЭлемент;
                КонецЕсли;
            КонецЦикла;
        КонецЦикла;
        КонецЦикла;
    
    при данном коде все значения выводятся в последнюю колонку, я может быть где то ошибся ?
  14. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    чет не то у вас.
    номинал - это что такое?
  15. TopicStarter Overlay
    Tranguol
    Offline

    Tranguol Опытный в 1С

    Регистрация:
    5 дек 2011
    Сообщения:
    69
    Симпатии:
    0
    Баллы:
    26
    сам номинал это список значений
    это колонки таблицы значения в этом списке как раз таки эти самые 4 колонки (сер0,сер1,сер2,сер3)
  16. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    не понял.
    Как-то так должно быть. не проверял, прям здесь писал
    Код:
    ИндексПоследнейСтроки = ТабЗнач.Количество() - 1;
    Для Каждого КолонкаТаблицыЗначений Из ТабЗнач.Колонки Цикл
    
    Для сч1 = 0 по ИндексПоследнейСтроки - 1  Цикл
    Для сч2 = 0 по ИндексПоследнейСтроки - сч1 - 1 Цикл
    
    Если ТабЗнач[сч2][КолонкаТаблицыЗначений.Имя] < ТабЗнач[сч2 + 1][КолонкаТаблицыЗначений.Имя] тогда
    
    тмп = ТабЗнач[сч2][КолонкаТаблицыЗначений.Имя];
    ТабЗнач[сч2][КолонкаТаблицыЗначений.Имя] = ТабЗнач[сч2 + 1][КолонкаТаблицыЗначений.Имя];
    ТабЗнач[сч2 + 1][КолонкаТаблицыЗначений.Имя] = тмп;
    
    КонецЕсли;
    
    
    КонецЦикла;
    КонецЦикла;
    
    КонецЦикла;
    
    Tranguol нравится это.
  17. TopicStarter Overlay
    Tranguol
    Offline

    Tranguol Опытный в 1С

    Регистрация:
    5 дек 2011
    Сообщения:
    69
    Симпатии:
    0
    Баллы:
    26
    дада, спасибо большое, получилось!

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