|
ТЗ.Свернуть() работает некорректно Ø |
☑ | ||
|---|---|---|---|---|
|
0
Mark
26.08.05
✎
10:15
|
Господа первый раз за свою практику столкнулся с некорректной работой оператора ТЗ.Свернуть("Товар, Цена", "Количество"), не суммируются некоторые одинаковые позиции, они просто пропадают. Если кто сталкивался с подобным поделитесь. Релиз 25.
|
|||
|
1
Денис2
26.08.05
✎
10:16
|
Датышо!
Данные-та покажи! |
|||
|
2
Денис2
26.08.05
✎
10:19
|
+1 Ваабче-та по Цене сворачивать несколько неприлично...
|
|||
|
3
SnarkHunter
26.08.05
✎
10:21
|
Наверняка колонки не типизированы...
|
|||
|
4
Mark
26.08.05
✎
10:21
|
Очень даже прилично, когда цены разные
|
|||
|
5
Денис2
26.08.05
✎
10:22
|
(4) Ага. А когда у тебя цена 1.3333 и 1.3334, а отображается 2 знака? Тогда и не свернётся, и (0) получится.
|
|||
|
6
Mark
26.08.05
✎
10:24
|
Я думал об этом :) уже типизированы Цена и Количество строго "Число".
|
|||
|
7
Denk
26.08.05
✎
10:24
|
Когда задаешь новые колонки в ТЗ, для числовых данных сразу задавай тип "Число" иначе при пустом значении они числом не станут
|
|||
|
8
zzz
26.08.05
✎
10:25
|
да 1С это лажа, там ваще ничё не работает. Тем более "Свернуть". Молодца Mark! Ты только знаешь как надо корректно! Покажи им!!
|
|||
|
9
Mark
26.08.05
✎
10:28
|
Да если бы не спорачивалась, но у меня:
Функция ОбщаяСумма() Итог = 0; ТЗ.ВыбратьСтроки() Пока ТЗ.ПолучитьСтроку() = 1 Цикл Итог = Итог + ТЗ.Цена*ТЗКоличество; КонецЦикла; Возврат Итог ЦонецФункции Ента функция выдаёт разные значения до и после свёртки! |
|||
|
10
Mark
26.08.05
✎
10:30
|
(7) Ясно как божий день!
(8)Не издевайся, я долго тестировал, преже чем написать |
|||
|
11
ОДНик
26.08.05
✎
10:31
|
(9) Как у тебя ваще эта функция что-то выдаёт??? Читаем: Цонецункции :-)))
|
|||
|
12
Mark
26.08.05
✎
10:32
|
(11)Просто в торопях ручками написал, мог бы и не заметить
|
|||
|
13
Denk
26.08.05
✎
10:33
|
А разрядность установлена? в продолжение в (7)
|
|||
|
14
igork1966
26.08.05
✎
10:34
|
(9)Екарный бабай. А с какого должно совпадать?
По округление слышал? А если так: Итог = Итог + ТЗ.Сумма; |
|||
|
15
Mark
26.08.05
✎
10:36
|
Какое округление при деньгах и целом количестве без деления ?
|
|||
|
16
Mark
26.08.05
✎
10:38
|
Разрядность в количестве не поставил, но думаю это не фатально, у меня всё целое и числовое
|
|||
|
17
Mark
26.08.05
✎
10:41
|
Ладно господа издевающиеся, сталкнётесь и вы с таким, просто выходит 1С ке доверяй но проверяй, у меня этот механизм 2 месяца проработал, пока я дапёр куда товар пропадает!
|
|||
|
18
igork1966
26.08.05
✎
10:44
|
(15) А цена у тебя конечно целая, да? Копеек нет, верю!
|
|||
|
19
Кортес
26.08.05
✎
10:46
|
Чудес не бывает.
|
|||
|
20
igork1966
26.08.05
✎
10:46
|
(17) Не тупи, все нормально там со свертыванием. Проблема в тебе.
|
|||
|
21
Mark
26.08.05
✎
10:46
|
Копейки бывают, но это всего лишь до сотой, да и Цена типизирована и разрядность указана, это нормально
|
|||
|
22
igork1966
26.08.05
✎
10:48
|
(21) Ну вот, а чего ты теперь ждал?
"Копейки бывают, но это всего лишь до сотой" |
|||
|
23
Mark
26.08.05
✎
10:49
|
(20)Ты бы свои высказывания объяснениями сопровождал...
|
|||
|
24
Mark
26.08.05
✎
10:51
|
(22)Марк, может и ты поделишься мыслями?
|
|||
|
25
igork1966
26.08.05
✎
10:59
|
(21) Я просмотрел что Количество а не Сумма у тебя свертыватся.
Но это неважно, проблемма в данных явно! (20) Часто работаю с таблицами, не разу не наблюдал каких-либо проблем. Как заполняется таблица? |
|||
|
26
Митхун Чакраборти
26.08.05
✎
11:02
|
(25) Категорически согласен. Сворачивал таблицы всяко разно, и по числам. Всё нормально работает. Проблема видимо в данных
|
|||
|
27
Mark
26.08.05
✎
11:06
|
ТЗ - визуальная таблица, типизированные строки, все данные заполнены.
Мы делаем: ПромТЗ = СоздатьОбъект("ТаблицаЗначений"); ТЗ.Выгрузить(ПромТЗ); ПромТЗ.Свернуть("Товар, Цена", "Количество"); после чего вышеописанная функция выдаёт разные значения Зн1 = ОбщаяСумма(ТЗ) Зн2 = ОбщаяСумма(ПромТЗ) |
|||
|
28
zzz
26.08.05
✎
11:06
|
2(10) приведи пример десятка строк ТЗ, при котором возникают проблемы и полный код заполнения ТЗ и свёртки.
|
|||
|
29
Mark
26.08.05
✎
11:08
|
Думал что ошибка в выгрузке, но как убрал из алгаритма Свернуть(), всё стало работать Зн1 = Зн2
|
|||
|
30
igork1966
26.08.05
✎
11:12
|
(29) Кстати тип Число у Количества какой, сколько разрядов?
В курсе что тип в свернутой таблице будет как у исходной, а кол-ва увеличатся, соответственно большее число превратится в типа такого 9999.999 |
|||
|
31
Mark
26.08.05
✎
11:12
|
Ребята, данные попадают из ТСД в визуальную ТЗ, а потом я их из ТЗ загоняю в Документ, естесственно хочу перед этим свернуть, как написано выше, ПромТЗ как раз для документа. В течении раб.дня ТЗ пополняется строками, и при пополнении перезаполняется документ ПромТЗ (строки удаляются и снова формируются).
|
|||
|
32
zzz
26.08.05
✎
11:15
|
2(17) ТЗ как заполняешь?
|
|||
|
33
android
26.08.05
✎
11:15
|
(31) Покажи строки кода с текстом "НоваяКолонка()"
|
|||
|
34
Mark
26.08.05
✎
11:15
|
(30) Количество у меня щас без разрядов шпарит(но число), но всё работает (кроме Свернуть())
|
|||
|
35
VZ
26.08.05
✎
11:16
|
Кстати, ТЗ на форме и ТЗ как "СоздатьОбъект" - несколько отличаются...
|
|||
|
36
Mark
26.08.05
✎
11:18
|
для (32)
Процедура ЗагрузитьИзТСД(пар) ТоварыВКассу = СоздатьОбъект("ТаблицаЗначений"); ТоварыВКассу.НоваяКолонка("Код"); ТоварыВКассу.НоваяКолонка("Штрихкод"); ТоварыВКассу.НоваяКолонка("Наименование"); ТоварыВКассу.НоваяКолонка("Цена"); ТоварыВКассу.НоваяКолонка("Количество"); ТоварыВКассу.НоваяКолонка("Уровень"); ТоварыВКассу.НоваяКолонка("Родитель"); ТоварыВКассу.НоваяКолонка("Группа"); Часы = 0; Минуты = 0; Секунды = 0; ТекущееВремя(Часы,Минуты,Секунды); Время = Строка(Часы)+":"+Строка(Минуты)+":"+Строка(Секунды); Терминал.FormNumber=0; Терминал.BeginReport(); КоличествоЗаписей=Терминал.RecordCount; Если КоличествоЗаписей = 0 Тогда Предупреждение("Терминал пуст!!!"); Возврат; КонецЕсли; КоличествоПолей=Терминал.FieldCount; ТЗСтрока = 0; Если ((Терминал.ResultCode=0) И (КоличествоЗаписей>0)) Тогда Для ТекЗапись=1 По КоличествоЗаписей Цикл Если Терминал.GetRecord()>=0 Тогда ТЗ.НоваяСтрока(); Файл.Добавить(); Если пар = "+" Тогда ТЗ.ПлюсМинус = 1; Файл.PM = 1; Иначе ТЗ.ПлюсМинус = 2; Файл.PM = 2; КонецЕсли; ТЗ.Время = Время; Файл.TIME = Время; ТЗ.ШтрихКод = Терминал.GetField(1); Файл.SKOD = Терминал.GetField(1); ТЗ.Количество = Терминал.GetField(2); Файл.KOL = Терминал.GetField(2); Если СпрЕд.НайтиПоРеквизиту("ШтрихКод",ТЗ.ШтрихКод,1) = 1 Тогда ПромТовар = СпрЕд.Владелец; ТЗ.Товар = ПромТовар; Файл.KOD = ПромТовар.Код;; СпрЦены.ИспользоватьВладельца(ПромТовар); СпрЦены.ИспользоватьДату(РабочаяДата()); Если СпрЦены.НайтиПоРеквизиту("ТипЦен", Константа.РозничныйТипЦен,0) = 1 Тогда ТЗ.Цена = СпрЦены.Цена; // ТоварыВКассу.НоваяСтрока(); ТоварыВКассу.Код = СокрЛП(ПромТовар.Код); ТоварыВКассу.Штрихкод = СокрЛП(ПромТовар.БазоваяЕдиница.Штрихкод); ТоварыВКассу.Наименование = СокрЛП(ПромТовар.ПолнНаименование); Если Число(ТЗ.Количество) > 0 тогда ТоварыВКассу.Цена = ТЗ.Цена; КонецЕсли; Если пар = "+" тогда ТоварыВКассу.Количество = ТЗ.Количество; ИначеЕсли пар = "-" тогда ТоварыВКассу.Количество = 0 - ТЗ.Количество; Иначе Предупреждение("Не задан признак у строки!"); СтатусВозврата(0); Возврат; КонецЕсли; ТоварыВКассу.Уровень = ПромТовар.Уровень(); ТоварыВКассу.Родитель = СокрЛП(?(ПромТовар.Родитель.Выбран()=1,ПромТовар.Родитель.Код,"0")); Иначе ТЗ.Цена = ПолучитьПустоеЗначение("Число"); Сообщить("Не нашли цену товара "+ПромТовар+"!"); КонецЕсли; Иначе ТЗ.Товар = ПолучитьПустоеЗначение("Справочник.Номенклатура"); Сообщить("Не нашли товар со ШК "+ТЗ.ШтрихКод+" в количестве "+ТЗ.Количество+"!","!"); КонецЕсли; Файл.Записать(); КонецЕсли; КонецЦикла; Иначе Сообщить("Ошибка при работе с терминалом : "+Терминал.ResultDescription) КонецЕсли; Терминал.EndReport(); // очистим ТСД Терминал.FormNumber = 0; Терминал.DeleteFormSetting(); Если Терминал.LoadFormFromFile(КаталогИБ()+"ИнвЦияТСД.otf") = 0 тогда Иначе Сообщить("Не удалось загрузить файл ИнвЦияТСД.otf !","!"); КонецЕсли; //добавим в документ ЗаполнитьСтрокиДокумента(ТоварыВКассу); КонецПроцедуры для (33) ТЗ.НоваяКолонка("Время",,,,,4,,2); ТЗ.НоваяКолонка("ШтрихКод",,,,"Штрих-код",6,,2); ТЗ.НоваяКолонка("Количество","Число",,,"Кол",3,,2); ТЗ.НоваяКолонка("Цена","Число",6,2,"Цена",3,,2); ТЗ.НоваяКолонка("Товар"); |
|||
|
37
igork1966
26.08.05
✎
11:18
|
(34) Тогда откуда уверенность что Количество целое?
|
|||
|
38
Mark
26.08.05
✎
11:20
|
(36) ТЗ нормально заполняется,
(37) у меня ТСД только штучный товар пересчитывает, значит количество целое, там аппаратно не введёшь 1.2 ... |
|||
|
39
Кортес
26.08.05
✎
11:24
|
Вот, собсно и ответ...
|
|||
|
40
android
26.08.05
✎
11:24
|
(36) Перепиши "НоваяКолонка()" с указанием типа, например :
ТЗ.НоваяКолонка("Товар", "Справочник.Номенклатура"); |
|||
|
41
zzz
26.08.05
✎
11:26
|
2(36) ну покажи строки ТЗ, которые пропадают при сложении. Приведи пример числе в ТЗ, который приводит к ошибке сворачивания.
|
|||
|
42
Mark
26.08.05
✎
11:28
|
(40) Вариант попробовать, но не факт что панацея
|
|||
|
43
Кортес
26.08.05
✎
11:28
|
Кстати, что за ТСД? Почему не введешь 1.2?
|
|||
|
44
0xFFFFFF
26.08.05
✎
11:30
|
А вот так не пробовал?
ТоварыВКассу.НоваяКолонка("Цена", "Число", 15, 2); ТоварыВКассу.НоваяКолонка("Количество", "Число", 15, 0); Да с типами что то стопудов. И нефиг на таблицу грешить. Я тож в первый месяц работы в 1С тоже что ни попадя матом крыл, а позже понимал, что туплю не по божески. |
|||
|
45
Mark
26.08.05
✎
11:31
|
(41)Извини, но мне щас сложновато их выковарить, механизм с утра работает без свёртси, свё нормально, результат моей ночной деятельности. Данные анализировал через отладчик и визуальную ТЗ.
|
|||
|
46
VZ
26.08.05
✎
11:33
|
"значит количество целое" - иначе говоря, раз так хачу, значит так на самом деле...
А вы мешаете... Советуете явно задать тип. Мешаете, в общем... |
|||
|
47
0xFFFFFF
26.08.05
✎
11:33
|
Угу. Код просто супер!!!
ТоварыВКассу.НоваяСтрока(); ..... Если Число(ТЗ.Количество) > 0 тогда ТоварыВКассу.Цена = ТЗ.Цена; КонецЕсли; И ты хочешь, чтобы у тебя все красиво сворачивалось? Не смеши мои тапки... |
|||
|
48
Mark
26.08.05
✎
11:33
|
(44) Дык три года практикую, а ты Товары в кассу не трогай, это вообще другая тема!
|
|||
|
49
zzz
26.08.05
✎
11:35
|
2(45) Извини, но ни при каких наборах данных у меня эта трабла не воспроизводится.
|
|||
|
50
Mark
26.08.05
✎
11:37
|
(47)Переобуйся, я тебе сказал не трогать.Товары в кассу, это совсем для другого. Я же не буду сидеть фильтровать процедуру, когда спрашиваете показать!
|
|||
|
51
igork1966
26.08.05
✎
11:38
|
(36) Чего-то мне это ненравится:
Если Число(ТЗ.Количество) > 0 тогда ТоварыВКассу.Цена = ТЗ.Цена; КонецЕсли; (36) В целом "мутный" какой-то код. |
|||
|
52
Дурочка 1С
26.08.05
✎
11:39
|
>> ТЗ.Цена = ПолучитьПустоеЗначение("Число");
Очуметь! |
|||
|
53
Mark
26.08.05
✎
11:39
|
zzz, у меня тоже всегда работала, будем считать это моим локальным глюком!
|
|||
|
54
0xFFFFFF
26.08.05
✎
11:41
|
(51) - см 47 (С) - ща и тебе скажут, что ТоварыВКассу не при чем.
(50) Извини, но просто первая глупость, которая кинулась в глаза - эт было товары в кассу... |
|||
|
55
Mark
26.08.05
✎
11:41
|
(52) чего тут очумелого ?
|
|||
|
56
zzz
26.08.05
✎
11:42
|
2(53) значит проблемы нет? Зачем ветку заводил?
Потрать время - приведи проблемные данные. Если они есть. |
|||
|
57
Mark
26.08.05
✎
11:43
|
(54) И ты извини, сказывается бессонная ночь :)
|
|||
|
58
0xFFFFFF
26.08.05
✎
11:43
|
(55) Слухай, а ты уверен, что все товары дешевле 1000.00 рублей?
|
|||
|
59
KAPACb
26.08.05
✎
11:44
|
одноэсники
мне б вашы проблемы |
|||
|
60
Mark
26.08.05
✎
11:45
|
(58) Уверен, продукты
|
|||
|
61
igork1966
26.08.05
✎
11:46
|
(55) А что написать "ТЗ.Цена = 0" что-то мешает???
|
|||
|
62
Denk
26.08.05
✎
11:46
|
ТЗ.НоваяСтрока();
... Если СпрЕд.НайтиПоРеквизиту("ШтрихКод",ТЗ.ШтрихКод,1) = 1 Тогда ... Иначе ТЗ.Товар = ПолучитьПустоеЗначение("Справочник.Номенклатура"); Сообщить("Не нашли товар со ШК "+ТЗ.ШтрихКод+" в количестве "+ТЗ.Количество+"!","!"); КонецЕсли; Если у тебя попадает в иначе то цена и количество не прописываются. У тебя Сообщение из иначе высвечивается? |
|||
|
63
КонецЦикла
26.08.05
✎
11:48
|
Все ниасилил... но фцелом смешна :)
Колонки лучше все же типизировать НоваяКолонка("Сумма","Число"); |
|||
|
64
Дурочка 1С
26.08.05
✎
11:50
|
>> ТЗ.Количество = Терминал.GetField(2);
Чем задавать формат колонки, надежнее записывать в ячейки данные с гарантрированным форматом: ТЗ.Количество = 0+Терминал.GetField(2); ТЗ.Цена = 0+СпрЦены.Цена; ТЗ.Цена = 0; (вместо идиотского ПолучитьПустоеЗначение("Число");) |
|||
|
65
Mark
26.08.05
✎
11:51
|
Правильно, я ведь незнаю какой товар?
Но и Сообщить("Не нашли товар со ШК "+ТЗ.ШтрихКод+" в количестве "+ТЗ.Количество+"!","!"); выпадает крайне редко, а если выпадает, то это исключительная ситуация, у меня есть другие методы, они работают. Юзер видит на экране пустую строку в ТЗ и самостоятельно её заполняет! |
|||
|
66
Mark
26.08.05
✎
11:54
|
(64) Есть просто функция Число()!
|
|||
|
67
Mark
26.08.05
✎
11:56
|
Господа, спасибо за живое обсуждение моей простой но наболевшей темы, мне кажется мы уже всё разжевали!
|
|||
|
68
КонецЦикла
26.08.05
✎
11:58
|
2(66) Попробуй все же типизировать колонки - хоть увидишь, что нули остались где неправильно заполнял... и к тому же не нужно писать будет:
ТЗ.Цена = 0; Если совсем затупишь - выгрузи ТЗ в обработку и по клику будешь открывать и смотреть несвернувшееся или распечатай оттуда ее с полными кодами элементов |
|||
|
69
KAPACb
26.08.05
✎
11:59
|
(66) ну и чо чшто есть?
куда проще писсать 0 + ..., или "" + ... |
|||
|
70
Mark
26.08.05
✎
12:07
|
(69) КАРАСЬ, у нас демократия :)
|
|||
|
71
Kroha
30.08.05
✎
00:58
|
Господа, пусть вас это не удивляет, но у меня на 25 релизе была аналогичная ситуация. Все выше перечисленные методы были испробованы и не дали результата. Как ни странно ( и совершенно не объяснимо) помогло использование метода ТЗ.Свернуть с номерами колонок, а не их названиями. Мark, побробуйте заменить название колонок их номерами.
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |