Имя: Пароль:
1C
1C 7.7
v7: Данные не попадают в ТЗ
0 OASU
 
22.04.12
16:56
Есть сегодня здесь хоть кто-нить?
Отчет.
В запросе делаю выборку.
Из запроса помещаю данные в ТЗ:
ТЗ.НоваяСтрока();
ТЗ.Номенк = Запрос.Номенклатура;
ТЗ.Сумма2 = Запрос.Стоимость;
и т.д.
Делаю это в цикле по грппировке, через отладчик проверяю, данные заносятся, не пустые.

После делаю еще один отбор по дкументу, тоже в цикле и из этой выборки получаю другие данные и тоже добавляю их в ТЗ:
ТЗ.НоваяСтрока();
ТЗ.Номенк = Док.Номенклатура;
ТЗ.Сумма = Док.Сумма;

Затем сворачиваю: ТЗ.Свернуть(....);
выбрать строки и получить строку...и т.д.
СуммаТаб = ТЗ.Сумма;
СуммаФакт = ТЗ.Сумма2;
....
В отчет заполняется только СуммаТаб, а СуммаФакт = 0.
Что не так то?
1 andrewks
 
22.04.12
16:58
"Что не так то?" что-то не так. в коде. в каком-то из них. а может, сразу в обоих
2 OASU
 
22.04.12
17:00
мне кажется что значения = 0, как-то мешают свернуть таблицу
3 Voronve
 
22.04.12
17:01
Затем сворачиваю: ТЗ.Свернуть(....);
Полностью это. и полностью структуру таблицы
4 andrewks
 
22.04.12
17:02
значения = 0, совершенно не мешают свернуть таблицу

какая типизация у колонок?
5 OASU
 
22.04.12
17:02
(3) ТЗ.Свернуть("Номенклатура", "Сумма, Сумма2");
6 OASU
 
22.04.12
17:03
(4) Справочник и Число
7 Злопчинский
 
22.04.12
17:04
очевидно, что автор что-то не договоаривает
8 OASU
 
22.04.12
17:05
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
Если ТЗ.Сумма=0 Тогда
продолжить;
КонецЕсли;
...
Вот если убрать это условие, то и СуммаТаб выходит =0 в таблице.
9 AlexWolf
 
22.04.12
17:06
(8) начни копировать со строк тз = создатьобъект("таблицазначений")
10 OASU
 
22.04.12
17:18
(9)

   ТЗ = СоздатьОбъект("ТаблицаЗначений");
   ТЗ.НоваяКолонка("Номенк", "Справочник.Номенклатура");
   ТЗ.НоваяКолонка("Сумма", "Число",15,2);
   ТЗ.НоваяКолонка("Сумма2", "Число",15,2);
   ТЗ.НоваяКолонка("СуммаД", "Число",15,2);
   
   ДокСчет     = СоздатьОБъект("Документ.Счет");
//******************************************************************************************************************    
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с НачДата по КонДата;
   |Обрабатывать НеПомеченныеНаУдаление;
   |Стоимость = Регистр.Себестоимость.Стоимость;
   |Номенклатура = Регистр.Себестоимость.Номенклатура;    
   |Функция Себестоимость = Сумма(Стоимость);  
   |Группировка Номенклатура упорядочить по Номенклатура.Наименование;
   |Условие(ПУстоеЗначение(Номенклатура) = 0);
   |";//}}ЗАПРОС
   // Если ошибка в запросе, то выход из процедуры
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
       Возврат;
   КонецЕсли;

   Пока Запрос.Группировка(1) = 1 Цикл
       ТЗ.НоваяСтрока();  
       ТЗ.Номенк = Запрос.Номенклатура;
       Если Запрос.Номенклатура = Константа.ОсновнойФ Тогда
           ТЗ.Сумма2 = Запрос.Стоимость;
       Иначе
           ТЗ.СуммаД = Запрос.Стоимость;        
       КонецЕсли;
   КонецЦикла;
//******************************************************************************************************************

   ДокСчет.ВыбратьДокументы(НачДата,КонДата);
   Пока ДокСчет.ПолучитьДокумент()=1 Цикл
       Если ДокСчет.ПометкаУдаления()=1 Тогда
           Продолжить;
       КонецЕсли;
       СуммаПоСчету      = ДокСчет.Итог("Всего");
       
       ТЗ.НоваяСтрока();
       ТЗ.Номенк      = ДокСчет.Номенклатура;
       ТЗ.Сумма       = СуммаПоСчету;
   КонецЦикла;    
   //---------------------------------------------------------------------------------------------------------------
   
   ТЗ.Свернуть("Номенк","Сумма, СуммаД, Сумма2");    
   ТЗ.ВыбратьСтроки();
   Пока ТЗ.ПолучитьСтроку()=1 цикл
       Если (ТЗ.Сумма = 0) Тогда
           продолжить;
       КонецЕсли;

       НоменклатураТаб = ТЗ.Номенк;
       СуммаТаб        = ТЗ.Сумма;
       СуммаДТаб       = ТЗ.СуммаД;
       Сумма2Таб       = ТЗ.Сумма2;        
       Таб.ВывестиСекцию("Строка");
   КонецЦикла;
11 Злопчинский
 
22.04.12
17:20
|Обрабатывать НеПомеченныеНаУдаление; - лишнее, убрать
12 Злопчинский
 
22.04.12
17:20
ТЗ.Сумма2 - будет заполнено - в лучшем случае! - для одной строки ТЗ
13 Злопчинский
 
22.04.12
17:21
Пока ДокСчет.ПолучитьДокумент()=1 Цикл
- возможно не стоит брать в ТЗ НЕПРОВЕДЕННЫЕ документы..
14 Злопчинский
 
22.04.12
17:22
выводы
а) - не заполнена константа Константа.ОсновнойФ
б) - в выборке по запросу нет номенклатуры, которая = указанной константе
15 andrewks
 
22.04.12
17:25
(10) открой для себя УстановитьФильтр()
16 OASU
 
22.04.12
17:26
(14) Замечания учтены, не помогло.
"а) - не заполнена константа Константа.ОсновнойФ" - заполнена, факт.
б) - в выборке по запросу нет номенклатуры, которая = указанной константе" - в отлдачике ТЗ.Сумма2 и ТЗ.СуммаД заполняются согласно условию.
17 Злопчинский
 
22.04.12
17:28
ну тогда в отладчике перед исполнением оператора свертки выполни в табло
ТЗ.ВыбратьСтроку(,"до свертки") - переключись в предприятие и посмотри...
выполни свертку и снова переключись в предприятие и посмотри.
18 Злопчинский
 
22.04.12
17:29
Правильно ли я понял что ТЗ.Сумма2 - отлична от нуля всего в однйо строке ТЗ..?
19 OASU
 
22.04.12
17:30
(18) Да.
ТЗ.Свернуть("Номенк","Сумма, СуммаД, Сумма2");    
   ТЗ.ВыбратьСтроки();
   Пока ТЗ.ПолучитьСтроку()=1 цикл
       Если (ТЗ.Сумма = 0) Тогда
           продолжить;
       КонецЕсли;
если это заменить на ТЗ.Сумма2 = 0, тогда Сумма2 в таблице заполняется, а сумма наоборот становится = 0
20 Злопчинский
 
22.04.12
17:30
наверное все-таки в результатах запроса надо брать
Запрос.Себестоимость;
а не
Запрос.Стоимость;
.
???
21 SmallDog
 
22.04.12
17:32
никогго нет, извини
22 Злопчинский
 
22.04.12
17:33
если в документе у тебя номенклатура, которой нет в запросе - а это запросто.. то на выводе будут только строки где сумма- какое-то число, а сумма2 и суммаД = 0
23 OASU
 
22.04.12
17:33
(20) |Стоимость = Регистр.Себестоимость.Стоимость;
в смысле "Запрос.Себестоимость", переменная ведь обозначена
24 Злопчинский
 
22.04.12
17:33
с интересом ждем результатов экспериментов...
25 andrewks
 
22.04.12
17:34
я так и не понял, какие претензии к Свернуть()
26 Злопчинский
 
22.04.12
17:35
у тебя в регистре
Товар1 - 100 руб
Товар2 - 50 руб
Товар1 - 30 руб.
.
на выходе ЗАПРОСА у тебя будет
Товар1 - 130 руб (ФУНКЦИЯ СУММА!)
Товар2 - 50 руб.
27 OASU
 
22.04.12
17:36
(22) ну похоже что так оно и получается, а как с эти бороться?
28 Злопчинский
 
22.04.12
17:36
(25) у него неверная интепретация ожидаемого и действительного - он считает что они должны солвпадать, а на самом деле это не так. и ожидаемое - НЕВРНО.
29 Злопчинский
 
22.04.12
17:36
(27) вестимо как - написать ПРАВИЛЬНО!!!!!!
30 Злопчинский
 
22.04.12
17:36
а что является ПРАВИЛЬНЫМ в твоей задаче - я хз...
31 Злопчинский
 
22.04.12
17:37
для начала в выводе закомментарь
       Если (ТЗ.Сумма = 0) Тогда
           продолжить;
       КонецЕсли;
.
и втыкай в получившийся результат до просветления
32 Злопчинский
 
22.04.12
17:38
заодно повтыкай в (26)
33 OASU
 
22.04.12
17:40
(25) если запрос делает правильную выборку и выборка по Доку делает правильную выборку, и все это помещает в ТЗ, сворачивает результат и результат не верный...
34 Злопчинский
 
22.04.12
17:47
(33) трындишь, вероятность 99%. давай доступ по тимвьюверу - ид и пароль на [email protected] - будем вместе смотреть - там работы на совсем немного - ЧУДЕС НЕ БЫВАЕТ
35 Злопчинский
 
22.04.12
17:49
в (10) неврное извлечение результатов запроса
.
       Если Запрос.Номенклатура = Константа.ОсновнойФ Тогда
           ТЗ.Сумма2 = Запрос.Стоимость;
       Иначе
           ТЗ.СуммаД = Запрос.Стоимость;        
       КонецЕсли;
.
надо
       Если Запрос.Номенклатура = Константа.ОсновнойФ Тогда
           ТЗ.Сумма2 = Запрос.Себестоимость;
       Иначе
           ТЗ.СуммаД = Запрос.Себестоимость;        
       КонецЕсли;
36 OASU
 
22.04.12
17:50
(17) в отладчике посмотрела ТЗ.ВыбратьСтроку, по крайней мере данные есть все, после свертки тоже все есть но она не свернутая вроде.

высылаю.
37 Злопчинский
 
22.04.12
17:51
ок. жду
38 Злопчинский
 
22.04.12
17:51
(36) просто попался частный случай, когда все строки в тз - уникальные
39 Злопчинский
 
22.04.12
17:52
ошибка в принципе написана в (28)
40 Злопчинский
 
22.04.12
17:55
мыла пока нет..
.
внимательно!
[email protected]
41 Злопчинский
 
22.04.12
18:57
Вопрос закрыт.
причина - в (22) + свертка не происходила из-за того что в свертке прсиутсовала еще одна колонка с неуникальными данными - т.е. в (10) приведен не полный код.
.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.