Переключение на Главную Страницу Страницы: 1 ... 69 70 [71] 72 73 ... 81 ОтправитьПечать
Очень популярная тема (более 25 ответов) Класс "ПоставщикДанных" - обсуждения. Часть 2. (число прочтений - 379531 )
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1050 - 13. Февраля 2014 :: 11:37
Печать  
barbitura, переменная поставщика должна быть объявлена как переменная формы. Больше всего похоже на эту ошибку. Если переменная есть, тогда смотри набор классов или версию dll 1C++
  

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



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1051 - 16. Февраля 2014 :: 03:34
Печать  
Вопрос для vandalsvq:

Мне нужно для класса ДеревоЗначений организовать полную сортировку, а не только текущего узла. На сколько корректны подобные изменения?

Код
Выбрать все
Процедура Сортировать(row_parent = "", ИмяКолонки, Направление = 1) Экспорт
	Если ПустоеЗначение(ИмяКолонки) = 1 Тогда
		вирт()._ВыброситьИскл("Ошибка при вызове метода контекста (Сортировать). Имя колонки не задано.");
		Возврат;
	КонецЕсли;
	Если Колонки.НайтиКлюч(ИмяКолонки,0) = -1 Тогда
		вирт()._ВыброситьИскл("Ошибка при вызове метода контекста (Сортировать). Колонка ("+ИмяКолонки+") существует.");
		Возврат;
	КонецЕсли;

	Если ПустоеЗначение(row_parent) = 0 Тогда
		Параметры = ПолучитьТекущиеПараметры(row_parent);
		Если Параметры.Количество() = 0 Тогда
			вирт()._ВыброситьИскл("Ошибка при вызове метода контекста (Сортировать). Путь к строке не корректен.");
			Возврат;
		КонецЕсли;
		_ТекущаяТаблица = Параметры.ТекущаяТаблица.rows;
	Иначе
		_ТекущаяТаблица = ХранилищеДанных;
	КонецЕсли;
	// Начало изменений ->
	лРодитель = "";
	Если _ТекущаяТаблица.row_isfolder =  1 Тогда
		лРодитель = _ТекущаяТаблица.row_path
	КонецЕсли;
	//Конец изменений <-

	_ТекущаяТаблица.Сортировать(?(Направление = 2,"-","") + ИмяКолонки);
	// Начало изменений ->
	Если лРодитель <>  "" Тогда
		Я().Сортировать(лРодитель, ИмяКолонки, Направление);
	КонецЕсли;
	//Конец изменений <-
КонецПроцедуры // Сортировать 


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



Сообщений: 163
Зарегистрирован: 24. Марта 2008
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1052 - 12. Марта 2014 :: 07:46
Печать  
Попробую спросить еще раз:

Уважаемые специалисты, подскажите пожалуйста где найти информацию по сортировке у поставщика данных типа справочник?
Пытаюсь отсортировать по реквизиту с типом Справочник, и он сортирует по коду, а хочется по наименованию.
  
Наверх
 
IP записан
 
barbitura
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 135
Зарегистрирован: 22. Мая 2013
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1053 - 13. Марта 2014 :: 11:05
Печать  
ildary писал(а) 12. Марта 2014 :: 07:46:
Попробую спросить еще раз:

Уважаемые специалисты, подскажите пожалуйста где найти информацию по сортировке у поставщика данных типа справочник?
Пытаюсь отсортировать по реквизиту с типом Справочник, и он сортирует по коду, а хочется по наименованию.


СортироватьПоВозрастанию() не помогает?
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1054 - 13. Марта 2014 :: 16:10
Печать  
ildary писал(а) 12. Марта 2014 :: 07:46:
Попробую спросить еще раз:

Уважаемые специалисты, подскажите пожалуйста где найти информацию по сортировке у поставщика данных типа справочник?
Пытаюсь отсортировать по реквизиту с типом Справочник, и он сортирует по коду, а хочется по наименованию.

Видимо надо в запрос добавить соединение с нужным справочником и потом уже добавить сортировку по полю Наименование
  
Наверх
ICQ  
IP записан
 
ildary
Full Member
***
Отсутствует



Сообщений: 163
Зарегистрирован: 24. Марта 2008
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1055 - 14. Марта 2014 :: 05:43
Печать  
Извините, сразу не уточнил: речь идет о сортировке путем нажатия на заголовок колонки. То есть имеем к примеру табличное поле, выводящее справочник Товары, одна из колонок - реквизит типа справочник, например СтранаПроисхождения. Нажимая на заголовок колонки "СтранаПроисхождения" - видим, что таб. поле пересортировалась, но при этом отсортировалась по СтранаПроисхождения.Код, а не СтранаПроисхождения.Наименование.

В классе Поставщик данных.Справочник СортироватьПоВозрастанию() описана, но она пустая. Эта процедура полная только в Поставщик данных.ИндексированнаяТаблица.
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1056 - 15. Марта 2014 :: 05:15
Печать  
ildary писал(а) 14. Марта 2014 :: 05:43:
Извините, сразу не уточнил: речь идет о сортировке путем нажатия на заголовок колонки. То есть имеем к примеру табличное поле, выводящее справочник Товары, одна из колонок - реквизит типа справочник, например СтранаПроисхождения. Нажимая на заголовок колонки "СтранаПроисхождения" - видим, что таб. поле пересортировалась, но при этом отсортировалась по СтранаПроисхождения.Код, а не СтранаПроисхождения.Наименование.

В классе Поставщик данных.Справочник СортироватьПоВозрастанию() описана, но она пустая. Эта процедура полная только в Поставщик данных.ИндексированнаяТаблица.

И что это меняет? Просто механика работы ТП такова, что ему абсолютно без разницы - что у тебя в поле, Справочник, Документ, Число, Строка и т.д. Это твоя забота - обеспечить ТП нужными колонками, чтобы оно сделало свою работу.
Поэтому повторю последовательность действий еще раз:
1. Делаешь соединение ТП с нужным тебе Справочником.
2. Вытаскиваешь поле "Наименование" в выборку запроса (можешь не отображать, а оставить это поле скрытым)
3. При нажатии на заголовок колонки - устанавливаешь сортировку по этому скрытому полю.

Если полей типа "Справочник" много и сортировать можно по любому из них, то придется сразу делать слишком много соединений, поэтому можно отключать Поставщик данных от ТП, построить новый запрос, соединением с нужным справочником, выставить нужные сортировки и проч. и подключить этого Поставщика к ТП.
З.Ы. Вероятно такой механизм и планировалось сделать в том самом СортироватьПоВозрастанию(), но, ИМХО, там нюансов... (например, справочник может быть и без Наименования)
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1057 - 16. Марта 2014 :: 16:07
Печать  
Некоторые методы в поставщике (вроде сортировать по возрастанию) существуют поскольку этого требует класс "ПоставщикДанных.ТабличноеПоле". Класс может переопределять механизм работы, а может оставлять типовой.
Для управления сортировкой в поставщике с расширением "Справочник" есть атрибут "РеквизитСортировки"

Цитата:
РеквизитСортировки
Синтаксис: РеквизитСортировки
Доступ: Чтение и запись
Тип: Строка.
Описание: Идентификатор реквизита, по которому необходимо отсортировать список. Необходимо помнить, что сортировка может осуществляться только по:
•      Реквизиту «Код»
•      Реквизиту «Наименование»
•      прочим реквизитам справочника с признаком «Сортировка»


Установили, вызвали "Обновить" и вуаля.
Сортировка по полям где нет признака "Сортировать" невозможна.

Пы.сы. чуть позже заметил что речь идет о реквизите справочника с признаком "Сортировать". Вообще то, там сортировка идет по внутреннему идентификатору. Так работает платформа. Она хранит в индексе идентификатор, а не код, наименование или еще что, поэтому при сортировке используется именно он.
  

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



Сообщений: 163
Зарегистрирован: 24. Марта 2008
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1058 - 17. Марта 2014 :: 14:13
Печать  
Salimbek писал(а) 15. Марта 2014 :: 05:15:
Поэтому повторю последовательность действий еще раз:
1. Делаешь соединение ТП с нужным тебе Справочником.
2. Вытаскиваешь поле "Наименование" в выборку запроса (можешь не отображать, а оставить это поле скрытым)
3. При нажатии на заголовок колонки - устанавливаешь сортировку по этому скрытому полю.


Спасибо за мудый совет, но хотелось бы еще уточнить - как в пункте 3 выполнить действие "установить сортировку?" Пункты 1 и 2 сделаны, а какую команду вызывать в ПриВыбореЗаголовка() - я не понял...

попробовал там выполнить

пдДействия.РеквизитСортировки = "НаимСтраны";

выдает - Поле агрегатного объекта не обнаружено (НаимСтраны)
при том, что в табличном поле такая колонка есть.


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



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1059 - 17. Марта 2014 :: 19:26
Печать  
А как делал соединение?

Посмотрел реализацию - в классе есть "ДобавитьСоединениеДанных" и "ДобавитьКолонкуДанных"
После добавления колонки - ее уже можно будет добавлять в сортировку.
Ну и при реализации - можно сделать наоборот - скрыть колонку с реквизитом типа "Справочник" (чтобы не сортировало как не надо. А отобразить, колонку с наименованием. Тогда при нажатии на заголовок колонки - класс должен сам все красиво отсортировать.
  
Наверх
ICQ  
IP записан
 
ildary
Full Member
***
Отсутствует



Сообщений: 163
Зарегистрирован: 24. Марта 2008
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1060 - 18. Марта 2014 :: 05:32
Печать  
делал вот так:

Данные.ДобавитьСоединениеДанных( "Справочник_Контрагенты","JOIN Справочник.плнДействия as СпрДействия
|ON СпрДействия.id = ТекущийОбъект.id
|LEFT JOIN Справочник.Контрагенты as СпрКонтр ON СпрКонтр.id = СпрДействия.Контрагент" );

енование","Строка",15,,1);
Данные.НоваяКолонка( "НаимКонтрагента" );

Табличное поле выводит Справочник СпрДействия содержит в себе реквизит "Контрагент", тип - Справочник.Контрагенты.

Идея скрыть колонку справочника и выводить только колонку НаимКонтрагента - хороша, только вот при нажатии на заголовок этой (НаимКонтрагента) колонки - ничего не происходит (значок сортировки не появляется).


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



Сообщений: 163
Зарегистрирован: 24. Марта 2008
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1061 - 04. Апреля 2014 :: 10:02
Печать  
Класс ПД.ИТЗ хороший, но при сортировке в процедуре ПриВыбореЗаголовка() - слетает текущая строка. Рекомендую всем добавить в файл "ПоставщикДанных.ИндексированнаяТаблица.ert" следующие строки:

в процедуре ПриВыбореЗаголовка() после строк

Если ТабличноеПоле.ИнтерактивнаяСортировка = 0 Тогда
     Возврат;
КонецЕсли;

вставить:

     СтароеПоле = 0;
     Попытка
           
           ИмяИндекса = ИндексированнаяТаблица.ИмяИндекса( ИндексированнаяТаблица.КоличествоИндексов() );
           Если ПустоеЗначение( ИмяИндекса ) = 0 Тогда
                 
                 НомСтр = ИндексированнаяТаблица.НомерСтроки;
                 Если ПустоеЗначение( НомСтр ) = 0 Тогда
                       
                       СтароеПоле = ИндексированнаяТаблица.ПолучитьЗначение( НомСтр, ИмяИндекса );
                       
                 КонецЕсли;
                 
           КонецЕсли;
           
     Исключение
     КонецПопытки;

и в конец этой процедуры вставить

     Если ПустоеЗначение( СтароеПоле ) = 0 Тогда
           
           Поз = ИндексированнаяТаблица.НайтиСтроку( СтароеПоле, ЗначПоиска );
           Если Поз > 0 Тогда //восстановим строку
                 
                 ТабличноеПоле.ТекущаяСтрока = Поз;
                 
           КонецЕсли;
           
     КонецЕсли;



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


1C++ rocks!

Сообщений: 135
Зарегистрирован: 22. Мая 2013
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1062 - 04. Апреля 2014 :: 15:20
Печать  
А что в итоги получилось?
Нашли способ сортировки добавленных колонок?
  
Наверх
 
IP записан
 
ildary
Full Member
***
Отсутствует



Сообщений: 163
Зарегистрирован: 24. Марта 2008
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1063 - 04. Апреля 2014 :: 15:42
Печать  
Нашел трансректальный способ - сменил ПД с источником Справочник на ПД с источником ИТЗ. Для моей текущей задачи этого достаточно. Для других - вряд ли.
  
Наверх
 
IP записан
 
barbitura
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 135
Зарегистрирован: 22. Мая 2013
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1064 - 04. Апреля 2014 :: 15:45
Печать  
ildary писал(а) 04. Апреля 2014 :: 15:42:
Нашел трансректальный способ - сменил ПД с источником Справочник на ПД с источником ИТЗ. Для моей текущей задачи этого достаточно. Для других - вряд ли.


Так а данные из справочника в ИТЗ загружаете? Запрос делаете?
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 69 70 [71] 72 73 ... 81
ОтправитьПечать