Имя: Пароль:
1C
Юмор
Помогите домучить прямой запрос
,
0 bananan
 
20.03.13
12:57
На данный момент текст запроса такой:
ТекстЗапроса = "
   |SELECT
   |    Данные.IDDoc as [Документ $Документ]
   |,   Данные.IdDocDef as Документ_вид
   |,   Данные.ТМЦ as [ТМЦ $Справочник.ТМЦ]
   |,   Данные.lineno_ as НомерСтроки_
   |,   Данные.Автор as [Автор $Справочник.Сотрудники]    
   |,   Данные.Цена1 as Цена1
   |,   Данные.Цена2 as Цена2
   |,   Данные.Цена3 as Цена3
   |,   Данные.Цена4 as Цена4
   |,   Данные.Цена5 as Цена5
   |,   Данные.Цена6 as Цена6
   |,   Данные.Цена7 as Цена7
   |,   Данные.Цена8 as Цена8
   |,   Данные.Цена9 as Цена9                      
   |,   Данные.Доставка as [ДоставкаКанал $Справочник.Доставка]
   |,   Данные.КаналСбыта as [КаналТТ $Справочник.КаналыСбыта]
   |,   Данные.КатегорияЦены as [КатегорияЦ $Перечисление.ТипыЦен]
   |,   'не встановлена ціна категорії' as Ошибка
   |from (
   |   SELECT
   |       Жур.IDDoc as IDDoc
   |   ,   Жур.IdDocDef as IdDocDef
   |   ,   isnull($ДокС.ТМЦ, $ДокН.ТМЦ) as ТМЦ
   |   ,   isnull(ДокС.lineno_, ДокН.lineno_) lineno_
   |   ,   isnull($ДокС.Кво*$ДокС.Коэффициент, $ДокН.Кво*$ДокН.Коэффициент) Количество
   |   ,   isnull($ДокС.СуммаСНДС, $ДокН.СуммаСНДС) СуммаСНДС                        
   |   ,   isnull($ДокШН.Доставка, $ДокШ.Доставка) as Доставка
   |   ,   isnull($ДокШ.ТипЦен, $ДокШН.ТипЦен) ТипЦен        
   |   ,    $Доставка.КаналСбытаТТ as КаналСбыта
   |   ,    $КаналСбыта.КатегорияЦены as КатегорияЦены
   |   ,    $ПоследнееЗначение.ТМЦ.Цена1(ТМЦ.id, cast(left(Жур.date_time_iddoc,8) as datetime)) Цена1
   |   ,    $ПоследнееЗначение.ТМЦ.Цена2(ТМЦ.id, cast(left(Жур.date_time_iddoc,8) as datetime)) Цена2
   |   ,    $ПоследнееЗначение.ТМЦ.Цена3(ТМЦ.id, cast(left(Жур.date_time_iddoc,8) as datetime)) Цена3
   |   ,    $ПоследнееЗначение.ТМЦ.Цена4(ТМЦ.id, cast(left(Жур.date_time_iddoc,8) as datetime)) Цена4
   |   ,    $ПоследнееЗначение.ТМЦ.Цена5(ТМЦ.id, cast(left(Жур.date_time_iddoc,8) as datetime)) Цена5
   |   ,    $ПоследнееЗначение.ТМЦ.Цена6(ТМЦ.id, cast(left(Жур.date_time_iddoc,8) as datetime)) Цена6
   |   ,    $ПоследнееЗначение.ТМЦ.Цена7(ТМЦ.id, cast(left(Жур.date_time_iddoc,8) as datetime)) Цена7
   |   ,    $ПоследнееЗначение.ТМЦ.Цена8(ТМЦ.id, cast(left(Жур.date_time_iddoc,8) as datetime)) Цена8
   |   ,    $ПоследнееЗначение.ТМЦ.Цена9(ТМЦ.id, cast(left(Жур.date_time_iddoc,8) as datetime)) Цена9
   |   ,   $ПоследнееЗначение.ТМЦ.Цена_Прих(ТМЦ.id, cast(left(Жур.date_time_iddoc,8) as datetime)) Цена_Прих
   |   ,   $ПоследнееЗначение.ВидыНалогов.Ставка($ТМЦ.СтавкаНДС, cast(left(Жур.date_time_iddoc,8) as datetime)) Ставка
   |   ,   $ОбщийРеквизит.Автор as Автор
   | ,(case $КаналСбыта.КатегорияЦены  
   |      when $Перечисление.ТипыЦен.Категория1 then Coalesce(ДокШ.ТипЦен, $ДокШН.ТипЦен )
   |      when $Перечисление.ТипыЦен.Категория2 then Coalesce(ДокШ.ТипЦен, $ДокШН.ТипЦен )
   |   when $Перечисление.ТипыЦен.Категория3 then Coalesce(ДокШ.ТипЦен, $ДокШН.ТипЦен )
   |      when $Перечисление.ТипыЦен.Категория4 then Coalesce(ДокШ.ТипЦен, $ДокШН.ТипЦен )
   |      when $Перечисление.ТипыЦен.Категория5 then Coalesce(ДокШ.ТипЦен, $ДокШН.ТипЦен )
   |      when $Перечисление.ТипыЦен.Категория6 then Coalesce(ДокШ.ТипЦен, $ДокШН.ТипЦен )
   |      when $Перечисление.ТипыЦен.Категория7 then Coalesce(ДокШ.ТипЦен, $ДокШН.ТипЦен )
   |      when $Перечисление.ТипыЦен.Категория8 then Coalesce(ДокШ.ТипЦен, $ДокШН.ТипЦен )
   |  ELSE Coalesce(ДокШ.ТипЦен, $ДокШН.ТипЦен)  END)   КатегорияЦены
   |   FROM _1SJourn as Жур (nolock)
   |   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 $Справочник.Доставка Доставка (nolock) on Доставка.id = isnull($ДокШ.Доставка, $ДокШН.Доставка)
   |   left join $Справочник.КаналыСбыта КаналСбыта (nolock) on КаналСбыта.id = $Доставка.КаналСбытаТТ
   |   WHERE Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
   |     AND Жур.IdDocDef in ($ВидДокумента.РасходнаяНакладная, $ВидДокумента.РасходнаяНакладнаяН)
   |) Данные
   |WHERE Данные.Цена5=0 OR Данные.Цена7=0
   |";      
но это код, выдает:
Invalid column name 'ТипЦен'.
ТипЦен вроде через кейс выбирается...
Чего опять у меня неправильно в тексте запроса?
321 bananan
 
21.03.13
18:21
(319) Счастливого пути.
322 bananan
 
21.03.13
18:24
(320) Как я и думал - выдает ошибку ТбРазом.ТекущийДокумент()
В ТаблицеЗначений ТбРазом - есть поле Документ, а вот ТекущийДокумент() для нее не ведомо... :(
323 bananan
 
21.03.13
18:27
+(322) И еще ко всему прочему для этих запросов НомерСтроки в документе ... короче выдает от 1 до числа количесва возвращенных строк, а не номер строки в документе где ошибка в цене...
324 Mikeware
 
21.03.13
18:40
(323) ога. "само выдает"....
325 bananan
 
22.03.13
11:40
Доброе утро, всем! что может быть что кусор и "апревращается" в лупу, а когда кликаешь на документе в колонках слышен бип, но документ не открывается...?
326 Ёпрст
 
22.03.13
11:46
Чего написано в ячейке ?
Тип ячейки какой хоть, Выражение ?
327 bananan
 
22.03.13
11:49
В ячейке написал: ТбРазом.Документ
ТбРазом.Документ это поле из Таблицы значений,
текст запроса такой:
|SELECT
   |    Данные.IDDoc as [Документ $Документ]
   |,   Данные.IdDocDef as Документ_вид
   |,   Данные.ТМЦ as [ТМЦ $Справочник.ТМЦ]
   |,   Данные.lineno_ as НомерСтроки_
   |,   Данные.Автор as [Автор $Справочник.Сотрудники]
   |,   'має ціну нижчу за прихідну' as Ошибка
   |from (
   |   SELECT
   |       Жур.IDDoc as IDDoc
   |   ,   Жур.IdDocDef as IdDocDef
   |   ,   isnull($ДокС.ТМЦ, $ДокН.ТМЦ) as ТМЦ
   |   ,   isnull(ДокС.lineno_, ДокН.lineno_) lineno_
   |   ,   isnull($ДокС.Кво*$ДокС.Коэффициент, $ДокН.Кво*$ДокН.Коэффициент) Количество
   |   ,   isnull($ДокС.СуммаСНДС, $ДокН.СуммаСНДС) СуммаСНДС
   |   ,   $ПоследнееЗначение.ТМЦ.Цена_Прих(ТМЦ.id, cast(left(Жур.date_time_iddoc,8) as datetime)) Цена_Прих
   |   ,   $ПоследнееЗначение.ВидыНалогов.Ставка($ТМЦ.СтавкаНДС, cast(left(Жур.date_time_iddoc,8) as datetime)) Ставка
   |   ,   $ОбщийРеквизит.Автор as Автор
   |   FROM _1SJourn as Жур (nolock)
   |   Left join $ДокументСтроки.РасходнаяНакладная as ДокС (nolock) on ДокС.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладная
   |   Left join $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock) on ДокН.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладнаяН
   |   left join $Справочник.ТМЦ ТМЦ (nolock) on ТМЦ.id = isnull($ДокС.ТМЦ, $ДокН.ТМЦ)
   |   WHERE Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
   |     AND Жур.IdDocDef in ($ВидДокумента.РасходнаяНакладная, $ВидДокумента.РасходнаяНакладнаяН)
   |) Данные
   |WHERE ROUND(case when Данные.Количество = 0 then 0 else Данные.СуммаСНДС / Данные.Количество end, 2) < ROUND(Данные.Цена_Прих * (1+Данные.Ставка),2)
   |";
328 Wobland
 
22.03.13
11:50
и как тебе по-твоему платформа представляет расшифровку (вывод) ТЗ?
329 Ёпрст
 
22.03.13
11:51
(327) покажи вывод Талицы
330 bananan
 
22.03.13
11:51
+(327) Все, этот вопрос снят (у меня была неправильная расшифровка)...
331 Ёпрст
 
22.03.13
11:51
Таблицы
332 Wobland
 
22.03.13
11:52
(330) запомнил слово?
333 bananan
 
22.03.13
11:54
(332) Абизательна!
А вот здесь уж не пойму...
В таблицу вывожу ТбРазом.НомерСтроки (расшифровка такая же)
Когда смотрю таблицу значений там в поле НомерСтроки стоят правильные номера, а в экранную таблицу выводятся 1
2
3
.. и т.д.
Здесь что может быть?
334 Wobland
 
22.03.13
11:55
неправильное/неожиданное формирование экранной таблицы это может быть
335 Ёпрст
 
22.03.13
11:57
нам отсюда не виден код вывода ТЗ в макет
336 Wobland
 
22.03.13
11:57
+(335) так что на этом этапе ответ один
337 bananan
 
22.03.13
11:58
(334, 335) И этот вопрос снят... Опять сработала моя невнимательность, в запросе поле называется НомерСтроки_ а в ячейке я написал НомерСтроки, после исправления - все работает нормально...
338 Wobland
 
22.03.13
11:59
знаешь, почему я относительно редко ветки на мисте создаю? потому что предварительно ищу ответ сам
339 bananan
 
22.03.13
12:01
+Ну и все же буду БЛАГОДАРЕН если мне кто-то поможет с третьим запросом (он то работает), но показывает там он совсем не то что должен показывать...
Текст третьего запроса сейчас такой:
   |SELECT
   |    IDDoc [Документ $Документ]
   |    ,IdDocDef Документ_вид      
   |   ,ТМЦ   [ТМЦ $Справочник.ТМЦ]
   |   ,lineno_ НомерСтроки_
   |    ,Автор [Автор $Справочник.Сотрудники]
   |   ,'має дуже малу ціну' as Ошибка
   |FROM (
   |SELECT
   |  Запрос.*
   |  ,cast((SELECT TOP 1 История.Value FROM _1SCONST История(NOLOCK) WHERE История.OBJID=Запрос.ТМЦ AND История.ID=Запрос.ИдентификаторИсторииЦены AND История.DATE<=Запрос.ДатаДок ORDER BY История.DATE DESC) as numeric(10,2)) МинЦена
   |FROM  
   |(
   |   SELECT
   |       Жур.IDDoc as IDDoc
   |   ,   Жур.IdDocDef as IdDocDef
   |   ,   isnull($ДокС.ТМЦ, $ДокН.ТМЦ) as ТМЦ
   |   ,   isnull(ДокС.lineno_, ДокН.lineno_) lineno_
   |   ,   isnull($ДокС.Кво*$ДокС.Коэффициент, $ДокН.Кво*$ДокН.Коэффициент) Количество
   |   ,   isnull($ДокС.СуммаСНДС, $ДокН.СуммаСНДС) СуммаСНДС                        
   |   ,   isnull($ДокШН.Доставка, $ДокШ.Доставка) as Доставка
   |   ,   isnull($ДокШ.ТипЦен, $ДокШН.ТипЦен) ТипЦен        
   |   ,   $Доставка.КаналСбытаТТ as КаналСбыта
   |   ,   $КаналСбыта.КатегорияЦены as КатегорияЦены
   |   ,cast(left(Жур.date_time_iddoc,8) as datetime)  ДатаДок
   |   ,   $ПоследнееЗначение.ТМЦ.Цена_Прих(ТМЦ.id, cast(left(Жур.date_time_iddoc,8) as datetime)) Цена_Прих
   |   ,   $ОбщийРеквизит.Автор as Автор
   |   ,   case $КаналСбыта.КатегорияЦены  
   |          when $Перечисление.ТипыЦен.Категория1 then $ИсторияРеквизита.ТМЦ.Цена1
   |          when $Перечисление.ТипыЦен.Категория2 then $ИсторияРеквизита.ТМЦ.Цена2
   |          when $Перечисление.ТипыЦен.Категория3 then $ИсторияРеквизита.ТМЦ.Цена3
   |       when $Перечисление.ТипыЦен.Категория4 then $ИсторияРеквизита.ТМЦ.Цена4
   |       when $Перечисление.ТипыЦен.Категория5 then $ИсторияРеквизита.ТМЦ.Цена5
   |       when $Перечисление.ТипыЦен.Категория6 then $ИсторияРеквизита.ТМЦ.Цена6
   |       when $Перечисление.ТипыЦен.Категория7 then $ИсторияРеквизита.ТМЦ.Цена7
   |       when $Перечисление.ТипыЦен.Категория8 then $ИсторияРеквизита.ТМЦ.Цена8
   |       when $Перечисление.ТипыЦен.Категория9 then $ИсторияРеквизита.ТМЦ.Цена9
   |       ELSE '    ' END ИдентификаторИсторииЦены
   |   FROM _1SJourn as Жур (nolock)
   |   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 $Справочник.Доставка Доставка (nolock) on Доставка.id = isnull($ДокШ.Доставка, $ДокШН.Доставка)
   |   left join $Справочник.КаналыСбыта КаналСбыта (nolock) on КаналСбыта.id = $Доставка.КаналСбытаТТ
   |   WHERE Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
   |     AND Жур.IdDocDef in ($ВидДокумента.РасходнаяНакладная, $ВидДокумента.РасходнаяНакладнаяН)
   |   ) Запрос
   |) Запрос WHERE ROUND(case when Запрос.Количество = 0 then 0 else Запрос.СуммаСНДС / Запрос.Количество end, 2)<Запрос.МинЦена
   |";
Запрос же должен выбирать документы у которых...
вот код из оригинала:
минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));
Если Метаданные.Справочник("ТМЦ").Реквизит("Цена"+Число(Прав(кат.Идентификатор(),1))).Периодический=1 Тогда
           минцена=минцена.Получить(Конт.ДатаДок);
       КонецЕсли;
       минцена=минцена*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок));    минцена=Окр(минцена*(1-Конт.Доставка.КаналСбытаТТ.ДопустимаяСкидка/100),2);
       Если докцена<минцена Тогда
           ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
           Сообщить(""+Конт.номерСтроки+"."+Конт.ТМЦ+" имеет недопустимо низкую цену="+докцена+" минимальная="+минцена);
       КонецЕсли;
340 Mikeware
 
22.03.13
12:01
+(338) а порой при формулировании вопроса ответ получается почти автоматически. ибо "правильно сформулированный вопрос содержит половину правильного ответа"© :-)
341 Wobland
 
22.03.13
12:02
(340) неоднократно обрывал написание 0го поста по этой причине ;)
342 Wobland
 
22.03.13
12:04
а слово ЮНИОН уже говорили, не? что-то у него 3 ТЗ появилось..
343 bananan
 
22.03.13
12:07
(349) Знаю, я с этим не раз сталкивался... У меня часто бывало, напишу вопрос и сразу же ответ как бы сам по себе приходит в голову..
Мой вопрос некорректно сформирован?
Лан Полный код "оригинального" скрипта:
   прихцена=Окр(Конт.ТМЦ.Цена_Прих.Получить(Конт.ДатаДок)*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок)),2);
   докцена=Окр(?(Конт.Кво*Конт.Коэффициент=0,0,Конт.СуммаСНДС/(Конт.Кво*Конт.Коэффициент)),2);
   Если докцена<прихцена Тогда
       ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
       Сообщить(""+Конт.номерСтроки+"."+Конт.ТМЦ+" имеет цену ниже приходной");
   КонецЕсли;
   кат=Конт.Доставка.КаналСбытаТТ.КатегорияЦены;
   Если кат.Выбран()=1 Тогда
       минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));
       Если Метаданные.Справочник("ТМЦ").Реквизит("Цена"+Число(Прав(кат.Идентификатор(),1))).Периодический=1 Тогда
           минцена=минцена.Получить(Конт.ДатаДок);
       КонецЕсли;
       минцена=минцена*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок));
       Если минцена=0 Тогда
           ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
           Сообщить(""+Конт.номерСтроки+"."+Конт.ТМЦ+" не установлена цена категории "+кат);
       КонецЕсли;
       минцена=Окр(минцена*(1-Конт.Доставка.КаналСбытаТТ.ДопустимаяСкидка/100),2);
       Если докцена<минцена Тогда
           ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
           Сообщить(""+Конт.номерСтроки+"."+Конт.ТМЦ+" имеет недопустимо низкую цену="+докцена+" минимальная="+минцена);
       КонецЕсли;
Надо написать (дописать) запрос на условие докцена<минцена
344 Mikeware
 
22.03.13
12:09
(343) все достаточно подробно разобрано в прошлой ветке.
345 bananan
 
22.03.13
12:13
(344) Что-то не помню, но сейчас посмотрю прощлую ветку...
Насколько я понимаю сейчас в запросе у меня есть
Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));
да и
минцена.Получить(Конт.ДатаДок);
тоже вроде есть...
Значит теперь надо выбрать
Окр(минцена*(1-Конт.Доставка.КаналСбытаТТ.ДопустимаяСкидка/100),2);
? Так или нет?
346 bananan
 
22.03.13
12:34
Mikeware, я правильно думаю?
347 bananan
 
22.03.13
12:51
Есть кто живой здесь?
348 DrZombi
 
гуру
22.03.13
12:51
(347) Ты еще на работе? Тебе до скольки дали времени?
349 bananan
 
22.03.13
12:52
(348) Как видишь, я еще на работе, до сдачи в работу еще час или полтора
350 Wobland
 
22.03.13
12:53
аа, сегодня же День Ч. болеем, переживаем
351 bananan
 
22.03.13
13:02
(350) Спасибо за поддержку, а может кроме как болеть чем нибудь более практичным поможете?
352 Wobland
 
22.03.13
13:04
лично я давно не стремлюсь понять всю затею целиком
353 Privalov
 
22.03.13
13:07
Мля, это еще продолжается... Санта-Бар..Бананан какой-то  ))))
354 Mikeware
 
22.03.13
13:07
(352) да в принципе, там ничего особо сложного. немного по-идиотски построены данные. разобрали в прошлой или позапрошлой ветке...
355 Mikeware
 
22.03.13
13:09
(353)"эта музыка будет вечной, если я заменю батарейки..."©
356 Privalov
 
22.03.13
13:09
(355) :-))
357 Wobland
 
22.03.13
13:22
(355) скоро работодатель батарейку себе сменит ;)
358 sapphire
 
22.03.13
13:26
(342) Я вчера со страхом упоминал.
359 sapphire
 
22.03.13
13:26
(355) Даже интересно уже.
360 Ёпрст
 
22.03.13
13:43
ээх.. еще пару часов и бананан превратится в тыкву.

ЗЫ: Аутор - покажи работодателю все свои ветки на этом форуме - пустиь смотрит, как ты старался, мот того.. премию дадут!
361 Mikeware
 
22.03.13
13:47
(360) "еще пару часов и бананан превратится ОБРАТНО в тыкву." :-)
362 sapphire
 
22.03.13
13:50
Автор, наверное уже на случке с руководством. Заслуживает. :)
363 Wobland
 
22.03.13
13:52
вазелином в деканате я рисую слово "хватит"
364 bananan
 
22.03.13
14:01
(363) Взелином обычно в другом месте рисуют, но раз у Вас такой деканат - рисуйте там.
Перечитал я прошлую и позапрошлую ветки, не нашел я там о минцена=Окр(минцена*(1-Конт.Доставка.КаналСбытаТТ.ДопустимаяСкидка/100),2);
365 sapphire
 
22.03.13
14:12
(364) Ну не нашел и не нашел. Чё дальше-то?
Не знаешь как получить скидку для канала сбыта?
366 bananan
 
22.03.13
14:33
(365) Уже знаю :
|   ,    $КаналСбыта.ДопустимаяСкидка as Скидка
367 bananan
 
22.03.13
14:34
+(366) Сейчас это надо засунуть куда надо и вроде как все..
368 Wobland
 
22.03.13
14:35
поручик, молчать!
369 bananan
 
22.03.13
14:43
(368) полный текст 3-го запроса:
SELECT
   |    IDDoc [Документ $Документ]
   |    ,IdDocDef Документ_вид      
   |   ,ТМЦ   [ТМЦ $Справочник.ТМЦ]
   |   ,lineno_ НомерСтроки_
   |    ,Автор [Автор $Справочник.Сотрудники]
   |   ,'має дуже малу ціну' as Ошибка
   |FROM (
   |SELECT
   |  Запрос.*
   |  ,cast((SELECT TOP 1 История.Value FROM _1SCONST История(NOLOCK) WHERE История.OBJID=Запрос.ТМЦ AND История.ID=Запрос.ИдентификаторИсторииЦены AND История.DATE<=Запрос.ДатаДок ORDER BY История.DATE DESC) as numeric(10,2)) МинЦена
   |FROM  
   |(
   |   SELECT
   |       Жур.IDDoc as IDDoc
   |   ,   Жур.IdDocDef as IdDocDef
   |   ,   isnull($ДокС.ТМЦ, $ДокН.ТМЦ) as ТМЦ
   |   ,   isnull(ДокС.lineno_, ДокН.lineno_) lineno_
   |   ,   isnull($ДокС.Кво*$ДокС.Коэффициент, $ДокН.Кво*$ДокН.Коэффициент) Количество
   |   ,   isnull($ДокС.СуммаСНДС, $ДокН.СуммаСНДС) СуммаСНДС                        
   |   ,   isnull($ДокШН.Доставка, $ДокШ.Доставка) as Доставка
   |   ,   isnull($ДокШ.ТипЦен, $ДокШН.ТипЦен) ТипЦен        
   |   ,   $Доставка.КаналСбытаТТ as КаналСбыта
   |   ,   $КаналСбыта.КатегорияЦены as КатегорияЦены  
   |   ,    $КаналСбыта.ДопустимаяСкидка as Скидка
   |   ,cast(left(Жур.date_time_iddoc,8) as datetime)  ДатаДок
   |   ,   $ПоследнееЗначение.ТМЦ.Цена_Прих(ТМЦ.id, cast(left(Жур.date_time_iddoc,8) as datetime)) Цена_Прих
   |   ,   $ОбщийРеквизит.Автор as Автор
   |   ,   case $КаналСбыта.КатегорияЦены  
   |          when $Перечисление.ТипыЦен.Категория1 then $ИсторияРеквизита.ТМЦ.Цена1
   |          when $Перечисление.ТипыЦен.Категория2 then $ИсторияРеквизита.ТМЦ.Цена2
   |          when $Перечисление.ТипыЦен.Категория3 then $ИсторияРеквизита.ТМЦ.Цена3
   |       when $Перечисление.ТипыЦен.Категория4 then $ИсторияРеквизита.ТМЦ.Цена4
   |       when $Перечисление.ТипыЦен.Категория5 then $ИсторияРеквизита.ТМЦ.Цена5
   |       when $Перечисление.ТипыЦен.Категория6 then $ИсторияРеквизита.ТМЦ.Цена6
   |       when $Перечисление.ТипыЦен.Категория7 then $ИсторияРеквизита.ТМЦ.Цена7
   |       when $Перечисление.ТипыЦен.Категория8 then $ИсторияРеквизита.ТМЦ.Цена8
   |       when $Перечисление.ТипыЦен.Категория9 then $ИсторияРеквизита.ТМЦ.Цена9
   |       ELSE '    ' END ИдентификаторИсторииЦены
   |   FROM _1SJourn as Жур (nolock)
   |   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 $Справочник.Доставка Доставка (nolock) on Доставка.id = isnull($ДокШ.Доставка, $ДокШН.Доставка)
   |   left join $Справочник.КаналыСбыта КаналСбыта (nolock) on КаналСбыта.id = $Доставка.КаналСбытаТТ
   |   WHERE Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
   |     AND Жур.IdDocDef in ($ВидДокумента.РасходнаяНакладная, $ВидДокумента.РасходнаяНакладнаяН)
   |   ) Запрос
   |) Запрос WHERE ROUND(case when Запрос.Количество = 0 then 0 else Запрос.СуммаСНДС / Запрос.Количество end, 2)<ROUND(Запрос.МинЦена*(1-Запрос.Скидка/100),2)
   |";  
Тут еще немного надо поправить "поле" ошибка и все!
370 sapphire
 
22.03.13
14:46
(368) Ты не находишь несколько странным развитие событий?
371 Wobland
 
22.03.13
14:48
(370) не.. а что не так?
372 sapphire
 
22.03.13
14:48
(371) Дюже быстро он сообразил.
373 Wobland
 
22.03.13
14:50
из (364) в (367)? хм.. мож, его уже заменили?
374 bananan
 
22.03.13
14:50
(372) Упс... Поправил поле Ошибка:
|   ,'має дуже малу ціну='+Запрос.СуммаСНДС / Запрос.Количество+' мінімальна='+ROUND(Запрос.МинЦена*(1-Запрос.Скидка/100),2) as Ошибка
Ругается:
Error converting data type varchar to numeric.
Чего он хочет?
375 Wobland
 
22.03.13
14:50
(373) поправка: в (366)
376 bananan
 
22.03.13
14:50
(373) Ищо не заменили :)
377 Wobland
 
22.03.13
14:50
(374) он не хочет с разными типами в одном поле работать
378 Wobland
 
22.03.13
14:52
пинг
379 Wobland
 
22.03.13
14:52
по сути ты хочешь иметь в этом поле то, что нормальные люди делают после запроса
380 sapphire
 
22.03.13
14:53
(374) Error converting data type varchar to numeric.
Error Ошибка
converting преобразования
data type тип данных
varchar строка переменной длины
to к
numeric число
381 bananan
 
22.03.13
14:53
(377) и как его заставить работать с разными типаи? Приведение типов? Если привидление типов - то как это в SQL делается - я не знаю :(
382 Wobland
 
22.03.13
14:53
(381) никак. не нужно его насильничать
383 bananan
 
22.03.13
14:54
(380) А как это "обойти"?
384 sapphire
 
22.03.13
14:54
,'має дуже малу ціну='+cast(Запрос.СуммаСНДС / Запрос.Количество+' мінімальна='+ROUND(Запрос.МинЦена*(1-Запрос.Скидка/100),2) as varchar(255)) Ошибка
385 bananan
 
22.03.13
14:54
(382) Да мне и не хочется его насильничать, но так поставлена задача...
386 sapphire
 
22.03.13
14:55
+(384) Выражение в cast взять в скобки
,'має дуже малу ціну='+cast((Запрос.СуммаСНДС / Запрос.Количество+' мінімальна='+ROUND(Запрос.МинЦена*(1-Запрос.Скидка/100),2)) as varchar(255)) Ошибка
387 bananan
 
22.03.13
14:56
(384) Написал как ты показал, но...
Error converting data type varchar to numeric.
388 Wobland
 
22.03.13
14:56
(385) врёшь
389 Wobland
 
22.03.13
14:57
+(388) так интерпретирована задача
390 bananan
 
22.03.13
14:58
(386) написал так:
|    ,'має дуже малу ціну='+cast((Запрос.СуммаСНДС / Запрос.Количество+' мінімальна='+ROUND(Запрос.МинЦена*(1-Запрос.Скидка/100),2)) as varchar(255)) Ошибка
а воз и ныне там:
Error converting data type varchar to numeric.
391 sapphire
 
22.03.13
14:59
тю, там он еще строку вставил.. от же пидлюка..
392 bananan
 
22.03.13
14:59
(389) Задачу я не интерпретировал в "ориганальном" коде:
Сообщить(""+Конт.номерСтроки+"."+Конт.ТМЦ+" имеет недопустимо низкую цену="+докцена+" минимальная="+минцена);
393 Wobland
 
22.03.13
14:59
(391) при копипасте соринка попала ;)
394 bananan
 
22.03.13
14:59
(391) И чего делать??
395 Wobland
 
22.03.13
15:00
(392) дай оригинальную постановку задачи и не спорь с бородатыми
396 trad
 
22.03.13
15:00
(388) не, не врет
|   ,'має дуже малу ціну='+cast(Запрос.СуммаСНДС / Запрос.Количество as varchar(255))+' мінімальна='+cast(ROUND(Запрос.МинЦена*(1-Запрос.Скидка/100),2) as varchar(255)) as Ошибка
397 sapphire
 
22.03.13
15:00
,'має дуже малу ціну='
+cast((Запрос.СуммаСНДС / Запрос.Количество) as varchar(255))
+' мінімальна='
+cast(ROUND(Запрос.МинЦена*(1-Запрос.Скидка/100),2)) as varchar(255))
398 sapphire
 
22.03.13
15:00
(394) Долбобействовать дальше
399 Ёпрст
 
22.03.13
15:01
(397) не красиво, надо бы еще alltrim хотя бы
400 sapphire
 
22.03.13
15:01
скобок лишних убрал
,'має дуже малу ціну='
+cast((Запрос.СуммаСНДС / Запрос.Количество) as varchar(255))
+' мінімальна='
+cast(ROUND(Запрос.МинЦена*(1-Запрос.Скидка/100),2) as varchar(255))
401 sapphire
 
22.03.13
15:02
(399) Зачем? там varchar
402 bananan
 
22.03.13
15:02
(397) Так:
|    ,'має дуже малу ціну='+cast((Запрос.СуммаСНДС / Запрос.Количество) as varchar(255))+' мінімальна='
   |        +cast(ROUND(Запрос.МинЦена*(1-Запрос.Скидка/100),2)) as varchar(255)) as Ошибка
выдает:
Incorrect syntax near 'cast', expected 'AS'
403 bananan
 
22.03.13
15:05
+(402) Написал как ты и посоветовал... работает, но...
Как мне ему указать чтобы в цене он показывал только 2 цифры после запятой (в дробной части)?
404 Ёпрст
 
22.03.13
15:06
(401)точна
405 Ёпрст
 
22.03.13
15:07
(42) тот же раунд воткнуть
406 sapphire
 
22.03.13
15:07
(403) Как округлить цену со скидкой так ты догадался...
Странно, вы как хотите, мне странно (с)
407 bananan
 
22.03.13
15:09
(405) но там ведь уже есть раунд...
408 bananan
 
22.03.13
15:09
(406) он мне выдает:
має дуже малу ціну=23.8500000000000000000000 мінімальна=24.67000000
409 trad
 
22.03.13
15:10
(405) round не поможет, будет типа 12.340000
можно, например, типизировать через numeric(15,2)
410 trad
 
22.03.13
15:11
+(409)
|   ,'має дуже малу ціну='+cast(cast(Запрос.СуммаСНДС / Запрос.Количество  as numeric(15,2)) as varchar(15))+' мінімальна='+cast(cast(ROUND(Запрос.МинЦена*(1-Запрос.Скидка/100),2)  as numeric(15,2)) as varchar(15)) as Ошибка
411 bananan
 
22.03.13
15:11
(409) Ранд таки не помог а как типизировать? :(
412 bananan
 
22.03.13
15:12
(410) СПасибо
413 bananan
 
22.03.13
15:13
Всем ОГРОМНОЕ спасибо, все работает вроде как и надо :)
414 sapphire
 
22.03.13
15:14
,'має дуже малу ціну='+cast(cast((Запрос.СуммаСНДС / Запрос.Количество) as numeric(10,2)) as varchar(255))+' мінімальна='
  |        +cast(cast(ROUND(Запрос.МинЦена*(1-Запрос.Скидка/100),2)) as numeric(10,2)) as varchar(255)) as Ошибка
415 sapphire
 
22.03.13
15:14
(410) :)
416 bananan
 
22.03.13
15:16
(414) А зачем раунд во второй части?
Написали без раунда - показывает как и хотелось..
417 sapphire
 
22.03.13
15:17
(416) round округляет, а cast тупо отбрасывает кусок мантиссы.
418 bananan
 
22.03.13
15:19
(417) Ясно, но все же раунд там не нужен, у цены и так два знака в дробной части...
419 trad
 
22.03.13
15:20
(416) можно и без round т.к. cast в данном случае округляет
420 Ёпрст
 
11.04.13
14:30
продолжаем..

>>>(990) А что такое t1?

Это абстрактный пример для таблички с 2-мя полями - клиентосом и товаром и списком с товаром.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.