Переключение на Главную Страницу Страницы: 1 ... 73 74 [75] 76 77 ... 81 ОтправитьПечать
Очень популярная тема (более 25 ответов) Класс "ПоставщикДанных" - обсуждения. Часть 2. (число прочтений - 415081 )
Alexx_S
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 41
Местоположение: UA
Зарегистрирован: 23. Сентября 2009
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1110 - 22. Июля 2014 :: 11:44
Печать  
Подобное шаманство помогает, если его поместить в правильном месте :
Написано
Процедура глМаксимизироватьОкно()
     // вызывать в конце процедуры "ПриОткрытии" из модуля формы.......
  
Наверх
 
IP записан
 
Mink Snopes
Junior Member
**
Отсутствует


bookkeeping considered
harmful

Сообщений: 30
Местоположение: Dombabwe
Зарегистрирован: 05. Ноября 2013
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1111 - 22. Июля 2014 :: 12:44
Печать  
Alexx_S писал(а) 22. Июля 2014 :: 11:43:
Привязку можна делать в ПриОткрытии()
Вызывать Форма.КоманднаяПанель.Видимость({0,1}) делается в ПослеОткрытия()
создание ПоставщикДанных и вызов ПоставщикДанных.Обновить()  делается в ПослеСозданияФормы() (у меня там вызов процедур где происходит инициализация поставщика и в конце процедуры ПоставщикДанных.Обновить())


Если привязывать в ПриОткрытии, то у меня получается такое, хотя наша дискуссия получается ни о чем, поскольку разные классы для привязок используем


По поводу SendKeys - окей, я не возражаю
  
Наверх
 
IP записан
 
Alexx_S
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 41
Местоположение: UA
Зарегистрирован: 23. Сентября 2009
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1112 - 22. Июля 2014 :: 12:47
Печать  
Mink Snopes писал(а) 22. Июля 2014 :: 12:44:
Alexx_S писал(а) 22. Июля 2014 :: 11:43:
Привязку можна делать в ПриОткрытии()
Вызывать Форма.КоманднаяПанель.Видимость({0,1}) делается в ПослеОткрытия()
создание ПоставщикДанных и вызов ПоставщикДанных.Обновить()  делается в ПослеСозданияФормы() (у меня там вызов процедур где происходит инициализация поставщика и в конце процедуры ПоставщикДанных.Обновить())


Если привязывать в ПриОткрытии, то у меня получается такое, хотя наша дискуссия получается ни о чем, поскольку разные классы для привязок используем
http://i.imgur.com/0In56Mh.png

По поводу SendKeys - окей, я не возражаю



А если так ?

//======================================================================
Процедура ПривязкаЭлементов()
     ПривязкаЭлементов = УправлениеФормой.ПривязкаЭлементов;

     ЭлементПривязки = ПривязкаЭлементов.Добавить("КП_");
     ЭлементПривязки.Установить("Верх", "В", "Форма");
     ЭлементПривязки.Установить("Низ", "В", "Форма");
     ЭлементПривязки.Установить("Лево", "Л", "Форма");
     ЭлементПривязки.Установить("Право", "П", "Форма");

     ЭлементПривязки = ПривязкаЭлементов.Добавить("ТП_");
     ЭлементПривязки.Установить("Верх", "Н", "КП_");
     ЭлементПривязки.Установить("Низ", "Н", "Форма");
     ЭлементПривязки.Установить("Лево", "Л", "Форма");
     ЭлементПривязки.Установить("Право", "П", "Форма");

     ПривязкаЭлементов.Привязать();
КонецПроцедуры
  
Наверх
 
IP записан
 
Mink Snopes
Junior Member
**
Отсутствует


bookkeeping considered
harmful

Сообщений: 30
Местоположение: Dombabwe
Зарегистрирован: 05. Ноября 2013
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1113 - 22. Июля 2014 :: 13:22
Печать  
Так не выйдет
Код
Выбрать все
\БАНКОВСКИЕВЫПИСКИ.ERT(7)}: Неудачная попытка создания объекта (УправлениеФормой) 


Но в целом да, я подозреваю что класс УправлениеФормой мог сам заниматься установкой хуков и разруливать, когда ему вычислять размеры контролов/формы. Тот класс, который пришел на замену (ЭлементыФормы.Привязка) ничего подобного не делает и требует явного вызова ВключитьПерехватСобытий(Конт). Тут не помешал бы комментарий автора, так что ничего не остается как смиренно подождать.


UPD. Ага, оказывется УправлениеФормой - отдельная разработка, нашел тему, буду проверять

UPD1. Все получилось с использованием "УправлениеФормой" (http://www.1cpp.ru/forum/YaBB.pl?num=1278756052/39#39), как-то так:
Код
Выбрать все
Процедура ПриОткрытии()
...
	УправлениеФормой = СоздатьОбъект("УправлениеФормой");
	Привязка = УправлениеФормой.ПривязкаЭлементов;
	Параметры = Привязка.Добавить("ТП_");
	Параметры.Право.Вид = Привязка.ПраваяГраница;
	Параметры.Право.Элемент = "Форма";
	Параметры.Низ.Вид = Привязка.НижняяГраница;
	Параметры.Низ.Элемент = "Форма";
	Привязка.Привязать();
КонецПроцедуры 


В общем, как и было в оригинальном примере. Alexx_S, спасибо!
« Последняя редакция: 24. Июля 2014 :: 06:06 - Mink Snopes »  
Наверх
 
IP записан
 
Fisco
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 6
Зарегистрирован: 26. Июня 2014
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1114 - 31. Июля 2014 :: 20:17
Печать  
Какая-то черная магия! Простейшая обработка, все работает нормально. НО!
При закрытии формы высыпает ряд проблем:
"ПоставщикДанных.ТабличноеПоле::СохранитьПозициюКолонок() : Поле агрегатного объекта не обнаружено
ие");
ert(698) }

ПоставщикДанных.ТабличноеПоле::ПриУничтожении() : ПоставщикДанных.ТабличноеПоле::СохранитьПозициюКолонок() : Поле агрегатного объекта не обнаружено
ие");
ert(698) }

я().СохранитьПозициюКолонок();
ert(509) }

ПоставщикДанных.ТабличноеПоле::ПриУничтожении() : ПоставщикДанных.ТабличноеПоле::СохранитьПозициюКолонок() : Поле агрегатного объекта не обнаружено
ие");
ert(698) }

я().СохранитьПозициюКолонок();
ert(509) }

ПоставщикДанных.ТабличноеПоле::СохранитьПозициюКолонок() : Поле агрегатного объекта не обнаружено
ие");
ert(698) }

ПоставщикДанных.ТабличноеПоле::ПриУничтожении() : ПоставщикДанных.ТабличноеПоле::СохранитьПозициюКолонок() : Поле агрегатного объекта не обнаружено
ие");
ert(698) }

я().СохранитьПозициюКолонок();
ert(509) }

ПоставщикДанных.ТабличноеПоле::ПриУничтожении() : ПоставщикДанных.ТабличноеПоле::СохранитьПозициюКолонок() : Поле агрегатного объекта не обнаружено
ие");
ert(698) }

я().СохранитьПозициюКолонок();
ert(509) }
"
Причем иногда высыпает, а иногда нет! Обработку прицепил.

З.Ы. Шаман не пьян.
  

________5.ert ( 17 KB | Загрузки )
Наверх
 
IP записан
 
Fisco
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 6
Зарегистрирован: 26. Июня 2014
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1115 - 08. Августа 2014 :: 04:17
Печать  
Вопрос решен.
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1116 - 28. Августа 2014 :: 06:45
Печать  
ПоставщикДанных.Справочник
не работает отбор по колонке "ЭтоГруппа"



если поставить отбор ЭтоГруппа = 1, то работает, а ЭтоГруппа = 0 не работает ((((
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1117 - 28. Августа 2014 :: 07:53
Печать  
ПоставщикДанных.Справочник
Если тип кода "Строковый", то новый код формируется не уникальным. Для себя внес поправки:

Код
Выбрать все
Функция ПолучитьНовыйКодСправочника()
	Если МетаСправочник.ДлинаКода = 0 Тогда
		Возврат 1;
	КонецЕсли;

	ТекстЗапросаКода = "select max(sc_vt.code) as МаксКод
	|from Справочник." + ВидСправочника + " as sc_vt $nolock
	|";

	Если МетаСправочник.СерииКодов = "ВПределахПодчинения" Тогда
		Если (МетаСправочник.Владелец.Выбран() = 1) И (РодительВерхнегоУровня.Уровень() = 0) Тогда
			ТекстЗапросаКода = ТекстЗапросаКода + "where sc_vt.parentext = '"+МетаДата.ЗначениеВСтрокуБД(Владелец)+"'
			|";
		ИначеЕсли МетаСправочник.КоличествоУровней > 1 Тогда
			ТекстЗапросаКода = ТекстЗапросаКода + "where sc_vt.parentid = '"+МетаДата.ЗначениеВСтрокуБД(РодительВерхнегоУровня)+"'
			|";
		КонецЕсли;
	КонецЕсли;

	ПрямойЗапрос.РежимОтладки = РежимОтладки;
	Результат = ПрямойЗапрос.Выполнить(,ТекстЗапросаКода);
	ЗначениеКода = Результат.ПолучитьЗначение(1,1);
	Если МетаСправочник.ТипКода = "Текстовый" Тогда
		Если ПустоеЗначение(ЗначениеКода) = 1 Тогда
			Возврат Формат(1, "Ч(0)" + МетаСправочник.ДлинаКода); // [+] Asakra
		КонецЕсли;

		// отделим числовую часть от текстовой
		ДлинаЗначения = СтрДлина(ЗначениеКода);
		СтрЧислоЗначения = "";
		СтрОстатокКода = ЗначениеКода;
		Для НомерСимвола = 0 По ДлинаЗначения-1 Цикл
			Символ = Сред(ЗначениеКода,ДлинаЗначения-НомерСимвола,1);
			Если Найти("0123456789",Символ) > 0 Тогда
				СтрЧислоЗначения = Символ + СтрЧислоЗначения;
				СтрОстатокКода = Лев(СтрОстатокКода,СтрДлина(СтрОстатокКода)-1);
			Иначе
				Прервать;
			КонецЕсли;
		КонецЦикла;

		// если числовая часть пуста вернем максимальное значение
		// иначе увеличим числовую часть на 1, добавим представление к остатку кода и обрежем до необходимой длины с левой части
		Если ПустоеЗначение(СтрЧислоЗначения) = 1 Тогда
			НовоеЗначение = ЗначениеКода;
		Иначе
			ЗначениеКодаЧисло = Число(СтрЧислоЗначения);

			// [+] Asakra
			ЛидирующиеНули = СтрЗаменить(СтрЧислоЗначения, Строка(ЗначениеКодаЧисло), "");

			НовоеЗначение = Лев(СтрОстатокКода + ЛидирующиеНули + (ЗначениеКодаЧисло + 1), МетаСправочник.ДлинаКода);
			// [+] Asakra
		КонецЕсли;
	Иначе
		ЗначениеКода = Число(ЗначениеКода);
		НовоеЗначение = ЗначениеКода + 1;
	КонецЕсли;
	Возврат НовоеЗначение;
КонецФункции 

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


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1118 - 28. Августа 2014 :: 09:16
Печать  
Asakra писал(а) 28. Августа 2014 :: 06:45:
не работает отбор по колонке "ЭтоГруппа"


пока сделал так:
Код
Выбрать все
Функция СформироватьТекстОтбора()
	ТекстОтбора = Сервис.ПолучитьСтрокуОтбора(СвойствоОтбор, ПрямойЗапрос);
	Если ПустоеЗначение(ТекстОтбора) = 1 Тогда
		Возврат "";
	КонецЕсли;

	// [-] Asakra, 28.08.2014
	//Если МетаСправочник.КоличествоУровней > 1 Тогда
	//	ТекстОтбора = "(" + ТекстОтбора + " or [ОсновнаяТаблица].isfolder = 1)";
	//КонецЕсли;
	// [-] _

	ТекстОтбора = СтрЗаменить(ТекстОтбора,"[ОсновнаяТаблица]","ТекущийОбъект");

	Возврат ТекстОтбора;
КонецФункции 



но это целиком не решает проблемы. может будут обновления и этот вопрос разработчик решит  Подмигивание
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1119 - 28. Августа 2014 :: 09:18
Печать  
При иерархическом просмотре отбор всегда идет по принципу "ОтборПользователя + ИЛИ ЭтоГруппа = ЛОЖЬ". Т.е. чтобы показывать иерархию справочника.
Таким образом правильно отбор будет работать, если выключить иерархический просмотр.

По второму вопросу, посмотрю если не забуду Подмигивание
  

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


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1120 - 28. Августа 2014 :: 09:24
Печать  
vandalsvq писал(а) 28. Августа 2014 :: 09:18:
если выключить иерархический просмотр.


я это первым делом пробовал - не работает! (((
могу скрин выложить....
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1121 - 28. Августа 2014 :: 09:28
Печать  
вот так:
Код
Выбрать все
Если (МетаСправочник.КоличествоУровней > 1) И (ИерархическийПросмотр = 1) Тогда 



работает как вы говорите
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1122 - 28. Августа 2014 :: 09:38
Печать  
мне почему-то казалось, что в 8-ке не важно включена ли иерархия. проверил. таки да - нужно снять иерархию.
тогда оставлю так.
спасибо за наводку Улыбка
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1123 - 30. Августа 2014 :: 02:44
Печать  
Еще ошибка:
ПоставщикДанных.Справочник и ПоставщикДанных.ВыборГруппы

Код
Выбрать все
ПрямойЗапрос::ПодготовитьПараметризованныйЗапрос() : no such column: $СпрСкидки.Процент
ЗапросSQLite.Подготовить(ПараметризированныйТекст);
{E:\Data1C\Test\Классы\ПрямыеЗапросы\ПрямойЗапрос.ert(13169) }

ПрямойЗапрос.ПодготовитьПараметризованныйЗапрос();
{E:\DATA1C\TEST\КЛАССЫ\ПОСТАВЩИКДАННЫХ\ПОСТАВЩИКДАННЫХ.ВЫБОРГРУППЫ.ERT(68)}: ПрямойЗапрос::ПодготовитьПараметризованныйЗапрос() : no such column: $СпрСкидки.Процент
ЗапросSQLite.Подготовить(ПараметризированныйТекст);
{E:\Data1C\Test\Классы\ПрямыеЗапросы\ПрямойЗапрос.ert(13169) } 



окошко выбора группы открывается, но при разворачивании иерархии возникает ошибка.
при этом установлен отбор по доп. колонке, т.е. "$СпрСкидки.Процент", является колонкой добавленной через процедуру "ДобавитьСоединениеДанных".
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1124 - 30. Августа 2014 :: 05:19
Печать  
Попробуй сначала сделать тестовую выборку из полученного прямого запроса, типа "Выбрать первые 1 * из ...", чтобы посмотреть - какой колонкой выглядит это твое соединение. Возможно оно уже будет выглядеть как "Процент", и преобразовывать ее через метапарсер (тот самый волшебный знак доллара "$") не надо.
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 73 74 [75] 76 77 ... 81
ОтправитьПечать