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


1C++ rocks!

Сообщений: 8
Местоположение: Воронеж
Зарегистрирован: 23. Мая 2013
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #585 - 12. Июля 2013 :: 10:23
Печать  
Цитата:
Уверен на счет этого предложения? Попробуй, для начала:
тестТЗ = СоздатьОбъект("ТаблицаЗначений");
РС(или чего там у тебя).ВыполнитьИнструкцию("SELECT val FROM #ВыбСЗВин",тестТЗ,1);
тестТЗ.ВыбратьСтроку();
и посмотри, что же реально у тебя во времянке лежит


кстати попробовал. ТЗ пустая(((. А в чем дело?
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #586 - 12. Июля 2013 :: 11:23
Печать  
Дело в том, что "УложитьСписок" укладывает ТОЛЬКО объекты 1С, т.е., например, Справочник, Документ и т.д. А если строковые параметры, то надо как-то подругому. Я пользуюсь кодом Уважаемого Трад-а http://www.1cpp.ru/forum/YaBB.pl?num=1170322440/7#7
  
Наверх
ICQ  
IP записан
 
Cobranet
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 2
Зарегистрирован: 23. Марта 2010
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #587 - 25. Июля 2013 :: 07:35
Печать  
Народ прошу помощи. База DBF
В общем в списке справочника номенклатура пытаюсь добавить колонку Цена, но 1С ругается.
Вот мой код:
Код
Выбрать все
ПоставщикДанныхМногострочнаяЧасть = СоздатьОбъект("ПоставщикДанных");
ПоставщикДанныхМногострочнаяЧасть.ТипЗначений = "Справочник.Номенклатура";
ПоставщикДанныхМногострочнаяЧасть.КонтейнерТабличногоПоля = "ТабличноеПолеМногострочнойЧасти";
ПоставщикДанныхМногострочнаяЧасть.КонтейнерКоманднойПанели = "КоманднаяПанельМногострочнойЧасти";

ДанныеСправочник = ПоставщикДанныхМногострочнаяЧасть.Данные;
ДанныеСправочник.КнопкаПросмотр = 1;
ДанныеСправочник.РежимОтладки = 1;
ДанныеСправочник.СоздатьКнопкиПоУмолчанию();

ТабличноеПоле = ДанныеСправочник.ТабличноеПоле;
ТабличноеПоле.СтильЗаголовков = 1;
ТабличноеПоле.СтильРамки = 1;

ДанныеСправочник.НоваяКолонка("Код");
ДанныеСправочник.НоваяКолонка("Наименование");

Запрос=ДанныеСправочник.ПрямойЗапрос;

ТекстСоединенияЦена = "left join
	|$СрезПоследних.Цены(:ВыбДата
	|                    ,(Цена,Валюта,ТипЦен)
	|                    ,($СпрЦены.ПометкаУдаления=0 and $спрЦены.ТипЦен = :ТипЦены and $спрЦены.Владелец = $ТекущийОбъект.ТекущийЭлемент)
	|                    ,left join Справочник.Цены as СпрЦены $nolock on $СпрЦены.ТекущийЭлемент = ТекущийЭлемент
	|                   ) as srezcen
	|";
	ДанныеСправочник.ДобавитьСоединениеДанных("ЦенаТовара",ТекстСоединенияЦена);
СпрТипыЦен = СоздатьОбъект("Справочник.ТипыЦен");
СпрТипыЦен.НайтиПоКоду("00002");
Запрос.УстановитьТекстовыйПараметр("ТипЦены", СпрТипыЦен.ТекущийЭлемент());
Запрос.УстановитьТекстовыйПараметр("ВыбДата",  ТекущаяДата());
ДанныеСправочник.ДобавитьКолонкуДанных("Цены","Цена оптовая","srezcen.Цена","Число",10,2,1);
ДанныеСправочник.НоваяКолонка("Цены"); 



А 1С вот на что ругается:
ПоставщикДанных.Справочник::УстановитьПоставщикаДанных() : no such column: sc84.ID
ПоставщикДанных.УстановитьТекстЗапроса(ТекстЗапроса,"[КлючПорядка]","[ТекущийЭлемент :Справочник."+ВидСправочника+"]");
) }

ПоставщикДанных.ТабличноеПоле::Обновить() : ПоставщикДанных.Справочник::УстановитьПоставщикаДанных() : no such column: sc84.ID
ПоставщикДанных.УстановитьТекстЗапроса(ТекстЗапроса,"[КлючПорядка]","[ТекущийЭлемент :Справочник."+ВидСправочника+"]");
) }

вирт().Обновить();
670) }

ПоставщикДанных::Обновить() : ПоставщикДанных.ТабличноеПоле::Обновить() : ПоставщикДанных.Справочник::УстановитьПоставщикаДанных() : no such column: sc84.ID
ПоставщикДанных.УстановитьТекстЗапроса(ТекстЗапроса,"[КлючПорядка]","[ТекущийЭлемент :Справочник."+ВидСправочника+"]");
) }

вирт().Обновить();
670) }

ПоставщикДанных.ТабличноеПоле.Обновить();
{C:\1C\ТиС\SystemData\Classes\ПоставщикДанных\ПоставщикДанных.ert(220) }

ПоставщикДанныхМногострочнаяЧасть.Обновить();
{C:\1C\ТиС\СПРАВОЧНИК НОМЕНКЛАТУРА.ERT(172)}: ПоставщикДанных::Обновить() : ПоставщикДанных.ТабличноеПоле::Обновить() : ПоставщикДанных.Справочник::УстановитьПоставщикаДанных() : no such column: sc84.ID
ПоставщикДанных.УстановитьТекстЗапроса(ТекстЗапроса,"[КлючПорядка]","[ТекущийЭлемент :Справочник."+ВидСправочника+"]");
) }

вирт().Обновить();
670) }

ПоставщикДанных.ТабличноеПоле.Обновить();
{C:\1C\ТиС\SystemData\Classes\ПоставщикДанных\ПоставщикДанных.ert(220) }
  
Наверх
 
IP записан
 
OrkuShaman
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Местоположение: Воронеж
Зарегистрирован: 23. Мая 2013
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #588 - 08. Августа 2013 :: 06:14
Печать  
Я не особо спец, но то что бросилось в глаза  Нерешительный
" left join ...
     |                   ) as srezcen " - ? где условие этого соединения?
  
Наверх
 
IP записан
 
Cobranet
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 2
Зарегистрирован: 23. Марта 2010
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #589 - 08. Августа 2013 :: 06:22
Печать  
OrkuShaman писал(а) 08. Августа 2013 :: 06:14:
Я не особо спец, но то что бросилось в глаза  Нерешительный
" left join ...
     |                   ) as srezcen " - ? где условие этого соединения?


and $спрЦены.Владелец = $ТекущийОбъект.ТекущийЭлемент по идее вот соединение этого справочника цен по реквизиту владелец с текущей номенклатурой.
Но вопрос можно считать закрытым. Выкрутился через $ПоследнееЗначение
  
Наверх
 
IP записан
 
OrkuShaman
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Местоположение: Воронеж
Зарегистрирован: 23. Мая 2013
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #590 - 08. Августа 2013 :: 06:35
Печать  
Ну выкрутился хорошо, вот если бы разобрался было бы лучше))) Часто выходит что задача повторяется, но времени на ее решение может уже не быть столько много, чтобы сидеть и думать.  Подмигивание
  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #591 - 25. Сентября 2013 :: 07:12
Печать  
делаю временную таблицу:

Код
Выбрать все
create table #тзОбороты(

    Подр char(9)
    ,Склад char(9)
    ,ВидАП char(9)
    ,КодАП char(3)
    ,Номенклатура char(9)
    ,ПроизвИмп char(9)
    ,ИННПроизвИмп char(20)
    ,ЭтоИмпорт numeric(1,0)
    ,ТекДок char(9)
    ,ТекДок_вид int
    ,ТекДок_ном char(20)
    ,ТекДок_дата varchar(10)
 

... и т.д.


в ТекДок_дата данные попадают так:
Код
Выбрать все
	  |    ,МАКСИМУМ(ВЫБОР
	  |    КОГДА РегАлкОО.ВидДокумента=:ВидДокумента.ПриходнаяНакладная
	  |    ТОГДА $ПНК.ДатаДокВходящий
	  |    КОГДА РегАлкОО.ВидДокумента=:ВидДокумента.ЗаказПоставщику
	  |    ТОГДА $ЗаказПост.ДатаДокВходящий
	  |    ИНАЧЕ $Жур.ДатаДокумента КОНЕЦ) КАК ТекДок_дата
 


пробовал и так:  "КАК [ТекДок_дата $Дата]"

в итоге во всех вариантах для DBF (1SQlite) все ок - на выходе запросом из тзОбороты - в поле ТекДок_дата - дата, на SQL - пусто ("  .  .  ")

ТекДок_дата пробовал char(8), сhar(10), varchar(10) - ничего не помогает

Что Я Делаю Не Так ??
  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #592 - 25. Сентября 2013 :: 09:51
Печать  
а как записываешь данные в таблицу?
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #593 - 25. Сентября 2013 :: 23:37
Печать  
Salimbek писал(а) 25. Сентября 2013 :: 09:51:
а как записываешь данные в таблицу?

Код
Выбрать все
ТекстЗапросаОбороты="
|ВСТАВИТЬ ВНУТРЬ #тзОбороты
|"+ТекстЗапросаОбороты;
ПЗапрос.ВыполнитьЗапрос(ТекстЗапросаОбороты,0);
 



ну и в ТекстЗапросаОбороты - кусок кода выше про "ТекДок_дата"
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #594 - 26. Сентября 2013 :: 00:08
Печать  
Новый факт:
Вот так все ок:
Код
Выбрать все
|	,МАКСИМУМ($Жур.ДатаДокумента) КАК ТекДок_дата 


Вот так - пусто:
Код
Выбрать все
|	,МАКСИМУМ(ВЫБОР
|	КОГДА РегАлкОО.ВидДокумента=:ВидДокумента.ПриходнаяНакладная
|	ТОГДА $ПНК.ДатаДокВходящий
|	КОГДА РегАлкОО.ВидДокумента=:ВидДокумента.ЗаказПоставщику
|	ТОГДА $ЗаказПост.ДатаДокВходящий
|	ИНАЧЕ $Жур.ДатаДокумента КОНЕЦ) КАК ТекДок_дата
 


причем пусто и для документов в случае "ИНАЧЕ $Жур.ДатаДокумента КОНЕЦ"
Поля "ДатаДокВходящий" - тип "Дата"
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #595 - 26. Сентября 2013 :: 02:16
Печать  
В общем, проблема понятна (преобразование типов)
$Жур.ДатаДокумента возвращает строку 'ГГГГММДД'
$ПНК.ДатаДокВходящий возращает дату 'ДД.ММ.ГГГГ'

Как красиво решить?
  
Наверх
ICQ  
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #596 - 26. Сентября 2013 :: 05:15
Печать  
Dolly_EV писал(а) 26. Сентября 2013 :: 02:16:
В общем, проблема понятна (преобразование типов)
$Жур.ДатаДокумента возвращает строку 'ГГГГММДД'
$ПНК.ДатаДокВходящий возращает дату 'ДД.ММ.ГГГГ'

Как красиво решить?

Код
Выбрать все
CAST($Жур.ДатаДокумента as DateTime) 

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #597 - 26. Сентября 2013 :: 07:43
Печать  
leshik писал(а) 26. Сентября 2013 :: 05:15:
Код
Выбрать все
CAST($Жур.ДатаДокумента as DateTime) 



State 22007, native 241, message [Microsoft][ODBC SQL Server Driver][SQL Server]Conversion failed when converting datetime from character string.

Нет, ошибки нет (не туда воткнул сначала). Но и результат не изменился - во временной таблице - пусто((

УРА!! Победил! CAST() надо делать не перед пиханием во временную ТЗ, а перед извлечением в дальнейшем из нее
Но так и не понял, почему CAST перед "INSERT INTO" не помог?
  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #598 - 26. Сентября 2013 :: 08:11
Печать  
Можно было бы попробовать заКАСТовать все три поля, чтобы они гарантированно приводились к одному типу. Следующим шагом, я бы делал просто "Выбрать * из (твоя_временная_таблица)" в Таблицу значений и далее ТЗ.ВыбратьСтроку(), чтобы тупо посмотреть, что же реально лежит там в полях.
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #599 - 26. Сентября 2013 :: 10:19
Печать  
Salimbek писал(а) 26. Сентября 2013 :: 08:11:
Можно было бы попробовать заКАСТовать все три поля, чтобы они гарантированно приводились к одному типу. Следующим шагом, я бы делал просто "Выбрать * из (твоя_временная_таблица)" в Таблицу значений и далее ТЗ.ВыбратьСтроку(), чтобы тупо посмотреть, что же реально лежит там в полях.


Угу, уже.
В общем, что с КАСТ, что без КАСТ ПЕРЕД INSERT INTO,
в СКЛе на выходе из временной таблицы БЕЗ типизации лежат даты вида "Jul 24 2013 12:00AM", одинаковые не зависимо от источника (ПНК.ДатаДокВходящий или Жур.ДатаДокумента)
При этом С ТИПИЗАЦИЕЙ без КАСТ() - получаем пустые даты, с КАСТ() - все Ок.
В итоге правильный ответ: ,МАКСИМУМ(CAST(ТекДок_дата AS DateTime)) КАК [ТекДок_дата $Дата]
при выборе из временной таблицы

Не, не правильный ответ.
Теперь обратная проблема:
при МАКСИМУМ(CAST(ТекДок_дата AS DateTime)) КАК [ТекДок_дата $Дата]" на DBF - пустая дата....
CAST(ТекДок_дата AS DateTime выдает строку 'ГГГГММДД', которая типизацией не приводится к Дате
В общем, вилку придется ставить Скль/НеСкль Печаль
P.S. А еще лучше добавить в класс тип DateTime для временных таблиц (или Date)
« Последняя редакция: 27. Сентября 2013 :: 01:48 - Dolly_EV »  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 38 39 [40] 41 42 ... 51
ОтправитьПечать