![]() |
![]() |
|
получить строка[колонка.имя] | ☑ | ||
---|---|---|---|---|
0
cent79
15.11.11
✎
20:44
|
всем привет!
ситуация такая - имеется тз в которой точное имя колонок не известно (добавлял через цикл в зависимости от введенного пользователем) в процессе работы добавляю в массив через Строка[Колонка.Имя] = Значение вся проблема когда считываю в цикле Для каждого Стр из тзСписок Для каждого Колонка из тзСписок.Колонки Цикл Область.Параметры.Цена = Стр[Колонка.Имя]; Таблица.Присоединить(Область); КонецЦикла; КонецЦикла; так вот - если колонок больше 1 - то при выводе значения из всех предыдущих колонок пропадают остаются только в последней причем в отладке значения в тзСписок есть - и через сообщить я их также получал... просто потом 1с их удаляет чтоли кто ее знает :) в общем помогите плз понять в чем беда отчет горит :) спасибо |
|||
1
andrewks
15.11.11
✎
20:53
|
это не 1с их удаляет, а твой код
|
|||
2
cent79
15.11.11
✎
20:58
|
а где конкретно то?
|
|||
3
Kreont
15.11.11
✎
21:03
|
(0) Поставь в цикл еще строку для получения области
|
|||
4
cent79
15.11.11
✎
21:12
|
(3) пробовал не помогает
даже больше скажу - если создать к примеру 5 разных областей и каждый раз получать - в 4 предыдущих параметр очищается и остается только в последней... мистика - я предполагаю что виновата строчка Область.Параметры.Цена = Стр[Колонка.Имя]; но я не знаю как получить данные из тз если мне имя не известно ) искал по индексу - таже фигня ) |
|||
5
kosts
15.11.11
✎
21:22
|
|
|||
6
kosts
15.11.11
✎
21:24
|
(5)Не лучше так
|
|||
7
andrewks
15.11.11
✎
21:28
|
(2) ты устанавливаешь параметр у одной и той же области макета
|
|||
8
acsent
15.11.11
✎
21:30
|
(7) А как же документы тогда печатаются, а отчеты выводятся?
|
|||
9
andrewks
15.11.11
✎
21:31
|
+(7) не, вру. надо подумать
|
|||
10
cent79
15.11.11
✎
21:48
|
(5) спасибо но не пашет
провел эксперимент в цикле задал Область.Параметры.Парам = Колонка.Имя присоединяет нормально ничего не пропадает ) мыслей нет - походу придется переделывать обрабатывая список параметров от пользователя по одному. |
|||
11
andrewks
15.11.11
✎
21:55
|
(10) давай больше кода, где-то у тебя намучено в другом месте
|
|||
12
cent79
15.11.11
✎
22:21
|
эта функция создает тз с колонками куда закидывает цены
СписокНоменклатуры = Новый ТаблицаЗначений; СписокНоменклатуры.Колонки.Добавить("Номенклатура"); СписокНоменклатуры.Колонки.Добавить("ЭтоГруппа"); СписокНоменклатуры.Колонки.Добавить("Уровень"); СписокНоменклатуры.Колонки.Добавить("Ед"); Для каждого Стр из СписокТиповЦен Цикл //списоктиповцен задается в другой функции по запросу ИмяКолонки = "ТЦ"+Строка(Стр.Код); //коды цифровые поэтому добавляю строку тц иначе имя колонки не задать ну и искать легче потом СписокНоменклатуры.Колонки.Добавить(ИмяКолонки); КонецЦикла; ВыборкаГруппа = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаГруппа.Следующий() Цикл ДобСтр = СписокНоменклатуры.Добавить(); ДобСтр.Номенклатура = ВыборкаГруппа.ЦеноваяГруппа; ДобСтр.ЭтоГруппа = Истина; ДобСтр.Уровень = ВыборкаГруппа.Уровень(); ВыборкаТовар = ВыборкаГруппа.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаТовар.Следующий() Цикл тзЦены = Новый ТаблицаЗначений; тзЦены.Колонки.Добавить("ТипЦен"); тзЦены.Колонки.Добавить("Цена"); Для каждого ТипЦены из СписокТиповЦен Цикл Если Стр.Ссылка.БазовыйТипЦен = Справочники.ТипыЦенНоменклатуры.ПустаяСсылка() Тогда Цена = ПолучитьЦенуНоменклатуры(ВыборкаТовар.Ссылка, ТипЦены.Ссылка); Иначе БазоваяЦена = ПолучитьЦенуНоменклатуры(ВыборкаТовар.Ссылка, ТипЦены.Ссылка.БазовыйТипЦен); Процент = ТипЦены.Ссылка.ПроцентСкидкиНаценки; Цена = БазоваяЦена + (БазоваяЦена / 100 * Процент); КонецЕсли; СтрЦена = тзЦены.Добавить(); СтрЦена.ТипЦен = Стр.Ссылка; СтрЦена.Цена = Цена; КонецЦикла; Если тзЦены.Итог("Цена") <> 0 Тогда ДобСтр = СписокНоменклатуры.Добавить(); ДобСтр.Номенклатура = ВыборкаТовар.Ссылка; ДобСтр.ЭтоГруппа = Ложь; ДобСтр.Уровень = ВыборкаТовар.Уровень(); ДобСтр.Ед = ВыборкаТовар.Ед; Для каждого СтрЦена из тзЦены Цикл ИмяКолонки = "ТЦ"+Строка(СтрЦена.ТипЦен.Код); //таже фигня ДобСтр[ИмяКолонки] = СтрЦена.Цена; КонецЦикла; КонецЕсли; КонецЦикла; КонецЦикла; а эта функция обрабатывает полученный тз Таблица.НачатьАвтогруппировкуСтрок(); Для Каждого Стр Из тзСписокТоваров Цикл Если Стр.ЭтоГруппа Тогда ИмяОбласти = Строка("Группа"+Стр.Уровень+"|Номенклатура"); ОблГруппа = Макет.ПолучитьОбласть(ИмяОбласти); ОблГруппа.Параметры.ЦеноваяГруппа = Стр.Номенклатура; Таблица.Вывести(ОблГруппа, Стр.Уровень); ИмяОбласти = СтрЗаменить(ИмяОбласти, "Номенклатура", "ТипЦен"); ОблГруппаТипЦен = Макет.ПолучитьОбласть(ИмяОбласти); Для каждого Колонка из тзСписокТоваров.Колонки Цикл НачалоИмени = Лев(Колонка.Имя, 2); Если НачалоИмени = "ТЦ" Тогда Таблица.Присоединить(ОблГруппаТипЦен, Стр.Уровень); КонецЕсли; КонецЦикла; Иначе ОблТоварНоменклатура.Параметры.Ссылка = Стр.Номенклатура; Таблица.Вывести(ОблТоварНоменклатура, Стр.Уровень); Для каждого Колонка из тзСписокТоваров.Колонки Цикл СтрЦена = 0; НачалоИмени = ЛЕВ(Колонка.Имя, 2); Если НачалоИмени = "ТЦ" Тогда ОблТоварТипЦен.Параметры.Цена = Стр[Колонка.Имя]; ОблТоварТипЦен.Параметры.Ед = Стр.Ед; Таблица.Присоединить(ОблТоварТипЦен, Стр.Уровень); КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; Таблица.ЗакончитьАвтогруппировкуСтрок(); как то так :) |
|||
13
andrewks
15.11.11
✎
22:42
|
эх и намучено у тебя.
проверь, перед формированием таблицы сделай тзСписокТоваров.ВыбратьСтроку() - действительно ли всё корректно в самой ТЗ? |
|||
14
cent79
15.11.11
✎
22:46
|
(13) угу первое что проверил - через отладчик и через сообщить удостоверился что значения в строке содержатся
|
|||
15
andrewks
15.11.11
✎
22:48
|
ну не знаю, механизм рабочий, специально проверил
Таб=Новый ТабличныйДокумент; Макет=ОбработкаОбъект.ПолучитьМакет("ТабОбн"); Область1=Макет.ПолучитьОбласть("Строка|Колонка"); Для каждого ТекКол Из СписФайлов.Колонки Цикл Область1.Параметры.Значение=ТекКол.Имя; Если (СписФайлов.Колонки.Индекс(ТекКол)=0) Тогда Таб.Вывести(Область1); Иначе Таб.Присоединить(Область1); КонецЕсли; КонецЦикла; Для каждого ТекСтр Из СписФайлов Цикл Для каждого ТекКол Из СписФайлов.Колонки Цикл Область1.Параметры.Значение=ТекСтр[ТекКол.Имя]; Если (СписФайлов.Колонки.Индекс(ТекКол)=0) Тогда Таб.Вывести(Область1); Иначе Таб.Присоединить(Область1); КонецЕсли; КонецЦикла; КонецЦикла; Таб.ОтображатьСетку = Истина; Таб.Защита = Ложь; Таб.ТолькоПросмотр = Ложь; Таб.ОтображатьЗаголовки = Истина; Таб.Показать(); выводит всё корректно |
|||
16
cent79
15.11.11
✎
22:53
|
(14) хм
я конечно втыкну в тз на заполненость ... но блин ... |
|||
17
cent79
15.11.11
✎
23:32
|
проблема решена
всем спасибо п.с. 4 часа кода и результат - я невнимательная обезьяна |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |