Имя: Пароль:
1C
Юмор
Выбор документов с заданными товарами
🠗 (длинная ветка 18.04.2013 16:17)
,
0 bananan
 
11.04.13
14:34
Увы в прошлой ветке, мне так и не удалось решить данную задачу.
Ёпрст посоветовал: "типа того:

select t1.tovar,t1.client from table as t1

where exists (select val from #tmptable where
val not in (select t2.tovar from table as t2 where t1.client =t2.client)"
Я написал такой Текст запроса:
   ТекстЗапроса = "
       | select    
         |    Таб.Товар as [Товар $Справочник.ТМЦ]
         |    ,isnull($ДокШН.Доставка, $ДокШ.Доставка) as [Доставка $Справочник.Доставка]
         |    , $Доставка.Адрес as Адрес
         |    ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент, 1)) as КоличествоВЕд
         |    ,isnull($ДокШ.Клиент, $ДокШН.Клиент) as [Клиент $Справочник.Клиенты]
         |    ,isnull($ДокШ.Агент, $ДокШН.Агент) as [Агент $Справочник.Агент]        
         |from
       |    (
         |        select
       |            $ДокС.ТМЦ as Товар
       |            ,ДокС.iddoc as Документ
       |            ,$ДокС.Кво*$ДокС.Коэффициент as Количество
         |        from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
         |    union all
       |        select
       |            $ДокН.ТМЦ
       |            ,ДокН.iddoc
       |            ,$ДокН.Кво*$ДокН.Коэффициент as Количество
         |    from  $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)
       |    )as Таб
       | inner join                                
       |    _1sjourn as Жур (nolock) on Жур.IDDoc = Таб.Документ
         |    and Жур.iddocdef in ($ВидДокумента.РасходнаяНакладная,$ВидДокумента.РасходнаяНакладнаяН)
         |    and Жур.Date_Time_IDDoc BETWEEN :НачДата and :КонДата~
         |    and Жур.Closed&1 = 1
         |    left join $Документ.РасходнаяНакладная as ДокШ (nolock) on ДокШ.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладная        
         |   Left join $Документ.РасходнаяНакладнаяН as ДокШН (nolock) on ДокШН.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладнаяН
         |   left join $ДокументСтроки.РасходнаяНакладная as ДокС (nolock) on ДокС.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладная
       |   left join $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock) on ДокН.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладнаяН
       |   left join $Справочник.Доставка Доставка (nolock) on Доставка.id = isnull($ДокШ.Доставка, $ДокШН.Доставка)
         | left join (
       |     select  
       |           max($Спр.Коэффициент) as Коэффициент
       |            ,Спр.parentext as Владелец
       |     from $Справочник.ЕдИзм as Спр (nolock)
       |     where $Спр.Ед =:ВыбЕдиница
       |           and $Спр.Коэффициент>0
       |           and Спр.ismark=0
       |     group by Спр.parentext
       |   ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
       |  WHERE (Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~)";
       Если ВыбТМЦ.РазмерСписка()>0 тогда
           ТекстЗапроса = ТекстЗапроса + "and exists (select from #СписокТМЦ where val not in (select t2.ТМЦ from Таб as t2 where t1.client=t2.client)";
       КонецЕсли
Не пропускает - ругается на message [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'from'.
Ну и из совета Ёпрст я не понял что такое t1?
429 Wobland
 
17.04.13
12:24
430 bananan
 
17.04.13
12:42
(428)  В конце-концов решил это скорее математически % вычисляю так:
|,   case Данные.Цена_Прих
       |        WHEN  0 then 0
       |    /*ELSE ((Данные.СуммаСНДС / Данные.Количество)/Данные.Цена_Прих-1)*100 end as Проц*/
       |    /*ELSE ((1.0*Данные.СуммаСНДС / Данные.Количество)/Данные.Цена_Прих-1)*100 end as Проц*/
       |    ELSE (((Данные.СуммаСНДС/Данные.Количество)/ (Данные.Цена_Прих * (1+Данные.Ставка)))-1)*100 end as Проц
431 Wobland
 
17.04.13
12:59
на всякий случай даю справку. умножение на 1.0 - неявное преобразование int во float
432 Ёпрст
 
17.04.13
13:02
дас ис так. иначе 8/10 будет 0 всегда
433 bananan
 
17.04.13
15:17
(432) Дас ис так - украиноско-немецое Ес! :)
434 Wobland
 
17.04.13
19:19
а дельфисты в принципе понимают разницу между целым и вещественным?
435 Wobland
 
17.04.13
19:53
мужик, ты - не программист (доказывать не буду за очевидностью). это не плохо и не хорошо, это так есть. ты зря занимаешь своё место - не твоя профессия. просто поверь, если не можешь осмыслить рационально. и вот этими своими тысячепостовыми несколькомесячными трипами ты уже всех залюбил (возможно, кроме Ёпрста). займись, блин, своим делом, а не этим онанизмом. танцуй, рисуй, пиши, но только не бери в руки клавиатуру.
436 bananan
 
18.04.13
11:30
(435) Только после ВАС, СЭР!
Добрый день
в запросе у меня
|,     Запрос.КатегорияЦены [КатегорияЦены $Перечисление.ТипыЦен]
приведение типов есть, а в таблицу выдает какието числа вместо: Категория 1 и т.д.
Что может быть?
437 bananan
 
18.04.13
11:46
+(436) В таблице это поле тоже правильно , Смотрел Таблицу Значений - В таблице значений значение поля ЦенаКатегории - правильное, а в экранную Таблицу почему-то идут числа...
438 bananan
 
18.04.13
11:53
+(437) Люди добрые! Помогите, подскажите!!! В чем у меня проблема с выводом на экран?
439 bananan
 
18.04.13
12:12
Неужели все на футболе?
я нашел когда он вместо текстового поля Категорияцены вставляет циисла:
ТбЗн.Выгрузить(ТбРазом);
   ТбРазом.КоличествоСтрок(ТбРазом.КоличествоСтрок()+ТбЗн2.КоличествоСтрок()+ТбЗн3.КоличествоСтрок());
   Если ТбЗн2.КоличествоСтрок()>0 тогда
       ТбРазом.Заполнить(ТбЗн2, ТбЗн.КоличествоСтрок()+1);
       Сообщить("2-е");
       ТбРазом.ВыбратьСтроку();
   КонецЕсли;
   Если ТбЗн3.КоличествоСтрок()>0 тогда        
       ТбРазом.Заполнить(ТбЗн3, ТбЗн.КоличествоСтрок()+ТбЗн2.КоличествоСтрок()+1);
       Сообщить("3-е");
       ТбРазом.ВыбратьСтроку();
   КонецЕсли;
   ТбРазом.ВыбратьСтроки();
Если посмотреть Таблицу Значений до Сообщить("2-е"); - то там в поле КатегорияЦены - идут правильные данные,а после
ТбРазом.Заполнить(ТбЗн2, ТбЗн.КоличествоСтрок()+1);
в ТбРазом в поле КатегорияЦены - числа!!
Почему?!
440 bananan
 
18.04.13
12:54
большое спасибо за поддержку и, главное - за попомощь!
441 Ёпрст
 
18.04.13
13:20
Объедини 3 запроса в один через юнион и выкини заполнение ТЗ из кода.
442 bananan
 
18.04.13
13:23
(441) Я уже понял и увидел что ошибка происходит именно при заполнении /*вернее объединеии трех ТЗ..
А вотк как эти три запроса втыкнут ь в один - не знаю... а блин задача ГОРИТ!! :(
443 Ёпрст
 
18.04.13
13:25
(442)
пример

select
a
,b
,c
from table1

union all

select
a
,b
,c
from table2

select
a
,b
,c
from table3
444 bananan
 
18.04.13
13:32
(443)  Сейчас попробую, с обединением ТЗ уже 4 часа вожусь - ничего толком не получается..
445 bananan
 
18.04.13
13:47
А у меня там к каждому из запросов идет:
Если ВыбАгент.РазмерСписка()>0 Тогда
           ТекстЗапроса = ТекстЗапроса +" and isnull($ДокШН.Агент, $ДокШ.Агент) IN (SELECT Val FROM #СписокАгентов)";
       КонецЕсли;      
       Если ВыбСклад.РазмерСписка()>0 Тогда
           ТекстЗапроса = ТекстЗапроса +" and isnull($ДокШН.Склад, $ДокШ.Склад) IN (SELECT Val FROM #СписокСкладов)";
       КонецЕсли;      
Это как надо сделать, Понятно, что один раз Но...
А делаю текст Запроса потоп добавляю "выбранных, потом в ТекстЗапроса пишу union all
так же с Текстом Запроса№2
так же с Текстом Запроса№3
Да?
446 bananan
 
18.04.13
14:03
+(445) У меня там в одном из трех запросов Group By, а в других двох его нет... Блин, это теперь надо Group By в два других запроса вставлять?
Абидна.... Бляха муха, почти месяц работы - и теперь коту под хвост...
Но, непонятно почему он ТЗ обэединяет с глюком, именно после обэдинений трех ТЗ - вылазят числа вместо строк!!!
ЁПрст можешь посмотреть как я сделал Объединение 3 ТЗ в одну ТЗ?
Код:
ТбРазом = СоздатьОбъект("ТаблицаЗначений");                                    
   ТбРазом.КоличествоСтрок(ТбЗн.КоличествоСтрок());
   Если ТбЗн.КоличествоСтрок()>0 тогда
       ТбЗн.Выгрузить(ТбРазом,1,,);
       ТбРазом.ВыбратьСтроку();
   КонецЕсли;
   
   Если ТбЗн2.КоличествоСтрок()>0 тогда
       ТбРазом.КоличествоСтрок(ТбРазом.КоличествоСтрок()+ТбЗн2.КоличествоСтрок());
       ТбРазом.Заполнить(ТбЗн2, ТбЗн.КоличествоСтрок()+1,,);
       ТбРазом.ВыбратьСтроку();
   КонецЕсли;                                                                    
   Если ТбЗн3.КоличествоСтрок()>0 тогда                                          
       ТбРазом.КоличествоСтрок(ТбРазом.КоличествоСтрок()+ТбЗн3.КоличествоСтрок());
       ТбРазом.Заполнить(ТбЗн3, ТбЗн.КоличествоСтрок()+ТбЗн2.КоличествоСтрок(),,);
       Сообщить("После послденего");
       ТбРазом.ВыбратьСтроку();
   КонецЕсли;
   ТбРазом.ВыбратьСтроки();
447 viktor_vv
 
18.04.13
14:11
(446) У тебя там имена колонок перепутаны наверное. Вот у тебя в колонку с категорией цен залетает какое-нибудь поле с числом.
448 bananan
 
18.04.13
14:16
(447) Смотрел - вроде там все нормально... А 3 ТаблицыЗначений я сливаю в одну правильно?
449 viktor_vv
 
18.04.13
14:17
(447)+ Потому как вот эта твоя фраза очень смущает

"В таблице значений значение поля <<ЦенаКатегории>> - правильное, а в экранную Таблицу почему-то идут числа"

А тут ты пишешь

|,     Запрос.КатегорияЦены [КатегорияЦены $Перечисление.ТипыЦен]
450 viktor_vv
 
18.04.13
14:19
Показывай уже все три select'a верхних из своих запросов.
451 bananan
 
18.04.13
14:20
(450) Первы:
|SELECT
       |    Данные.IDDoc as [Документ $Документ]
       |,   Данные.IdDocDef as Документ_вид
       |,   Данные.ТМЦ as [ТМЦ $Справочник.ТМЦ]
       |,   Данные.lineno_ as НомерСтроки_
       |,   Данные.Автор as [Автор $Справочник.Сотрудники]
       |,   Данные.Клиент [Клиент $Справочник.Клиенты]        
       |,   Данные.ЦенаВДок                                                                              
       |,     (Данные.Цена_Прих * (1+Данные.Ставка)) as МинЦена  
       |,     (Данные.СуммаСНДС/Данные.Количество) as ЦенаТовара
         |,     'прихідна' as КатегорияЦены
       |,   Данные.ИдентификаторИсторииЦены
       |,   case Данные.Цена_Прих
       |        WHEN  0 then 0
       |    /*ELSE ((Данные.СуммаСНДС / Данные.Количество)/Данные.Цена_Прих-1)*100 end as Проц*/
       |    /*ELSE ((1.0*Данные.СуммаСНДС / Данные.Количество)/Данные.Цена_Прих-1)*100 end as Проц*/
       |    ELSE (((Данные.СуммаСНДС/Данные.Количество)/ (Данные.Цена_Прих * (1+Данные.Ставка)))-1)*100 end as Проц
       |,   'ціна нижча прихідної' Ошибка
452 bananan
 
18.04.13
14:21
2-й
   |SELECT
       |    IDDoc [Документ $Документ]
       |    ,IdDocDef Документ_вид
       |   ,ТМЦ   [ТМЦ $Справочник.ТМЦ]
       |   ,lineno_ НомерСтроки_
       |    ,Автор [Автор $Справочник.Сотрудники]
       |,   Запрос.Клиент [Клиент $Справочник.Клиенты]        
       |,   Запрос.ЦенаВДок
       |,     0 as МинЦена  
       |,     ROUND(Запрос.СуммаСНДС/Запрос.Количество, 2) as ЦенаТовара
         |,     Запрос.КатегорияЦены [КатегорияЦены $Перечисление.ТипыЦен]
       |,   Запрос.ИдентификаторИсторииЦены
       |,   case Запрос.Цена_Прих
       |        WHEN  0 then 0
       |    ELSE ((Запрос.СуммаСНДС / Запрос.Количество)/Запрос.Цена_Прих-1)*100 end as Проц
       |    , 'Не встановлена ціна' as Ошибка
       |FROM (
453 bananan
 
18.04.13
14:21
3-й
   |SELECT
       |    IDDoc [Документ $Документ]
       |    ,IdDocDef Документ_вид
       |   ,ТМЦ   [ТМЦ $Справочник.ТМЦ]
       |   ,lineno_ НомерСтроки_
       |    ,Автор [Автор $Справочник.Сотрудники]
       |,   Запрос.Клиент [Клиент $Справочник.Клиенты]        
       |,   Запрос.ЦенаВДок                                                                              
       |,     ROUND(Запрос.Цена_Прих * (1+Запрос.Ставка),2) as МинЦена  
       |,     ROUND(Запрос.СуммаСНДС/Запрос.Количество, 2) as ЦенаТовара
         |,   Запрос.КаналСбыта as КаналСбыта
         |,     Запрос.КатегорияЦены [КатегорияЦены $Перечисление.ТипыЦен]
       |,   Запрос.ИдентификаторИсторииЦены
       |,   case Запрос.Цена_Прих
       |        WHEN  0 then 0
       |    ELSE ((Запрос.СуммаСНДС / Запрос.Количество)/Запрос.Цена_Прих-1)*100 end as Проц    
       |    ,'ціна нижча допустимої ='
       |    +cast(cast(Запрос.СуммаСНДС / Запрос.Количество as numeric(15,2)) as varchar(255))
       |    +' мінімальна='
       |    +cast(cast(Запрос.МинЦена*(1+Запрос.Скидка/100) as numeric(15,2)) as varchar(255))
       |FROM (
454 bananan
 
18.04.13
14:21
Все - больше запросов НЕТ (сегодня :(
455 viktor_vv
 
18.04.13
14:25
Из-за этого

       |,     'прихідна' as КатегорияЦены

         |,     Запрос.КатегорияЦены [КатегорияЦены $Перечисление.ТипыЦен]


в одной ТЗ у тебя тип значения строка, в другой Перечисление, вот оно и приводится к внутреннему идентификатору перечисления.
456 viktor_vv
 
18.04.13
14:26
У тебя в твоем пеерчислении ТипыЦен есть элемент "прихідна" ?
457 Mikeware
 
18.04.13
14:27
он реально тупой.
458 bananan
 
18.04.13
14:27
(455) А Как это исправить? Дело в том что мне в первом запросе надо чтобы он возврашал строку, а во вторых двух : Перечисление ТипыЦен
459 Privalov
 
18.04.13
14:28
(457) Всё-таки это большой проект какого-то тролля. Нельзя быть таким тупым и при этом работать.
460 viktor_vv
 
18.04.13
14:29
(458) Ну извини.
Разве что создай итоговую таблицу руками, для колонки Категория цен тип не определяй, тогда по идее можно туда впихнуть разные типы.
461 bananan
 
18.04.13
14:29
(459) А свою желч выливать на нормальных людей можно??!
462 viktor_vv
 
18.04.13
14:30
(458)+ А почему такая строгость со строкой, чем тебя там не устроит перечисление, оно легко в строку потом приводится.
463 bananan
 
18.04.13
14:35
(462) А как мне в первом запросе выдать что мол ЦенаКатегории - призыдна?
Т.е. как эту строку втиснуть в перечисление в SQL?
464 viktor_vv
 
18.04.13
14:35
(459) Я думаю троллю быстро надоело столько строчить, и за столько постов таки прокололся бы :).
А тут незавидно постоянство IQ.
465 viktor_vv
 
18.04.13
14:37
(463) Идентификатор у этого значения перечисления "прiхидна" какой в конфигураторе ?

вместо

      |,     'прихідна' as КатегорияЦены



пишешь

      |,     $Перечисление.ТипыЦен.ИдентификаторТвоегоЗначения as [КатегорияЦены $Перечисление.ТипыЦен]
466 Ёпрст
 
18.04.13
14:39
(463)

// |,     'прихідна' as КатегорияЦены
|,   :Парам as КатегорияЦены
.........

Запрос.УстановитьТекстовыйПараметр("Парам",Перечисление.нужныйВид.НужноеЗначение);
467 bananan
 
18.04.13
14:39
(465) Спасибо! Сейчас попробую так...
468 Ёпрст
 
18.04.13
14:39
или так
469 viktor_vv
 
18.04.13
14:40
(465) Хотя не уверен, может я с SQlite спутал.

Если не получится можешь параметром закинуть в запрос.
470 bananan
 
18.04.13
14:40
(465) Но делов в том что вПеречислении ТипыЦен нет значения прихыдна...
471 viktor_vv
 
18.04.13
14:42
(470) Засада :).
472 bananan
 
18.04.13
14:43
(471) И что никак это обойти нельзя?
Добавлять новый пункт в перечисление - НЕЛЬЗЯ....
473 viktor_vv
 
18.04.13
14:44
(470) Может там "закупочная" есть ?
474 bananan
 
18.04.13
14:45
нету там  Только Категори 1.. 9, ну и еще поару Кеш категорий...
475 Mikeware
 
18.04.13
14:45
(472) создать временную таблицу, и уложить туда пары {ИдПеречисления, СтроковоеПредставление}
ну и джойнить с ним во втором и третьем...
476 bananan
 
18.04.13
14:47
А можно не объединять ТЗ в одну а выводить каждую из ТЗ последовательно: вывел ТЗ1, вывел ТЗ2, вывел ТЗ3 и потом уж показал Таблицу на экран?
477 Mikeware
 
18.04.13
14:48
твое право. можешь даже на экран не выводить - сразу на печать.
а еще лучше - стирай сразу.
478 viktor_vv
 
18.04.13
14:49
(475) Меня терзают смутные сомнения :)) насчет понимания ТС написанного тобой :)).
479 bananan
 
18.04.13
14:50
(478) Что такое ТС?
480 viktor_vv
 
18.04.13
14:50
(476) Если тебе с объединенной таблице больше никаких манипуляций делать не надо, кроме вывода, то вперед.
481 bananan
 
18.04.13
14:51
(480) Сейчас попробую так сделать...
482 Mikeware
 
18.04.13
14:55
(478) с учетом (479) - посты (456), (459) и (464) засияли новыми красками...
483 viktor_vv
 
18.04.13
14:59
(482) Думаешь прокол :)? Мне почему-то кажется, что пока вполне гармонично.
484 bananan
 
18.04.13
15:14
Ничего не понимаю взял тупо без цикла скажем по первой ТаблицеЗначений:
   Пока(ТбЗн.ПолучитьСтроку()=1) Цикл
       Документ = ТбЗн.Документ;
       Если Подр = 1 тогда
           Если ТбЗн.Документ<>Предыдущий тогда
               Предыдущий = ТбЗн.Документ;
               Таб.ВывестиСекцию("ДокументИТовар");
           Конецесли;
       Иначе
           Если ТбЗн.Документ<>Предыдущий тогда
               Предыдущий = ТбЗн.Документ;
               Таб.ВывестиСекцию("Документ");
           Конецесли;
       КонецЕсли;
       Если Подр = 1 тогда
           Таб.ВывестиСекцию("ОшибкаТ");
       ИНАЧЕ
           Таб.ВывестиСекцию("Ошибка");
       КонецЕсли;
   КонецЦикла;
   
   Пока(ТбЗн2.ПолучитьСтроку()=1) Цикл
Ну и дальше - аналогично...
А на экран выходит пустая таблица в которой только шапка есть...
Или это надо делать не в конце скрипта, а после выполнени каждого из запросов?
485 bananan
 
18.04.13
15:18
+(484) "Это делать" подразумевается обход Таблицы Значений в цикле...
486 bananan
 
18.04.13
15:21
(485) Пробывл выводить ТаблицуЗначений в Таблицу сразу же после формирования ТЗ, - резудльтат тот же - выводится только шапка Таблицы....
:(
487 vinogradъ
 
18.04.13
15:22
bananan, зачем ты этим занимаешься?
488 bananan
 
18.04.13
15:30
(487) Жить за что-то надо...
489 bananan
 
18.04.13
15:32
Блин а в цикл обхода первой же ТЗ он не входит почему-то...
490 vinogradъ
 
18.04.13
15:34
выбратьстроки
491 bananan
 
18.04.13
15:35
(490) Точно! Выбрать строки из каждой ТЗ забыл!
492 ЧеловекДуши
 
18.04.13
15:36
(488) Иди в Политики, там смыслу будет больше :)
И жить есть За что, за страну :)
493 bananan
 
18.04.13
15:48
Блин, ЗАРАБОТАЛО!! Виноградарь - БОЛЬШОЕ СПАСИБО, в этой кутерьме я обо многом забыл напрояь!
494 bananan
 
18.04.13
15:48
(492) Прикинь, а у меня и программить получается!
495 Джон Вэйн
 
18.04.13
16:00
(494)  деточка, ты льстишь себе.. совсем..
496 bananan
 
18.04.13
16:00
+ Ребята вопрос на будущее,
Скажем как мне в данном (первом) Запросе создать временную таблицу типа Перечисление и заполнить ее одним значением ?
497 bananan
 
18.04.13
16:00
(494) Совсем - не совсем - а роезультат на экране!
498 viktor_vv
 
18.04.13
16:02
(496) Для одного значения нафик не нужна временная таблица. Или ты имел ввиду одни вид перечисления ?
(497) Ты уж извини, но то что на экране не совсем ты напрограммировал.
499 bananan
 
18.04.13
16:05
(498) А я и не говорю, что это я сам напрограммировал, - в данных трех запросах 90% помощь вашего форума...!
500 Mikeware
 
18.04.13
16:07
(496) ТКВ:Анахуа?
501 viktor_vv
 
18.04.13
16:08
(500) Ну типа надо развиваться дальше :).
502 bananan
 
18.04.13
16:09
(500) А щоб была Дохуа!
503 Mikeware
 
18.04.13
16:17
(502) Тебе советы - как молоко негру. "не поможет".
504 bananan
 
18.04.13
16:51
(503) И что же ТЫ советовал???
Сейчас вот вылезло: выдает и много раз (я так понимаю в каждой итерации обхода ТЗ):
1
Поле агрегатного объекта не обнаружено (КатегорияЦены)
Поле агрегатного объекта не обнаружено (Автор)
Поле агрегатного объекта не обнаружено (Ошибка)
Поле агрегатного объекта не обнаружено (КатегорияЦены)
Поле агрегатного объекта не обнаружено (Автор)
Поле агрегатного объекта не обнаружено (Ошибка)

Код именно этого куска такой:
   ТбЗн.ВыбратьСтроки();
   Пока(ТбЗн.ПолучитьСтроку()=1) Цикл
       Документ = ТбЗн.Документ;
       Клиент = ТбЗн.Клиент;        
       ТМЦ        = ТбЗн.ТМЦ;
       ЦенаВДок = ТбЗн.ЦенаВДок;
       МинЦена = ТбЗн.МинЦена;
       КатегорияЦены = ТбЗн.КатегорияЦены;
       Проц = ТбЗн.Проц;
       Автор = ТбЗн.Автор;
       Ошибка = ТбЗн.Ошибка;
       Сообщить("1");
       Если Подр = 1 тогда
           Если ТбЗн.Документ<>Предыдущий тогда
               Предыдущий = ТбЗн.Документ;
               Таб.ВывестиСекцию("ДокументИТовар");
           Конецесли;
       Иначе
           Если ТбЗн.Документ<>Предыдущий тогда
               Предыдущий = ТбЗн.Документ;
               Таб.ВывестиСекцию("Документ");
           Конецесли;
       КонецЕсли;
       Если Подр = 1 тогда
           Таб.ВывестиСекцию("ОшибкаТ");
       ИНАЧЕ
           Таб.ВывестиСекцию("Ошибка");
       КонецЕсли;
   КонецЦикла;
505 bananan
 
18.04.13
16:52
Все эти поля агрегатного объекта относятся к текущей таблице Значений или к Таблице (та что потом выводится на экран)?
506 bananan
 
18.04.13
16:55
Когда в коде по первой ТЗ закоментировал строки с этими полями - все-равно выдает все тоже, и.. по первой ТЗ - так ведь там
оле агрегатного объекта не обнаружено (КатегорияЦены)
а потом еще раз
оле агрегатного объекта не обнаружено (КатегорияЦены)
Почему?
507 bananan
 
18.04.13
16:57
+ Обявил я в начале процедуры эти пермеменные, но все-равно поле агрегатного объкьа необнаружено!!!
508 bananan
 
18.04.13
16:59
+ Хотя .. в неоторых итерация он только Один раз ругается что поле не обнаружено....
В чем глюк?
(Просьба о ДНК не писать...)
509 bananan
 
18.04.13
17:05
Судя по тому что в одних итерациях одно и тоэе поле "ругается" дважды - а в других только ОДИН раз ...
Как мне програмно определить есть ли такое поле у агрегатного объекта:
510 Ёпрст
 
18.04.13
17:09
Открой тз и посмотри, что в ней.
511 Ёпрст
 
18.04.13
17:09
есть ли колонки с такими именами
512 bananan
 
18.04.13
17:10
Открывал, смотрел ТАМ есть данные поля (ну и потом на экране они тоже есть и с адекватными значениями)!!!
513 bananan
 
18.04.13
17:10
(511) Почему в одной итерации на одно и тоже поле ругается ДВА раза, а в другой - только раз?
514 bananan
 
18.04.13
17:14
код:
Пока(ТбЗн.ПолучитьСтроку()=1) Цикл
       Документ = ТбЗн.Документ;
       Клиент = ТбЗн.Клиент;        
       ТМЦ        = ТбЗн.ТМЦ;
       ЦенаВДок = ТбЗн.ЦенаВДок;
       МинЦена = ТбЗн.МинЦена;
       КатегорияЦены = ТбЗн.КатегорияЦены;
       Проц = ТбЗн.Проц;
       Автор = ТбЗн.Автор;
       Ошибка = ТбЗн.Ошибка;
       
       Сообщить("1 !!!");
       Возврат;
Выдает:
1 !!!
Когда  заремарил обращение к полям ТбЗн - все равно выдает 1 !!!
515 bananan
 
18.04.13
17:15
Тоесть в данном случае нет несуществующего поля! В чем тогда проблема??? Чего она, зараза ругается!!!
516 bananan
 
18.04.13
17:17
+ когда написал так:
Пока(ТбЗн.ПолучитьСтроку()=1) Цикл
       //Документ = ТбЗн.Документ;
       //Клиент = ТбЗн.Клиент;        
       //ТМЦ        = ТбЗн.ТМЦ;
       //ЦенаВДок = ТбЗн.ЦенаВДок;
       //МинЦена = ТбЗн.МинЦена;
       //КатегорияЦены = ТбЗн.КатегорияЦены;
       //Проц = ТбЗн.Проц;
       //Автор = ТбЗн.Автор;
       //Ошибка = ТбЗн.Ошибка;
       //
       Сообщить("1 !!!");
       Если Подр = 1 тогда
           Если ТбЗн.Документ<>Предыдущий тогда
               Предыдущий = ТбЗн.Документ;
               Таб.ВывестиСекцию("ДокументИТовар");
               Возврат;
           Конецесли;
       Иначе
           Если ТбЗн.Документ<>Предыдущий тогда
               Предыдущий = ТбЗн.Документ;
               Таб.ВывестиСекцию("Документ");
           Конецесли;
       КонецЕсли;      
       Возврат;
выдает:
1 !!!
1 !!!
1 !!!
Поле агрегатного объекта не обнаружено (КатегорияЦены)
Поле агрегатного объекта не обнаружено (Автор)
Поле агрегатного объекта не обнаружено (Ошибка)
Все 6 строк показал.
В чем фиигня??
517 bananan
 
18.04.13
17:22
Ларчик просто открывался у меня у всех этих полей в таблице была Расшифровка ТбРазом....
518 Wobland
 
18.04.13
18:21
пля, я тоже был таким идиотом. через пару месяцев прошло. с восьмёркой буксовал, правда, с полгода. с УФ тоже пару месяцев. теперь обратно буксую с семёркой зачастую. вывод: максимум - полгода
519 bananan
 
18.04.13
18:23
еще один вопрос, он давно просто сейчас вспомнил вывожу я секции, кажадя секция имеет горизонтальную рамку с лева скажем
так вот, есть часто-густо удет секция с левой рамкой, а потом пустая (без ничего) строка небольшой высоты, потом секция опять таже (это в цикле).
Почему возникают зазоры межде секциями при итерациях и как этого избежать?
520 bananan
 
18.04.13
18:24
(518) А вот попробуй не забуксуй когда запрос "горит" а на форуме тебе всякие пля советуют!
521 Wobland
 
18.04.13
18:28
(520) есть конкретный момент, буксую. не ною на мисте, а разбираю вопрос/запрос на мелкие задачи, дроблю, делю, упрощаю, снимаю группировки, чтоб найти конкретного п...са (документ) с нетрадиционными движениями
522 Wobland
 
18.04.13
18:28
+(521) а горит
523 Wobland
 
18.04.13
18:31
ваще-то ною ;)
Хроники истины (около сотого поста)
но применяю мозх и работаю самостоятельно
524 Wobland
 
18.04.13
18:55
а нашёл я конкретного п..са в частном случае. человек приходит в магазин и выражает желание приобрести одну штуку шпательной лопатки. в регистре продажи делается две записи:
количество -1, продстоимость 0
количество 2, продстоимость 49.90
а в запросе получаю ПродСтоимость 0
|    sum(ISNULL(Продажи.ПродСтоимость, 0)) as ПродажиПродСтоимость,
...
|    LEFT JOIN
|    (SELECT
|        $регПродажи.Номенклатура AS Номенклатура,
|        SUM($регПродажи.Количество) AS Количество,
|        SUM($регПродажи.ПродСтоимость) AS ПродСтоимость,
|        SUM($регПродажи.ПродСтоимостьВ) AS ПродСтоимостьВ,
|        SUM($регПродажи.ПродСтоимость)/SUM(CASE WHEN $регПродажи.Количество=0 THEN 1 ELSE $регПродажи.Количество END) AS ЦенаПродажи
|    FROM
|        $Регистр.Продажи AS регПродажи
|    WHERE
|        регПродажи.IDDoc=:Источник
|    GROUP BY
|        $регПродажи.Номенклатура) AS Продажи

завтра поговорим, если не найду баг, буду спрашивать у мисты
525 Wobland
 
18.04.13
19:00
(524) описался
Номенклатура: тот_шпатель, количество -1, продстоимость 49.90;
шпатель; количество 2; продстоимость 0
почему Сумма(исНулл(ПродСтоимость, 0)) говорит, что 0?
526 Wobland
 
18.04.13
19:02
ну и так.. в качестве воспитывания ТС
   |    SUM(ISNULL(Продажи.ЦенаПродажи, 0)*(CASE WHEN ISNULL(ПартииО.Количество, 0)=0 THEN ОтчётыККМ.Количество ELSE ПартииО.Количество END))
   |        -SUM(ISNULL(ПродажиВ.ЦенаПродажи, 0)*ISNULL(ПартииВ.Количество, 0)) AS ИтогПродаж,
из этого я раздробил и вывел нулевую сумму в регистре продаж
527 bananan
 
18.04.13
19:04
Воблан - у тебя, как всегда пустые слова. а вопросы что я задавл перед твоим ..сом, я уже решил сам. Без тебя о, виликай и мандучий админь! :)
528 Wobland
 
18.04.13
19:05
(527) ты не обзывайся, админстовать я бросил лет 6 назад
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн