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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных"
Ответ #555 - 16. Апреля 2010 :: 12:48
Печать  
Anatol писал(а) 16. Апреля 2010 :: 05:29:
да, действительно ...
и свою процедуру на нажатие клавиши не повесишь... обрабатывается стандартное ДобавитьСтроку()


Вообще на самом деле количество событий генерируемых поставщиком настолько велико что все можно обойти без изменения классов. Если учесть что я разработчик и КОП и прикладных решений с его использованием, тем не менее я стараюсь в решениях не лезть в КОП (вообще не лезу), а обхожу его. Потому что считаю что в большинстве случаев его поведение достаточно правильное. Все остальное можно написать самому Улыбка.
  

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


1C++ rocks!

Сообщений: 19
Зарегистрирован: 16. Апреля 2010
Re: Класс "ПоставщикДанных"
Ответ #556 - 16. Апреля 2010 :: 13:19
Печать  
[quote author=vandalsvq link=1248941896/540#554 date=1271421897]
[quote]1. Вопрос такой - почему в стандарнтых колонках журнала отсутствует колонка время документа. И насколько сложно это реализовать.[/quote]
Время хранится как строка в 36-тиричном формате числа равного количеству секунд с начала дня до времени документа. Т.е. на самом деле реализовать можно, но с заморочками. Для DBF формата БД конечно есть типизация "Время", а вот для SQL ее нет.
Проблема в реализации еще и в том, что поиск наврядли будет возможен. А отбор... хм, отбор конечно можно, но сложно.
[/quote]

В отношении поиска думаю он и не нужен. А вот сама колонка зачастую нужна, особенно когда сравниваешь позиции документов в разных журналах.

А в отношении реализации на SQL можно к примеру сделать функцию и при инициализации класса (ну или как там правильно) проверять ее наличие и создавать в БД:
[code]CREATE FUNCTION Convert36To10  (@Res36 CHAR(9))
RETURNS CHAR(9)
AS BEGIN
DECLARE @Deci INT
DECLARE @j INT
DECLARE @Arr36 CHAR(36)
SELECT @Arr36 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
SELECT @Deci = 0
SELECT @j = 1
while @j <= LEN(LTRIM(RTRIM(@Res36)))begin
     if @j <> 1
SELECT @Deci = @Deci*36
SELECT @Deci = @Deci + CHARINDEX(SUBSTRING(LTRIM(RTRIM(@Res36)), @j,1),@Arr36) -1
SELECT @j = @j+1
end
  RETURN(right('0'+cast(floor(@Deci/36000000.0) as varchar(2)),2)+':'+right('0'+cast(floor((@Deci%36000000)/600000.0) as varchar(2)),2)+':'+right('0'+cast((@Deci%36000000)%600000/10000 as varchar(2)),2))
END[/code]

а затем  для поля задать что-то типа:
[code]//{ ВремяДокумента
     ВложеннаяСтруктура = ПолучитьВложеннуюСтруктуру();
     ВложеннаяСтруктура.Идентификатор = "ВремяДокумента";
     ВложеннаяСтруктура.Синоним = "Время документа";
     ВложеннаяСтруктура.Комментарий = "Время документа";
     ВложеннаяСтруктура.ТипВид = "Время";
     ВложеннаяСтруктура.Тип = "Время";
     ВложеннаяСтруктура.Вид = "";
     ВложеннаяСтруктура.Длина = 0;
     ВложеннаяСтруктура.Точность = 0;
     ВложеннаяСтруктура.Неотрицательный = 1;
     ВложеннаяСтруктура.РазделятьТриады = 0;
     ВложеннаяСтруктура.Сортировка = 1;
     ВложеннаяСтруктура.Отбор = 1;
     ВложеннаяСтруктура.РеквизитДокумента = 0;
     ВложеннаяСтруктура.ТекстЗапроса = ?(ЭтоSQL = 1,"dbo.Convert36To10(SUBSTRING(ТекущийОбъект.DATE_TIME_IDDOC, 9,6))",
     "right('0'+cast(floor(ТекущийОбъект.TIME/36000000.0) as varchar),2)+':'+                                    |right('0'+cast(floor((ТекущийОбъект.TIME%36000000)/600000.0) as varchar),2)+':'+
     |right('0'+cast((ТекущийОбъект.TIME%36000000)%600000/10000 as varchar),2)")+" AS [ВремяДокумента]";
     
     ВложеннаяСтруктура.РеквизитЗапроса = ?(ЭтоSQL = 1,"dbo.Convert36To10(SUBSTRING(ТекущийОбъект.DATE_TIME_IDDOC, 9,6))",
     "right('0'+cast(floor(ТекущийОбъект.TIME/36000000.0) as varchar),2)+':'+
     |right('0'+cast(floor((ТекущийОбъект.TIME%36000000)/600000.0) as varchar),2)+':'+
     |right('0'+cast((ТекущийОбъект.TIME%36000000)%600000/10000 as varchar),2)");
     ВложеннаяСтруктура.ЗаголовокКолонки = "Время документа";
     СтруктураДанных.Добавить(ВложеннаяСтруктура,"ВремяДокумента");
     
     //}[/code]
[quote author=vandalsvq link=1248941896/540#554 date=1271421897]
[quote]2. Подскажите как при открытии журнала сразу ограничить его период (интервал) определенным диапазоном.[/quote]

[code]Отбор = ПоставщикДанных.Данные.Отбор;
ОтборДатаДокумента = Отбор.ДатаДокумента;
ОтборДатаДокумента.ВидСравнения = "Интервал";
ОтборДатаДокумента.ЗначениеС = ДатаНачала;
ОтборДатаДокумента.ЗначениеПо = ДатаОкончания;
ОтборДатаДокумента.Значение = ТекущаяДата();
ОтборДатаДокумента.Использование = 1;
ПоставщикДанных.Обновить();[/code]

Что же касается события ПриПолученииЗапроса, то неподготовленным туда лезть опасно, убьет ;)[/quote]
Спасибо, правда уже практически и сам разобрался. Что касается запросов, то вообще прямым обращением к данным уже давно пользуюсь, а вот с классами пока не связвался - первая попытка разобраться.

[hr]

Да и еще вопрос: Подскажите в какую сторону копать, чтобы в данном случае получить раскаску журнала по определенным условиям. Т.е. что-то типа ПланаРаскраски от FormEx. Как в стандартном журнале делать знаю, а как здесь?

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


тыц, пыц, тыц!!!

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Класс "ПоставщикДанных"
Ответ #557 - 16. Апреля 2010 :: 14:20
Печать  
ssv02
как и в ТП. ПриВыводеСтроки в зависимости от условий оформлешь строку
  
Наверх
wwwICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных"
Ответ #558 - 16. Апреля 2010 :: 14:36
Печать  
Про функцию я тоже думал, что же касается DBF то я говорил, там можно
Код
Выбрать все
ТекущийОбъект.Time as [ВремяДокумента $Время] 

и все.
В принципе сделать то можно, но счас руки точно не дойдут.
А пока можно и так:
1. через ПриПолученииЗапроса откорректировать текст запроса (добавить туда TIME)
2. в ТП добавить колонку Time, данные = "Time"
3. в ПриВыводеСтроки просто делать
Код
Выбрать все
ВремяВСекундах = _StrToId(ТекущиеДанные.Time);
// СтрокаВремя = тут преобразование в строку
ОформлениеСтроки.Ячейки.Time.УстановитьТекст(СтрокаВремя); 

  

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


тыц, пыц, тыц!!!

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Класс "ПоставщикДанных"
Ответ #559 - 19. Апреля 2010 :: 11:04
Печать  
в ПоставщикДанных.ИндексированнаяТаблица в ТекущиеДанные нехватет одной последней колонки (видимо из-за служебной колоки Номер)

  

1_001.png ( 32 KB | Загрузки )
1_001.png
Наверх
wwwICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных"
Ответ #560 - 19. Апреля 2010 :: 12:23
Печать  
Может от того что пустая колонка в запросе?
А вообще ТекущиеДанные - объект 1С++, а не класса Подмигивание
  

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


тыц, пыц, тыц!!!

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Класс "ПоставщикДанных"
Ответ #561 - 19. Апреля 2010 :: 15:03
Печать  
не, добавил пустую колонку чтобы договор появился.
а в индексированной таблице есть...

зы а ТекущиеДанные привычней...
  
Наверх
wwwICQ  
IP записан
 
mctoha
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 39
Зарегистрирован: 26. Марта 2010
Re: Класс "ПоставщикДанных"
Ответ #562 - 20. Апреля 2010 :: 04:28
Печать  
ХЕЛП!
некоторое время форма подьора проработала нормально, но непонятно после чего началось выпадание базы
пишет "подключение занято до получения результатов другого hstmt"
форму не трогал, ничего не добавлял - отработало в таком виде ровно неделю... причем именно работало - это основной инструмент манагеров в магазинах
куда посмотреть? отладчиком прошел, не понятно ничего
происходит при навигации по табличному полю (справочник прайс с остатками), причем если ходить по нему КЛАВИШАМИ
и вниз по группам можно зайти, а при выходе из групы - валится с ошибкой
При этом, если выйти МЫШКОЙ - не валится!
что это может быть, куда смотреть?
пролазил везде, мозг напух... Печаль

Код может и не шедевр, но работал....
Код
Выбрать все
Процедура КонтейнерТабличноеПолеПриПолученииЗапроса(ТабличноеПоле,Структура)
	ДанныеСправочник = ПоставщикДанных.Данные;

	Структура.Колонки = Структура.Колонки + "
	|	,Остаток.Кво AS ДельтаОбщая
	|	,Остаток1.Кво AS Дельта1
	|	,Остаток2.Кво AS Дельта2
	|	,Остаток3.Кво AS Дельта3
	|	,Остаток4.Кво AS Дельта4
	|";

	Структура.Источник = Структура.Источник + "
	|LEFT JOIN (
	|select Остатки.ТМЦ,sum(Остатки.КвоОстаток)as Кво
	|from
	|(select ТМЦ,Склад,КвоОстаток as КвоОстаток
	|from
	|	$РегистрОстатки.Остатки(
	|		,
	|		,(ТМЦ,Склад)
	|		,(Кво)) as Остатки
	|Union ALL
	|select ТМЦ,Склад,(-1)*КвоОстаток as КвоОстаток
	|from
	|	$РегистрОстатки.Резерв(
	|		,
	|		,(ТМЦ,Склад)
	|		,(Кво)) as Резерв) AS Остатки
	|where Склад IN (SELECT Val FROM #Склады)
	|group by  Остатки.ТМЦ
	|) as Остаток
	|ON Остаток.ТМЦ = $ТекущийОбъект.ТМЦ
	|
	|LEFT JOIN (
	|select Остатки.ТМЦ,sum(Остатки.КвоОстаток)as Кво
	|from
	|(select ТМЦ,КвоОстаток as КвоОстаток
	|from
	|	$РегистрОстатки.Остатки(
	|		,Склад = :Склад1
	|		,(ТМЦ)
	|		,(Кво)) as Остатки
	|Union ALL
	|select ТМЦ,(-1)*КвоОстаток as КвоОстаток
	|from
	|	$РегистрОстатки.Резерв(
	|		,Склад = :Склад1
	|		,(ТМЦ)
	|		,(Кво)) as Резерв) AS Остатки
	|group by  Остатки.ТМЦ
	|) AS Остаток1
	|ON Остаток1.ТМЦ = $ТекущийОбъект.ТМЦ
	|
	|LEFT JOIN (
	|select Остатки.ТМЦ,sum(Остатки.КвоОстаток)as Кво
	|from
	|(select ТМЦ,КвоОстаток as КвоОстаток
	|from
	|	$РегистрОстатки.Остатки(
	|		,Склад = :Склад2
	|		,(ТМЦ)
	|		,(Кво)) as Остатки
	|Union ALL
	|select ТМЦ,(-1)*КвоОстаток as КвоОстаток
	|from
	|	$РегистрОстатки.Резерв(
	|		,Склад = :Склад2
	|		,(ТМЦ)
	|		,(Кво)) as Резерв) AS Остатки
	|group by  Остатки.ТМЦ
	|) AS Остаток2
	|ON Остаток2.ТМЦ = $ТекущийОбъект.ТМЦ
	|
	|LEFT JOIN (
	|select Остатки.ТМЦ,sum(Остатки.КвоОстаток)as Кво
	|from
	|(select ТМЦ,КвоОстаток as КвоОстаток
	|from
	|	$РегистрОстатки.Остатки(
	|		,Склад = :Склад3
	|		,(ТМЦ)
	|		,(Кво)) as Остатки
	|Union ALL
	|select ТМЦ,(-1)*КвоОстаток as КвоОстаток
	|from
	|	$РегистрОстатки.Резерв(
	|		,Склад = :Склад3
	|		,(ТМЦ)
	|		,(Кво)) as Резерв) AS Остатки
	|group by  Остатки.ТМЦ
	|) AS Остаток3
	|ON Остаток3.ТМЦ = $ТекущийОбъект.ТМЦ
	|
	|LEFT JOIN (
	|select Остатки.ТМЦ,sum(Остатки.КвоОстаток)as Кво
	|from
	|(select ТМЦ,КвоОстаток as КвоОстаток
	|from
	|	$РегистрОстатки.Остатки(
	|		,Склад = :Склад4
	|		,(ТМЦ)
	|		,(Кво)) as Остатки
	|Union ALL
	|select ТМЦ,(-1)*КвоОстаток as КвоОстаток
	|from
	|	$РегистрОстатки.Резерв(
	|		,Склад = :Склад4
	|		,(ТМЦ)
	|		,(Кво)) as Резерв) AS Остатки
	|group by  Остатки.ТМЦ
	|) AS Остаток4
	|ON Остаток4.ТМЦ = $ТекущийОбъект.ТМЦ
	|";
КонецПроцедуры 


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


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

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

Пы.сы. раз ты просишь не комментировать сам запрос, тогда пока воздержусь Подмигивание
  

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПоставщикДанных"
Ответ #564 - 20. Апреля 2010 :: 05:00
Печать  
Anatol писал(а) 19. Апреля 2010 :: 11:04:
в ПоставщикДанных.ИндексированнаяТаблица в ТекущиеДанные нехватет одной последней колонки (видимо из-за служебной колоки Номер)


Пример дашь чтобы протестить?
  

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


1C++ rocks!

Сообщений: 39
Зарегистрирован: 26. Марта 2010
Re: Класс "ПоставщикДанных"
Ответ #565 - 20. Апреля 2010 :: 05:06
Печать  
сорри, я может не до конца корректно написал
запрос идиотский до безобразия - по причине, что хоят автоматическое обновление остатков
в противном случае автообновление не работает
второй вариант - вернуть врем. таблицу и повесить обновление временной таблицы на обработку ожидания

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

а запрос комментировать можно и нужно - если есть варианты его упростить...
  
Наверх
 
IP записан
 
Anatol
Senior Member
****
Отсутствует


тыц, пыц, тыц!!!

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Класс "ПоставщикДанных"
Ответ #566 - 20. Апреля 2010 :: 05:08
Печать  
vandalsvq писал(а) 20. Апреля 2010 :: 05:00:
Пример дашь чтобы протестить?


вот собственно сама эта обработка.
  

___________________________________001.ert ( 49 KB | Загрузки )
Наверх
wwwICQ  
IP записан
 
mctoha
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 39
Зарегистрирован: 26. Марта 2010
Re: Класс "ПоставщикДанных"
Ответ #567 - 20. Апреля 2010 :: 05:26
Печать  
развернул рядом бэкап на день раньше до происшествия - все работает
таки косяк в данных, который ведет к выпаданию базы...
буду думать...
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

Код
Выбрать все
LEFT JOIN (
	select
		ОстаткиРезервы.ТМЦ
		,sum(ОстатокСклад) ОстатокСклад
		,sum(ОстатокСклад1) ОстатокСклад1
		,sum(ОстатокСклад2) ОстатокСклад2
		,sum(ОстатокСклад3) ОстатокСклад3
		,sum(ОстатокСклад4) ОстатокСклад4
	from (
		select
			vt3.ТМЦ
			,case
				when vt3.Склад = :Склад1
				then sum(vt3.КолОстаток)
			end ОстатокСклад1
			,case
				when vt3.Склад = :Склад2
				then sum(vt3.КолОстаток)
			end ОстатокСклад2
			,case
				when vt3.Склад = :Склад3
				then sum(vt3.КолОстаток)
			end ОстатокСклад3
			,case
				when vt3.Склад = :Склад4
				then sum(vt3.КолОстаток)
			end ОстатокСклад4
			,case
				when vt3.Склад NOT IN (:Склад1,:Склад2,:Склад3,:Склад4)
				then sum(vt3.КолОстаток)
			end ОстатокСклад
		from (
			select
				vt1.ТМЦ, vt1.Склад, vt1.КвоОстаток КолОстаток
			from
				$РегистрОстатки.Остатки(
					,(Склад in (select val from #Склады))
					,(Склад,ТМЦ)
					,(Кво)) as vt1
			union all
			select
				vt2.ТМЦ, vt2.Склад, vt2.КвоОстаток
			from
				$РегистрОстатки.Резерв(
					,(Склад in (select val from #Склады))
					,(Склад,ТМЦ)
					,(Кво)) as vt2
			) as vt3
		group by
			vt3.Склад, vt3.ТМЦ
		) as ОстаткиРезервы
	group by
		ОстаткиРезервы.ТМЦ
	) as Остатки
ON $ТекущийОбъект.ТМЦ = Остатки.ТМЦ 



Таблица "#Склады" должна содержать все склады включая Склад1,2,3 и 4 которые ты устанавливал отдельными параметрами.
« Последняя редакция: 20. Апреля 2010 :: 08:20 - vandalsvq »  

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


1C++ rocks!

Сообщений: 39
Зарегистрирован: 26. Марта 2010
Re: Класс "ПоставщикДанных"
Ответ #569 - 20. Апреля 2010 :: 05:39
Печать  
vandalsvq писал(а) 20. Апреля 2010 :: 05:36:
Как такой вариант запроса?

спасибо, ушел осознавать Улыбка
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 36 37 [38] 39 40 ... 79
ОтправитьПечать