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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения, примеры, вопросы
Ответ #765 - 02. Июня 2010 :: 03:43
Печать  
Все события ТП объявляются как
<ИдентификаторТП><ИмяСобытия>(ТабличноеПоле[,Параметр1][,ПараметрN]).
Т.е. у тебя минимум две ошибки.
1. В процедуре не указан идентификатор ТП перед именем события
2. Первым параметром всегда будет ТабличноеПоле, а потом все остальные указанные в документации.

Читать надо внимательнее. Это написано в доке.
  

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


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: Класс "ПоставщикДанных" - обсуждения, примеры, вопросы
Ответ #766 - 02. Июня 2010 :: 05:23
Печать  
vandalsvq писал(а) 01. Июня 2010 :: 22:01:
orefkov писал(а) 01. Июня 2010 :: 11:14:
Кроме того, без кода
Код
Выбрать все
	ДанныеСправочник.РодительВерхнегоУровня = ПолучитьПустоеЗначение("Справочник.Товары");
	ДанныеСправочник.Обновить();
 



табличное поле открывается пустым, и ничего не отображает, пока не переключишь иерархический просмотр.
Так и задумано?


Слушай, странное дело, покажи полный код как получается так что оно пустое вываливается (табличное поле). Данную ошибку повторить не смог.


Хм, оказалось достаточно вставить
ДанныеСправочник.Обновить();
тогда ТП заполняется. Но это как-то нелогично, оно же выводиться в первый раз, зачем надо обновлять?
Хотя я наверное не прав, там же всякие колонки добавляются и тп и тд...

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

	ДанныеСправочник = ПоставщикДанных.Данные;
	ДанныеСправочник.КнопкаПросмотр = 0;
	ДанныеСправочник.СпособРедактирования = 0;
	ДанныеСправочник.СоздатьКнопкиПоУмолчанию();

	ТабличноеПоле = ДанныеСправочник.ТабличноеПоле;
	ТабличноеПоле.СтильЗаголовков = 0;
	ТабличноеПоле.СтильРамки = 0;

	ДанныеСправочник.НоваяКолонка("Код");
	ДанныеСправочник.НоваяКолонка("Наименование");

	//ДанныеСправочник.РодительВерхнегоУровня = ПолучитьПустоеЗначение("Справочник.Товары");
	//ДанныеСправочник.Обновить();
КонецПроцедуры // ПослеСозданияФормы
 


  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: Класс "ПоставщикДанных" - обсуждения, примеры, вопросы
Ответ #767 - 02. Июня 2010 :: 05:33
Печать  
Версия 3.05.003 от 05.05.10 г

Отображаем иерархический справочник. Редактирование в списке. Жмем Enter, начинается редактирование строки. Жмем Esc. Вышли из редактирования строки. Перестали работать клавиши - ins, ctrl+down, ctrl+up, ctrl+F9, F5 и тд. Снова жмем Enter, Enter - все работает.
И еще такой вопрос - при редактировании в списке вставку элемента по Insert уже не отменить? те новый элемент создается сразу и отказаться уже нельзя?
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения, примеры, вопросы
Ответ #768 - 02. Июня 2010 :: 07:22
Печать  
Вызов "Обновить" прийдется делать по любому. Т.к. при этом происходит перестроение текста запроса (с учетом добавленных колонок, наложенных отборов и соединений). Так что пускай это будет относится к логике работы программы. Создал, добавил, настроил, обновил. Подмигивание
Редактирование и клавиатура... я такое отлавливал некоторое количество раз, по видимому это в ТП где-то (в самом табличном поле). Если смогу выявить закономерность попрошу посмотреть и поправить поведение. Класс только отрабатывает события клавиш и если они не доходят, то соответственно и ничего не происходит. - видимо ошибка в КОП все таки.
Добавление элементов при редактировании в форме списка - больной вопрос для меня. Логику поведения ТП я не придумал. На текущий момент поставщик что ODBC что SQLite не позволяет добавлять в ТП произвольную строку. Она должна быть в запросе. Вот и получается что добавление вызывает создание и запись элемента, а потом отображение и далее работа как с обычным элементом. Малость отличается от штатного, согласен. Но идеи как иначе у меня пока нет. Если есть предложения, с удовольствием рассмотрю. Как вариант в событии ПередУдалением можно самостоятельно добавлять проверку на заполненность реквизита и удалять его непосредственно.
  

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


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: Класс "ПоставщикДанных" - обсуждения, примеры, вопросы
Ответ #769 - 02. Июня 2010 :: 08:00
Печать  
Так. Принимаются ли доработки?

Вот хочу предложить, в ПоставщикДанных.Справочник в Процедура ИзменитьСтроку() Экспорт, со строки 2343 изменить так:

Код
Выбрать все
Если Врег(Лев(ТипВидДанных,10)) = "СПРАВОЧНИК" Тогда
	ВладелецРеквизита = ДанныеРеквизита.Владелец;
	Если ПустоеЗначение(ВладелецРеквизита) = 0 Тогда
		Если ТипЗначения(ВладелецРеквизита) = 2 Тогда
			Если ВладелецРеквизита = "ТекущаяСтрока" Тогда
				ВладелецРеквизита = ТекущаяСтрока;
			Иначе
				ВладелецРеквизита = ТекущаяСтрока.ПолучитьАтрибут(ВладелецРеквизита);
			КонецЕсли;
		КонецЕсли;
		КонтекстФормы.РедактированиеТП.ИспользоватьВладельца(ВладелецРеквизита);
	КонецЕсли;
	РодительРеквизита = ДанныеРеквизита.Родитель;
	Если ПустоеЗначение(РодительРеквизита) = 0 Тогда
		Если ТипЗначения(РодительРеквизита) = 2 Тогда
			Если ВладелецРеквизита = "ТекущаяСтрока" Тогда
				РодительРеквизита = ТекущаяСтрока;
			Иначе
				РодительРеквизита = ТекущаяСтрока.ПолучитьАтрибут(РодительРеквизита);
			КонецЕсли;
		КонецЕсли;
		КонтекстФормы.РедактированиеТП.ИспользоватьРодителя(РодительРеквизита);
	КонецЕсли;
 



Это позволяет писать такой код при инициализации поставщика:
Код
Выбрать все
	ТабличноеПоле.Реквизиты.БазоваяЕдиница.Владелец = "ТекущаяСтрока";
	ТабличноеПоле.Реквизиты.ДоговорПоставщика.Владелец = "ОсновнойПоставщик";
 


Ну, типа атрибута "Связан с" в штатных формах.


Про кнопки - очевидно, что-то происходит в
Код
Выбрать все
Процедура ПриНажатииКлавиши(КодКлавиши,Данные,Клавиатура,ФСО) Экспорт
	Если МоментРедактирования = 1 Тогда
		Возврат;
	КонецЕсли;
 

в ПоставщикДанных.ТабличноеПоле
Видимо при отмене редактирования МоментРедактирования не сбрасывается в 0.
Про новую строку я подумаю еще...
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

МоментРедактирования... вот черт, а слона то я и не заметил. Ладно поправим.

Пы.сы. спасибо за проявленный интерес и предложения по делу Подмигивание.
  

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


I Love YaBB 2!

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

Это я пока еще со справочниками пытаюсь разобраться, потом и до других расширений дело дойдет...
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: Класс "ПоставщикДанных" - обсуждения, примеры, вопросы
Ответ #772 - 02. Июня 2010 :: 11:02
Печать  
Версия 3.05.003 от 05.05.10 г
Хотелось бы, чтобы при включении в справочнике РежимВыбора = 1, Shift + Enter работало как "Изменить", а не как "Выбрать", как сейчас.
И чтобы в этом же режиме, при входе в группу справочника по Enter, сохранялась текущая колонка, сейчас она сбрасывается.
Хотя при входе в группу по Ctrl+Down - текущая колонка сохраняется. Это делается разным кодом? Рефакторить.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения, примеры, вопросы
Ответ #773 - 02. Июня 2010 :: 11:34
Печать  
Александр, главное чтобы твой интерес носил прикладной характер, а не праздный Подмигивание. В остальном твои пожелания сча добавлю в wishlist

Пы.сы. ушел добавлять....  Подмигивание
  

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


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: Класс "ПоставщикДанных" - обсуждения, примеры, вопросы
Ответ #774 - 02. Июня 2010 :: 12:14
Печать  
По потере текущей колонки при заходе в группу по Enter при РежимВыбора = 1
Посмотрел код - в обоих случаях работает один и тот же код, что и при заходе в группу по Cttrl+Down.
Очевидно, трабла связана с тем, что вход по Enter вызывается из обработки события Выбор.
Немного модифицировал код в ПриНажатииКлавиши:

Код
Выбрать все
Процедура ПриНажатииКлавиши(КодКлавиши,Данные,Клавиатура,ФСО) Экспорт
	ФлагShift = Клавиатура.ПолучитьСостояниеКлавиши(Клавиатура.VK_SHIFT);
	ФлагCtrl = Клавиатура.ПолучитьСостояниеКлавиши(Клавиатура.VK_CONTROL);
	КлавишаВверх = Клавиатура.ПолучитьСостояниеКлавиши(Клавиатура.VK_UP);
	КлавишаВниз = Клавиатура.ПолучитьСостояниеКлавиши(Клавиатура.VK_DOWN);

	Если (КодКлавиши = 13) и (РежимВыбора = 1) Тогда
		Если ПустоеЗначение(ТабличноеПоле.ТекущиеДанные) = 0 Тогда
			Если ТабличноеПоле.ТекущиеДанные.ЭтоГруппа = 1 Тогда
				ПриИзмененииРодителя(ТабличноеПоле.ТекущаяСтрока,1);
				ФСО = 0;
				Возврат;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
 


Так работает.
Интерес не праздный, надо писать конфу с нуля под sql для своей старой работы. Отличная возможность для прикручивания свистелок.
  
Наверх
 
IP записан
 
Bill
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 64
Зарегистрирован: 04. Ноября 2008
Re: Класс "ПоставщикДанных" - обсуждения, примеры, вопросы
Ответ #775 - 03. Июня 2010 :: 05:27
Печать  
Цитата:
Добавление элементов при редактировании в форме списка - больной вопрос для меня. Логику поведения ТП я не придумал. На текущий момент поставщик что ODBC что SQLite не позволяет добавлять в ТП произвольную строку. Она должна быть в запросе. Вот и получается что добавление вызывает создание и запись элемента, а потом отображение и далее работа как с обычным элементом. Малость отличается от штатного, согласен. Но идеи как иначе у меня пока нет. Если есть предложения, с удовольствием рассмотрю. Как вариант в событии ПередУдалением можно самостоятельно добавлять проверку на заполненность реквизита и удалять его непосредственно.


Я выходил из этой ситуации следующим образом:
К запросу поставщика добавлял примерно такую секцию:
Код
Выбрать все
|UNION ALL
|
|SELECT -1 --ROW_ID
|  , 0  --IsMark
|  , 3  --Картинка
|  , $ПустойИД --ID
|  , ?Код(14, 10) --Код
|  , ?Наименование(14, 50) --Наименование
|  , ?Реквизит1(14, 10)
|  , ?Реквизит2(14, 20)
.....
|  , ?РеквизитN(14, 15)
|WHERE ?ВводНового(4, 1, 0)=1
 



При создании ТП:
Код
Выбрать все
ПоставщикДанных.Параметры.Установить("ВводНового", 0);
ПоставщикДанных.Параметры.Установить("Код", "");
ПоставщикДанных.Параметры.Установить("Наименование", "");
ПоставщикДанных.Параметры.Установить("Реквизит1", "");
ПоставщикДанных.Параметры.Установить("Реквизит2", "");
....
ПоставщикДанных.Параметры.Установить("РеквизитN", ""); 



При вводе новой строки:
Код
Выбрать все
ПоставщикДанных.Параметры.Установить("ВводНового", 1);
ПоставщикДанных.Обновить();
НоваяСтрока = 1;
ТП.ТекущаяСтрока=-1;
тп.РедактироватьЗначение(...)
 



В ПриРедактированииЗначения

Код
Выбрать все
Если НоваяСтрока = 1 Тогда
    тп.ПоставщикДанных.Параметры.Установить(кол.Имя,Значение);
    тп.ПоставщикДанных.Обновить(стр);
КонецЕсли;
 



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


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

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

В общем попробую одолеть на досуге. Ведь прийдется тогда и логику редактирования для новой строки поменять. Чтобы при редактировании завершал текущую ячейку и переходил к следующей видимой и редактировал уже ее.

Пы.сы. спасибо за направление для размышления. В любом случае уже неплохая идея.  Подмигивание
  

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


I Love YaBB 2!

Сообщений: 101
Зарегистрирован: 01. Августа 2006
Re: Класс "ПоставщикДанных" - обсуждения, примеры, вопросы
Ответ #777 - 03. Июня 2010 :: 15:11
Печать  
Непонятная для меня ситуация с поставщиком данных справочник.
Если в процедуре ПриПолученииЗапроса я меняю строку условия на свою, то группы выводятся внизу или выводятся только группы в зависимости от условий, хотя сам запрос возвращает строки в нормальном виде, что с моим условием , что со стандартным, группы сверху товары внизу, все отсортировано как надо.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

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

Неправда ваша.
А по новой строке - такую же мысль примерно думал, но не додумал. А решение то изящное...

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


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

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

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