Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Неспозиционированная ИТЗ (число прочтений - 475 )
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 851
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Неспозиционированная ИТЗ
14. Декабря 2022 :: 14:48
Печать  
Вопрос - как вернуть пустое значение из ИТЗ, когда она не спозиционирована?

Для примера беру обычную ТЗ. Делаю ВыбратьСтроки() и всё. Если обратиться к реквизиту ТЗ - она вернет пустое значение. С ИТЗ такое не проходит. При любом вариенте - ВыбратьСтроки(), ВНачало(), ВКонец(), НайтиСтроку() - ИТЗ всегда вернет какое-то значение!

Код (C++)
Выбрать все
ТЗ1=СоздатьОбъект("ТаблицаЗначений");
ТЗ1.НоваяКолонка("Ном1");ТЗ1.НоваяКолонка("Ном2");

ТЗ1.НоваяСтрока();ТЗ1.Ном1=100;ТЗ1.Ном2=111;
ТЗ1.НоваяСтрока();ТЗ1.Ном1=200;ТЗ1.Ном2=222;

ТЗ1.ВыбратьСтроки();
//ТЗ1.ПолучитьСтроку();
Сообщить("ТЗ 1. "+ТЗ1.Ном1+" 2."+ТЗ1.Ном2);



ТЗ1=СоздатьОбъект("ИндексированнаяТаблица");
ТЗ1.НоваяКолонка("Ном1");ТЗ1.НоваяКолонка("Ном2");

ТЗ1.НоваяСтрока();ТЗ1.Ном1=100;ТЗ1.Ном2=111;
ТЗ1.НоваяСтрока();ТЗ1.Ном1=200;ТЗ1.Ном2=222;

	Измерение="Ном1";
	ТЗ1.ДобавитьИндекс(Измерение,Измерение);
	НомСтроки=ТЗ1.НайтиСтроку(Измерение,111,,1);
	Если НомСтроки=0 Тогда
		ТЗ1.ВНачало(Измерение);
	КонецЕсли;
	Сообщить("ИТЗ НомСтроки="+НомСтроки);
	Сообщить("ИТЗ НайтиСтроку ВНачало :: "+ТЗ1.Ном1+" 2."+ТЗ1.Ном2+" :: "+ТЗ1.ПолучитьЗначение(0,"Ном1"));

	Если НомСтроки=0 Тогда
		ТЗ1.ВКонец(Измерение);	Сообщить("ИТЗ НайтиСтроку ВКонец :: "+ТЗ1.Ном1+" 2."+ТЗ1.Ном2);
	КонецЕсли;


	ТЗ1.ВыбратьСтроки(Измерение);	Сообщить("ИТЗ ВыбратьСтроки :: "+ТЗ1.Ном1+" 2."+ТЗ1.Ном2);
	ТЗ1.ПолучитьСтроку(Измерение);	Сообщить("ИТЗ ПолучитьСтроку 1. "+ТЗ1.Ном1+" 2."+ТЗ1.Ном2);
	ТЗ1.ПолучитьСтроку(Измерение);	Сообщить("ИТЗ ПолучитьСтроку 2. "+ТЗ1.Ном1+" 2."+ТЗ1.Ном2); 



Я делал класс - подмену объекта Запрос через группировочную ИТЗ. Так вот в Запросе есть метод Получить(). И когда запрос не спозиционирован - обращение к любому реквизиту возвращает пустое значение. А с ИТЗ так не получается.

Есть идеи?
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 851
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Неспозиционированная ИТЗ
Ответ #1 - 15. Декабря 2022 :: 10:01
Печать  
В описании метода ВыбратьСтроки() (https://www.1cpp.ru/docum/icpp/html/IndexedTable.html#selectrows) сказано, что "позиционируется перед первой строкой". Аналогично для ВНачало() и ВКонец().
Но если после его вызова обратиться к переменным ИТЗ - данные всё равно показывает. Хотя не должно.
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Неспозиционированная ИТЗ
Ответ #2 - 15. Декабря 2022 :: 11:25
Печать  
alyuev писал(а) 14. Декабря 2022 :: 14:48:
Вопрос - как вернуть пустое значение из ИТЗ, когда она не спозиционирована?

Есть идеи?


Никак. Максимум чего добьешься, сообщения "Нет текущей строки!"
итз это sql-подобная таблица, а в sql при несовпадении по фильтру, тебе никаких пустых значений не вернется.
Если поиск ничего не дал, просто сделай цикл по колонкам итз и заполни то что тебе надо пустыми значениями.
Или еще проще: итКопия=ит.Копия();итКопия.НоваяСтрока();
« Последняя редакция: 16. Декабря 2022 :: 10:07 - Djelf »  
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать