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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных"
Ответ #465 - 10. Марта 2010 :: 18:25
Печать  
Тут небольшое изменение:

3.04.014 от 10.03.10 г.
- Объект «ПоставщикДанных.ПрямойЗапрос» обновлен до версии 1.05.014 от 10.03.10 г.
- Изменен порядок определения места хранения для настроек колонок табличного поля. Если у текущего пользователя определен каталог, то настройки сохраняются в каталоге пользователя. Иначе в каталоге временных файлов. До версии 3.04.014 все сохранялось в каталоге временных файлов. См. методы «СохранитьПозициюКолонок» и «ВосстановитьПозициюКолонок».

Пы.сы. обратите внимание что сброс текущих настроек колонок у пользователей при изменении класса неизбежен. Поэтому по возможности либо предупредите, либо позаботьтесь о переносе файлов из временного каталога.
  

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных"
Ответ #466 - 17. Марта 2010 :: 07:41
Печать  
Ряд изменений.
1. Добавилась возможность отображения кнопки "Просмотр". Управляет соответствующий публичный атрибут. Необходимо вызывать до метода СоздатьКнопкиПоУмолчанию.
2. Добавились наборы пиктограмм в 256 цветов. Кому надо можно переименовать их (убрать _256) и использовать. Вот уж не знаю насколько спасет терминальщиков с разрядностью 256.
Ну и другие мелочи жизни.

3.04.015 от 14.03.10 г.
- Объект «ПоставщикДанных.ПрямойЗапрос» обновлен до версии 1.05.015 от 14.03.10 г.
- Новый публичный атрибут у объектов-расширений «ПоставщикДанных.Справочник», «ПоставщикДанных.Документы», «ПоставщикДанных.Журнал» - «КнопкаПросмотр». Данный параметр управляет наличием кнопки «Просмотр» в командной панели табличного поля. Кнопка просмотр находится после кнопки «Изменить». Изменение параметра имеет значение только до вызова метода «СоздатьКнопкиПоУмолчанию».
- Новый пункт контекстного меню у объектов-расширений «ПоставщикДанных.Справочник», «ПоставщикДанных.Документы», «ПоставщикДанных.Журнал» - «Просмотр». Открывает текущий документ/элемент в режиме «ТолькоПросмотр» = 1.
- Добавлены новые наборы пиктограмм в режиме 256 цветов.
- Новая картинка в командной панели: 26 - ОткрытьТолькоПросмотр
  

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПоставщикДанных"
Ответ #467 - 17. Марта 2010 :: 10:40
Печать  
п.1. Баг:
в ПоставщикДанных.Справочник в 2-х местах:
  Функция ПолучитьНовыйКодСправочника() (стр. 1052)
и
  Функция КодУникальный(Код) (стр. 1092)

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


чтобы не валилась ошибка при вводе нового элемента справочника с нулевой длиной кода.

п.2. Багофича? Улыбка :
Форма с множеством закладок, на общем слое кнопка "Ок" - которая есть "кнопка по умолчанию", на двух закладках есть ТП (поставщик - Справочник), когда находимся на закладках с ТП и фокус на ТП - "Ctrl+Enter" не срабатывает Печаль, то же самое и на другой форме.

п.3. Вопрос:
при использовании доп. колонок ТП (ПоставщикДанных.Справочник), можно ли как то манипулировать ДАННЫМИ этих колонок, не прибегая к перестроению запроса в "ПриПолученииЗапроса()"?

Если нет - тогда, если можно - хотя бы схематичный пример корректировки запроса для следующего случая:
ТП в карточке элемента Спр.Номенклатура, Поставщик - подчиненный Спр.Цены, колонки: "ТипЦен","Цена" (периодический), доп. колонки: "Установлена" и "Наценка".
"Установлена" - дата последнего изменения "Цена", "Наценка" - % наценки цены относительно другой цены ("Закупочной")

Код
Выбрать все
Процедура КонтейнерТПЦеныПриПолученииЗапроса(ТабличноеПоле,Структура)
	Сообщить(Структура.Колонки);
	Сообщить(Структура.Источник);
	Сообщить(Структура.Условия); 



Структура.Колонки =
SELECT
     CASE WHEN ТекущийОбъект.ISMARK = '*' THEN 3 ELSE 2 END AS [Пиктограмма]
     ,0 AS [ЭтоГруппа]
     ,CASE WHEN ТекущийОбъект.ISMARK = '*' THEN 1 ELSE 0 END AS [ПометкаУдаления]
     ,ТекущийОбъект.ID AS [ТекущийЭлемент $Справочник.Цены]
     ,ТекущийОбъект.PARENTEXT AS [Владелец $Справочник.Номенклатура]
     ,$ТекущийОбъект.ТипЦен AS [ТипЦен :Справочник.ТипыЦен]
     ,$ПоследнееЗначение.Цены.Цена(ТекущийОбъект.ID, :ДатаПериодическихРеквизитов) AS [Цена :Число.15.3]
     ,$ТекущийОбъект.Валюта AS [Валюта :Справочник.Валюты]
     ,$ТекущийОбъект.IDD AS [IDD :Строка]
     ,ТекущийОбъект.idx_ID AS [КлючПорядка]

Структура.Источник =
FROM
     Справочник.Цены AS ТекущийОбъект $nolock

Структура.Условия =
WHERE
     ТекущийОбъект.PARENTEXT = :ВладелецСправочника

Ну не готов я пока к "ПрямымЗапросам" Плачущий
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных"
Ответ #468 - 17. Марта 2010 :: 12:29
Печать  
2 Dolly_EV
Покажи как ты извлекаешь значения данных реквизитов при открытии формы элемента.
  

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПоставщикДанных"
Ответ #469 - 18. Марта 2010 :: 06:06
Печать  
[quote author=vandalsvq link=1248941896/465#468 date=1268828983]2 [b]Dolly_EV[/b]
Покажи как ты извлекаешь значения данных реквизитов при открытии формы элемента.[/quote]

это про доп. колонки: "Установлена" и "Наценка"? - это не реквизиты... раньше (до использования Поставщика) в этом месте в форме элемента Спр.Номенклатура на закладке "Цены" была ТаблицаЗначений на форме, которая заполнялась штатными методами при открытии формы из подчиненного Спр.Цены. Помимо реквизитов спр.Цены - "ТипЦен", "Цена", "Валюта", в этой ТЗ были две колонки: "Установлена" и "Наценка", в "Установлена" писалась дата последнего изменения цены, в "Наценка" - %-нт наценки тек. цены относительно закупочной. Всё это заполнялось при заполнении ТЗ при открытии формы... Теперь я хочу перевести это дело на "ПоставщикДанных.Справочник"...

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

     ТПЦены = ПоставщикДанныхЦены.ТабличноеПоле;
     ТПЦены.ИзменятьНастройкуКолонок = 0;
     ТПЦены.ИзменятьСоставСтрок = 1;
     ТПЦены.ИзменятьПорядокСтрок = 1;
     ТПЦены.СтильЗаголовков = 1;
     ТПЦены.СтильРамки = 1;
     
     
     Если Право[75] = 0 Тогда
           ТПЦены.ТолькоПросмотр = 1;
     КонецЕсли;
     
     ДанныеСпрЦены = ПоставщикДанныхЦены.Данные;
     ДанныеСпрЦены.Владелец = ТекущийЭлемент();
     ДанныеСпрЦены.СоздатьКнопкиПоУмолчанию();
     ДанныеСпрЦены.НоваяКолонка("ТипЦен");
     ДанныеСпрЦены.НоваяКолонка("Цена");
     ДанныеСпрЦены.НоваяКолонка("Валюта");
     
     Колонки = ТПЦены.Колонки;
     Колонка = Колонки.ТипЦен;
     Колонка.Ширина = 40;
     Колонка = Колонки.Цена;
     Колонка.Ширина = 18;
     
     Колонка = Колонки.Добавить("Установлена");
     Колонка.Заголовок = "Установлена";
     Колонка.Ширина = 15;
     Колонка.ГоризонтальноеВыравнивание = 2;
     
     
     Колонка = Колонки.Добавить("Наценка");
     Колонка.Заголовок = "Наценка";
     Колонка.Ширина = 10;
     
     
     ДанныеСпрЦены.ИзменятьИерархическийПросмотр = 0;
     ДанныеСпрЦены.ИерархическийПросмотр = 1;
     ДанныеСпрЦены.СпособРедактирования = 0; //в Списке
     ДанныеСпрЦены.ИзменятьСпособРедактирования = 0;
     ДанныеСпрЦены.ПросмотрПоВладельцу = 1;
     ДанныеСпрЦены.ИзменятьПросмотрПоВладельцу = 0;
     ДанныеСпрЦены.ДатаПериодическихРеквизитов = РабочаяДата();
     
     лПериодическийЦена      = СоздатьОбъект("Периодический");
     
     ПоставщикДанныхЦены.Обновить();
     
КонецПроцедуры // ПослеСозданияФормы
[/code]
« Последняя редакция: 19. Марта 2010 :: 00:59 - Dolly_EV »  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

Структура.Колонки = Структура.Колонки + "
|     ,c_vt.date AS [Установлена $Дата]
|     ,(выражение расчета наценки) AS [Наценка $Число]
|";

ИмяТаблицы = ?(ЭтоSQL = 1,"_1sconst","__1s_const");
Структура.Источник = Структура.Источник + "
|left join
|     (select objid id, max(date) date
|     from "+ИмяТаблицы+" const $nolock
|     where id = :ИсторияРеквизита.ИмяСправочника.ИмяРеквизита
|     group by objid) as c_vt
|on ТекущийОбъект.id = c_vt.id
|";

Соответственно когда ты создаешь колонки Установлена и Наценка поставить Колонка.Данные = "Установлена" и Колонка.Данные = "Наценка" соответственно.
Ну как то так. Более точно могу подсказать если дашь конфигу и покажешь где надо сделать.
Можно также вместо расчета c_vt сделать временную таблицу и заполнять ее тогда для пользователя добавить текстовое информационное поле с указанием времени расчета значений. И Автообновление = 0 поставить. Переназначить источник действий у кнопки Обновить и вызывать пересчет временной таблицы + вызов обновления табличного поля.

Ну и в конце концов можно победить это все в событии "ПриВыводеСтроки". У тебя строк мало так что не страшно. Главное проверять колонки на видимость, а то в ТекущиеДанные будут отсутствовать Улыбка
  

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПоставщикДанных"
Ответ #471 - 18. Марта 2010 :: 11:54
Печать  
[quote author=vandalsvq link=1248941896/465#470 date=1268899042]Ну и в конце концов можно победить это все в событии "ПриВыводеСтроки". У тебя строк мало так что не страшно. Главное проверять колонки на видимость, а то в ТекущиеДанные будут отсутствовать :)[/quote]

Вот с этого места поподробнее! Я там и пытаюсь отловить и заполнить "Установлена" и "Наценка", но ничего не отображается...хотя Данные в колонках заполняются :(

[code]
//======================================================================
Процедура КонтейнерТПЦеныПриВыводеСтроки(ТабличноеПоле,ОформлениеСтроки, ДанныеСтроки, ТипРегиона)
     
     //Сообщить(ТабличноеПоле);
     //Сообщить(ОформлениеСтроки);
     //Сообщить(ДанныеСтроки.ТипЦен);
     Если ТипЗначенияСтр(ТабличноеПоле.ТекущаяСтрока) <> "Справочник" Тогда
           Возврат;
     КонецЕсли;
     Для сч=0 По ДанныеСтроки.Количество()-1 Цикл
           Сообщить(Строка(ТабличноеПоле.ТекущаяСтрока.ТекущийЭлемент())+" // "+строка(сч)+" // "+Строка(ДанныеСтроки.Получить(сч)));
     КонецЦикла;
     
     Колонки = ТабличноеПоле.Колонки;
     КолонкаУстановлена = Колонки.Установлена;
     КолонкаНаценка = Колонки.Наценка;
     //Сообщить(КолонкаУстановлена.Данные);
     //Сообщить(КолонкаНаценка.Данные);
     
     Если ДанныеСтроки.ТипЦен = Константа.ОсновнаяЦенаПриобретения Тогда
           лЦенаСС = ДанныеСтроки.Цена;
           КолонкаНаценка.Данные = "ЦЕНА С/С";
           ОформлениеСтроки.ЦветФона = лНебесныйЦвет;
     КонецЕсли;
     
     //Сообщить(Строка(ТабличноеПоле.ТекущаяСтрока)+" // "+ТипЗначенияСтр(ТабличноеПоле.ТекущаяСтрока));
     
     Элемент());
     лПериодическийЦена.НайтиЗначение(ИспользоватьДату(),-1);
     КолонкаУстановлена.Данные = Строка(лПериодическийЦена.ДатаЗнач);
     
     
     Если (лЦенаСС>0) и (ДанныеСтроки.ТипЦен <> Константа.ОсновнаяЦенаПриобретения) Тогда
           //посчитаем % наценки
           ПроцНаценки = ДанныеСтроки.Цена/лЦенаСС*100-100;
           КолонкаНаценка.Данные = Формат(ПроцНаценки,"Ч-6.2. ")+" %";
     КонецЕсли;
     
КонецПроцедуры // КонтейнерТПЦеныПриВыводеСтроки
[/code]

И потом "ТП.ПерерисоватьСтроки()" - уже везде пихал - не помогает

P.S. За запрос - спасибо, но пока хочу уяснить возможность обойтись без него.
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Класс "ПоставщикДанных"
Ответ #472 - 18. Марта 2010 :: 12:50
Печать  
Попробуй пихать свои данные не в данные, а в текст ячейки. Примерно так:
Код
Выбрать все
ОформлениеСтроки.Ячейки.Наценка.УстановитьТекст(Формат(ПроцНаценки,"Ч-6.2. ")+" %"); 

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных"
Ответ #473 - 18. Марта 2010 :: 12:56
Печать  
Интерфейс Колонка.Данные предназначен для указания имени колонки в запросе, из которой ты хочешь получить результат. Т.е. по сути это Установлено и Наценка в твоем случае. Но поскольку ты хочешь обойтись без запроса тогда, тебе нет смысла указывать это значение. А в ПриВыводеСтроки JohnyDeath тебе написал как делать.  Улыбка
  

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПоставщикДанных"
Ответ #474 - 19. Марта 2010 :: 01:07
Печать  
JohnyDeath писал(а) 18. Марта 2010 :: 12:50:
Попробуй пихать свои данные не в данные, а в текст ячейки. Примерно так:
Код
Выбрать все
ОформлениеСтроки.Ячейки.Наценка.УстановитьТекст(Формат(ПроцНаценки,"Ч-6.2. ")+" %"); 



Иессс!!! Заработала!!!  Смех Как же я не набрел на УстановитьТекст! Подмигивание

JohnyDeath, vandalsvq  - СПАСИБО!!!
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПоставщикДанных"
Ответ #475 - 19. Марта 2010 :: 01:23
Печать  
Саша, а по пп. 1, 2 ?

Dolly_EV писал(а) 17. Марта 2010 :: 10:40:
п.1. Баг:
в ПоставщикДанных.Справочник в 2-х местах:
  Функция ПолучитьНовыйКодСправочника() (стр. 1052)
и
  Функция КодУникальный(Код) (стр. 1092)

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


чтобы не валилась ошибка при вводе нового элемента справочника с нулевой длиной кода.

п.2. Багофича? Улыбка :
Форма с множеством закладок, на общем слое кнопка "Ок" - которая есть "кнопка по умолчанию", на двух закладках есть ТП (поставщик - Справочник), когда находимся на закладках с ТП и фокус на ТП - "Ctrl+Enter" не срабатывает Печаль, то же самое и на другой форме.


еще Вопрос (может немного оффтоп):
При добавлении нового элемента в ТП (<INS>), одним из реквизитов является другой справочник - соответственно открывается список этого другого спр. для выбора элемента. Вопрос - КАК передать в открываемую форму параметр из тек. контекста?
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных"
Ответ #476 - 19. Марта 2010 :: 10:41
Печать  
п.1 вернусь в 7.7 исправлю
п.2 вернусь в 7.7 посмотрю

По вопросу:
Перехватывать "ПередНачаломИзменения" и писать редактирование самому.
  

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


1C++ rocks!

Сообщений: 320
Местоположение: Киев
Зарегистрирован: 15. Ноября 2009
Пол: Мужской
Re: Класс "ПоставщикДанных"
Ответ #477 - 21. Марта 2010 :: 17:23
Печать  
vandalsvq,к Вам просьба,  в ПоставщикДанных.Справочник  при переносе элемента в другую группу добавить Событие ПриНачалеПереноса с параметром ФСО, чтобы можно было отменить действия по умолчаю и выполнять свои действия, если необходимо .
И еще. Может кто-то подскажет, можно ли в табличном поле установить ПоложениеКолонкиТаблицы
  
Наверх
 
IP записан
 
zk96
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 320
Местоположение: Киев
Зарегистрирован: 15. Ноября 2009
Пол: Мужской
Re: Класс "ПоставщикДанных"
Ответ #478 - 21. Марта 2010 :: 18:50
Печать  
В догонку еще одна просьба. В ПоставщикДанных.Сервис в метод ВыбратьЗначение добавить параметр Картинка, чтобы иметь возможность добавить картинки в Контекстное меню.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных"
Ответ #479 - 21. Марта 2010 :: 19:41
Печать  
Не обещаю но попробую в первых числах апреля добраться до своих разработок. Вероятнее всего до этого времени обновлений не будет.

2 zk96
По первой просьбе... есть такие варианты:
1. Если тебе надо чтобы открылась форма выбора группы для переноса, но потом выполнился твой код, вот событие - ПередИзменениемРодителя. Подробнее см. в документации.
2. Если тебе надо чтобы и вовсе вызывалось твое событие то переназначь действие в соответствующей кнопке. Соответственно смотри атрибуты коллекции Кнопка и как ее достать (коллекцию) в КоманднаяПанель.
Я думаю что на текущий момент один из двух путей может решить твою проблему. Если не то, опиши подробнее примеры и необходимость добавления данного события.

По второму вопросу, см. самое начало поста.  Круглые глаза
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 30 31 [32] 33 34 ... 79
ОтправитьПечать