Переключение на Главную Страницу Страницы: 1 ... 39 40 [41] 42 43 ... 51 ОтправитьПечать
Очень популярная тема (более 25 ответов) Класс "ПрямойЗапрос" - обсуждения. Часть № 2. (число прочтений - 245522 )
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #600 - 23. Октября 2013 :: 06:37
Печать  
подскажите, пж. есть такой запрос:
          "ВЫБРАТЬ
           |      ЗП.Контрагент      КАК [Контрагент      :Справочник.Контрагенты],
           |      ЗП.Сотрудник      КАК [Сотрудник            :Справочник.ФизЛица],
           |      ЗП.ВидСтавкиЗП      КАК [ВидСтавкиЗП      :Перечисление._ВидыСтавокЗПОтПродаж],
           |      ЗП.ТОПМенеджер      КАК [ТОПМенеджер      :Справочник.ФизЛица],
           |
           |      ВЫБОР
           |            КОГДА ЗП.ТОПМенеджер = :ПустойИД
           |                  ТОГДА 0
           |            ИНАЧЕ 1
           |      КОНЕЦ                  КАК ЭтоТОПМенеджер,
           |
           |      ЗП.СуммаПродажиОстаток            КАК [СуммаПродажи :Число.15.2],
           |      ЗП.СуммаЗПОтПродажиОстаток      КАК [СуммаЗП :Число.15.2]
           |
           |ИЗ
           |      $РегистрОстатки.ЗарплатаОтПродаж(:Документ,
           |                  Контрагент В (ВЫБРАТЬ val ИЗ #СписокКонтрагентов),
           |                  (Контрагент,Сотрудник,ВидСтавкиЗП,ТОПМенеджер), (СуммаПродажи,СуммаЗПОтПродажи)) КАК ЗП
           |
           |ГДЕ
           |      ВЫРАЗИТЬ(ЗП.СуммаПродажиОстаток КАК NUMERIC(15,2)) <> 0
           |";

хочется откинуть СуммаПродажиОстаток = 0. если использую ROUND, то все гуд, а если CAST, то условие не отрабатывает. я как понимаю ROUND округляет, а типизация [Сумма :Число.15.2] просто откидывает лишнее (опасаюсь, что при условии с ROUND в результате Сумма будет = 0, т.к. при проверке округлится до 0.01). или я не прав и можно смело использовать ROUND? или как правильно написать условие с CAST? совсем уж не хочется при обходе результата проверять на равенство нулю Улыбка
База: DBF
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #601 - 02. Ноября 2013 :: 11:15
Печать  
вдруг кому надо будет. пока решил так:
ГДЕ
ЗП.СуммаПродажиОстаток <= -0.01 ИЛИ ЗП.СуммаПродажиОстаток >= 0.01
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 58
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #602 - 12. Ноября 2013 :: 15:43
Печать  
Помогите побороть Параметризованные запросы

Есть процедура, в которой создается запрос и выполняется ПодготовитьПараметризованныйЗапрос.
Код
Выбрать все
оПЗ = СоздатьОбъект("ПрямойЗапрос");
	оПЗ.РежимОтладки=1;
	оПЗ.Текст="ВЫБРАТЬ
	|	ООО.НачалоПериода КАК [НачДата $Дата]
	|,	ООО.Счет КАК [Счет $Счет.Основной]
	|,	ООО.Субконто1 КАК [Товары $Субконто]
	|,	ООО.Субконто1_вид КАК Товары_вид
	|,	ООО.Субконто2 КАК [Склады $Субконто]
	|,	ООО.Субконто2_вид КАК Склады_вид
	|,	ООО.СуммаКонечныйОстатокДт
	|,	ООО.КоличествоКонечныйОстатокДт
	|ИЗ
	|	$БИОстаткиОбороты.Основной(:НачПериода,:КонПериода,ДЕНЬ ДОПОЛНЕНИЕ,,#Счет217,(Субконто1,Субконто2),(Сумма,Количество),((Субконто1 =@Товар) И (Субконто2 =:Склад))) КАК ООО
	|	";

	оПЗ.УстановитьТекстовыйПараметр("НачПериода",НачДата);
	оПЗ.УстановитьТекстовыйПараметр("КонПериода",КонДата);
	спСчет217=СоздатьОбъект("СписокЗначений");
	спСчет217.ДобавитьЗначение(СчетПоКоду("217.1"));
	оПЗ.УложитьСписокЗначений(спСчет217,"#Счет217");
	оПЗ.УстановитьТекстовыйПараметр("Склад",ВернутьПоКоду("Склады","1"));

	оПЗ.ОписаниеПараметра("Товар","Справочник.Товары");
	оПЗ.ПодготовитьПараметризованныйЗапрос();
 



Далее в цикле должна вызываться функция, где запрос выполняется с последующей обработкой результата.
Код
Выбрать все
оПЗ.ПодставлятьПараметры("Товар",ТМЦ);

	итзРезультат = оПЗ.ВыполнитьПараметризованныйЗапрос();
	итзРезультат.Показать();
 



но в результате получаю ошибку
Время подготовки запроса: 310 мс.
ПрямойЗапрос::ВыполнитьПараметризованныйЗапрос(Строка ТипОбъекта=ИндексированнаяТаблица) : Неверный номер параметра
метра.Модификатор);
\SystemData\Classes\ПрямыеЗапросы\ПрямойЗапрос.ert(13486) }

итзРезультат = оПЗ.ВыполнитьПараметризованныйЗапрос();
{D:\ARTEM\1C\V7\BASES\ERT\ПОДБОРТОВАРАВДОКУМЕНТ_ПРЯМОЙЗАПРОС.ERT(64)}: ПрямойЗапрос::ВыполнитьПараметризованныйЗапрос(Строка ТипОбъекта=ИндексированнаяТаблица) : Неверный номер параметра
метра.Модификатор);
\SystemData\Classes\ПрямыеЗапросы\ПрямойЗапрос.ert(13486) }
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 58
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #603 - 13. Ноября 2013 :: 13:18
Печать  
Почему
Код
Выбрать все
нто2),(Сумма,Количество),((Субконто1 =:Товар) И (Субконто2 =:Склад))) КАК ООО";
 


Выдает только одну строчку со значениями равными остаткам на начало периода? ОСВ по счету показывает, что за заданный период были и обороты и остатки на конец периода совсем другие?

Содержимое режима отладки прилагается

Версия класса: 1.8.6
  

_____________005.txt ( 12 KB | Загрузки )
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 58
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #604 - 14. Ноября 2013 :: 09:45
Печать  
C предыдущими вопросами разобрался. Было не правильное количество запятых в $БИОстаткиОбороты Улыбка

Но нужна ваша помощь в решении задачи.
Нужно чтоб в результирующую таблицу попали строки для которых количество остатка товара на конец периода (КоличествоКонечныйОстатокДт) был бы минимальным. Мне нужно узнать дату, на которую остаток товара был минимальным.
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 58
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #605 - 21. Ноября 2013 :: 10:41
Печать  
и все таки меня мучает вопрос по работе с виртуальными таблицами бух. итогов.

Код
Выбрать все
оПЗ.Текст="ВЫБРАТЬ
	//|	ООО.НачалоПериода КАК [НачДата $Дата]
	|	ООО.ТекущийДокумент КАК [Док $Документ]
	|,	ООО.ВидДокумента КАК Док_вид
	|,	ООО.Счет КАК [Счет $Счет.Основной]
	|,	ООО.Субконто1 КАК [Товары $Субконто]
	|,	ООО.Субконто1_вид КАК Товары_вид
	|,	ООО.Субконто2 КАК [Склады $Субконто]
	|,	ООО.Субконто2_вид КАК Склады_вид
	|,	(ООО.КоличествоКонечныйОстатокДт) КАК [МинКолОст $Число]
	|,	(ООО.КоличествоКонечныйОстатокДт)
	|,	(ООО.КоличествоНачальныйОстатокДт) КАК [МинКолНач $Число]
	|,	(ООО.СуммаКонечныйОстатокДт)
	|
	|ИЗ
	|	1,Субконто2),(Сумма,Количество),(СРЕД(Субконто1,3,6) В (ВЫБРАТЬ СРЕД(val,3,6) ИЗ #Товары) И (СРЕД(Субконто2,3,6)=СРЕД(:Склад,3,6))),) КАК ООО";
 



Возвращает совсем неожиданный результат.
Сначала идут расходные документы (причем за весь период) а затем приходные Печаль

можно ли как-то это исправить?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #606 - 21. Ноября 2013 :: 11:47
Печать  
ну посортируй результат по позиции дока в запросе.
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 58
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #607 - 21. Ноября 2013 :: 12:46
Печать  
А по умолчанию как запрос сортируется? И как сортировка повлияет на значения ресурсов?
  
Наверх
 
IP записан
 
AntiBuh
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 26
Зарегистрирован: 28. Июля 2009
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #608 - 28. Ноября 2013 :: 05:14
Печать  
Имею запрос:

     |Выбрать
     |      $СпрСкл.КассаМаг                        как [Касса $Справочник.Кассы]
     |,      Сумма(0       )                        как Приход
     |,      Сумма($ПКО.Сумма)                  как Расход
     |,      $ПКО.ТекущийДокумент      как [Док $Документ.ПКО]
     |Из
     |      Документ.ПКО как ПКО $nolock
     |Внутреннее Соединение
     |      ЖурналДокументов как Ж  по $ПКО.ТекущийДокумент = $Ж.ТекущийДокумент
     |Левое Соединение
     |      Справочник.Склады Как СпрСкл $nolock
     |      ПО $СпрСкл.ТекущийЭлемент = $ПКО.Субконто1
     |Где
     |      ($Ж.ДатаДокумента Между :НачДата и :КонДата~) и ($Ж.Проведен = 1) и ($ПКО.Субконто1 = :тСклад*)


где ПКО.Субконто1 - неопределенный реквизит, может принимать значение типа Справочник.Склад,
Справочник.Склад имеет реквизит Справочник.Кассы

Пытаюсь получить доки с конкретным значением Субконто1
Значения колонки Касса получается пустым
получится ли заполнить ее исходя из таких данных?
если да, поскажите как правильно сделать
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #609 - 28. Ноября 2013 :: 07:17
Печать  
Если субконто неопределенного типа/вида, то нужно от него взять часть с id + желательно с видом справочника и потом уже эту часть соединять со справочником.
  
Наверх
 
IP записан
 
AntiBuh
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 26
Зарегистрирован: 28. Июля 2009
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #610 - 28. Ноября 2013 :: 09:34
Печать  
Eprst писал(а) 28. Ноября 2013 :: 07:17:
Если субконто неопределенного типа/вида, то нужно от него взять часть с id + желательно с видом справочника и потом уже эту часть соединять со справочником.

Ну я примерно догадывался что надо, но как это сделать? Подскажи плз.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #611 - 28. Ноября 2013 :: 10:39
Печать  
ну так пробуй:

on 'B1' + $ВидСправочника36.Склад+СпрСкл.ID =  $ПКО.Субконто1
или так
on СпрСкл.ID  = SUBSTRING($ПКО.Субконто1,7,9)



  
Наверх
 
IP записан
 
AntiBuh
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 26
Зарегистрирован: 28. Июля 2009
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #612 - 28. Ноября 2013 :: 11:48
Печать  
Спасибо! Всё получилось!
вариант 2
  
Наверх
 
IP записан
 
BlueWind
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 13
Местоположение: Тирасполь
Зарегистрирован: 28. Ноября 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #613 - 30. Ноября 2013 :: 02:01
Печать  
Класс ПрямойЗапрос Версия 1.8.6 22.05.2013

При выполнении УложитьТаблицуЗначений() объект MetaDataWork возвращает ошибку "Неправильный формат времени.", когда колонка таблицы значений типа Дата содержит пустые значения.

Строку 13250:

                 ИначеЕсли ВРЕГ(Тип) = "ДАТА" Тогда
                       Значение = "'" + МетаДата.ПолучитьСтрИзДаты(ЗначениеКолонки) + "'";

Просьба в будущем релизе поправить. В своей копии пока написал так (по аналогии с :ПустаяДата):

                 ИначеЕсли ВРЕГ(Тип) = "ДАТА" Тогда
                       Если ЗначениеКолонки = '' Тогда
                             Значение = ?(ЭтоSQL = 1,"'"+СокрЛП(МетаДата.ПолучитьСтрИзДаты(Дата(1753,1,1)))+"'","'        '");
                       Иначе
                             Значение = "'" + МетаДата.ПолучитьСтрИзДаты(ЗначениеКолонки) + "'";
                       КонецЕсли;

  
Наверх
 
IP записан
 
BlueWind
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 13
Местоположение: Тирасполь
Зарегистрирован: 28. Ноября 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #614 - 02. Декабря 2013 :: 23:35
Печать  
Класс ПрямойЗапрос Версия 1.8.6 22.05.2013 Исправление соединений в ВТ $БиОстатки

Добавление в запрос соединений расположено преждевременно. Получается
...FROM
LEFT JOIN...
_1SBKTTL bkttl_vt

Функция БИОстатки_SQL(ВекторВыражения)

Блок в стр. 7186

     Если ПустоеЗначение(Соединения) = 0 Тогда
           ТекстЗапроса = ТекстЗапроса + СтрСоединенияОстатки + "
           |            ";
     КонецЕсли;

Опустить на блок ниже, перед WHERE



  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 39 40 [41] 42 43 ... 51
ОтправитьПечать