Курилка ТаблицаЗначений

Тема в разделе "Курилка", создана пользователем Leisan, 5 мар 2013.

  1. Vlan
    Online

    Vlan Гость Гость

    Это у вас столько получилось в отладчике? У меня чуть-чуть больше. Раз в двадцать.
  2. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    нет. вы не удаляете ни одной строки. После цикла просто вывел значение. Можете убедится сами
  3. Vlan
    Online

    Vlan Гость Гость

    А я не зря спросил пример перед тем, как писать обработку. Что же не так?
  4. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    вы не внимательны))))
  5. Vlan
    Online

    Vlan Гость Гость

    20:24:39
    20:24:40
    20:26:47
    Я так и не понял, хотел предыдущий оратор (WaRDeR) уличить меня в неоптимизированности кода или наоборот, похвалить за сообразительность?
  6. Vlan
    Online

    Vlan Гость Гость

    Кстати, в первоначальном виде строки все-таки удалялись, хоть и через одну.
  7. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    у меня выдало 15000 штук
  8. Vlan
    Online

    Vlan Гость Гость

    На вашем месте для чистоты эксперимента я посмотрел бы в отладчике еще и количество строк до цикла удаления.
  9. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Код:
    Для сч = 1 по 15000 Цикл
    ДобавитьВтаблицу("Оприходование товара",сч);
    ДобавитьВтаблицу("Перемещение товара",сч);
    КонецЦикла;
    тЗнач2.Загрузить(тЗнач);
    В ДАННОМ случае не вижу смысла смотреть. Это очевидно. 15000.
  10. Vlan
    Online

    Vlan Гость Гость

    Увы, коллега. Несмотря на привычку продумывать все до мелочей, вы не учли, что процедура вызывается два раза за цикл. Соответственно, получается ровно 30000 строк.
    Моя же цель была узнать, сколько циклов заполнения делаете вы перед удалением. Т.к. 1500 строк в остатке означает только то, что вы изначально имели их всего 3000. Что происходило при удалении? Первая строка удалялась, соответственно первой становилась строка 2. Цикл отрабатывал, перемещая фокус на следующую строку - 3. Она удалялась, и все повторялось до конца таблицы. Это значит, что удалялась ровно половина строк.
    Наверное надо было просто добавить единичку в команду удаления:
    Код:
    тЗнач2.УдалитьСтроку(1);
  11. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Действительно. Не обратил внимания на доп. процедуру. В этом вы правы.
  12. Vlan
    Online

    Vlan Гость Гость

    С единицей тоже половина остается. Страннно...
  13. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Обратите внимание на пост №38 текущей темы
  14. Vlan
    Online

    Vlan Гость Гость

    Это понятно. Я так и делал во второй версии обработки. Но позиционировать в начало после каждого удаления... некрасиво как-то, неоптимально. За счет этого и время выполнения возрастает почти вдвое. Лично я в выборках данных предпочитаю работать с ТЗ с конца.
  15. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
  16. Vlan
    Online

    Vlan Гость Гость

    Вовсе нет. Не очень представляю, что получится, если удалять, скажем, каждую третью строку в прямом переборе. В голове надо будет постоянно держать, что после удаления текущей строкой становится следующая по счету, позиционировать в начало и снова отсчитывать нужное количество? Или есть способ проще?
  17. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Доступны оба способа. Но в ДАННОМ случае я конечно перебор бы делать не стал. Обычным циклом через счетчик удобнее
  18. Vlan
    Online

    Vlan Гость Гость

    А как это выглядит в коде?
  19. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Код:
    Процедура Сформировать()	
    //создадим "обезьянку"
    ТЗ=СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("Счетчик");
    Для к=1 По 15 Цикл
    ТЗ.НоваяСтрока();
    ТЗ.Счетчик=к;
    КонецЦикла;
    
    //удалим каждую третью строку
    Смещение=0;
    Для к=1 по 15 цикл
    Если к % 3=0 Тогда
    ТЗ.УдалитьСтроку(к-Смещение);
    Смещение=Смещение+1;
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры
    
  20. Vlan
    Online

    Vlan Гость Гость

    Интересный оператор "%". Я про него и не знал.

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