Переключение на Главную Страницу Страницы: 1 ... 51 52 [53] 54 55 ... 79 ОтправитьПечать
Очень популярная тема (более 25 ответов) Класс "ПоставщикДанных" - обсуждения, примеры, вопросы (число прочтений - 361791 )
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения, примеры, вопросы
Ответ #780 - 04. Июня 2010 :: 03:26
Печать  
orefkov писал(а) 03. Июня 2010 :: 20:20:
А по новой строке - такую же мысль примерно думал, но не додумал. А решение то изящное...


Решение хорошее, одно "но", я так понял что у Billа текущей строкой является row_id (по крайней мере по данному коду судил ТП.ТекущаяСтрока = -1). У меня является id типизированное к значению справочника. Уж точно счас не помню, но вроде и присваивать ему надо типизированный элемент. Это в принципе не страшно, я могу row_id включить в список обязательных колонок, id пускай будет "ПустойИД" и аналогично понимать что идет редактирование.
Я в голове обдумываю реализацию до конца, просто на неделе зарекся 7-кой не заниматься ибо снеговик на бок валится из-за этого.

Пы.сы. добавил в свой список изменений в новой версии. Да уж прилично накопилось, думаю надо уже заканчивать, а то так никогда он не выйдет.  Очень довольный
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения, примеры, вопросы
Ответ #781 - 04. Июня 2010 :: 03:56
Печать  
Поменял немного логику ведения темы с обновлениями:
1. Обновления всегда будут в первом сообщении и в конце темы.
2. В последнее сообщение "Ближайшее будущее" будут заносится пожелания которые найдут реализацию в следующем релизе. А также степень готовности и реализации изменений.
3. В предпоследнем сообщении "Стратегические планы" будет отражена информация о возможных значительных изменениях. Сроки по таким изменениям, а также их реальное отражение в жизни - неопределены.

Хотелось бы большей активности... - не... передумал  Класс
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: Класс "ПоставщикДанных" - обсуждения, примеры, вопросы
Ответ #782 - 04. Июня 2010 :: 05:05
Печать  
vandalsvq писал(а) 04. Июня 2010 :: 03:22:
Александр, ткни меня носом плиз...  Подмигивание (по параметризированным запросам).

В тексте запроса для поставщика sql-параметры обозначаются как @ИмяПараметра, далее смотрим доку:

Объект SQLiteDataProvider :: УстановитьПараметр / SetParam

Синтаксис: УстановитьПараметр(ИмяПараметра, Значение, [Модификатор])

Параметры:
ИмяПараметра - тип: Строка. Название именнованого sql-параметра.
Значение - тип: Любой. Устанавливаемое значение параметра.
Модификатор - тип: Число. Модификатор, задающий правило преобразования значения 1С в значение базы данных. Подробнее см. Преобразование значений 1С в значения базы данных (работа с параметрами). Необязательный параметр. По умолчанию 0.
Возвращает: нет.

Описание: Аналогично SQLiteQuery::УстановитьПараметр.

SQL-параметры можно устанавливать в любое время, поставщик хранит их и по мере надобности применяет к текущему выполняемому запросу.


Вот пример для поставщика, отображающего доки по графе отбора Контрагент:
Код
Выбрать все
Процедура Создать()
	Пост=СоздатьОбъект("SQLiteDataProvider");
	Пост.УстановитьБД();

	Пост.УстановитьТекстЗапроса("
	|SELECT
	|О.idx_MDID_PARENTVAL_CHILDDATE_CHILDTIME_CHILDID [key]
	|,Ж.iddoc [Док :Документ]
	|,Ж.iddocdef [Док_вид :ВидДокументаПредставление]
	|,Ж.DocNo Номер
	|,Ж.date [Дата :Дата]
	|,Ж.time [Время :Время]
	|,О.ParentVal [Контрагент :Неопределенный]
	|FROM __1S_Crdoc О inner join Журнал Ж
	|  ON О.ChildID=Ж.IdDoc
	|WHERE
	|О.MdID=:ГрафаОтбора.Контрагент and О.parentval = @Клиент
	|and О.childdate BETWEEN @НачДата AND @КонДата
	|", "key", "Док");

	Пост.УстановитьПараметр("@Клиент", выбКлиент, -1);
	Пост.УстановитьПараметр("@НачДата", НачДата);
	Пост.УстановитьПараметр("@КонДата", КонДата);

	ДобавитьКолонку("Док_вид", "Документ");
	ДобавитьКолонку("Дата");
	ДобавитьКолонку("Время");
	ДобавитьКолонку("Номер");
	ДобавитьКолонку("Контрагент");

	_ТП.ПоставщикДанных=Пост;
КонецПроцедуры

Процедура ПриСменеУсловий()
	Пост = _ТП.ПоставщикДанных;
	Пост.УстановитьПараметр("@Клиент", выбКлиент, -1);
	Пост.УстановитьПараметр("@НачДата", НачДата);
	Пост.УстановитьПараметр("@КонДата", КонДата);
	Пост.Перечитать();
	//_ТП.ПоставщикДанных = "";
	//_ТП.ПоставщикДанных = Пост;
КонецПроцедуры

 

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


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения, примеры, вопросы
Ответ #783 - 04. Июня 2010 :: 07:58
Печать  
* посыпаю голову пеплом  Язык
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Bill
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 64
Зарегистрирован: 04. Ноября 2008
Re: Класс "ПоставщикДанных" - обсуждения, примеры, вопросы
Ответ #784 - 04. Июня 2010 :: 08:24
Печать  
Цитата:
У меня является id типизированное к значению справочника. Уж точно счас не помню, но вроде и присваивать ему надо типизированный элемент.

Я думаю, что ничего страшного не будет, если в id новой строки будет ПустойИД. Ну оттипизируется он как пустое значение типа и вида текущего справочника. Все равно на время ввода новой строки этот id не нужен.
Встанет другой вопрос, как сделать так, что бы новая строка на время редактирования всегда была последней, независимо от ключа порядка. Тут наверное нужно будет добавлять дополнительное поле в запрос. Для новой строки это поле равно 1, а для всех остальных строк 0. И всегда это поле добавлять первым в ключ порядка.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения, примеры, вопросы
Ответ #785 - 04. Июня 2010 :: 08:32
Печать  
Собственно не выходит у меня с новой строкой... (пока только на DBF пытаюсь реализовать).

Александр если я буду не прав, поправь меня плиз.
Формат текст запроса для поставщика:
Код
Выбрать все
select <набор полей> from <источник> where <условия> 


Собственно текст запроса для отображения справочника:
Код
Выбрать все
select id, code, descr, idx_ID as Ключ
from Справочник.Контрагенты as sc13
where parentid = '     0   ' 


Но как ему подсунуть пустую строку?
Писать текст запроса + добавить в конце union all select <пустые поля>, не выйдет. Во-первых это не правильно, во-вторых 1С-ка падает Улыбка.
А писать
Код
Выбрать все
select *
from (select <поля запроса>
	  from Справочник.Контрагенты as sc13
	  where parentid = '     0   '
	  union all select <пустые поля>) 


Нельзя потому как оптимизации в данном решении никакой.

Или я не туда пошел?
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения, примеры, вопросы
Ответ #786 - 04. Июня 2010 :: 08:35
Печать  
Bill писал(а) 04. Июня 2010 :: 08:24:
Встанет другой вопрос, как сделать так, что бы новая строка на время редактирования всегда была последней, независимо от ключа порядка. Тут наверное нужно будет добавлять дополнительное поле в запрос. Для новой строки это поле равно 1, а для всех остальных строк 0. И всегда это поле добавлять первым в ключ порядка.

Собственно в ключ порядка я бы не лез. Он у меня для SQL составлен с точностью как 1С строит индексы (даже порядок полей соблюден, в dds постоянно смотрел когда делал).
Можно для таких полей в union-е добавить максимально-возможные значения.
Но имхо не это вопрос, а вопрос в том как вообще этот union all добавить?
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Bill
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 64
Зарегистрирован: 04. Ноября 2008
Re: Класс "ПоставщикДанных" - обсуждения, примеры, вопросы
Ответ #787 - 04. Июня 2010 :: 08:39
Печать  
Цитата:
Писать текст запроса + добавить в конце union all select <пустые поля>, не выйдет. Во-первых это не правильно

А почему не правильно?

Попробуй добавить в секцию union all условие
Код
Выбрать все
WHERE @ВводНового=1
 



И установи параметр ВводНового=0.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения, примеры, вопросы
Ответ #788 - 04. Июня 2010 :: 08:48
Печать  
Bill, т.е. хочешь сказать что ODBC съедает такой запрос?
Код
Выбрать все
select <поля запроса>
from Справочник.Контрагенты as sc13
where parentid = '     0   '
union all
select <пустые поля>
where 0=0 



* ушел проверять
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Bill
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 64
Зарегистрирован: 04. Ноября 2008
Re: Класс "ПоставщикДанных" - обсуждения, примеры, вопросы
Ответ #789 - 04. Июня 2010 :: 08:51
Печать  
Ну получается не 0=0, а 0=1 или 1=1.
У меня съел.
  
Наверх
 
IP записан
 
Bill
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 64
Зарегистрирован: 04. Ноября 2008
Re: Класс "ПоставщикДанных" - обсуждения, примеры, вопросы
Ответ #790 - 04. Июня 2010 :: 08:55
Печать  
Цитата:
* ушел проверять


Только не забудь в первом Selecte всем полям алиасы назначить, а не только idx_ID, иначе может ругаться.
И набор и порядок полей в обои селектах должен быть одинаковый (ну это ты знаешь).
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения, примеры, вопросы
Ответ #791 - 04. Июня 2010 :: 09:11
Печать  
Bill писал(а) 04. Июня 2010 :: 08:55:
Только не забудь в первом Selecte всем полям алиасы назначить, а не только idx_ID, иначе может ругаться.
И набор и порядок полей в обои селектах должен быть одинаковый (ну это ты знаешь).

Не алиасы наверное, а написать as [имя поля] (можно без []). Пока на SQL проверить не могу, но dbf точно не взлетает.

Собственно я вот подумал, можно так не париться, это конечно хорошо, но у меня есть еще "ПриПолученииЗапроса" и модифицированные запросы в некоторых местах встречаются.
Может переделать порядок редактирования? Запоминать ссылку на новый, редактирование делать по порядку, а не заканчивать, и проверять если пользователь прекратил новый редактировать (esc) то удалять его Улыбка.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Bill
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 64
Зарегистрирован: 04. Ноября 2008
Re: Класс "ПоставщикДанных" - обсуждения, примеры, вопросы
Ответ #792 - 04. Июня 2010 :: 09:20
Печать  
vandalsvq писал(а) 04. Июня 2010 :: 09:11:
Bill писал(а) 04. Июня 2010 :: 08:55:
Только не забудь в первом Selecte всем полям алиасы назначить, а не только idx_ID, иначе может ругаться.
И набор и порядок полей в обои селектах должен быть одинаковый (ну это ты знаешь).

Не алиасы наверное, а написать as [имя поля] (можно без []). Пока на SQL проверить не могу, но dbf точно не взлетает.

Собственно я вот подумал, можно так не париться, это конечно хорошо, но у меня есть еще "ПриПолученииЗапроса" и модифицированные запросы в некоторых местах встречаются.
Может переделать порядок редактирования? Запоминать ссылку на новый, редактирование делать по порядку, а не заканчивать, и проверять если пользователь прекратил новый редактировать (esc) то удалять его Улыбка.

Можно и так. Только если во время редактирования одинэсина вдруг упадет, мусор останется.

Странно, что в dbf не пролазит конструкция 0=1.
В скуле нормально работает. Я даже частенько при динамическом построении запроса специально пишу WHERE 1=1, чтобы потом при добавлении условий не париться с тем, какое слово писать WHERE или AND.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения, примеры, вопросы
Ответ #793 - 04. Июня 2010 :: 09:44
Печать  
Ну падеж 1С - это дело такое, и от 1С-ины может остаться мусор.
Что касается поставщика 1sqlite... кхм, может счас прийдет Александр и все расскажет что да как.
Пока я и SQL нормально подружить не смог.

В принципе модель редактирования все равно переделывать надо, мне не очень нравится что не переходит в следующую ячейку (и в ИТЗ и в справочнике), так что эмуляция потом возможна.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Bill
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 64
Зарегистрирован: 04. Ноября 2008
Re: Класс "ПоставщикДанных" - обсуждения, примеры, вопросы
Ответ #794 - 04. Июня 2010 :: 09:54
Печать  
Цитата:
Пока я и SQL нормально подружить не смог.


А с SQL какие проблемы?

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 51 52 [53] 54 55 ... 79
ОтправитьПечать