Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Периодические реквизиты (число прочтений - 4148 )
Zalex
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 23. Марта 2007
Периодические реквизиты
09. Декабря 2008 :: 10:43
Печать  
Дайте пожалуйста пример работы с периодическими значениями если периодическое значение у справочника является перечислением
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Периодические реквизиты
Ответ #1 - 09. Декабря 2008 :: 17:34
Печать  
Zalex писал(а) 09. Декабря 2008 :: 10:43:
Дайте пожалуйста пример работы с периодическими значениями если периодическое значение у справочника является перечислением


В SQL надо использовать $ПоследнееЗначение
Для DBF через VF(блаблабла) я не в курсе
Для DBF через SQLite через допзапрос к _1SCONST... пример был в репозитарии в разделе 1sqlite.
Вот...  Подмигивание
  

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


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Периодические реквизиты
Ответ #2 - 09. Декабря 2008 :: 17:39
Печать  
вот кусок запроса для 1sqlite из моей конфы:
Код
Выбрать все
|  (SELECT
|    Конст.value as Цена
|   FROM __1s_const as Конст
|   WHERE Конст.date <= :ДатаОстатков
|   AND Конст.id = :ИсторияРеквизита.Номенклатура.НоваяЦенаОтп
|   AND Конст.objid = Товар
|   ORDER BY Конст.date DESC
|   LIMIT 1
|  ) as ЦОНовая"
 

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



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Периодические реквизиты
Ответ #3 - 09. Декабря 2008 :: 18:59
Печать  
CaBaT писал(а) 09. Декабря 2008 :: 17:39:
вот кусок запроса для 1sqlite из моей конфы:
Код
Выбрать все
|  (SELECT
|    Конст.value as Цена
|   FROM __1s_const as Конст
|   WHERE Конст.date <= :ДатаОстатков
|   AND Конст.id = :ИсторияРеквизита.Номенклатура.НоваяЦенаОтп
|   AND Конст.objid = Товар
|   ORDER BY Конст.date DESC
|   LIMIT 1
|  ) as ЦОНовая"
 


Лучше писать вместо:
Код
Выбрать все
WHERE Конст.date <= :ДатаОстатков 


так:
Код
Выбрать все
WHERE ((Конст.date < :ДатаОстатков) OR (Конст.date = :ДатаОстатков)) 


Обсуждалось здесь
  
Наверх
 
IP записан
 
Zalex
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 23. Марта 2007
Re: Периодические реквизиты
Ответ #4 - 09. Декабря 2008 :: 23:57
Печать  
спасибо
для 1С++ и причем для ДБФ пример пожалуйста
  
Наверх
 
IP записан
 
Zalex
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 23. Марта 2007
Re: Периодические реквизиты
Ответ #5 - 10. Декабря 2008 :: 02:28
Печать  
где ошибка ?
|SELECT
|   Сотрудники.id as [Сотрудник],
|   cСостояниеФЛ.value as [СостояниеФизлица]
|FROM $Справочник.Сотрудники as Сотрудники
|LEFT JOIN (
|   SELECT 
|       c_dt.objid as objid,
|       c_dt.value as value
|   FROM 1sconst as c_dt
|   WHERE
|       c_dt.date IN (
|                  SELECT MAX(c.date)
|                  FROM 1sconst as c
|                WHERE (c.date <= :ВыбДата ~~)
|                             AND (c.id = $ИсторияРеквизита.Сотрудники.СостояниеФизлица)
|                             AND (c.objid = c_dt.objid))
|      AND c_dt.id = $ИсторияРеквизита.Сотрудники.СостояниеФизлица
|) as cСостояниеФЛ ON cСостояниеФЛ.objid = Сотрудники.id ";
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Периодические реквизиты
Ответ #6 - 10. Декабря 2008 :: 05:25
Печать  
JohnyDeath писал(а) 09. Декабря 2008 :: 18:59:
Лучше писать вместо:
Код
Выбрать все
WHERE Конст.date <= :ДатаОстатков 


так:
Код
Выбрать все
WHERE ((Конст.date < :ДатаОстатков) OR (Конст.date = :ДатаОстатков)) 


Обсуждалось здесь

почитал ветку, вроде Саша Орефков пишет, что глюк не поймал?
но все равно спасибо, потестирую в своей базе
  
Наверх
 
IP записан
 
Zalex
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 23. Марта 2007
Re: Периодические реквизиты
Ответ #7 - 10. Декабря 2008 :: 08:07
Печать  
еще вопрос как обращаться к строкам неограниченной длины в DBF версии
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Периодические реквизиты
Ответ #8 - 10. Декабря 2008 :: 09:00
Печать  
Zalex писал(а) 10. Декабря 2008 :: 08:07:
еще вопрос как обращаться к строкам неограниченной длины в DBF версии


Для ДБФ OLEDB , а вообще - пиши что используешь - можно мозг сломать гадая

Код
Выбрать все
| SELECT
|  TabStrok0.Block  as ПолнНаименованиеБлок
|  ,TabStrok0.blockno as НомерБлока
| FROM
|	$Справочник.ЮрЛица as СпрЮрЛица
|LEFT JOIN  1SBLOB as TabStrok0 ON
|TabStrok0.fieldid+TabStrok0.objid+STR(TabStrok0.blockno,4)
|=:ИДПолнНаименование+СпрЮрЛица.id
...
ИДПолнНаименование = Прав(_IDToStr(глМД.ИДРеквизитаСправочника("ЮрЛица","ПолнНаименование")),4);
);
 



Строки неограниченной длины лучше получать дополнительным запросом, по выбранным элементам спр -
если их получать левым соединением в основном запросе - может получиться огроменная таблица(длина столбца 1000 например) - тормоза гарантированы
  
Наверх
 
IP записан
 
Zalex
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 23. Марта 2007
Re: Периодические реквизиты
Ответ #9 - 10. Декабря 2008 :: 09:38
Печать  
спасибо  Улыбка
да правильно угадали используются DBF и OLEDB
насчет периодических реквизит подскажите еще
плюс вопрос
Код
Выбрать все
	cmdOLEDB.УложитьСписокОбъектов(Списки,ИмяТаблицы);
	ТекстЗапроса="
	|Select Val From "+ИмяТаблицы;
 


почему возвращает Val пустое значение хотя списки содержат данные (внутри строка)
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Периодические реквизиты
Ответ #10 - 10. Декабря 2008 :: 10:20
Печать  
Для ДБФ, период
Код
Выбрать все
ТекстЗапроса="
|  SELECT
|  ПодЗапрос.id  as [Контрагент $Справочник.Контрагенты]
|  ,Период2.date  as date  
|  ,Период2.value as Status  
|
| (SELECT  
|
|     СпрКонтр.id  as id  
|     ,Max(DTOS(Период.date)+Период.time+Период.docid) as  MaxDateTimeIddoc  
|
| FROM  $Справочник.Контрагенты as СпрКонтр
|
| LEFT JOIN 1sconst as Период ON
|     tno,3) =
|     $ИсторияРеквизита.Контрагенты.МаркетингСтатус+СпрКонтр.id
// Здесь условие на клиента
| GROUP BY СпрКонтр.id ) as ПодЗапрос
|
| LEFT JOIN 1sconst as Период2 ON
|     од2.partno,3) =
|     Iddoc                                      
|"; 


Все запросы подразумевают, что стоит установка SET ANSI OFF и используют индексы

По второму вопросу - какого типа укладываются элементы?
Если строкового, то их нужно укладывать не этим методом
  
Наверх
 
IP записан
 
Zalex
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 23. Марта 2007
Re: Периодические реквизиты
Ответ #11 - 11. Декабря 2008 :: 00:44
Печать  
спасибо
но что то запрос не пашет ((

не подскажешь как укладывать тогда??
я пока в строку превращаю и по ней проверяю
по доке вроде других методов нет для OLEDB
« Последняя редакция: 11. Декабря 2008 :: 06:46 - Zalex »  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Периодические реквизиты
Ответ #12 - 11. Декабря 2008 :: 07:49
Печать  
Zalex писал(а) 11. Декабря 2008 :: 00:44:
спасибо
но что то запрос не пашет ((

Что именно не работает?
Перед выполнением запроса нужно -
Код
Выбрать все
cmdOLEDB.Выполнить("EXECSCRIPT('SET ANSI OFF')");  



Zalex писал(а) 11. Декабря 2008 :: 00:44:
не подскажешь как укладывать тогда??
я пока в строку превращаю и по ней проверяю
по доке вроде других методов нет для OLEDB


В строку укладывать - нормальный способ, если в списке меньше 100 элементов,
только переносы строк через каждые ~10 элементов нужно ставить.

Также укладывать можно через курсор (это такая временная таблица в оперативке)

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


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 23. Марта 2007
Re: Периодические реквизиты
Ответ #13 - 11. Декабря 2008 :: 09:17
Печать  
Не работает такой код
возвращает одно и то же значения для всех элементов справочника
Код
Выбрать все
	|Select
	|	Сотрудники.Id as Идентификатор,
	|	Сотрудники.Code as Код,
		|	Сотрудники.Descr as Наименование,
	|	cСостояниеФЛ.Value as Значение
	|From $Справочник.Сотрудники as Сотрудники
	|LEFT JOIN (
	|   SELECT
	|	 c_dt.objid as objid,
	|	 c_dt.value as value
	|   FROM 1sconst as c_dt
	|   WHERE c_dt.id = $ИсторияРеквизита.Сотрудники.СостояниеФизлица and
	|	c_dt.date IN (
	|			SELECT MAX(c.date)
	|			FROM 1sconst as c
	|	     	WHERE (c.date <= :ВыбДата ~~)  AND (c.id = c_dt.id) AND (c.objid = c_dt.objid)
	|	)
	|) as cСостояниеФЛ ON cСостояниеФЛ.objid = Сотрудники.id ";
  

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



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Периодические реквизиты
Ответ #14 - 11. Декабря 2008 :: 09:33
Печать  
Zalex писал(а) 11. Декабря 2008 :: 09:17:
Не работает такой код
возвращает одно и то же значения для всех элементов справочника
Код
Выбрать все
	|Select
	|	Сотрудники.Id as Идентификатор,
	|	Сотрудники.Code as Код,
		|	Сотрудники.Descr as Наименование,
	|	cСостояниеФЛ.Value as Значение
	|From $Справочник.Сотрудники as Сотрудники
	|LEFT JOIN (
	|   SELECT  
	|	 c_dt.objid as objid,
	|	 c_dt.value as value
	|   FROM 1sconst as c_dt
	|   WHERE c_dt.id = $ИсторияРеквизита.Сотрудники.СостояниеФизлица and
	|	c_dt.date IN (
	|			SELECT MAX(c.date)
	|			FROM 1sconst as c
	|	     	WHERE (c.date <= :ВыбДата ~~)  AND (c.id = c_dt.id) AND (c.objid = c_dt.objid)
	|	)
	|) as cСостояниеФЛ ON cСостояниеФЛ.objid = Сотрудники.id ";
  


Я давал совсем другой код Улыбка
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать