7.7 Обращение к переменной внутри цикла

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем smiler, 10 окт 2008.

  1. TopicStarter Overlay
    smiler
    Offline

    smiler

    Регистрация:
    6 окт 2008
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Доброго времени. Такой простой вопрос.
    В макете есть таблица из 30 ячеек.
    Есть 30 переменных (т1, т2, т3....т30) - в ячейку1 таблицы вписана переменная т1, в ячейку2 таблицы вписана переменная т2...... в ячейку30 вписана переменная т30. Все они вписаны с типом "Выражение"
    Из модуля в каждую ячейку будут передаваться соответствующие этой ячейке значения переменных.
    Вопрос:
    Как внутри цикла обратиться к очередной переменной? Тоесть надо как-то организовать что-то типа

    Код:
    Цикл1=0
    Пока Цикл1 < 30  Цикл
    Цикл1=Цикл1+1;
    т="т";
    тт=т+"Цикл1";
    ....	
    КонецЦикла;
    
    Тоесть к имени переменной "т" присоединять индекс номера итерации цикла, чтоб получить имя "т1", "т2"....."т30" и сделать нужные действия с ней..
    Спасибо
  2. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    перебором, или массивом... других способов я не знаю...
  3. TopicStarter Overlay
    smiler
    Offline

    smiler

    Регистрация:
    6 окт 2008
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Речь идёт о заполнении данных за месяц (логику 28, 29, 30, 31 день уже прописал).
    Берётся определённое число, делется на кол-во дней в месяце и равномерно забивается в ячейки. Всё какбы просто, можно обойтись одной переменной и без циклов. НО. Есть ситуации, когда с некотороыми из этих ячеек нужно что-то сделать (увеличить значение или уменьшить). И количество этих ячеек строго не задано и каждый раз меняется. Тоесть ситуация такова - что для каждой ячейки нужна своя переменная. Вот как их перебирать внутри цикла, ячейки то?
    При использовании массива - их же тоже нумеровать надо, вопрос актуален и для случая с массивом.
    А руками перебирать - это сложновато получится, ведь логика заполнения таблицы не проста, учесть всё будет сложновато...
    Вот пронумеровать бы их в цикле....
  4. X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    433
    Симпатии:
    3
    Баллы:
    29
    Попробуйте вот так
    Код:
    //берем число
    Значение = НашеЧисло/КоличествоДней;
    //забиваем в ячейки
    Ячейки = СоздатьОбъект("СписокЗначений");
    
    Для Ц = 1 По КоличествоДней Цикл 
    Ячейки.УстановитьЗначение(Ц, Значение);
    КонецЦикла;
    
    //получаем значение произвольной ячейки     
    ЗначениеЯчейки = Ячейки.ПолучитьЗначение(НомерЯчейки); 
    НовоеЗначениеЯчейки = ПреобразующаяФункция(ЗначениеЯчейки);
    
    //изменяем значение произвольной ячейки 
    Ячейки.УстановитьЗначение(НомерЯчейки, НовоеЗначениеЯчейки);
    
    
    В качестве выражения ячейки(на Вашем макете) должно быть задано
    ?(ПустоеЗначение(Ячейки)=0,?(ТипЗначенияСтр(Ячейки)="СписокЗначений",?(Ячейки.РазмерСписка()>=НомерЯчейки,Ячейки.ПолучитьЗначение(НомерЯчейки),0),0),0)
  5. WaRDeR
    Offline

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

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Расскажи, что за метаданное у тебя такое?
    Твои "переменные" - это переменные или реквизиты формы/справочника/документа/ТЧдокумента/ТЗ?

    В зависимости от этого разные способы обработки.
  6. Мастер_миража
    Offline

    Мастер_миража Опытный в 1С

    Регистрация:
    22 сен 2008
    Сообщения:
    148
    Симпатии:
    0
    Баллы:
    26
    в макете кажется имеется возможность именовать ячейки
    проименуй их т0, т1 и т.д. и для обращения к ним нав можно бутед юзать строковый идентификатор
  7. TopicStarter Overlay
    smiler
    Offline

    smiler

    Регистрация:
    6 окт 2008
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Значится так.
    Организация оказывает услугу человечку. Например поставка воздуха. У него дома стоит счётчик, считакт сколько он воздуха насосал в месяц.
    Мне нужно сделать акт, в котором будет табличка, в которой будут в каждй ячейке расписано сколько он в день насосал - ЕЖЕСУТОЧНЫЙ РАСХОД (ЕР).
    ЕР считается просто - месячный расход (данные с счётчика, с точностью до трёх знаков после запятой) делится на кол-во дней в месяце и готово. Вот на этом этапе начинается головняк, из-за которого нужно обрабатывать каждую ячейку. Дело в том, что если месячный расход поделить на кол-во дней - то результат нужно округлять, ибо он длинный. Округляем до 3 знака после запятой, распихиваем например на 30 дней. Потом человек этот раход в кучу обратно складывает - и получает немного другоен значение, ибо из=за округления теряется часть этого "воздуха" или наоборот, появляется из ниоткуда. ДЛя решения проблемы я уже разработал алгоритм, который выравнивает показания эти, по каждому дню так, что в итоге сложив их все получается правильное значение и всё сходится. Всё что мне осталось - распихать эти значения по ячейкам.
    Вариант Х-Ман достоин жизни, буду пробывать, но, судя по всему, уже в понедельник.
    Вопрос на выходные - может всётаки можно номер итерации цикла прилепить к имени ячейки? Тоесть формировать имя ячейки внутри цикла используя номер итерации? Это бы облегчило немного...
    Спасибо всем откликнувшимся!

    Мастер_миража, а как потом к проименованным ячейкам обращаться? Дайте оператор пажалуйста.
  8. Мастер_миража
    Offline

    Мастер_миража Опытный в 1С

    Регистрация:
    22 сен 2008
    Сообщения:
    148
    Симпатии:
    0
    Баллы:
    26
    Таблица.Область("т1");
    в цикле нав будет так
    таблица.Область("т"+строка(i));

    можно не именовать, обращаться в формате RnCn
    Таюлица.Область("R1C1");
  9. TopicStarter Overlay
    smiler
    Offline

    smiler

    Регистрация:
    6 окт 2008
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Сделал через СписокЗначений
    Спасибо всем ;)

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