Имя: Пароль:
1C
1С v8
v8: ТЗ как свернуть таблицу с колонками из переменных?
,
0 poet
 
14.03.12
15:33
есть ТЗ названия двух колонок, которые потом должны ссумироватся, создаются как переменные:
НазваниеКолонки = Строка("н"+СокрЛП(Выборка.Номенклатура.Код));
НазваниеКолонкиЦена = Строка("ц"+СокрЛП(Выборка.Номенклатура.Код));

но бывает так что в одной накладной может быть 2 одинаковых номенклатуры с одной ценой - поэтому необходимо это дело Свернуть - НО КАК?

ТЗ.Свернуть("Дата, Номер, ДатаВходящая, НомерВходящий, Контрагент", "[НазваниеКолонки], [НазваниеКолонкиЦена]");
1 butterbean
 
14.03.12
15:34
нда
ТЗ.Свернуть("Дата, Номер, ДатаВходящая, НомерВходящий, Контрагент", НазваниеКолонки+", "+НазваниеКолонкиЦена);
2 Шапокляк
 
14.03.12
15:35
А вообще цены суммировать как-то странно.
3 aka AMIGO
 
14.03.12
15:37
в "Свернуть" можно указывать и номера колонок
4 aka AMIGO
 
14.03.12
15:38
ТЗ.Свернуть("Дата, Номер, ДатаВходящая, НомерВходящий, Контрагент", "5, 6");
попробуй так
5 aka AMIGO
 
14.03.12
15:40
отбой!! это ведь 8-ка..
не пойдет!
6 poet
 
14.03.12
15:44
(2) чуть не правильно назвал колонку - на скорость не влияет - там сумма
(1) а как быть со вторыми, а точнее с первыми кавычками? - так дает ошибку
7 ЧеловекДуши
 
14.03.12
15:45
(5)Все там пойдет, только на сервере, или на толстом клиенте.
8 ЧеловекДуши
 
14.03.12
15:46
+Доступность:
Сервер, толстый клиент, внешнее соединение.

ТаблицаЗначений (ValueTable)
Свернуть (GroupBy)
Синтаксис:

Свернуть(<КолонкиГруппировок>, <КолонкиСуммирования>)
Параметры:

<КолонкиГруппировок> (обязательный)

Тип: Строка.
Имена колонок, разделенные запятыми, по которым необходимо группировать строки таблицы значений.
<КолонкиСуммирования> (необязательный)

Тип: Строка.
Имена колонок, разделенные запятыми, по которым необходимо суммировать значения в строках таблицы значений.
Описание:

Осуществляет свертку таблицы значений по указанным колонкам группировки. Строки, у которых совпадают значения в колонках, указанных в первом параметре, сворачиваются в одну строку. Значения этих строк, хранящиеся в колонках, указанных во втором параметре, накапливаются.
Важно! Списки колонок не должны пересекаться. Колонки, не вошедшие ни в один из списков колонок, после выполнения метода удаляются из таблицы значений.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Примечание:

Если в колонке установлен тип и он единственный, то при суммировании будет предприниматься попытка преобразования значения к типу Число.
Если колонке не присвоены типы, то в процессе суммирования будут принимать участие только значения, имеющие тип Число, значения других типов будут игнорироваться.
Если в колонке несколько типов и среди них есть тип Число, то в процессе суммирования будут принимать участие только значения, имеющие тип Число, значения других типов будут игнорироваться.
Если в колонке несколько типов и среди них нет типа Число, то результат суммирования будет 0, который будет присвоен в соответствующую колонку, где будет преобразован к значению по умолчанию для типа, установленного в колонке.
Пример:

ТаблицаЦен.Свернуть("Товар, Валюта", "Цена");
9 poet
 
14.03.12
15:47
во втором параметре нет начальных ковычек - на них я так понимаю и ругается
10 poet
 
14.03.12
15:48
есть токо кавычки которые запятую отделяют
11 ЧеловекДуши
 
14.03.12
15:48
+ Делать так

ТЗ.Свернуть("Дата, Номер, ДатаВходящая, НомерВходящий, Контрагент", ""+НазваниеКолонки+", "+НазваниеКолонкиЦена+""); // :)

Но суммировать по цене, это перебор :)
12 poet
 
14.03.12
15:49
кстати обидно - параметр ссумирования не обязательный, а если его не указать - колонки теряются
13 ЧеловекДуши
 
14.03.12
15:49
(10)Ты кто, Программист или нет, тебе что мешает прикрутить "Если" и понеслось т.д. :)
14 ЧеловекДуши
 
14.03.12
15:49
(12)Все там не обидно, а куда ты предлагаешь их деть программе?
15 poet
 
14.03.12
15:53
(11) по поводу суммы в (6) посте
(14) ссумировать мовчкы
шаз погляжу в отладчике - ругается на неверные названия колонок
16 poet
 
14.03.12
16:00
что-то не то - везде все одинаковое - правильное, а 1Сина ругается - взгляните гуру на "это":

   Пока Выборка.Следующий() Цикл        
       Если Выборка.Номер <> Номер Тогда
           НоваяСтрока = ТЗ.Добавить();
           НоваяСтрока.Дата = Формат(Дата(СокрЛП(Выборка.Дата)), "ДЛФ=Д");
           НоваяСтрока.Номер = СокрЛП(Выборка.Номер);
           НоваяСтрока.ДатаВходящая = Формат(Дата(СокрЛП(Выборка.ДатаВходящегоДокумента)), "ДЛФ=Д");
           НоваяСтрока.НомерВходящий = СокрЛП(Выборка.НомерВходящегоДокумента);
               НоваяСтрока.Контрагент = СокрЛП(Выборка.Контрагент);
           Если ОтображатьСклад = Истина Тогда
               НоваяСтрока.Склад = СокрЛП(Выборка.СкладОрдер);
           КонецЕсли;    
       КонецЕсли;
       
       НазваниеКолонки = Строка("н"+СокрЛП(Выборка.Номенклатура.Код));
       НазваниеКолонкиЦена = Строка("ц"+СокрЛП(Выборка.Номенклатура.Код));
       ОтображениеНазванияКолонки = СокрЛП(Выборка.Номенклатура);
       ОтображениеНазванияКолонкиЦ = "Сумма";
           Если ТЗ.Колонки.Найти(НазваниеКолонки) = Неопределено Тогда                  
               ТЗ.Колонки.Добавить(НазваниеКолонки,,ОтображениеНазванияКолонки, 15);    
               НоваяСтрока[НазваниеКолонки] = Выборка.Количество;                      
               Если ФлагСуммы = Истина Тогда                                          
                   Если ТЗ.Колонки.Найти(НазваниеКолонкиЦена) = Неопределено Тогда
                       ТЗ.Колонки.Добавить(НазваниеКолонкиЦена,,ОтображениеНазванияКолонкиЦ, 15);
                       НоваяСтрока[НазваниеКолонкиЦена] = Выборка.Сумма;
                   КонецЕсли;            
               КонецЕсли;    
           Иначе
               НоваяСтрока[НазваниеКолонки] = Выборка.Количество;
               Если ФлагСуммы = Истина Тогда
                   НоваяСтрока[НазваниеКолонкиЦена] = Выборка.Сумма;
               КонецЕсли;
           КонецЕсли;
       Номер = Выборка.Номер;
       
       Если ОтображатьСклад = Истина Тогда    
           ТЗ.Свернуть("Дата, Номер, ДатаВходящая, НомерВходящий, Контрагент, Склад", ""+НазваниеКолонки+", "+НазваниеКолонкиЦена+"");
       Иначе    
           ТЗ.Свернуть("Дата, Номер, ДатаВходящая, НомерВходящий, Контрагент", ""+НазваниеКолонки+", "+НазваниеКолонкиЦена+"");
       КонецЕсли;    
   КонецЦикла;
17 zak555
 
14.03.12
16:01
(16) сворачиваем в цикле зачем ?
18 poet
 
14.03.12
16:03
(17) сворачиваем каждую накладную, причина пост номер раз
19 zak555
 
14.03.12
16:04
(18) полный текст задачи озвучь
20 aka AMIGO
 
14.03.12
16:27
(18)""сворачиваем каждую накладную""
в каждой накладной, в ТЧ, номенклатура может повторяться?
Если нет - то свертка не нужна, твой запрос уже выбирает товар по каждой накладной
21 poet
 
14.03.12
16:40
в том то и дело - как написано в посте номер 1 - в накладной может быть 2 одинаковых номенклатуры по разной приходной цене
22 poet
 
14.03.12
17:33
разобрался - у меня сам запрос в разнобой давал значения, а именно не упорядочивал по порядку накладные - после того как я эту группировку сделал в самом запросе НЕ УКАЗАВ    |УПОРЯДОЧИТЬ ПО

Но благодарю - ответ на вопрос в шапке я получил в посте (1) и (11)
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс