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


1C++ rocks!

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


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1141 - 16. Ноября 2014 :: 06:24
Печать  
если кому нужно будет, допилил класс так:
Код
Выбрать все
Процедура АктивизироватьСтроку(Ссылка) Экспорт

	Если (ТипЗначенияСтр(Ссылка) <> "Справочник") ИЛИ (ПустоеЗначение(Ссылка) = 1) Тогда
		я().Обновить();
		Возврат;
	КонецЕсли;

	РодительВерхнегоУровня = Ссылка.Родитель;

	я().Обновить();

	ТабличноеПоле.ТекущаяСтрока = Ссылка;

КонецПроцедуры // АктивизироватьСтроку()
 



внутреннюю процедуру АктивизироватьСтроку пришлось переименовать.
  
Наверх
 
IP записан
 
Igor Nikolaenko
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 47
Зарегистрирован: 01. Апреля 2010
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1142 - 19. Ноября 2014 :: 09:30
Печать  
Предлагаю внести изменение в Классе "Объекты_v8\ЭлементОтбора.ert".

Исправляем ошибку, которая возникает при добавлении отбора по реквизиту справочника или документа с типом "дата" и вид отбора "между".

Функция, в которую вносим исправление:

Функция ПолучитьТекстЗапроса(ПрямойЗапрос = "") Экспорт

далее кусок кода с исправлением:

ИначеЕсли Лев(ВрегВидСравнения,8) = "ИНТЕРВАЛ" Тогда
           //*Николаенко И.Н., 2014-11-19, исправление и оптимизация условия запроса
           //СтрокаЗначения = РеквизитЗапроса+" between :p_start_"+_Имя+"
           //|      and :p_end_"+_Имя+?(ТипЗначения(ЗначениеСравненияC) = 3,"~","");
           // -------------

           Если Найти(РеквизитЗапроса,"[ТаблицаЖурнала].date_time_iddoc") > 0 Тогда
                 // это условие на дату документа, для попадания в индекс, используем сравнение без преобразования date_time_iddoc
                 СтрокаЗначения = "[ТаблицаЖурнала].date_time_iddoc between :p_start_"+_Имя+" and :p_end_"+_Имя+"~";
           Иначе

                 // это условие на обычный реквизит (число, дата или строка)
                 СтрокаЗначения = РеквизитЗапроса+" between :p_start_"+_Имя+" and :p_end_"+_Имя;
           КонецЕсли;

           //*_
           Если ПустоеЗначение(ПрямойЗапрос) = 0 Тогда
                 ПрямойЗапрос.УстановитьТекстовыйПараметр("p_start_"+_Имя,ЗначениеСравненияC);
                 ПрямойЗапрос.УстановитьТекстовыйПараметр("p_end_"+_Имя,ЗначениеСравненияПо);
           КонецЕсли;
  
Наверх
 
IP записан
 
newbas
Junior Member
**
Отсутствует



Сообщений: 32
Местоположение: Краснодар
Зарегистрирован: 29. Августа 2008
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1143 - 12. Декабря 2014 :: 11:00
Печать  
Почему-то не получается установить сортировку в справочнике. В процедуре "ПослеСозданияФормы" при инициализации ТП добавил код

Код
Выбрать все
	ТабличноеПоле.ВосстановитьПозициюКолонок();
	ТабличноеПоле.ТекущаяКолонка = ТабличноеПоле.Колонки.Получить("Код");
	ТабличноеПоле.СортироватьПоВозрастанию();
	ПоставщикДанныхМногострочнаяЧасть.Обновить();
 


Однако сортировка все равно стоит по наименованию. В чем может быть причина?
  
Наверх
 
IP записан
 
JB
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 5
Зарегистрирован: 24. Февраля 2015
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1144 - 25. Февраля 2015 :: 13:12
Печать  
Помогите, пожалуйста!
Есть табличное поле с источником - ИТ. Таблицу я сначала заполняю счетами, затем добавляю признаки галочками и запускаю обработку.

Как можно сделать так: при добавлении строки в ТП сразу открывать журнал счетов, где я выбираю счет.
И как сделать чтобы после выбора счета в колонку "клиент" автоматом добавлялось значение "Клиент" из счета?
  

1CPP.jpg ( 18 KB | Загрузки )
1CPP.jpg
Наверх
 
IP записан
 
JB
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 5
Зарегистрирован: 24. Февраля 2015
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1145 - 26. Февраля 2015 :: 13:34
Печать  
Отвечу сам себе  Очень довольный

Сделал так:

Код
Выбрать все
Процедура ТПСписокСчетовПередНачаломДобавления(ТабличноеПоле,Копир,ФСО) // Предопределенная из "Поставщика данных"
	Если Копир=1 Тогда
		Возврат;
	КонецЕсли;
	ИТЗ=ПДСписокСчетов.Данные.ИндексированнаяТаблица;
	ИТЗ.НоваяСтрока();
    ТабличноеПоле.ОбновитьСтроки();
    ТабличноеПоле.ТекущаяСТрока = ИТЗ.КоличествоСтрок();
	Колонка = ТабличноеПоле.Колонки.Получить("Счет");
	ТабличноеПоле.Выбор(ТабличноеПоле.ТекущаяСТрока,Колонка,3) ;
	Сервис.SendKeys("{F4}");
    ФСО=0;
КонецПроцедуры 



Понимаю, что криво. Можно ли как-нибудь без F4?
B еще пара вопросов:
1. поставщик данных находится на форме документа с многострочной частью. И при нажатии ins или del происходят события одновременно и в табличном поле, и в многострочной части. Где можно поставить ФСО=0?
2. Как запретить редактирование конкретной колонки?
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1146 - 15. Марта 2015 :: 02:51
Печать  
подскажите как победить
Код
Выбрать все
ПоставщикДанных.ИндексированнаяТаблица::ДобавитьДанныеОКолонке(Строка Идентификатор=Номенклатура, ОписаниеТипов ОписаниеТипов=, Строка Заголовок=Номенклатура, Число ШиринаКолонки=40, Число Итоги=0, Число ОтметкаНезаполненного=0) : Неверно указан номер строки!  Номер строки = 1, всего строк = 0
Колонка = Колонки.Добавить(Идентификатор);
лица.ert(182) }

аЗначений ТаблицаЗначений=) : ПоставщикДанных.ИндексированнаяТаблица::ДобавитьДанныеОКолонке(Строка Идентификатор=Номенклатура, ОписаниеТипов ОписаниеТипов=, Строка Заголовок=Номенклатура, Число ШиринаКолонки=40, Число Итоги=0, Число ОтметкаНезаполненного=0) : Неверно указан номер строки!  Номер строки = 1, всего строк = 0
Колонка = Колонки.Добавить(Идентификатор);
лица.ert(182) }

я().НоваяКолонка(ИдентификаторКолонки,ТипВид,Длина,Точность,Заголовок,Ширина);
лица.ert(633) }

ДанныеТабличногоПоля.ЗаполнитьИзОбъекта(ТаблицаЦен);
{D:\DATA1C\DEVISE\ФОРМИРОВАНИЕЦЕН.ERT(1770)}: аЗначений ТаблицаЗначений=) : ПоставщикДанных.ИндексированнаяТаблица::ДобавитьДанныеОКолонке(Строка Идентификатор=Номенклатура, ОписаниеТипов ОписаниеТипов=, Строка Заголовок=Номенклатура, Число ШиринаКолонки=40, Число Итоги=0, Число ОтметкаНезаполненного=0) : Неверно указан номер строки!  Номер строки = 1, всего строк = 0
Колонка = Колонки.Добавить(Идентификатор);
лица.ert(182) }

я().НоваяКолонка(ИдентификаторКолонки,ТипВид,Длина,Точность,Заголовок,Ширина);
лица.ert(633) }
 

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


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1147 - 15. Марта 2015 :: 02:59
Печать  
найти источник проблемы не могу. сделал так.
Код
Выбрать все
Процедура ЗаполнитьИзОбъектаТаблицаЗначений(ТаблицаЗначений)
	я().Очистить();
	ТабличноеПоле.ОбновитьСтроки();
	//ТаблицаЗначений//:ТаблицаЗначений
	Для НомерКолонки = 1 По ТаблицаЗначений.КоличествоКолонок() Цикл
		ТипВид = "Неопределенный"; Длина = 0; Точность = 0; Заголовок = ""; Ширина = 0;
		ИдентификаторКолонки = ловок,Ширина);
		Если ПустаяСтрока(ТипВид) = 1 Тогда
			ТипВид = "Неопределенный";
		КонецЕсли;
		я().НоваяКолонка(ИдентификаторКолонки,ТипВид,Длина,Точность,Заголовок,Ширина);
	КонецЦикла;
	ИндексированнаяТаблица.Загрузить(ТаблицаЗначений);

	я().Обновить();
КонецПроцедуры	// ЗаполнитьИзОбъектаТаблицаЗначений
 



добавил: ТабличноеПоле.ОбновитьСтроки();
ошибку можно наблюдать, если вызвать дважды метод "ЗаполнитьИзОбъекта".
  
Наверх
 
IP записан
 
Kalen
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 185
Зарегистрирован: 29. Марта 2010
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1148 - 24. Апреля 2015 :: 11:44
Печать  
Цитирую доку Цитата:
ВАЖНО
Объект «ПоставщикДанных.КоманднаяПанель» реализован на базе АктивИкс - “MSComctlLib.Toolbar.2” и имеет ограничения заложенные в данный объект. В том числе:
  • Объект может не отображаться на форме или отображаться не корректно, для этого достаточно в методе «ПослеОткрытия» (событие формы ВК FormEx) сделать видимость сначала = 0, затем = 1.


Не знаю как у вас, а у меня, не смотря на соблюдение данной рекомендации, панельки нет-нет да и подглюкивают при открытии форм. Да и надоело каждый раз писать Видимость(0/1). Засунул это внутрь класса и повесил на таймер. Панельки пропадать перестали.
  

toolbar.zip ( 11 KB | Загрузки )
Наверх
GTalkICQ  
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1149 - 07. Мая 2015 :: 15:07
Печать  
Столкнулся с следующей ситуацией.

При пометке на удаление в ПД.Справочник элемент и подчиненные справочники помечаются на удаление. А при снятии пометки - с элемента снимается пометка, а с подчиненных - нет!
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1150 - 14. Мая 2015 :: 08:55
Печать  
Почему бы не сделать в классе ПоставщикДанных.Справочник так:

Код
Выбрать все
Процедура ПриВыбореЭлемента(ТекущаяСтрока)
...........
	Если Информатор.МетодСуществует(КонтекстФормы,ИмяМетода) = 1 Тогда
...........
	Иначе
		КонтекстФормы.Форма.ВыполнитьВыбор(ТекущаяСтрока);
	КонецЕсли;
КонецПроцедуры
 



Тогда не нужно будет прописывать везде, где используется этот класс, процедуру ПриВыбореЗначения для обработки выбора элемента, если форма открывалась в режиме выбора.

И аналогично в ПД.Журнал
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1151 - 21. Мая 2015 :: 03:42
Печать  
alyuev писал(а) 14. Мая 2015 :: 08:55:
Почему бы не сделать в классе ПоставщикДанных.Справочник так:

Код
Выбрать все
Процедура ПриВыбореЭлемента(ТекущаяСтрока)
...........
	Если Информатор.МетодСуществует(КонтекстФормы,ИмяМетода) = 1 Тогда
...........
	Иначе
		КонтекстФормы.Форма.ВыполнитьВыбор(ТекущаяСтрока);
	КонецЕсли;
КонецПроцедуры
 



Тогда не нужно будет прописывать везде, где используется этот класс, процедуру ПриВыбореЗначения для обработки выбора элемента, если форма открывалась в режиме выбора.

И аналогично в ПД.Журнал


а так разве не пойдет?
Код
Выбрать все
ПД.РежимВыбора = 1; 


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


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1152 - 21. Мая 2015 :: 07:50
Печать  
Нет.

ПД.РежимВыбора = 1 лишь активизирует процедуру класса ПриВыбореЭлемента. А уже в ней происходит вызов события "ПриВыбореЗначения" в контексте создания класса. А если "ПриВыбореЗначения" не прописана в контексте, то и ничего не произойдет, т.е. выбора значения.

Моё решение избавляет класс от этого недостатка.
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1153 - 28. Мая 2015 :: 07:18
Печать  
Анализировал что же грузит мою информационную базу и заметил что табличные поля сделанные на Поставщике Данных генерируют неоптимальный запрос. А именно - не накладывается условие по виду документа (поле IDDOCDEF).
Внес исправления:
Файл: ПоставщикДанных.Документы.ert
Код
Выбрать все
Функция ПолучитьТекстИсточникаСбора(ТекстСоединения = "") 


Строка 150
Код
Выбрать все
|		on ТекущийОбъект.iddoc = ШапкаДокумента.iddoc 


заменить на
Код
Выбрать все
|		on ТекущийОбъект.iddoc = ШапкаДокумента.iddoc and ТекущийОбъект.IDDOCDEF = :ВидДокумента."+ВидДокумента+" 


И строка 134 аналогично.
Версия класса 5.0.5 23.05.2014.
Стало значительно легче - а то был INDEX SCAN по ACDATETIME теперь INDEX SEEEK по IDDOC+IDDOCDEF.
  
Наверх
IP записан
 
Igor Nikolaenko
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 47
Зарегистрирован: 01. Апреля 2010
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #1154 - 28. Мая 2015 :: 12:13
Печать  
leshik писал(а) 28. Мая 2015 :: 07:18:
Стало значительно легче - а то был INDEX SCAN по ACDATETIME теперь INDEX SEEEK по IDDOC+IDDOCDEF.


Спасибо. Действительно, стало ещё быстрее.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 75 76 [77] 78 79 ... 81
ОтправитьПечать