Имя: Пароль:
1C
1C 7.7
v7: Рег.ВыгрузитьИтоги(тз) <> Запрос.Выгрузить(тз,,0)
0 Zhuravlik
 
06.08.12
17:04
Не пойму...
В конфе только один документ прихода. Заранее известно, что общий итог - 280, ресурс "Количество", измерение - "Вагон".

   Рег = СоздатьОбъект("Регистр.АвтомобилиВДороге");
   тзОстатки = СоздатьОбъект("ТаблицаЗначений");
   Рег.ВыгрузитьИтоги(тзОстатки);
   тзОстатки.Свернуть("Вагон", "Количество");    


На выходе - тз, 28 строчек, по каждой "Количество"- 9. Причем если сообщаю тзОстатки.Итог("Количество") - возвращается 280.

Если делаю запросом:

   Запрос = СоздатьОбъект("Запрос");
   
   ДатаТА = ПолучитьДатуТА();
   
   ТекстЗапроса = "
   |Период с ДатаТА по ДатаТА;
   |Без Итогов;
   |Вагон = Регистр.АвтомобилиВДороге.Вагон;
   |Группировка Вагон Без Групп;
   |кол = Регистр.АвтомобилиВДороге.Количество;
   |Функция Количество = КонОст(кол);
   |";

   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
       Возврат;
   КонецЕсли;    
   
   тзОстатки = СоздатьОбъект("ТаблицаЗначений");
   Запрос.Выгрузить(тзОстатки,,0);

Все как надо, на выходе - тз, 28 строчек, по каждой "Количество"- 10.
Что я делаю не так? Почему в первом варианте по строкам количество - 9 (неправильно 9*28 = 252, должно быть 280), а с запросом все как надо?
1 Ёпрст
 
06.08.12
17:08
>>>На выходе - тз, 28 строчек, по каждой "Количество"- 9.

как проверил, если утверждаешь, что тзОстатки.Итог("Количество") = 280 ?
2 Zhuravlik
 
06.08.12
17:10
(1) тзОстатки.ВыбратьСтроку(). И я это делаю для отбора в форме списка справочника, там в поле "Остаток" тоже девятки выходят (как раз из этой тз).
3 Ёпрст
 
06.08.12
17:14
а так ?

 Рег = СоздатьОбъект("Регистр.АвтомобилиВДороге");
 т = СоздатьОбъект("ТаблицаЗначений");
 Рег.ВыгрузитьИтоги(т);
 т.Свернуть("Вагон", "Количество");  
 т.выбратьСтроку() ?
4 Ёпрст
 
06.08.12
17:14
мот у тебя тупо формат установлен где либо на колонку ? а 9 - это от переполнения разряда показывает
5 Zhuravlik
 
06.08.12
17:16
(3) То же самое.
6 Zhuravlik
 
06.08.12
17:16
(4) Нет, я же тз создаю непосредственно перед выгрузкой, код такой же, как и здесь.
7 КонецЦикла
 
06.08.12
17:17
А если для запроса посмотреть что содержится в ТЗ?
Ну и типа сравнить, вроде не такая уж сложность
8 Ёпрст
 
06.08.12
17:17
скриншот покажи
этого:

Рег = СоздатьОбъект("Регистр.АвтомобилиВДороге");
 т = СоздатьОбъект("ТаблицаЗначений");
 Рег.ВыгрузитьИтоги(т);
 т.выбратьСтроку();


и этого

 т.Свернуть("Вагон", "Количество");  
 т.выбратьСтроку();
9 Zhuravlik
 
06.08.12
17:19
(8) Не поместится в скриншот полностью, сделаю только шапку?
10 NS
 
06.08.12
17:20
Ресурс количество в регистре какой имеет тип и длину?
11 КонецЦикла
 
06.08.12
17:20
Мне кажется в запросе одна строчка лишняя :)
12 NS
 
06.08.12
17:21
(11) Да, первая.
13 Ёпрст
 
06.08.12
17:25
(10) число, длина 1 поди
:))))
14 Ёпрст
 
06.08.12
17:27
тогда бы и запрос вернул "9"-ки.. там приведение точности функции из её аргумента- переменной..
15 Zhuravlik
 
06.08.12
17:27
(8)
http://s45.radikal.ru/i108/1208/05/e1bd7f64a884.jpg - До свертки
http://s018.radikal.ru/i506/1208/e1/97783e7d9855.jpg - после свертки

(10)(13) Да, Число, длина - 1.
(13) А что, это неправильно?
16 NS
 
06.08.12
17:28
(15) Для чего человеку дана голова?
17 Zhuravlik
 
06.08.12
17:28
Сделал полное тестирование только что, тоже самое...
18 Ёпрст
 
06.08.12
17:28
(15) еще бы!
19 NS
 
06.08.12
17:28
Как ты думаешь число 10 влезает в "число" длины 1?
20 Ёпрст
 
06.08.12
17:29
(16) что бы в неё есть :)


(17) нахрена ?!

увеличь разрядность в регистре и всего лишь.
21 Zhuravlik
 
06.08.12
17:32
(19) (20) Сейчас попробую.
Я думал, что разрядность ресурса нужна для последнего измерения, а при накоплении итогов достаточно свернуть и все... А почему же запрос тогда норм. отрабатывает?
22 NS
 
06.08.12
17:33
(21) Потому что при выгрузке в ТЗ тип колонки берется из типа в регистре.
А Запрос хитро рассчитывает.
23 Ёпрст
 
06.08.12
17:36
в запросе тоже (точность , так 100%) из типа аргумента функции
24 Zhuravlik
 
06.08.12
17:37
(19)(20) Да, все работает если разрядность увеличить...
А ведь должно так сработать?

   Рег = СоздатьОбъект("Регистр.АвтомобилиВДороге");
   тзОстатки = СоздатьОбъект("ТаблицаЗначений");
   
   Рег.ВыгрузитьИтоги(тзОстатки);
   тзОстатки.УстановитьПараметрыКолонки(2,"Число", 5, 0);
   тзОстатки.Свернуть("Вагон", "Количество");    

При разрядности 1,0 тоже выдает девятки.
25 Zhuravlik
 
06.08.12
17:44
Вот так поехало)

   Рег = СоздатьОбъект("Регистр.АвтомобилиВДороге");
   тзОстатки = СоздатьОбъект("ТаблицаЗначений");
   
   Рег.ВыгрузитьИтоги(тзОстатки);
   тзОстатки.УстановитьПараметрыКолонки("Количество","Число", 5, 0);
   тзОстатки.Свернуть("Вагон", "Количество");

Спасибо всем за помощь.
26 NS
 
06.08.12
17:48
(23) Ничего подобного.
Ресурс количество - длина 15 точность 5.

   Запрос=создатьобъект("Запрос");
   ТекстЗапроса="номенклатура=регистр.РезервыNS.Номенклатура;
   |кол=регистр.РезервыNS.количество;
   |Функция колич=коност(кол);
   |Группировка номенклатура без групп; без итогов;";
   Запрос.Выполнить(ТекстЗапроса);
   ТЗ=создатьобъект("ТаблицаЗначений");
   Запрос.Выгрузить(ТЗ,0,0);                            
   тип="";
   Длина="";
   точность="";
   ТЗ.ПолучитьПараметрыКолонки("колич",тип,длина,точность);
   сообщить(""+тип+" "+длина+" "+точность);

Число 17 5
На два увеличил длину запрос.
27 Ёпрст
 
06.08.12
17:50
(26) ну, значит только точность берёт.
28 Ёпрст
 
06.08.12
17:50
из переменной текста запроса
29 NS
 
06.08.12
17:51
Точность - да, из неё.
30 Zhuravlik
 
06.08.12
17:57
(28)(29) А как сильно напрягает конфу, если я там разрядность увеличу? Просто основная задача этого регистра - это именно поштучный учет, эти остатки - единичный случай. Стоит ли из-за одной строчки кода увеличивать разрядность ресурса в данном случае?
31 NS
 
06.08.12
17:57
(30) вообще не напрягает.
32 Zhuravlik
 
06.08.12
18:06
(31) т.е. если по регистру в течение скажем года было 100 000 движений, то что при разрядности (1:0), что при разрядности (15:2) файл будет занимать одно и тоже место? И в самой базе не будет заметно разницы при проведении?
33 NS
 
06.08.12
18:13
(32) Да, почти. Посмотри таблицу - у тебя измерения намного больше места занимают чем ресурсы.
34 Эльниньо
 
06.08.12
20:39
В RA 1.0 хватит. А RG?
35 hhhh
 
06.08.12
23:03
(32) действительно, головой совсем не думаешь. 100000 * 15 = 1500000. Это 1,5 мегабайта. Никто и не заметит, еще и смеятся будут, что ты из-за 100 килобайт здесь так паришься.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший