Имя: Пароль:
1C
1С v8
Из одной таблицы значений создать другую
0 Serdolik55
 
05.06.12
15:43
Есть Таблица:
ЦеноваяГруппа  СуммаЛимита    Процент

Игрушки           10000           2%
Игрушки          200000           5%


Нужно в цикле обработать её и создать такую:

Интервал1      Интервал2     Процент

  0           10000           2%
  10000        200000         5%

Как правильно обойти в цикле и создать её?
Пишу так:
ТаблицаСкидок = Новый ТаблицаЗначений;
ТаблицаСкидок.Колонки.Добавить("Интервал1");
                                                   ТаблицаСкидок.Колонки.Добавить("Интервал2");
                                                  ТаблицаСкидок.Колонки.Добавить("ПроцентСкидки");

Для Каждого Строка Из ТЗ Цикл
Стр = ТаблицаСкидок.Добавить();
....................(Как тут описать, чтобы получить таблицу описанную выше)
КонецЦикла;
1 salvator
 
05.06.12
15:49
Добавить в исходную таблицу строку в начало со значением 0 в колонке "Сумма лимита"
Цикл сделай по индексам и напиши что-то типа
Если Н+1 <= КоличествоСтрокВТЗ Тогда
  Стр.Интервал1 = ТЗ[Н].СуммаЛимита;
  Стр.Интервал2 = ТЗ[Н+1].СуммаЛимита;
  ...
2 Serdolik55
 
05.06.12
16:23
(1) Не получается, вот код:


СтраршийИндекс = РезультатЗапросаПоСкидкам.Количество()-1;
                                                  Для Н = 0 По СтраршийИндекс Цикл
                                                      Если Н+1 <= РезультатЗапросаПоСкидкам.Количество() Тогда
                                                          Стр = ТаблицаСкидок.Добавить();
                                                          Стр.Интервал1 = РезультатЗапросаПоСкидкам[Н].ЗначениеУсловия;
                                                          Стр.Интервал2 = РезультатЗапросаПоСкидкам[Н+1].ЗначениеУсловия;
                                                      КонецЕсли;
                                                  КонецЦикла;
3 Лефмихалыч
 
05.06.12
16:27
(0) не делай мозг, юзай запрос
4 Serdolik55
 
05.06.12
16:28
(3) Вот запрос:

ЗапросПоСкидкам = Новый Запрос;
                          ЗапросПоСкидкам.УстановитьПараметр("ДатаСреза",ТекущаяДата());
                          ЗапросПоСкидкам.УстановитьПараметр("ЦеноваяГруппа",Выборка.Ценоваягруппа);
                          ЗапросПоСкидкам.УстановитьПараметр("Склад",ЭтотОбъект.Склад);
                          ЗапросПоСкидкам.Текст = "ВЫБРАТЬ
                                                  |    СкидкиНаценкиПоЦеновымГруппамСрезПоследних.ЗначениеУсловия,
                                                  |    СкидкиНаценкиПоЦеновымГруппамСрезПоследних.ПроцентСкидкиНаценки
                                                  |ИЗ
                                                  |    РегистрСведений.СкидкиНаценкиПоЦеновымГруппам.СрезПоследних(
                                                  |            &ДатаСреза,
                                                  |            ЦеноваяГруппа = &ЦеноваяГруппа
                                                  |                И ПолучательСкидки = &Склад) КАК СкидкиНаценкиПоЦеновымГруппамСрезПоследних";
                                                 
                                                  РезультатЗапросаПоСкидкам = ЗапросПоСкидкам.Выполнить().Выгрузить();
                                                  НоваяСтрока = РезультатЗапросаПоСкидкам.Вставить(0);
                                                  НоваяСтрока.ЗначениеУсловия = 0;
                                                  НоваяСтрока.ПроцентСкидкиНаценки = 0;
                                                 
                                                  ТаблицаСкидок = Новый ТаблицаЗначений;
                                                  ТаблицаСкидок.Колонки.Добавить("Интервал1");
                                                  ТаблицаСкидок.Колонки.Добавить("Интервал2");
                                                  ТаблицаСкидок.Колонки.Добавить("ПроцентСкидки");
                                                 
                                                  СтраршийИндекс = РезультатЗапросаПоСкидкам.Количество()-1;
                                                  Для Н = 0 По СтраршийИндекс Цикл
                                                      Если Н+1 <= РезультатЗапросаПоСкидкам.Количество() Тогда
                                                          Стр = ТаблицаСкидок.Добавить();
                                                          Стр.Интервал1 = РезультатЗапросаПоСкидкам[Н].ЗначениеУсловия;
                                                          Стр.Интервал2 = РезультатЗапросаПоСкидкам[Н+1].ЗначениеУсловия;
                                                      КонецЕсли;
                                                  КонецЦикла;
Закон Брукера: Даже маленькая практика стоит большой теории.