Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Как бы корректно свернуть ИТЗ (число прочтений - 3569 )
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Как бы корректно свернуть ИТЗ
22. Декабря 2010 :: 13:35
Печать  
Добрый день.
Есть ТаблицаЗначений
В ней 4 столбца
Номенклатура, Документ, Кол1, Кол2

Ном1, Док, 10, 0
Ном1,      ,   0, 10

если ТЗ.Свернуть("Номенклатура","Документ,Кол1,Кол2")
то результат будет
Ном1, Док, 10, 10

Если тоже самое сделать с ИТЗ, то результат будет
Ном1, 0, 10, 10

Можно ли как-то в ИТЗ получить вместо 0, такое же значение как при свертке в ТЗ? т.е. Док
  
Наверх
www  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Как бы корректно свернуть ИТЗ
Ответ #1 - 22. Декабря 2010 :: 13:46
Печать  
Заполни колонку 1 значением и привет.
  
Наверх
 
IP записан
 
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: Как бы корректно свернуть ИТЗ
Ответ #2 - 22. Декабря 2010 :: 13:51
Печать  
Eprst писал(а) 22. Декабря 2010 :: 13:46:
Заполни колонку 1 значением и привет.

Чего заполнить?

При свертке ИТЗ, значение Документа складывается "Док1" и ПустоеЗначение и в результате в ИТЗ 0 а не Док1
  
Наверх
www  
IP записан
 
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: Как бы корректно свернуть ИТЗ
Ответ #3 - 22. Декабря 2010 :: 13:53
Печать  
При сложении документа и 1 результат равен 1
  
Наверх
www  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Как бы корректно свернуть ИТЗ
Ответ #4 - 22. Декабря 2010 :: 13:55
Печать  
Нечисловые колонки не суммируются, если что, что в простой ТЗ, что в индексированной.
В обычной - просто берётся первое значение , в индексированной, это исправили (и правильно сделали) и привели к типу число, у тебя там не число, следовательно,  = 0 всегда.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как бы корректно свернуть ИТЗ
Ответ #5 - 22. Декабря 2010 :: 13:55
Печать  
Код
Выбрать все
ИТЗ.Свернуть("Номенклатура","Кол1,Кол2") 

  
Наверх
 
IP записан
 
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: Как бы корректно свернуть ИТЗ
Ответ #6 - 22. Декабря 2010 :: 14:29
Печать  
Спасибо.
Действительно нужно было просто исключить из свертки нужный параметр.
  
Наверх
www  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Как бы корректно свернуть ИТЗ
Ответ #7 - 22. Декабря 2010 :: 18:03
Печать  
MaxPiter писал(а) 22. Декабря 2010 :: 14:29:
Спасибо.
Действительно нужно было просто исключить из свертки нужный параметр.

Опасно полагаться на любые значения ИТ, если они не участвовали в параметрах свертки.
Если подходить формально, я могу спросить, почему для исходных данных
Код
Выбрать все
Ном1, Док, 10, 0
Ном1,	,   0, 10
 


ты ожидешь увидеть именно "Док", а не пустое значение?
Опираешься ли на какие-то гарантии? Если да, то на какие?
Если реализация алгоритма свертки ИТ (как черного ящика) изменится, что будет с твоим алгоритмом?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: Как бы корректно свернуть ИТЗ
Ответ #8 - 22. Декабря 2010 :: 20:22
Печать  
>> Если реализация алгоритма свертки ИТ (как черного ящика) изменится, что будет с твоим алгоритмом?
В данном случае, вместо документов в отчет вылетят нули, о чем пользователи сразу сообщат.

для исходных данных, я ожидаю увидеть именно Док, потому как он в таблице идет раньше "пустого".
Я специально так ее и заполняю, чтобы Док оказался раньше.

Возможно вариант не верный и нужно решать задачу по другому.
Если интересно подумать как ее решить правильно, могу описать задачу.

В самом плохом случае, я всегда могу данные выгрузить в ТЗ и свернуть 1Сной сверткой, там уж точно ничего уже не изменится.

  
Наверх
www  
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как бы корректно свернуть ИТЗ
Ответ #9 - 23. Декабря 2010 :: 09:55
Печать  
Тоже регулярно возникает задача сделать свертку по такому алгоритму...
Пока я полагался на скрытое поведение и выводил сортировкой нужные строки в начала групп сворачиваемых строк.
Я понимаю, что это поведение не гарантировано. Как делать правильно?
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как бы корректно свернуть ИТЗ
Ответ #10 - 23. Декабря 2010 :: 12:18
Печать  
А почему не заполнить пустые значения нужными сразу, а не делать сортировки + непонятное сворачивание?
  
Наверх
 
IP записан
 
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: Как бы корректно свернуть ИТЗ
Ответ #11 - 23. Декабря 2010 :: 12:58
Печать  
JohnyDeath писал(а) 23. Декабря 2010 :: 12:18:
А почему не заполнить пустые значения нужными сразу, а не делать сортировки + непонятное сворачивание?


Простейший пример:
Отбираются реализации
Заявка основание, Документ реализации, номенклатура, КолВо реализовано, цена реализации

далее заявки
Сама Заявка, Номенклатура, КолВо заявлено, цена заявки

Сводная таблица выглядит
Заявка, Реализация, Номенклатура, КолВоЗаказано, КолВоРеализовано, ЦенаВЗаявке, ЦенаВРеализации

В моем случае, реализация на заявку всегда одна, поэтому вариант подходит.
  
Наверх
www  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как бы корректно свернуть ИТЗ
Ответ #12 - 23. Декабря 2010 :: 13:18
Печать  
А как ты эти две таблички в одну собираешь? Запросом? Две ИТЗ?
ИМХО, на этом этапе и надо заполнять для каждой заявки - реализации
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Как бы корректно свернуть ИТЗ
Ответ #13 - 23. Декабря 2010 :: 13:40
Печать  
dnp писал(а) 23. Декабря 2010 :: 09:55:
Я понимаю, что это поведение не гарантировано. Как делать правильно?

В общем случае правильно = в соответствии со спецификациями.
На самом деле, вполне возможно, что гарантий достаточно - я просто хотел, чтобы они были осознаны и сформулированы.

MaxPiter писал(а) 22. Декабря 2010 :: 20:22:
В данном случае, вместо документов в отчет вылетят нули, о чем пользователи сразу сообщат.

Логично. %)

Как иллюстрацию, возьмем например:
Код
Выбрать все
Процедура Сформировать()
	_т =СоздатьОбъект("ИндексированнаяТаблица");
	_т.НоваяКолонка("Номенклатура");
	_т.НоваяКолонка("Док");
	_т.НоваяСтрока(); _т.Номенклатура =1; _т.Док =1;
	_т.НоваяСтрока(); _т.Номенклатура =1; _т.Док =2;
	_т.НоваяСтрока(); _т.Номенклатура =1; _т.Док =3;
	_икс =_т.ДобавитьИндекс("Номенклатура", "Номенклатура");
	_т.Показать(_икс);
	_т.НоваяСтрока(); _т.Номенклатура =1; _т.Док =4;
	_т.УдалитьСтроку(1);
	_т.Показать(_икс);
	_т.Свернуть(, "", _икс);
	_т.Показать(_икс);
КонецПроцедуры
 


Понятно ли, почему получается такой разультат на каждом шагу выполнения?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: Как бы корректно свернуть ИТЗ
Ответ #14 - 23. Декабря 2010 :: 14:25
Печать  
kms писал(а) 23. Декабря 2010 :: 13:40:
Понятно ли, почему получается такой разультат на каждом шагу выполнения?


То что 4 становится первой записью - это не приятно.
По описанию ИТЗ
НоваяСтрока / NewRow
Синтаксис: НоваяСтрока()
Возвращает: тип: Число. Номер созданной строки.
Описание: Cоздаёт новую строку в конце таблицы.


Причем в Сообщить(_т.НоваяСтрока()); =4

Если это не глюк ИТЗ, тогда что? Специфика индексов?
Ужас
  
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать