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


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #615 - 03. Декабря 2013 :: 12:42
Печать  
Подскажите как работать с временными таблицами? Может пример у кого есть. Например, хочу загнать табличную часть документа во временную таблицу и использовать в виртуальных таблицах.
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #616 - 03. Декабря 2013 :: 13:06
Печать  
как создать разобрался.
остался вопрос про удаление. после запроса "УДАЛИТЬ ИЗ МояТаблица" моя таблица остается, но пустая. Это правильно? А то может я что не так делаю...
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #617 - 03. Декабря 2013 :: 17:47
Печать  
однако правильно СброситьТаблицу...
  
Наверх
 
IP записан
 
BlueWind
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 13
Местоположение: Тирасполь
Зарегистрирован: 28. Ноября 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #618 - 04. Декабря 2013 :: 13:31
Печать  
Asakra писал(а) 03. Декабря 2013 :: 12:42:
Подскажите как работать с временными таблицами? Может пример у кого есть. Например, хочу загнать табличную часть документа во временную таблицу и использовать в виртуальных таблицах.


Если использовать обсуждаемый класс ПрямойЗапрос, то можно использовать его метод УложитьТаблицуЗначений()

     Если КонтекстДокумента.КоличествоСтрок() <> 0 Тогда
           тч = СоздатьОбъект("ТаблицаЗначений");
           КонтекстДокумента.ВыгрузитьТабличнуюЧасть(тч);

           ПрямойЗапрос = СоздатьОбъект("ПрямойЗапрос");
           ПрямойЗапрос.РежимОтладки = 1;
           ПрямойЗапрос.УложитьТаблицуЗначений(тч, "#тч");

           ТекстЗапроса = "
           |ВЫБРАТЬ *
           |
           |ИЗ #тч
           |";

           тз = ПрямойЗапрос.Выполнить("ТаблицаЗначений",ТекстЗапроса);
           тз.ВыбратьСтроку();
     КонецЕсли;


УложитьТаблицуЗначений
Синтаксис: УложитьТаблицуЗначений(ТаблицаЗначений,ИмяТаблицы)
Параметры:
•      ТаблицаЗначений – тип: ТаблицаЗначений. Таблица, загружаемая в базу данных.
•      ИмяТаблицы – идентификатор таблицы создаваемой на сервере. Имя таблицы должно содержать префикс «#» перед идентификатором. Например: #Контрагенты.
Возвращаемое значение: отсутствует
Описание: Загружает таблицу значений в базу данных, как таблицу базы данных.

Если таблица с указанным именем уже существует, она удаляется. Состав полей созданной таблицы соответствует составу колонок ТЗ. Имена полей созданной таблицы соответствуют идентификаторам колонок ТЗ. В качестве указания типов и видов для загрузки используется типизация колонок ТЗ. Так же для загрузки значений с учетом модификаторов используется заголовок. Если в качестве заголовка написать «mod=1» тогда значения будут загружены с учетом модификатора = 1. Подробнее см. Преобразование значений 1С в значения БД.
  
Наверх
 
IP записан
 
BlueWind
YaBB Newbies
*
Отсутствует


1C++ rocks!

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

При добавлении в ВТ БиОбороты условия по виду документа

     ТекстЗапроса = "      
     |ВЫБРАТЬ *
     |ИЗ
     |$БИОбороты.Основной(:НачДата, :КонДата~
     |      ,Документ
     |      ,
     |      ,(Субконто2,Субконто3)
     |      ,
     |      ,
     |      ,(Количество,Сумма)
     |      ,( (0=0)
     |       И (ВидДокумента В (:ВидыДокументов)
     |      )
     |";

парсер съедает слово "ВидДокумента", и в подготовленном тексте запроса условие выглядит как:

     AND (( (0=0)
     AND ( IN (7761) )
     ))

Исправление: Функция ПодготовитьУсловиеПоБухИтогам
В блок ИначеЕсли в стр. 820
           ИначеЕсли ВрегКлючевоеСлово = "ВИДДОКУМЕНТА" Тогда
                 УсловиеЖурналДокументов = УсловиеЖурналДокументов + "journ.IDDOCDEF";

Добавить строку:
                 УсловиеПроводки = УсловиеПроводки + "docjourn.IDDOCDEF"; //[+]sv 091213

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


1C++ rocks!

Сообщений: 41
Местоположение: UA
Зарегистрирован: 23. Сентября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #620 - 24. Декабря 2013 :: 09:58
Печать  
Здравствуйте.Пробую осилить класс ПрямойЗапрос.Хочеться сделать запрос к проводкам (для акта сверки), но пока успехов мало.Вот текст запроса:

Код
Выбрать все
	оПЗ = СоздатьОбъект("ПрямойЗапрос");
	оПЗ.РежимОтладки=3;
	оПЗ.Текст="ВЫБРАТЬ
	|	$Пров.ТекущийДокумент КАК [ТекущийДокумент $Документ]
	|,	$Пров.СчетДт КАК [СчетДт $Счет.Основной]
	|,	$Пров.Сумма КАК СуммаПроводки
	|,	$Пров.Количество КАК Количество
	|,  $Пров.Дата КАК [ДатаДвижения $Дата]
	|ИЗ
	|	Проводки КАК Пров $nolock;
	|Где
    |      ($Пров.Дата Между :НачПериода и :КонПериода~)
	|И     ГДЕ $Пров.СчетДт В (ВЫБРАТЬ val ИЗ #сп)
	|	";
	оПЗ.УстановитьТекстовыйПараметр("НачПериода",НачДата);
	оПЗ.УстановитьТекстовыйПараметр("КонПериода",КонДата);
	СпСчетов = СоздатьОбъект("СписокЗначений");
	СпСчетов.ДобавитьЗначение(СчетПоКоду("3611"));
	оПЗ.УложитьСписокЗначений(СпСчетов,"#сп");
	итзОст = оПЗ.Выполнить();
	итзОст.Показать(); 



После исполнения 1С падает Смущённый.Думаю проблема с условиями.Прошу помощи знающих людей.Спасибо.
  
Наверх
 
IP записан
 
BlueWind
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 13
Местоположение: Тирасполь
Зарегистрирован: 28. Ноября 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #621 - 24. Декабря 2013 :: 12:44
Печать  
Alexx_S писал(а) 24. Декабря 2013 :: 09:58:
Здравствуйте.Пробую осилить класс ПрямойЗапрос.Хочеться сделать запрос к проводкам (для акта сверки), но пока успехов мало.Вот текст запроса:

Код
Выбрать все
	оПЗ = СоздатьОбъект("ПрямойЗапрос");
	оПЗ.РежимОтладки=3;
	оПЗ.Текст="ВЫБРАТЬ
	|	$Пров.ТекущийДокумент КАК [ТекущийДокумент $Документ]
	|,	$Пров.СчетДт КАК [СчетДт $Счет.Основной]
	|,	$Пров.Сумма КАК СуммаПроводки
	|,	$Пров.Количество КАК Количество
	|,  $Пров.Дата КАК [ДатаДвижения $Дата]
	|ИЗ
	|	Проводки КАК Пров $nolock;
	|Где
    |      ($Пров.Дата Между :НачПериода и :КонПериода~)
	|И     ГДЕ $Пров.СчетДт В (ВЫБРАТЬ val ИЗ #сп)
	|	";
	оПЗ.УстановитьТекстовыйПараметр("НачПериода",НачДата);
	оПЗ.УстановитьТекстовыйПараметр("КонПериода",КонДата);
	СпСчетов = СоздатьОбъект("СписокЗначений");
	СпСчетов.ДобавитьЗначение(СчетПоКоду("3611"));
	оПЗ.УложитьСписокЗначений(СпСчетов,"#сп");
	итзОст = оПЗ.Выполнить();
	итзОст.Показать(); 



После исполнения 1С падает Смущённый.Думаю проблема с условиями.Прошу помощи знающих людей.Спасибо.



В условии ошибка. Должно быть так:
|Где
|      ($Пров.Дата Между :НачПериода и :КонПериода~)
|И    ($Пров.СчетДт В (ВЫБРАТЬ val ИЗ #сп) )

Убрать точку с запятой в конце строки
|      Проводки КАК Пров $nolock;


Но 1с при ошибке в тексте запроса падать не должна. Должно появиться сообщение об ошибке в окне сообщений. Если 1с падает, то, возможно, не стыкуются версии внешних компонент. Другие запросы выполняются? Попробуй протестить работоспособность 1с++ на элементарном запросе - выбрать элементы какого-нибудь справочника, например..
« Последняя редакция: 24. Декабря 2013 :: 15:14 - BlueWind »  
Наверх
 
IP записан
 
Alexx_S
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 41
Местоположение: UA
Зарегистрирован: 23. Сентября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #622 - 24. Декабря 2013 :: 12:56
Печать  
Спасибо за ответ. Убрал ; после nolock и взлетело.Падение было навернека из за нехватки памяти.В диспетчере смотрел что потребление памяти очень бысто растет до 1,5 Гб и т.д. , а потом падение платформы.
  
Наверх
 
IP записан
 
Alexx_S
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 41
Местоположение: UA
Зарегистрирован: 23. Сентября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #623 - 24. Декабря 2013 :: 13:24
Печать  
Еще вопросик. Как правильно сделать типизацию субконто.Мне нужно задать что первое субконто - контрагенты.

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



Запрос отрабатывает но колонка субконтоДт1 пустая, а нужно увидеть там контрагентов.

Отладка пишет :
SELECT
     Пров.DOCID AS [ТекущийДокумент $Документ]
,      Пров.ACCDTID AS [СчетДт $Счет.Основной]
,      Пров.ACCKTID AS [СчетКт $Счет.Основной]
,      Пров.SUM AS СуммаПроводки
,      Пров.AMOUNT AS Количество
,  Пров.DATE AS [ДатаДвижения $Дата]
,      Пров.DTSC0 AS [СубконтоДт1 $Справочник.Контрагенты]
FROM
     [_1S.ENTRY] AS Пров
WHERE
           (Пров.ACCDTID='    4A   ')
AND       (Пров.DATE BETWEEN '20131224' AND '20131224Я')
AND           Пров.ACCDTID IN (SELECT val FROM vt_сп)
Подбор индекса для таблицы 1SENTRY:
     Ограничения: ACCDTID=; DATE>=; DATE<=;
     Найдено в кэше
     Выбран индекс DATETIME: DTOS(DATE)+TIME+DOCID+STR(NUMBER,5)+STR(CORNO,5)
     Стоимость: 100
Время подготовки запроса: 11 мс, время выполнения запроса: 13 мс.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #624 - 24. Декабря 2013 :: 13:53
Печать  
типизируй как $Справочник
или отрезай вид и типизируй как Справочник.Клиентосы
  
Наверх
 
IP записан
 
Alexx_S
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 41
Местоположение: UA
Зарегистрирован: 23. Сентября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #625 - 24. Декабря 2013 :: 15:16
Печать  
Eprst писал(а) 24. Декабря 2013 :: 13:53:
типизируй как $Справочник
или отрезай вид и типизируй как Справочник.Клиентосы


Сработало так :
Код
Выбрать все
 СРЕД($Пров.СубконтоДт1,3,9) КАК [СубкДт1 $Справочник.Контрагенты] 


А где можно почитать про представление идентификаторов объектов 1С в классе ПрямойЗапрос. Тоесть хочу четко понимать что использовать :СРЕД($Пров.СубконтоДт1,3,9) или СРЕД($Пров.СубконтоДт1,3,6)  и т.д.
Извините за такие детские вопросы, но есть желание освоить данный КОП.
P.S. Документацию уже курю  Улыбка
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #626 - 24. Декабря 2013 :: 16:52
Печать  
А блин, субконто то поди.. можно было типизировать еще как
$Неопределенный

ЗЫ: на счет почитать, тут
http://www.script-coding.com/v77tables.html
  
Наверх
 
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #627 - 26. Февраля 2014 :: 22:02
Печать  
Версия = "1.8.6 22.05.2013";

чтобы избежать ошибок вроде этой (для периодичностей ВТ "Документ/Период") :

ПрямойЗапрос::Выполнить(Строка ТипОбъекта=ИндексированнаяТаблица, Строка ТекстВыполнения=, Число БезПодготовки=0)
: [color=#0000ff]Meta name parser error: недопустимое значение параметра "$НачалоПериода.Период" (2)
ЗапросODBC.ВыполнитьИнструкцию(ТекстЗапроса,ПолучательЗапроса,1);


предлагаю в класс "ПрямойЗапрос" внести следющие правки:


(1) метод ПарсингФункцийНачалоКонецПериода()

условие

Код
Выбрать все
...
	Иначе
		ТекстПодстановки = "$НачалоПериода."+Периодичность+"("+ЗначениеДата+")";
	КонецЕсли;
... 



в классе нужно заменить на

Код
Выбрать все
...
	//Иначе //http://1cpp.ru/docum/icpp/html/ODBC.html#id39
	ИначеЕсли (Врег(Периодичность)<>"ПЕРИОД") и (Врег(Периодичность) <> "ДОКУМЕНТ") Тогда
		ТекстПодстановки = "$НачалоПериода."+Периодичность+"("+ЗначениеДата+")";
	КонецЕсли;
... 



(2)
метод ПарсингФункцийНачалоКонецПериода()
метод Обороты_РегистрОстатки_SQL()
метод Обороты_РегистрОбороты_SQL()
метод БИОборотыДтКт_SQL()
метод ПолучитьВТОбороты_SQL()
+(наверное,не проверял) для парных DBF-версий.

в начале каждого метода конструкция Врег(Подготовить...) РЕГИСТР строки не меняет
(и как следствие - дальнейшая проверка "Если ... Тогда" не работает)

               В отладчике: "Период"<>"ПЕРИОД" и "Документ"<>"ДОКУМЕНТ"

Код
Выбрать все
....
Периодичность = Врег(ПодготовитьПараметр(ВекторВыражения.Подвыражения.Получить(2.../...3)));
.... 



Регистр ОСТАЕТСЯ БЕЗ ИЗМЕНЕНИЙ (ВРЕГ() не отрабатывает !!!)

Предлагаю: объявить переменную "Периодичность" ЯВНО как локальную переменную
в каждом из этих методов (тогда работает - проверено):

Код
Выбрать все
...
перем Периодичность;
....
Периодичность = Врег(ПодготовитьПараметр(ВекторВыражения.Подвыражения.Получить(2.../...3)));
... 



(3) метод БИОборотыДтКт_SQL

та часть которая отвечает за период в проводках...
условие для "ПЕРИОД" есть. Похоже отсутствует "парное" условие для "ДОКУМЕНТ" ....

Код
Выбрать все
   ...
   Если Периодичность = "ПЕРИОД" Тогда
      СтрПериодПроводки = "";
      СтрПериодПроводкиВложенный = "";
   //вместо просто "Иначе" : по аналогии с DBF-версией: ДОКУМЕНТ - не используется
   //http://1cpp.ru/docum/icpp/html/ODBC.html#id39
   ИначеЕсли Врег(Периодичность) <> "ДОКУМЕНТ" Тогда
      СтрПериодПроводки = ",$НачалоПериода."+Периодичность+"(LEFT(entry_vt.DATE_TIME_DOCID,8)) Период";
      СтрПериодПроводкиВложенный = ",$НачалоПериода."+Периодичность+"(LEFT(entry_vt.DATE_TIME_DOCID,8))";
   КонецЕсли;
.... 





(4) ну и напоследок

Всем известная ошибка "Парсер ODBC не любит табуляторы"
Давайте раз и навсегда решим эту проблемку
(а то запарился с форматированием запросов, судя по форуму - не я один.).

Предлагаю перед самым вызовом "нативного 1С++ ODBC"
заменять табуляторы на одиночный пробел:

в методе ПодготовитьПараметризованныйЗапрос()

Код
Выбрать все
   ЗапросПодготовленУспешно = ЗапросODBC.Подготовить(СтрЗаменить(ПараметризированныйТекст,СимволТабуляции," ")); 



в методе Выполнить()

Код
Выбрать все
   ЗапросODBC.ВыполнитьИнструкцию(СтрЗаменить(ТекстЗапроса,СимволТабуляции," "),ПолучательЗапроса,1); 



в методе ВыполнитьЗапрос()

Код
Выбрать все
   ляции," ")); 





как-то так.

Думаю все эти пожелания достаточно:
- скромны
- разумны
- выполнимы

Спасибо.
Ждем новую версию   Круглые глаза
« Последняя редакция: 27. Февраля 2014 :: 00:53 - kos »  
Наверх
 
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #628 - 03. Марта 2014 :: 09:26
Печать  
kos писал(а) 26. Февраля 2014 :: 22:02:
...skip...

(2)
метод ПарсингФункцийНачалоКонецПериода()
метод Обороты_РегистрОстатки_SQL()
метод Обороты_РегистрОбороты_SQL()
метод БИОборотыДтКт_SQL()
метод ПолучитьВТОбороты_SQL()
+(наверное,не проверял) для парных DBF-версий.

в начале каждого метода конструкция Врег(Подготовить...) РЕГИСТР строки не меняет
(и как следствие - дальнейшая проверка "Если ... Тогда" не работает)

               В отладчике: "Период"<>"ПЕРИОД" и "Документ"<>"ДОКУМЕНТ"

.... skip ....


По поводу п.2 предыдущего поста:
Выяснил откуда такое странное поведение

Глючит сам 1С++ (версия 3.2.4.1) - неверная область видимости публичных атрибутов !!  Ужас

Суть в следующем:
у меня есть наследник от класса "ПрямойЗапрос"
в котором есть 2 публичных атрибута
- Периодичность
- МетодДополнения
(имена пересекаются с локальными переменными в указанных методах базов.класса "ПрямойЗапрос")

В базовом классе "ПрямойЗапрос" методы я(),вирт(),Сам(Контекст) и т.д.
не используются
(и если не вносить правки из п.2, что постом выше)
и поэтому 1С++ "думает"
что переменные в указанных выше методах - это публичные атрибуты наследника..... а не локальные переменные метода!!!  Ужас

Я до сих пор понимал так (согласно ООП от 1С++)
= вирт().Х - это обращение к публичным атрибутам/методам "крайнего" наследника из базы (того объекта, который реально создан)
= я().ХХХ - это обращение к собственным публичным атрибутам/методам текущего класса
= ХХХ - это обращение приватным методам/переменным (общим в модуле/локальным в методе)

Если взять "чистый" класс "ПрямойЗапрос" - глюков не наблюдается
(естественно - наследников-то нет !).

Это проблема 1С++.

Почему "Периодичность" и "МетодДополнения" так себя ведут - не понятно.
Может кто-нить сказать что-нить?

Код
Выбрать все
кто хочет может проверить:

1) сделайте класс-наследник от "ПрямойЗапрос"
    с публичными атрибутами "Периодичность" и "МетодДополнения"

2) присвойте им значения (написание значений должно быть НЕ В ВЕРХНЕМ регистре!)
    оКОП.Периодичность = "Период";
    оКОП.МетодДополнения = "Движения";

3) из обработки сделайте запрос:

    оКОП.Текст = "
    | select * from $РегистрОстаткиОбороты.ОстаткиПартий(:НачДата,:КонДата~,Период,Движения
    | ,,,,) как Рег
    |";

и получите ошибку что постом выше
(парсер базового класса не сможет привести к верхнему регистру переменные в указанных методах).
 


Думаю очень родственный (известный) глюк
для метода "Информатор.ПолучитьТаблицуСвойств()"
который возвращает как публичные атрибуты, так и приватные
для любого КОП-а
но при этом парный метод "Информатор.ПолучитьТаблицуМетодов()"
работает без такой ошибки (только публичные методы, без приватных)

В общем-то п.2 из предыдущего поста наверное никому не мешает, кроме меня.


Но "очепятки" описанные в п.1,3 - явно ошибки класса.
И очень сильная "хотелка" - п.4 из предыдущего поста.

Спасибо.

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


1C++ rocks!

Сообщений: 41
Местоположение: UA
Зарегистрирован: 23. Сентября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #629 - 24. Марта 2014 :: 13:23
Печать  
Помогите с оптимизацией: Есть прямой запрос с ВТ СрезПоследних. Что можно сделать для ускорение запроса? Без СрезПоследних - летает, а хотелось бы собрать сразу все цены по товарам.Конфа ДБФ самописная.
Вот текст :
Код
Выбрать все
		оПЗ = СоздатьОбъект("ПрямойЗапрос");
		оПЗ.РежимОтладки = 1;
	оПЗ.Текст="
	|ВЫБРАТЬ
	|  ОстаткиТМЦ.Счет КАК [Счет $Счет]
	|, ОстаткиТМЦ.Склад КАК [Склад $Справочник.МестаХранения]
	|, ОстаткиТМЦ.ТМЦ КАК [ТМЦ $Справочник.ТМЦ]
	|, ОстаткиТМЦ.ППартия КАК [ПартияОст $Справочник.ППартии]
	|, СУММА(ОстаткиТМЦ.КвоОст) КАК [КвоОст :Число.15.3]
	|, СУММА(ОстаткиТМЦ.КвоРез) КАК [КвоРез :Число.15.3]
	|, СУММА(ОстаткиТМЦ.КвоРоз) КАК [КвоРоз :Число.15.3]
	|, СрезТМЦ.Цена11 КАК [ЦенаЗаТонну]
	|, СрезТМЦ.Цена12 КАК [ЦенаЗаШтангу]
	|, СрезТМЦ.Цена4  КАК [ЦенаОпт]
	|FROM (
	|
	|ВЫБРАТЬ
	|  ОстаткиОстатки.Счет
	|, ОстаткиОстатки.Склад  
	|, ОстаткиОстатки.ТМЦ  
	|, ОстаткиОстатки.ППартия
	|, ОстаткиОстатки.КвоОстаток КАК КвоОст
	|, 0 КАК КвоРез
	|, 0 КАК КвоРоз
	|FROM $РегистрОстатки.Остатки(:ДатаОстатков,((Счет = :ВыбСчет~) И (Склад В (ВЫБРАТЬ val ИЗ #СписокСкладов))),
	|	(Счет, Склад, ТМЦ,ППартия),
	|	(Кво)) AS ОстаткиОстатки
	|
	|UNION ALL
	|
	|ВЫБРАТЬ
	|  РезервОстатки.Счет
	|, РезервОстатки.Склад
	|, РезервОстатки.ТМЦ
	|, РезервОстатки.Партия КАК ППартия
	|, 0 КАК КвоОст
	|, РезервОстатки.КвоОстаток КАК КвоРез
	|, 0 КАК КвоРоз
	|FROM $РегистрОстатки.Резерв(:ДатаОстатков,((Счет = :ВыбСчет~) И (Склад В (ВЫБРАТЬ val ИЗ #СписокСкладов))),
	|	(Счет, Склад, ТМЦ,Партия),
	|	(Кво)) AS РезервОстатки
	|
	|
	|UNION ALL
	|
	|ВЫБРАТЬ
	|  РозницаОстатки.Счет
	|, РозницаОстатки.Склад
	|, РозницаОстатки.ТМЦ
	|, РозницаОстатки.ППартия
	|, 0 КАК КвоОст
	|, 0 КАК КвоРез
	|, РозницаОстатки.КвоОстаток КАК КвоРоз
	|FROM $РегистрОстатки.ОстаткиРозница(:ДатаОстатков,((Счет = :ВыбСчет~) И (Склад В (ВЫБРАТЬ val ИЗ #СписокСкладов))),
	|	(Счет, Склад, ТМЦ,ППартия),
	|	(Кво)) AS РозницаОстатки
	|
	| ) AS ОстаткиТМЦ
	|
	|LEFT JOIN $СрезПоследних.ТМЦ(:ДатаОстатков,(Цена11,Цена12,Цена4),,,) КАК СрезТМЦ  
	|ПО (ОстаткиТМЦ.ТМЦ = СрезТМЦ.ТекущийЭлемент)
	|
	|
	|СГРУППИРОВАТЬ ОстаткиТМЦ.Склад,ОстаткиТМЦ.ТМЦ,ОстаткиТМЦ.ППартия
	|";
	ОпределитьСклады(НаДату);
	оПЗ.УстановитьТекстовыйПараметр("ДатаОстатков",ТекущаяДата());
	оПЗ.УстановитьТекстовыйПараметр("ВыбСчет",СчетПоКоду("281"));
	оПЗ.УложитьСписокЗначений(глСписокТоргСкладов,"#СписокСкладов");
итзОст = оПЗ.Выполнить(); 



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