Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) ТП. Варианты обновления по владельцу? (число прочтений - 3740 )
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
ТП. Варианты обновления по владельцу?
21. Апреля 2008 :: 08:23
Печать  
В справочнике вывожу в ТП подчиненный справочник, в качестве поставщика - ODBCDataProvider.MSSQL. Все классно работает, но есть маленькое огорчение, дело в том, что запрос формируется единожды в процедуре "ФормаПриСоздании" в итоге при изменении ТекущийЭлемент() (переход на новую строку) условие в запросе по PARENTEXT никак не меняется потому как запрос уже сформирован. Как можно обойти/решить чтобы отображать подчиненній справочник?

Заранее спасибо за ответы.
  
Наверх
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТП. Варианты обновления по владельцу?
Ответ #1 - 21. Апреля 2008 :: 08:30
Печать  
Вот код:
Код
Выбрать все
Процедура ФормаПриСоздании(_Форма)
	ТПСт =_Форма.СоздатьЭлементУправления("ТабличноеПоле", "ТП_Статьи");
	Колонки = ТПСт.Колонки;
    Колонка = Колонки.Добавить("ID");
	Колонка.Заголовок = "ID";
	Колонка.Данные = "ID";
    Колонка.Видимость = 0;

	Колонка = Колонки.Добавить("Статья");
	Колонка.Заголовок = "Статья";
	Колонка.Данные = "Статья";


	ТекКолонка = ТПСт.ТекущаяКолонка;
	ТекСтрока = ТПСт.ТекущаяСтрока;
	ТПСт.ПоставщикДанных = "";
	ТекстЗП = "
	|SELECT
	|	ID AS ID,
	|	LTRIM(RTRIM(DESCR)) AS Статья
	|FROM
	|	$Справочник.БЮ_СБ
	|WHERE
	|	PARENTEXT = '"+глMDW.ЗначениеВСтрокуБД(ТекущийЭлемент())+"'";
	Источник.УстТекстЗапроса(ТекстЗП);
	Источник.УстКлючПорядка("Статья");
	Источник.УстИДПоле("ID");
	ТПСт.ПоставщикДанных = Источник;

	ТПСт.ОбновитьСтроки();
	ТПСт.ТекущаяКолонка = ТекКолонка;

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



Как видно условие "PARENTEXT = '"+глMDW.ЗначениеВСтрокуБД(ТекущийЭлемент())+"'";" всегда будет одинаковым для всех строк, как сделать чтобы это условие было как бы динамическим?
  
Наверх
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТП. Варианты обновления по владельцу?
Ответ #2 - 21. Апреля 2008 :: 09:05
Печать  
Можно через временную таблицу попробовать, но тогда надо самому отслеживать изменение позиции в списке справочника. К тому же неизвестно, не потеряется ли таблица после выполнения запроса.
  
Наверх
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ТП. Варианты обновления по владельцу?
Ответ #3 - 21. Апреля 2008 :: 09:07
Печать  
Использовать пераметры в тексте запроса
Код
Выбрать все
?<ИмяПараметра>(Тип[, Длина[, Точность]]) 

читать тут

и обращаться к этим параметрам через коллекцию параметров
читать тут
  

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



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТП. Варианты обновления по владельцу?
Ответ #4 - 21. Апреля 2008 :: 09:28
Печать  
trad писал(а) 21. Апреля 2008 :: 09:07:
Использовать пераметры в тексте запроса
Код
Выбрать все
?<ИмяПараметра>(Тип[, Длина[, Точность]]) 

читать тут

и обращаться к этим параметрам через коллекцию параметров
читать тут


Спасибо, подскажите плиз, почему то выдает ошибку:
Код
Выбрать все
Источник.ПараметрыЗапроса.Установить("ТекЭл",ТекущийЭлемент()); 

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



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ТП. Варианты обновления по владельцу?
Ответ #5 - 21. Апреля 2008 :: 09:39
Печать  
потому что восемь
  

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



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТП. Варианты обновления по владельцу?
Ответ #6 - 21. Апреля 2008 :: 09:41
Печать  
Нашел, надо писать:
Код
Выбрать все
Источник.Параметры.Установить("ТекЭл",ТекущийЭлемент()); 


но теперь другая ошибка:
"Недопустимое значение первого параметра."
  
Наверх
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТП. Варианты обновления по владельцу?
Ответ #7 - 21. Апреля 2008 :: 10:19
Печать  
Извините, но не понятно как работать с этими параметрами. Если в стандартном ODBC 1С++ все понятно:
Код
Выбрать все
SQL.УстановитьТекстовыйПараметр("ТекЭл", ТекущийЭлемент());
 


Потом в запросе:
Код
Выбрать все
| AND (PARENTEXT =:ТекЭл)
 



То с ТП как немного не так, приведите плиз пример. Заранее спасибо.
  
Наверх
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: ТП. Варианты обновления по владельцу?
Ответ #8 - 21. Апреля 2008 :: 11:56
Печать  
Яж этот вопрос давно поднимал!
вот готовый класс да и еще с извращениями может не сильно оптимальный но для примера пойдет:
Код
Выбрать все
Перем ТипЦены Экспорт;
Перем Фирма Экспорт;
Перем Элемент Экспорт;
Перем Склад Экспорт;
Перем Поставщик;
Перем СпКолонки;

Функция Сам(Конт) Возврат Конт; КонецФункции //:Контекст

Функция УстановитьСклад(Объект) Экспорт
	Склад=Объект;
	УсловиеСклада="";
	Если ПустоеЗначение(Склад)=0 Тогда
		УсловиеСклада=" and Склад=?ВыбСклад(14,9)"
	КонецЕсли;
	РадугаМД = СоздатьОбъект("MetaDataWork");
	реквАналог = "SP" + РадугаМД.ИДРеквизитаСправочника("Аналоги", "Аналог");
	Текст="
	|select
	|  ТМЦ.code as Код,
	|  $Аналоги.Аналог as [Аналог $Справочник.ТМЦ],
	|  $ПоследнееЗначение.Цены.Единица(Цены.id,:ВыбДата) as [Ед $Справочник.Единицы],
	|  $ПоследнееЗначение.Цены.Валюта(Цены.id,:ВыбДата) as [Вал $Справочник.Валюты],
	|  $ПоследнееЗначение.Цены.Цена(Цены.id,:ВыбДата) as Цена
	|,
	|  (select sum(Резервы.РезервТовараОстаток)
	|   from $РегистрОстатки.РезервыТоваров(,,
	|	    Товар="+реквАналог+",
	|	    Товар, РезервТовара
	|	  ) Резервы
	|  ) as Резерв,
	|  (select sum(Остатки.ОстатокТовараОстаток)
	|   from $РегистрОстатки.ОстаткиТоваров(,,
	|	    Товар="+реквАналог+" and Фирма=?ВыбФирма(14,9) "+УсловиеСклада+",
	|	    Товар, ОстатокТовара
	|	  ) Остатки
	|  ) as Остаток,
	|  Аналоги.code as КодАналога,
	|  Аналоги.row_id as row_id
	|from $Справочник.Аналоги as Аналоги (nolock)
	|inner join $Справочник.ТМЦ as ТМЦ on ТМЦ.id = $Аналоги.Аналог
	|left join $Справочник.Цены as Цены on Цены.parentext = $Аналоги.Аналог and $Цены.КатегорияЦены = ?ВыбЦена(14,9)
	|where Аналоги.parentext=?ТекТовар(14,9)
	|";
	Поставщик.УстановитьТекстовыйПараметр("ВыбДата",РабочаяДата());
	Поставщик.УстТекстЗапроса(Текст);
	Если ПустоеЗначение(Склад)=0 Тогда
		Поставщик.Параметры.Установить("ВыбСклад",Склад);
	КонецЕсли;
	Поставщик.УстКлючПорядка("КодАналога,row_id");
	Поставщик.Параметры.Установить("ТекТовар",Элемент);
	Поставщик.Параметры.Установить("ВыбФирма",Фирма);
	Поставщик.Параметры.Установить("ВыбЦена",ТипЦены);
	Для н=1 По СпКолонки.РазмерСписка() Цикл
		Представление="";
		Имя=СпКолонки.ПолучитьЗначение(н,Представление);
		Поле=Поставщик.Поля.Добавить(Имя);
		Поле.Автоудаление=0;
	КонецЦикла;
	Поставщик.Обновить();
КонецФункции	// ПриИзмененииСклада

Функция Инит(КонтекстФормы, ИдентификаторРеквизита) Экспорт
	оФорма = СоздатьОбъект("Форма");
	оФорма.УстановитьФорму(КонтекстФормы.Форма);
	ТП=оФорма.СоздатьЭлементУправления(Сам(Контекст), ИдентификаторРеквизита);
	Источник = СоздатьОбъект("ODBCDataProvider.MSSQL");
	Источник.БазаДанных = СоздатьОбъект("ODBCDatabase");
	ТП.ПоставщикДанных=Источник;

	Поставщик=ТП.ПоставщикДанных;

	ТП.СтильЗаголовков = 0;
	ТП.ТаймАутОбновления=0;
	УстановитьСклад(Склад);
	Колонки = ТП.Колонки;
	Колонки.Очистить();
	Для н=1 По СпКолонки.РазмерСписка() Цикл
		Представление="";
		Имя=СпКолонки.ПолучитьЗначение(н,Представление);
		Колонка=Колонки.Добавить(Имя);
		Колонка.Заголовок=Представление;
		Колонка.Данные=Имя;
	КонецЦикла;
КонецФункции

Функция УстановитьЭлемент(Объект) Экспорт
	Элемент=Объект;
	Поставщик.Параметры.Установить("ТекТовар",Элемент);
	Поставщик.Обновить();
КонецФункции	// УстановитьЭлемент

Функция УстановитьФирму(Объект) Экспорт
	Фирма=Объект;
	Поставщик.Параметры.Установить("ВыбФирма",Фирма);
	Поставщик.Обновить();
КонецФункции	// УстановитьФирму

Функция УстановитьТипЦены(Объект) Экспорт
	ТипЦены=Объект;
	Поставщик.Параметры.Установить("ВыбЦена",ТипЦены);
	Поставщик.Обновить();
КонецФункции	// УстановитьТипЦены


СпКолонки=СоздатьОбъект("СписокЗначений");
СпКолонки.ДобавитьЗначение("Код","Код");
СпКолонки.ДобавитьЗначение("Аналог","Аналог");
СпКолонки.ДобавитьЗначение("Цена","Цена");
СпКолонки.ДобавитьЗначение("Вал","Вал");
СпКолонки.ДобавитьЗначение("Ед","Ед");
СпКолонки.ДобавитьЗначение("Остаток","ост.");
СпКолонки.ДобавитьЗначение("Резерв","рез.");


 




Да забыл добавить
На форме списка вешае функцию
Типа
УстДоспупность()

у меня на она имеее такой вид:

Функция УстДоступность()
     Если ФормаОткрыта=1 Тогда
           ТПОстатки.УстановитьЭлемент(ТекущийЭлемент());
           ТПвПути.УстановитьЭлемент(ТекущийЭлемент());
           ТПАналоги.УстановитьЭлемент(ТекущийЭлемент());
           ТПРемКомплекты.УстановитьЭлемент(ТекущийЭлемент());
     КонецЕсли;
     Возврат ""; 
КонецФункции      
и всех делов то.
ФормаСписка просто летает!
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ТП. Варианты обновления по владельцу?
Ответ #9 - 21. Апреля 2008 :: 18:42
Печать  
varelchik писал(а) 21. Апреля 2008 :: 11:56:
ФормаСписка просто летает!

Валер, как летает, когда оно у тебя тормозит?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: ТП. Варианты обновления по владельцу?
Ответ #10 - 22. Апреля 2008 :: 04:59
Печать  
Прекрасно.
МИш откеля ты взял что оно тормозит?
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ТП. Варианты обновления по владельцу?
Ответ #11 - 22. Апреля 2008 :: 06:04
Печать  
Ну, я помню ты жаловался: http://www.1cpp.ru/forum/YaBB.pl?num=1206772333/0#0
Так все же летает после изменения ключа порядка везде, или только на 2.5 от 13.03.2008?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: ТП. Варианты обновления по владельцу?
Ответ #12 - 22. Апреля 2008 :: 10:00
Печать  
kms писал(а) 22. Апреля 2008 :: 06:04:
Ну, я помню ты жаловался: http://www.1cpp.ru/forum/YaBB.pl?num=1206772333/0#0
Так все же летает после изменения ключа порядка везде, или только на 2.5 от 13.03.2008?


Так вообщем тормоза я так и не понял чего на 3.х пошли.
а ключ таки по row_id есть самый идеальный.
Его ж сам SQL строит и он для любой записи в таблице уникален.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ТП. Варианты обновления по владельцу?
Ответ #13 - 22. Апреля 2008 :: 12:27
Печать  
varelchik писал(а) 22. Апреля 2008 :: 10:00:
а ключ таки по row_id есть самый идеальный.
Его ж сам SQL строит...

блажен кто верует
  

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