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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #795 - 25. Мая 2012 :: 08:59
Печать  
Вероятнее всего первое срабатывание вызывается когда колонки еще не созданы. Варианты выхода попробовать цену засунуть в обязательные колонки, или делать "ТабличноеПоле.Колонки.Найти(ИмяКолонки) >= 0" и тогда "ДанныеСтроки.Цена".
  

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #796 - 25. Мая 2012 :: 09:43
Печать  
vandalsvq писал(а) 25. Мая 2012 :: 08:59:
Вероятнее всего первое срабатывание вызывается когда колонки еще не созданы.


А почему на предыдущей версии ПД работало?

vandalsvq писал(а) 25. Мая 2012 :: 08:59:
Варианты выхода попробовать цену засунуть в обязательные колонки, или делать "ТабличноеПоле.Колонки.Найти(ИмяКолонки) >= 0" и тогда "ДанныеСтроки.Цена".


Обязательные колонки - имеешь ввиду "УстановитьПоляЗапроса"?

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


у ТП.Колонки нет метода "Найти" (( вобщем, вот так извратился:
Код
Выбрать все
	Попытка
		ЦенаЦены=ДанныеСтроки.Цена;
		ОформлениеСтроки.Ячейки.Наценка.УстановитьТекст("ЦЕНА С/С");
	Исключение
		Возврат;
	КонецПопытки; 

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #797 - 25. Мая 2012 :: 13:54
Печать  
Вероятнее всего связано с какими нибудь внутренними "незадокументированными" изменениями Улыбка
С методом "Найти" я тебя попутал, извини. Используй метод "Индекс".
Кстати если не ошибаюсь в список колонок метода "УстановитьПоляЗапроса" передается строка. Хотя может быть и СЗ и еще что Улыбка мало ли что я там понаписал Улыбка.
А почему ты сразу не добавить колонку данных с текстом и ее не выведешь вместо того что тебе надо? Я вот при выводе строки вообще редко использую.
  

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


1C++ rocks!

Сообщений: 185
Зарегистрирован: 29. Марта 2010
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #798 - 25. Мая 2012 :: 14:11
Печать  
Пишу:
Код
Выбрать все
ПоставщикДанных = СоздатьОбъект("ПоставщикДанных");
ПоставщикДанных.ТипЗначений = "Справочник.Клиенты";
ПоставщикДанных.КонтейнерКоманднойПанели = "ИДКоманднаяПанель";
ПоставщикДанных.КонтейнерТабличногоПоля = "СправочникСписокКлиенты";

ПоставщикДанных.Обновить(); 


При открытии формы выдает: Цитата:
ПоставщикДанных::ПриЗаписи_ТипЗначений(Строка Параметр=Справочник.Клиенты) : ПоставщикДанных.Справочник::ПриЗаписи_ВидСправочника(Строка Параметр=Клиенты) : ПоставщикДанных.ТабличноеПоле::Обновить() : ПоставщикДанных.Справочник::УстановитьПоставщикаДанных() : no such column: sc46.PARENTEXT
ПоставщикДанных.УстановитьТекстЗапроса(ТекстЗапроса,"[КлючПорядка]","[ТекущийЭлемент :Справочник."+ВидСправочника+"]");
{D:\db\Рабочая\Классы1С++\ПоставщикДанных\ПоставщикДанных.Справочник.ert(1077) }    вирт().Обновить();
}    ТабличноеПоле.Обновить();
{D:\db\Рабочая\Классы1С++\ПоставщикДанных\ПоставщикДанных.Справочник.ert(1363) }    ПоставщикДанных.ВидСправочника = Сред(ТипЗначений,12);
{D:\db\Рабочая\Классы1С++\ПоставщикДанных\ПоставщикДанных.ert(97) }

и не инициализируется.

Если заменить на:
Код
Выбрать все
ПоставщикДанных.ТипЗначений = "Справочник.Товары"; 

то все нормально.

Оба справочника НЕ подчиненные.
Куда копать?
« Последняя редакция: 25. Мая 2012 :: 16:15 - Kalen »  
Наверх
GTalkICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #799 - 25. Мая 2012 :: 15:25
Печать  
Отборы? Условия? ИспользоватьВладельца? Владелец?
  

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


1C++ rocks!

Сообщений: 185
Зарегистрирован: 29. Марта 2010
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #800 - 25. Мая 2012 :: 15:29
Печать  
Я привел буквально весь код. Никаких отборов. Никаких владельцев. Повторяю: справочник НЕ подчиненный.
  
Наверх
GTalkICQ  
IP записан
 
Kalen
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 185
Зарегистрирован: 29. Марта 2010
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #801 - 25. Мая 2012 :: 15:57
Печать  
при этом
Цитата:
ТекстЗапроса = "select      (case when sc46.isfolder = 1 then 0 else 2 end + case when sc46.ismark = '*' then 1 else 0 end) as [Пиктограмма]      ,case when sc46.isfolder = 1 then 1 else 0 end as ЭтоГруппа      ,case when sc46.ismark = '*' then 1 else 0 end as [ПометкаУдаления]"

Откуда берется PARENTEXT? Ниииииче не понимаю ©   Злой
  
Наверх
GTalkICQ  
IP записан
 
ReEnter58
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 13
Зарегистрирован: 25. Марта 2011
Итог по колонке переодического реквизита в табличном поле
Ответ #802 - 31. Мая 2012 :: 14:24
Печать  
Табличное поле отображает подчиненный справочник по владельцу. В отображаемом справочнике реквизит сумма - переодический. При установке флага Итога по колонке Сумма происходит ошибка "Cannot perform an aggregate function on an expression containing an aggregate or a subquery." Помогите побороть.

ПДЗП = СоздатьОбъект("ПоставщикДанных");
     ПДЗП.ТипЗначений = "Справочник.ЗарплатаНом";
     ПДЗП.КонтейнерКоманднойПанели = "КПЗП";
     ПДЗП.КонтейнерТабличногоПоля = "ТПЗП";
    
     Данные4 = ПДЗП.Данные;
     Данные4.СоздатьКнопкиПоУмолчанию();
     Данные4.РежимВыбора         = 0;
     Данные4.РежимОтладки        = 0;
     Данные4.ПросмотрПоВладельцу = 1;
     Данные4.Владелец            = ТекущийЭлемент();
    
     Данные4.НоваяКолонка("Работа",,1);
     Данные4.НоваяКолонка("Сущность");
     Данные4.НоваяКолонка("Коэффициент");
     Данные4.НоваяКолонка("Сумма",0);

При установке 1 вместо 0 возникает данная ошибка
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #803 - 01. Июня 2012 :: 16:31
Печать  
ReEnter58, советую сделать не добавлением поля с данным реквизитом, а добавлением соединения с ВТ "СрезПоследних" с данным реквизитом, + поля данных "ISNULL(СрезПоследних.Сумма, 0)", тогда должно взлететь.
  

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


1C++ rocks!

Сообщений: 11
Зарегистрирован: 03. Июня 2012
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #804 - 03. Июня 2012 :: 13:35
Печать  
Здравствуйте, есть несколько проблем, хотелось бы найти их решения:

1. Прямой запрос - если в виртуальную таблицу остатков передать большой массив (например, массив товаров), то возвращается не совсем ожидаемый результат. Особенно это видно, если добавить условие НЕ - запрос должен вернуть пустую таблицу, но он возвращает некоторые "товары". Если этот же массив передать в условие ГДЕ, то результат запроса действительно пустой. Массив "товаров" состоял из 4800 записей. Если нужна демонстрационная база - могу подготовить ее, выдать через 1-3 недели.

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

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

4. У числовых полей в табличном поле пишется нулевой итог. Если не хочу считать итог, можно установить 0 в функции НоваяКолонка, но нулевой итог всё-равно отображается - как можно избавиться от 0 в подвале?
  
Наверх
 
IP записан
 
EvgeniuXP
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 11
Зарегистрирован: 03. Июня 2012
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #805 - 03. Июня 2012 :: 17:26
Печать  
3-ий пункт вроде как нашел реализовать:

использовать метод ПередНачаломИзменения, в отладке его ловлю перед началом изменения строки, но интерактивное редактирование позволяет....

написал процедуру:

Код
Выбрать все
Процедура ТабличноеПолеПередНачаломИзменения(ФСО)
	ФСО=1;
КонецФункции 



также попробовал проверить метод: ПередНачаломДобавления, запретить добавление новых строк, написал:

Код
Выбрать все
Процедура ТабличноеПолеПередНачаломДобавления(Копирование, ФСО)
	ФСО=1;
КонецПроцедуры 



строку всё-равно интерактивно можно добавить....

10 минут спустя:

нашел, помогли гуру, два параметра необходимо передавать в первом случае, во втором - три - ошибка в документации Печаль исправьте пожалуйста.

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



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #806 - 04. Июня 2012 :: 04:34
Печать  
EvgeniuXP писал(а) 03. Июня 2012 :: 17:26:
нашел, помогли гуру, два параметра необходимо передавать в первом случае, во втором - три - ошибка в документации Печаль исправьте пожалуйста.

Поставщик данных опирается на "Табличное поле" и, как следствие, несет за собой его условия:
Цитата:
Табличное поле может генерировать события в виде вызова процедур модуля формы, на которой оно расположено, имена которых должны быть составлены из имени реквизита формы и имени события. Каждое событие, кроме описанных параметров, всегда имеет первый параметр, имеющий значение объекта - источника событий (само табличное поле).

В документацию это вносится именно в таком виде по той причине, что если ты сделаешь свой класс, наследник, то там этого первого параметра НЕ будет.
На счет "больших" массивов, непонятно - как передаешь? Надеюсь - уложив во временную таблицу?
  
Наверх
ICQ  
IP записан
 
EvgeniuXP
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 11
Зарегистрирован: 03. Июня 2012
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #807 - 04. Июня 2012 :: 15:55
Печать  
укладываю вот так:

Код
Выбрать все
СЗТовары=СоздатьОбъект("СписокЗначений");

СпрТовар=СоздатьОбъект("Справочник.Товары");
СпрТовар.ВыбратьЭлементы();
Пока СпрТовар.ПолучитьЭлемент()=1 Цикл
    Если СпрТовар.ЭтоГруппа()=0 Тогда    
	  СЗТовары.ДобавитьЗначение(СпрТовар.ТекущийЭлемент());
    КонецЕсли;
КонецЦикла;

Запрос.УложитьСписокЗначений(СЗТовары,"#ВыбТовары");
 


на 4. пункт решение нашел: оформление строки - может кому полезно будет.

Еще один вопрос по поводу привязок: есть два класса: 1) "Общие.Форма.Привязки" и "УправлениеФормой.ПривязкаЭлементов", в первом случае есть очень хорошая функция "МинимальныеРазмеры", где можно указать, например, для табличной части ее минимальный размер и соответственно кнопки лежащие справа от нее не улетят ввверх, во втором классе этого нет Печаль. Но первый класс. глючит... если открыть другую форму и раскрыть на весь экран, а потом открыть эту форму с данной привязкой, таблица становится шире экрана и к исходному виду не возвращается.... если же все окна закрыть и снова открыть форму с таблицей, то всё нормально отображает... какой класс лучше использовать? какой из них развивается? и можно ли во второй класс добавить функцию "МинимальныеРазмеры", чтобы кнопки не улетали вверх?

второй тоже глючит, когда максимально развернутое окно становится обычным окном.... FormEx 2.05.107....

P.S. Спасибо!
« Последняя редакция: 05. Июня 2012 :: 14:47 - EvgeniuXP »  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #808 - 05. Июня 2012 :: 09:50
Печать  
Ты весь справочник товаров укладываешь??? Зачем???
1. Если у тебя есть заполненный список - просто добавляешь через
Код
Выбрать все
Запрос.УложитьСписокЗначений(СЗТовары,"#ВыбТовары","Товары"); 


2. Если хочешь только элементы, то проще в запросе добавить
Код
Выбрать все
LEFT JOIN $Справочник.Товары SS ON (соединение по ID) AND (SS.IsFolder=2) 


3. Даже если хочешь использовать свою врем. таблицу, проще
Код
Выбрать все
SELECT ID as Val INTO #ВыбТовары FROM $Справочник.Товары WHERE IsFolder=2 

  
Наверх
ICQ  
IP записан
 
EvgeniuXP
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 11
Зарегистрирован: 03. Июня 2012
Пол: Мужской
Re: Класс "ПоставщикДанных" - обсуждения. Часть 2.
Ответ #809 - 05. Июня 2012 :: 14:45
Печать  
Уложил весь - чтобы проверить, правильно ли запрос отработает такое количество товаров, как говорится, доверяй, но проверяй. Но по своей задаче могу сказать: пользователь выбирает некие группы и все товары которые в нее входят, нужно передать в запрос и посмотреть остатки. Вдруг пользователь выберет все группы верхнего уровня и несколько раз сформирует отчет - и увидит, что отчет получается разный - будут вопросы к разработчику. Поэтому я должен знать - стабильно ли работает, поэтому и проверил.

Еще проблема, упорядочить по возрастанию ИндексированнуюТаблицу... в методе Сортировать можно сортировать по убыванию и по внутреннему представлению объекта.... а по возрастанию (тип Число)?...
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 52 53 [54] 55 56 ... 81
ОтправитьПечать