Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Тип $Неопределенный и $ПустойИД23. Возможно? (число прочтений - 5279 )
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Тип $Неопределенный и $ПустойИД23. Возможно?
27. Апреля 2013 :: 19:02
Печать  
Код
Выбрать все
_ПустойОбъект23 = "U                      ";//U&space(22)

ТекстЗапроса = "
|SELECT top 100 $БанковскаяВыпискаСтроки.Субконто
|FROM $ДокументСтроки.БанковскаяВыписка AS БанковскаяВыпискаСтроки
|WHERE ($БанковскаяВыпискаСтроки.Субконто = :Выб)
|";

рс.УстановитьТекстовыйПараметр("Выб", _ПустойОбъект23);
тз = рс.ВыполнитьИнструкцию(ТекстЗапроса);
тз.ВыбратьСтроку();
 


возвращает без проблем колонку "Субконто". При этом все строки - правильные.
Но (!!!) у нее тип "строка".

Но не буду же я 15000 строк ТЗ после запроса
обходить и переделывать в "Ссылка". Меня это не устраивает,
пытаюсь повесить "разыменование ссылок" на 1С++:

Код
Выбрать все
_ПустойОбъект23 = ПолучитьПустоеЗначение(0);

ТекстЗапроса = "
|SELECT top 100 $БанковскаяВыпискаСтроки.Субконто [Субконто $Неопределенный]
|FROM $ДокументСтроки.БанковскаяВыписка AS БанковскаяВыпискаСтроки
|WHERE ($БанковскаяВыпискаСтроки.Субконто = :Выб)
|";

рс.УстановитьТекстовыйПараметр("Выб", _ПустойОбъект23);
тз = рс.ВыполнитьИнструкцию(ТекстЗапроса);
тз.ВыбратьСтроку();
 



Возвращает ПУСТУЮ таблицу "тз".
Если убрать условие - возвращает именно ССЫЛКИ, включая пустые (понятно, понятно что все).

Хочется иметь универсальный способ:

Код
Выбрать все
ТекстЗапроса = "
|SELECT top 100 $БанковскаяВыпискаСтроки.Субконто [Субконто $Неопределенный]
|FROM $ДокументСтроки.БанковскаяВыписка AS БанковскаяВыпискаСтроки
|WHERE ($БанковскаяВыпискаСтроки.Субконто = $ПустойИД23)
|";

тз = рс.ВыполнитьИнструкцию(ТекстЗапроса);
тз.ВыбратьСтроку();
 



где
$ПустойИД23 = "U                      ";//U&space(22)

так чтобы поведение было аналогичное как
у $ПустойИД
и $ПустойИД13

Это возможно?
Господа разработчики, плиз....
Надеюсь, это не сложно.

Или может я что-то не так делаю?

Я понимаю, что мне мне предложат класс "ПрямойЗапрос".
Но там, насколько я знаю, это тоже не работает нормально....

Хотелку зарегистрировал здесь:
http://www.1cpp.ru/bugs/show_bug.cgi?id=4558

Очень большое спасибо.



  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Тип $Неопределенный и $ПустойИД23. Возможно?
Ответ #1 - 27. Апреля 2013 :: 19:59
Печать  
|WHERE ($БанковскаяВыпискаСтроки.Субконто = :ПустойИД23*)
рс.УстановитьТекстовыйПараметр("ПустойИД23", ПолучитьПустоеЗначение());

так попробуй
  

1&&2&&3
Наверх
 
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Тип $Неопределенный и $ПустойИД23. Возможно?
Ответ #2 - 29. Апреля 2013 :: 17:04
Печать  
trad писал(а) 27. Апреля 2013 :: 19:59:
|WHERE ($БанковскаяВыпискаСтроки.Субконто = :ПустойИД23*)
рс.УстановитьТекстовыйПараметр("ПустойИД23", ПолучитьПустоеЗначение());

так попробуй


БЛИН, ОБМАН ЗРЕНИЯ!

Пишу:
Код
Выбрать все
	рс = СоздатьОбъект("ODBCRecordset");
	ТекстЗапроса = "
	|SELECT $БанковскаяВыпискаСтроки.Субконто [Субконто $Неопределенный]
	|FROM $ДокументСтроки.БанковскаяВыписка AS БанковскаяВыпискаСтроки With (NOLOCK)
	|WHERE ($БанковскаяВыпискаСтроки.Субконто = :ВыбПустой* )
	|";
	рс.УстановитьТекстовыйПараметр("ВыбПустой",ПолучитьПустоеЗначение(0));
	тз = рс.ВыполнитьИнструкцию(ТекстЗапроса);

	Сообщить(тз.КоличествоСтрок()); // выводит нужное кол-во строк

	тз.ВыбратьСтроку();//показвает пустую таблицу !!!!!

 



имею:
- количество строк "сообщить" = 73495739 типа очень много
- на экран ТЗ показывает пустую таблицу (скрин приаттачен)

Что это за мистификация такая?

1С++ 3.2.4.1


  

________23.JPG ( 94 KB | Загрузки )
________23.JPG
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Тип $Неопределенный и $ПустойИД23. Возможно?
Ответ #3 - 29. Апреля 2013 :: 18:42
Печать  
kos писал(а) 29. Апреля 2013 :: 17:04:
имею:
- количество строк "сообщить" = 73495739 типа очень много

а на скрине вижу 4760
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Тип $Неопределенный и $ПустойИД23. Возможно?
Ответ #4 - 29. Апреля 2013 :: 18:45
Печать  
kos писал(а) 29. Апреля 2013 :: 17:04:
- на экран ТЗ показывает пустую таблицу (скрин приаттачен)

судя по скролбару ТЗ строк там не мало
  

1&&2&&3
Наверх
 
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Тип $Неопределенный и $ПустойИД23. Возможно?
Ответ #5 - 01. Мая 2013 :: 15:42
Печать  
trad писал(а) 29. Апреля 2013 :: 18:45:
kos писал(а) 29. Апреля 2013 :: 17:04:
- на экран ТЗ показывает пустую таблицу (скрин приаттачен)

судя по скролбару ТЗ строк там не мало


- 4760 и 8946587: я имел ввиду что не 0 строк, а "много", т.е. больше 1й.
- по поводу скрина и скрола: перепозиционировать строку вверх/вниз нельзя - там либо пусто, либо 1 "пустая" строка...

1cpp.dll      3.2.4.1
formex.dll      2.0.5.109
SpreadSheet.dll      1.1.27.0
RWidjets.dll      1.4.0.3
UsersDef.dll      2.1.1.1

САМОЕ ИНТЕРЕСНОЕ:
- запросы здесь вообще ни при чем !!!!
- это такое поведение объектов ТЗ,Список,ИТЗ.

В чем всё-таки подвох? Это фича или баг?
Подозреваю, что таково "нативное" поведение объектов
для указанных типов....

Ниже код, демонстрирующий проблему.
Отчет с этим кодом приаттачен - пожалуйства,
подтвердите, что у Вас тот же результат на экране что и у меня.
Может у меня "чебурашки" завелись ? Ужас



Код
Выбрать все
Процедура Сформировать()

	//---------------------- таблица значений -------------------------------------

	т = СоздатьОбъект("ТаблицаЗначений");
	т.НоваяКолонка("а");// тип не указываем, колонка типа "Неопределено"
	Для к=1 По 100 Цикл
		т.НоваяСтрока();
		//т.а= ...... в колонку значения не присваимваем, оставляем "неопределено"
	КонецЦикла;
	// сколько мы там добавили?
	Сообщить("КОличествоСтрок: "+т.КОличествоСтрок());//сообщает "100"
	НС = 0;// проверяем визуально
	т.ВыбратьСтроку(НС);//на экране: скролл не перемещается вверх/вниз
	// т.е. либо пустая таблица, либо там ровно 1 строка
	// кликаем мышкой на строке и проверяем программно:
	Сообщить("Выбрана строка: "+НС);//сообщает "Выбрана строка '0'"
	т = "";

	//---------------------- список значений -------------------------------------

	с = СоздатьОбъект("СписокЗначений");
	Для к=1 По 100 Цикл
		с.ДобавитьЗначение(ПолучитьПустоеЗначение(0));
	КонецЦикла;
	Сообщить("Размер списка: "+с.РазмерСписка());//возвращает '0' !!!!
	Выб=0;
	с.ВыбратьЗначение(Выб); // на экране - пустой список!!!
	с = "";

	//---------------------- индексированная таблица -------------------------------------

	т = СоздатьОбъект("ИндексированнаяТаблица");
	т.НоваяКолонка("а");// в ИТ нет типа колонки, по умолчанию значением будет "Неопределено"
	Для к=1 По 100 Цикл
		т.НоваяСтрока();
		//т.а= ...... в колонку значения не присваимваем, оставляем "неопределено"
	КонецЦикла;
	// сколько мы там добавили?
	Сообщить("КОличествоСтрок: "+т.КОличествоСтрок());//сообщает "100"
	НС = 0;// проверяем визуально
	т.ВыбратьСтроку(НС);//на экране: скролл не перемещается вверх/вниз
	// т.е. либо пустая таблица, либо там ровно 1 строка
	// кликаем мышкой на строке и проверяем программно:
	Сообщить("Выбрана строка: "+НС);//сообщает "Выбрана строка '0'"
	т = "";

КонецПроцедуры
 

  

111.ert ( 36 KB | Загрузки )
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Тип $Неопределенный и $ПустойИД23. Возможно?
Ответ #6 - 02. Мая 2013 :: 06:06
Печать  
Запустил у себя, ТЗ и ИТЗ и скроллятся и выбираются... СЗ пустой
1С 7.70.027
1С++ 3.0.1.20
  
Наверх
ICQ  
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Тип $Неопределенный и $ПустойИД23. Возможно?
Ответ #7 - 02. Мая 2013 :: 07:52
Печать  
Salimbek писал(а) 02. Мая 2013 :: 06:06:
Запустил у себя, ТЗ и ИТЗ и скроллятся и выбираются... СЗ пустой
1С 7.70.027
1С++ 3.0.1.20


Действительно так.
Но на другом компутере.
Мистификация какая-то. Не понимаю.

Наверное 1с разные. А может какие-нить windows\*.dll........
Будем лечить 1с.... и заодно чебурашек тоже....

Извините, коллеги, за панику: скролл работает, строки выбираются.
Всем спасибо.
  
Наверх
 
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Тип $Неопределенный и $ПустойИД23. Возможно?
Ответ #8 - 02. Мая 2013 :: 08:05
Печать  
Насчет сабжа: "$ПустойИД23".
Может есть смысл всё же сделать такую константу?
Для простоты, наглядности и удобства.

чтобы вместо

Код
Выбрать все
|WHERE ($БанковскаяВыпискаСтроки.Субконто = :ПустойИД23*)
рс.УстановитьТекстовыйПараметр("ПустойИД23", ПолучитьПустоеЗначение());
 



писать (и выполнять) так:

Код
Выбрать все
|WHERE ($БанковскаяВыпискаСтроки.Субконто = $ПустойИД23) 



  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Тип $Неопределенный и $ПустойИД23. Возможно?
Ответ #9 - 06. Мая 2013 :: 04:24
Печать  
С ходу могу предложить 2 решения:

1) делаешь глобальную переменную ПустоийИД23 и дальше юзаешь так:
Код
Выбрать все
|WHERE ($БанковскаяВыпискаСтроки.Субконто = " + ПустойИД23 +") 



2) если юзаешь какой-нить класс-потомок от ОДБЦРекордсет, то перед выполнением можешь сам заменять $ПустойИД23 на то, что тебе нужно
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Тип $Неопределенный и $ПустойИД23. Возможно?
Ответ #10 - 06. Мая 2013 :: 06:20
Печать  
точности терминологии ради нужно заметить.
'U                      ' - это внутреннее представление значения "Неопределено", а не пустой ИД.
Не бывает 23х разрядного пустого идентификатора объекта. Есть только 9 и 13 ($ПустойИД и $ПустойИД13).
  

1&&2&&3
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать