|
ТаблицаЗначений с заранее неизвестным количеством колонок | ☑ | ||
---|---|---|---|---|
0
poet
07.11.11
✎
17:50
|
Как создать ТЗ в которой изначально неизвестно количество колонок?
Например |
|||
1
poet
07.11.11
✎
17:50
|
день 1й (товар 1, товар 2, товар3)
день 2й ("пусто",Товар 2, пусто) день 3й ("пусто",Товар 2, Товар3) день 4й ("пусто","пусто", "пусто", Товар4) |
|||
2
Wobland
07.11.11
✎
17:51
|
(0) Новый ТаблицаЗначений; - ни разу не известно количество колонок. переведи на русский
|
|||
3
Axel2009
07.11.11
✎
17:52
|
а если товаров 10000?
|
|||
4
Guk
07.11.11
✎
17:52
|
тз = Запрос.Выполнить().Выгрузить()...
|
|||
5
poet
07.11.11
✎
17:52
|
*(1С 8.2) Тоесть если появляется новая номенклатура в накладной, которой небыло в предидущих - создается новая колонка и в нее заносится (шахматкой) эта новая позиция номенклатуры
|
|||
6
mikecool
07.11.11
✎
17:52
|
Если ТЗ.Колонки.Найти("ДеньХ") = Неопределено Тогда
ТЗ.Колонки.Добавить("ДеньХ") |
|||
7
Axel2009
07.11.11
✎
17:53
|
(5) ага, и что делать когда их станет 10000? колонки замучаешься листать
|
|||
8
poet
07.11.11
✎
17:55
|
(3) ну не будет там столько товаров и не замучусь - в бухгалтерии и не такие простыни печатают
|
|||
9
poet
07.11.11
✎
18:05
|
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Дата"); ТЗ.Колонки.Добавить("Номер"); Номер = "0"; Пока Выборка.Следующий() Цикл НоваяСтрока = ТЗ.Добавить(); Если Выборка.Номер <> Номер Тогда НоваяСтрока.Дата = Выборка.Дата; НоваяСтрока.Номер = Выборка.Номер; Номер = Выборка.Номер; КонецЕсли; НоваяКолонка = Выборка.Номенклатура; Если ТЗ.Колонки.Найти("НоваяКолонка") = Неопределено Тогда ТЗ.Колонки.Добавить("НоваяКолонка") КонецЕсли; КонецЦикла; ТабличноеПоле.Очистить(); ЭлементыФормы.ТабличноеПоле.Значение = ТЗ; ЭлементыФормы.ТабличноеПоле.СоздатьКолонки(); но что-то все равно где-то я не так делаю |
|||
10
KarpovDeniska
07.11.11
✎
18:11
|
(9) а нах в найти НоваяКолонка в кавычках??
|
|||
11
KarpovDeniska
07.11.11
✎
18:13
|
(9) а ещё ты в колонки ссылку добавляешь походу
|
|||
12
Fragster
гуру
07.11.11
✎
18:14
|
а нафига? чтобы потом "простыню" печатать? так на СКД сделать группировку колонками - и все
|
|||
13
KarpovDeniska
07.11.11
✎
18:15
|
(12) гыыыы СКД ))) ну так напиши ему на скд ))
|
|||
14
spiteful41
07.11.11
✎
18:16
|
ТЗ.Колонки.Найти(Выборка.Номенклатура.Наименование)
|
|||
15
poet
07.11.11
✎
18:16
|
Ошибка при вызове метода контекста (Добавить)
ТЗ.Колонки.Добавить(НоваяКолонка) Неправильное имя колонки |
|||
16
KarpovDeniska
07.11.11
✎
18:16
|
(15) так напиши НоваяКолонка.Наименованме
|
|||
17
spiteful41
07.11.11
✎
18:17
|
ТЗ.Колонки.Добавить(Выборка.Номенклатура.Наименование)
|
|||
18
poet
07.11.11
✎
18:21
|
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Дата"); ТЗ.Колонки.Добавить("Номер"); Номер = "0"; Пока Выборка.Следующий() Цикл НоваяСтрока = ТЗ.Добавить(); Если Выборка.Номер <> Номер Тогда НоваяСтрока.Дата = Выборка.Дата; НоваяСтрока.Номер = Выборка.Номер; Номер = Выборка.Номер; КонецЕсли; Если ТЗ.Колонки.Найти(Выборка.Номенклатура.Наименование) = Неопределено Тогда ТЗ.Колонки.Добавить(Выборка.Номенклатура.Наименование) КонецЕсли; КонецЦикла; ТабличноеПоле.Очистить(); ЭлементыФормы.ТабличноеПоле.Значение = ТЗ; ЭлементыФормы.ТабличноеПоле.СоздатьКолонки(); все-равно Ошибка при вызове метода контекста (Добавить) ТЗ.Колонки.Добавить(НоваяКолонка) Неправильное имя колонки |
|||
19
spiteful41
07.11.11
✎
18:22
|
Или ты изменения не применил потому что ТЗ.Колонки.Добавить(НоваяКолонка) , или Номенклатура пустая
|
|||
20
poet
07.11.11
✎
18:23
|
применил - пробовал выносить Выборка.Номенклатура.Наименование в переменную - ошибка та же
|
|||
21
spiteful41
07.11.11
✎
18:24
|
Выборка.Номенклатура.Наименование = "" ?
|
|||
22
poet
07.11.11
✎
18:28
|
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Дата"); ТЗ.Колонки.Добавить("Номер"); Номер = "0"; Пока Выборка.Следующий() Цикл НоваяСтрока = ТЗ.Добавить(); Если Выборка.Номер <> Номер Тогда НоваяСтрока.Дата = Выборка.Дата; НоваяСтрока.Номер = Выборка.Номер; Номер = Выборка.Номер; КонецЕсли; Переменная = Выборка.Номенклатура.Наименование; Если ТЗ.Колонки.Найти(Переменная) = Неопределено Тогда ТЗ.Колонки.Добавить(Переменная) КонецЕсли; КонецЦикла; ТабличноеПоле.Очистить(); ЭлементыФормы.ТабличноеПоле.Значение = ТЗ; ЭлементыФормы.ТабличноеПоле.СоздатьКолонки(); все-равно Ошибка при вызове метода контекста (Добавить) ТЗ.Колонки.Добавить(НоваяКолонка) |
|||
23
poet
07.11.11
✎
18:30
|
даже Переменная = Строка(Выборка.Номенклатура.Наименование);
не катит |
|||
24
spiteful41
07.11.11
✎
18:31
|
Напиши мне наименование номенклатуры, которым будет называться новая колонка
|
|||
25
zladenuw
07.11.11
✎
18:31
|
у тебя 2 колонке номер и дата, а ты что туда передаешь. покажи запрос. может действительно на скд сделаешь ?
|
|||
26
spiteful41
07.11.11
✎
18:33
|
И почему ошибка с таким текстом? Ошибка при вызове метода контекста (Добавить)
ТЗ.Колонки.Добавить(НоваяКолонка) |
|||
27
catena
07.11.11
✎
18:33
|
Да вы гоните. Колонка с именем <Штаны "Красные">? Кто по наименованию создает-то? Хотя бы по коду создавай.
|
|||
28
spiteful41
07.11.11
✎
18:33
|
Ты же убрал НоваяКолонка
|
|||
29
spiteful41
07.11.11
✎
18:34
|
(27) автор приводил пример в (1) как он хочет
|
|||
30
poet
07.11.11
✎
18:36
|
(24) мдя - хреновенькое первое наименование "Котлетне м"ясо св."
(25) а что такое СКД (29) - да пусть колонки ни как не называются - пусть будут Номенклатура1, Номенклатура2, Номенклатура3 - главное что б ТЗ правильно заполнялась (28) пробую |
|||
31
KarpovDeniska
07.11.11
✎
18:39
|
(30) ну напиши
Сч = 0; Цикл Сч = Сч + 1; ТЗ.Колонки.Добавить("Номенклатура" + Строка(Сч)); КонецЦикла |
|||
32
spiteful41
07.11.11
✎
18:39
|
СКД:
Слон, Курица, Дадон, аптека бессмысленный и тусклый свет... |
|||
33
poet
07.11.11
✎
18:40
|
(28) Ошибка при вызове метода контекста (Добавить)
ТЗ.Колонки.Добавить(Переменная) Неправильное имя колонки |
|||
34
catena
07.11.11
✎
18:40
|
(30)Гыгы. И как ты будешь определять, какую номенклатуру куда пихать? Или тебе пофиг, лишь бы в разных колонках?
|
|||
35
zladenuw
07.11.11
✎
18:40
|
(30) http://1cskd.ru/
Запрос покажи |
|||
36
catena
07.11.11
✎
18:41
|
ТЗ.Колонки.Добавить(Выборка.Номенклатура.Код) будет все-таки ближе к исходному пожеланию. А вообще извращение.
|
|||
37
poet
07.11.11
✎
18:42
|
(35)
Запрос.Текст = "ВЫБРАТЬ | ПоступлениеТоваровУслуг.Номер, | ПоступлениеТоваровУслуг.Дата, | ПоступлениеТоваровУслуг.Контрагент, | ПоступлениеТоваровУслуг.Проведен, | ПоступлениеТоваровУслуг.ДатаВходящегоДокумента, | ПоступлениеТоваровУслуг.НомерВходящегоДокумента, | ПоступлениеТоваровУслугТовары.Номенклатура, | ПоступлениеТоваровУслугТовары.ЕдиницаИзмерения, | ПоступлениеТоваровУслугТовары.Количество, | ПоступлениеТоваровУслугТовары.Цена |ИЗ | Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг | ПО ПоступлениеТоваровУслугТовары.Ссылка = ПоступлениеТоваровУслуг.Ссылка |ГДЕ | ПоступлениеТоваровУслуг.Дата МЕЖДУ &ДатаС И &ДатаПо | И ПоступлениеТоваровУслуг.Проведен = ИСТИНА" + ?(ЗначениеЗаполнено(Контрагент)," И ПоступлениеТоваровУслуг.Контрагент В(&Контрагент)", ""); |
|||
38
spiteful41
07.11.11
✎
18:42
|
(33) чему равна (Переменная) в момент возникновения ошибки?
|
|||
39
KarpovDeniska
07.11.11
✎
18:43
|
(37) а нах левое соединение?
|
|||
40
poet
07.11.11
✎
18:46
|
(39) что б можно было перебирать табличную часть
|
|||
41
KarpovDeniska
07.11.11
✎
18:47
|
(40) а без него не перебирается типа?? ))
|
|||
42
poet
07.11.11
✎
18:48
|
вопрос отложу до завтра - почитаю про СКД
|
|||
43
KarpovDeniska
07.11.11
✎
18:50
|
(42) не думаю что разберешься,с этим лучше разберись
|
|||
44
zladenuw
07.11.11
✎
19:37
|
так вышло.
Переменная = Строка("н"+Число(Выборка.Номенклатура.Код)); Если ТЗ.Колонки.Найти(Переменная) = Неопределено Тогда ТЗ.Колонки.Добавить(Переменная); ТЗ.Колонки[Переменная].Заголовок = "Номенклатура"; НоваяСтрока[Переменная] = Выборка.Номенклатура; иначе НоваяСтрока[Переменная] = Выборка.Номенклатура; КонецЕсли; а вот с скд туплю.... не делал такого. если получится скину ссылку. |
|||
45
poet
18.11.11
✎
17:21
|
вот слегка поборол это дело - только не пойму как засовывать значение именно в тот столбец что нужно если номенклатура повторяется:
ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Дата"); ТЗ.Колонки.Добавить("Номер"); ТЗ.Колонки.Добавить("Контрагент"); Номер = "0"; НоваяКолонка = "0"; Пока Выборка.Следующий() Цикл Если Выборка.Номер <> Номер Тогда НоваяСтрока = ТЗ.Добавить(); НоваяСтрока.Дата = СокрЛП(Выборка.Дата); НоваяСтрока.Номер = СокрЛП(Выборка.Номер); НоваяСтрока.Контрагент = СокрЛП(Выборка.Контрагент); КонецЕсли; НазваниеКолонки = СокрЛП(Выборка.Номенклатура); Если ТЗ.Колонки.Найти(НазваниеКолонки) = Неопределено Тогда ТЗ.Колонки.Добавить("НоваяКолонка"+НоваяКолонка,,НазваниеКолонки); НоваяСтрока["НоваяКолонка"+НоваяКолонка] = Выборка.Количество; Иначе НоваяСтрока.Установить([ТЗ.Колонки.Найти(НазваниеКолонки)],Выборка.Количество); КонецЕсли; НоваяКолонка = НоваяКолонка +1; Номер = Выборка.Номер; КонецЦикла; ТабличноеПоле.Очистить(); ЭлементыФормы.ТабличноеПоле.Значение = ТЗ; ЭлементыФормы.ТабличноеПоле.СоздатьКолонки(); |
|||
46
poet
18.11.11
✎
18:38
|
победил!!!
Пока Выборка.Следующий() Цикл Если Выборка.Номер <> Номер Тогда НоваяСтрока = ТЗ.Добавить(); НоваяСтрока.Дата = СокрЛП(Выборка.Дата); НоваяСтрока.Номер = СокрЛП(Выборка.Номер); НоваяСтрока.Контрагент = СокрЛП(Выборка.Контрагент); КонецЕсли; НазваниеКолонки = Строка("н"+СокрЛП(Выборка.Номенклатура.Код)); ОтображениеНазванияКолонки = СокрЛП(Выборка.Номенклатура); Если ТЗ.Колонки.Найти(НазваниеКолонки) = Неопределено Тогда ТЗ.Колонки.Добавить(НазваниеКолонки,,ОтображениеНазванияКолонки); НоваяСтрока[НазваниеКолонки] = Выборка.Количество; Иначе НоваяСтрока[НазваниеКолонки] = Выборка.Количество; КонецЕсли; Номер = Выборка.Номер; КонецЦикла; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |