Имя: Пароль:
1C
1С v8
ТаблицаЗначений с заранее неизвестным количеством колонок
,
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
победил!!!



   Пока Выборка.Следующий() Цикл        
       Если Выборка.Номер <> Номер Тогда
           НоваяСтрока = ТЗ.Добавить();
           НоваяСтрока.Дата = СокрЛП(Выборка.Дата);
           НоваяСтрока.Номер = СокрЛП(Выборка.Номер);
           НоваяСтрока.Контрагент = СокрЛП(Выборка.Контрагент);
       КонецЕсли;
       НазваниеКолонки = Строка("н"+СокрЛП(Выборка.Номенклатура.Код));
       ОтображениеНазванияКолонки = СокрЛП(Выборка.Номенклатура);
           Если ТЗ.Колонки.Найти(НазваниеКолонки) = Неопределено Тогда
               ТЗ.Колонки.Добавить(НазваниеКолонки,,ОтображениеНазванияКолонки);
               НоваяСтрока[НазваниеКолонки] = Выборка.Количество;
           Иначе
               НоваяСтрока[НазваниеКолонки] = Выборка.Количество;
           КонецЕсли;
       Номер = Выборка.Номер;
   КонецЦикла;
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс