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


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Помогите навести порядок
03. Апреля 2007 :: 22:13
Печать  
Заранее извиняюсь за длинный текст
Задача в общем-то и не очень сложная: получить таблицу вида Номенклатура, Цена по выбранной фирме на определенную дату
Цена хранится двояко:
1. В "регистре сведений" - регистре без ресурсов с измерениями Фирма, Номенклатура, Цена, ...
2. Непосредственно в спр-ке Номенклатура, реквизит Себестоимость

Вот что получилось
Два вопроса:
1. Как сделать просто и гениально? (особенно смущает узнавание последнего документа установки цен за день, ну и так, у целом)
2. Как получить одну колонку вместо двух? (надо брать не максимальную цену, а по такому принципу: если в регистре цена есть - брать ее, если нет - себестоимость)

Код
Выбрать все
ТекстЗапроса = "
	|SELECT Запрос.Ном as [Номенклатура $Справочник.Номенклатура]
	|, MAX(Запрос.Цена) as ЦенаРег
	|, MAX(Запрос.Себ) as ЦенаСпр
	|FROM (
	|
	|SELECT Номенклатура.ID as Ном
	|, 0 as Цена
	|, $Номенклатура.Себестоимость as Себ
	|FROM $Справочник.Номенклатура AS Номенклатура
	|	WHERE (" + УсловиеВхождения("Номенклатура", "ID", 1, ":СписокТМЦ") + ")
	|
	|UNION ALL
	|
	|SELECT $Цены.Номенклатура as Ном
	|, $Цены.Цена as Цена
	|, 0 as Себ
	|FROM $Регистр.Цены AS Цены
	|INNER JOIN 1SJOURN AS Журнал ON Цены.IDDOC = Журнал.IDDOC
	|WHERE ($Цены.Фирма = :ВыбФирма)
	|AND (Журнал.DATE <= :ВыбДата~~)
	|AND
	|(Журнал.IDDOC in
	|(
	|Select max(Журнал1.IDDOC)
	|from 1SJOURN AS Журнал1
	|INNER JOIN $Регистр.Цены AS Цены1 ON Цены1.IDDOC = Журнал1.IDDOC
	|WHERE ($Цены.Номенклатура = $Цены1.Номенклатура)
	|AND (Журнал1.DATE <= :ВыбДата~~)
	|AND ($Цены1.Фирма = $Цены.Фирма)
	|)
	|)
	|	AND (" + УсловиеВхождения("$Цены", "Номенклатура", 1, ":СписокТМЦ") + ")
	|) as Запрос
	|GROUP BY
	|	Запрос.Ном;
	|";
 

  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Помогите навести порядок
Ответ #1 - 03. Апреля 2007 :: 22:14
Печать  
Забыл сказать - это DBF  Злой
Ну по тексту и так видно...
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Помогите навести порядок
Ответ #2 - 03. Апреля 2007 :: 22:28
Печать  
Поясню еще про цены. Аналог вот этого нужен (только тут без даты):

Код
Выбрать все
глЦены.УстановитьЗначениеФильтра("Номенклатура",Номенклатура, 1);
глЦены.УстановитьЗначениеФильтра("Фирма",		ВыбФирма, 1);

глЦены.ОбратныйПорядок(1);
глЦены.ВыбратьДвижения(,);

Если глЦены.ПолучитьДвижение() = 1 Тогда
	ПризнакНаличия = глЦены.ПризнакНаличия;

	Возврат глЦены.Цена;
 


  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Помогите навести порядок
Ответ #3 - 04. Апреля 2007 :: 01:04
Печать  
Вышеприведенную проблему решил по-другому, но все равно интересно...
Что-то раступился... подскажите как в запросе по справочнику получить таблицу вида:
Номенклатура    НоменклатураВУ    Цена

где Цена - реквизит
НоменклатураВУ   - номенклатура самого верхнего уровня (НоменклатураВУ.PARENTID = $ПустойИд, НоменклатураВУ.ISFOLDER <> 2)
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Помогите навести порядок
Ответ #4 - 04. Апреля 2007 :: 23:56
Печать  
Тупит УложитьСписокОбъектов() - 19 тысяч там было  Круглые глаза
Вместо этого использовал подзапрос - все летает
Непонимаю что происходит при таком кол-ве...
1С потиху отжирает память но очень медленно... на 120 Мегах нервы сдают просто (чего так много?)
Интересно до каких объемов приемлемо использовать это дело
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите навести порядок
Ответ #5 - 05. Апреля 2007 :: 02:54
Печать  
Проведи эксперимент плиз.
Замени dll на эту и выполни свой запрос.
http://slil.ru/24186737
Особенно интересно про память.
  
Наверх
ICQ  
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Помогите навести порядок
Ответ #6 - 05. Апреля 2007 :: 10:08
Печать  
Хорошо, проведу
Подскажи плиз вот такое

Мне надо получить последнее значение, делать хочу типо такого:

AND
|(RIGHT(Цены.IDDOC,9) =
|(
|SELECT MAX(CAST(Журнал.DATE AS CHAR(10)) + Журнал.TIME + Журнал.IDDOC)
|FROM 1SJOURN AS Журнал
|INNER JOIN $Регистр.Цены AS Цены1 ON Цены1.IDDOC = Журнал.IDDOC
|WHERE ($Цены.Номенклатура = $Цены1.Номенклатура)
|AND ($Цены1.Фирма = $Цены.Фирма)

Во-первых как тут лучше?
Во-вторых как выразить дату в ДБФ в виде 20070405 а не 05/04/2007?
Если моно - ссылку на доку по ДБФ, что там работает и как
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Помогите навести порядок
Ответ #7 - 05. Апреля 2007 :: 11:48
Печать  
Порядок!  Подмигивание

Код
Выбрать все
|AND
|Цены.IDDOC =
|(
|SELECT RIGHT(MAX(DTOS(Журнал.DATE) + Журнал.TIME + Журнал.IDDOC), 9)
 

  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Помогите навести порядок
Ответ #8 - 05. Апреля 2007 :: 11:54
Печать  
Кирилл, выложи куда в другое место или пришли на мыло... неполучается оттуда скачать - сваливается.
Адрес направляю в личку (если надо)
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите навести порядок
Ответ #9 - 05. Апреля 2007 :: 12:54
Печать  
Цитата:
Порядок!  Подмигивание

Код
Выбрать все
|AND
|Цены.IDDOC =
|(
|SELECT RIGHT(MAX(DTOS(Журнал.DATE) + Журнал.TIME + Журнал.IDDOC), 9)
 


А может так:
Код
Выбрать все
|AND
|Цены.IDDOC =
|(
|SELECT RIGHT(DTOS(MAX(Журнал.DATE) + Журнал.TIME + Журнал.IDDOC), 9)
 


правильнее будет?
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Помогите навести порядок
Ответ #10 - 05. Апреля 2007 :: 13:23
Печать  
Нет имхо  Озадачен
Кроме даты еще есть и время и иддок
Я выбираю максимальную строку вида ДатаТаймИдДок
У тебя же макс дата - а остальное?
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите навести порядок
Ответ #11 - 05. Апреля 2007 :: 13:55
Печать  
ушло
  
Наверх
ICQ  
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Помогите навести порядок
Ответ #12 - 05. Апреля 2007 :: 21:25
Печать  
2(spock) В принципе происходит то же самое
Поясню: у меня версия 2.0.3.0, 1С 25, ХР СП2
Укладывался просто большой список, папки в которых много элементов укладываются быстро
Думаю просто надо было по-человечески мне сразу делать...
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Помогите навести порядок
Ответ #13 - 05. Апреля 2007 :: 21:34
Печать  
После срубания Одноэсины оставались каки - таблицы ДБФ, размер их был примерно 250 КБ, в то время как памяти 1С в целом жрала более 100 мег, Core2 Duo грузился на 50%
В общем сам попробуй засунуть просто большой список укладывать (не папку)
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите навести порядок
Ответ #14 - 06. Апреля 2007 :: 03:18
Печать  
Ты укладываешь список элементов методом УложитьСписокОбъектов() без последнего параметра, так?
  
Наверх
ICQ  
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Помогите навести порядок
Ответ #15 - 06. Апреля 2007 :: 05:19
Печать  
А можно и мне сови пять вставить?
Вадимко!
А как на счет тормозов при соединении с 1sjourn?
Условие на дату помоему разницы в скорости не дает.
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Помогите навести порядок
Ответ #16 - 06. Апреля 2007 :: 12:35
Печать  
2(Спок) Вот так:
Запрос.УложитьСписокОбъектов(ВыбТовар, СписокТМЦ, "Номенклатура");

2(Варельчик) Трудно сказать, мало документов, но в них много ТМЦ. Думал сделать флажок быстрой обработки, но и так очень быстро работает
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите навести порядок
Ответ #17 - 06. Апреля 2007 :: 13:03
Печать  
Я тебя не понимаю.
У тебя список элементов, которые нужно тупо уложить в таблицу? При размере списка 19 тыс - кол-во строк в таблице тоже 19 тыс.
Или же у тебя список элементов с группами, которые нужно уложить и дополнительно еще то, что в группах? При размере списка 19 тыс - кол-во строк в таблице >= 19 тыс.
  
Наверх
ICQ  
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Помогите навести порядок
Ответ #18 - 06. Апреля 2007 :: 13:21
Печать  
Нет
Просто первый запрос возвращал ТЗ, ее я выгружал в список и использовал для второго запроса
Укладывал как написал
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Помогите навести порядок
Ответ #19 - 06. Апреля 2007 :: 13:24
Печать  
Вот нашел именно тот кусок:

ТЗСпр = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
     
     Запрос.УстановитьТекстовыйПараметр("ВыбФирма",             ВыбФирма);
     СписокНом = "";
     Если ТЗСпр.КоличествоСтрок() > 0 Тогда
           Список = СоздатьОбъект("СписокЗначений");
           ТЗСпр.Выгрузить(Список,,,"Номенклатура");
           
           Запрос.УложитьСписокОбъектов(Список, СписокНом, "Номенклатура");
           Запрос.УстановитьТекстовыйПараметр("СписокНом", СписокНом);
     Иначе      
           Сообщить("По заданным условиям нет номенклатуры для обработки");      
           Возврат;
     КонецЕсли;
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Помогите навести порядок
Ответ #20 - 06. Апреля 2007 :: 13:28
Печать  
Теперь выглядит так, в двух частях Юниона (см. модернизированный слегка запрос в первом посту), все отлично:

|AND $Цены.Номенклатура IN (" + ТекстЗапросаВлож +  ")
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите навести порядок
Ответ #21 - 06. Апреля 2007 :: 14:01
Печать  
В таком случае
Код
Выбрать все
Запрос.УложитьСписокОбъектов(Список, СписокНом, "Номенклатура");
 


для каждого элемента списка, который укладывается, будут выполняться два запроса.
Т.е. на каждый элемент из списка будет выполнен запрос
Код
Выбрать все
INSERT INTO ВремТаблица (VAL, ISFOLDER) VALUES ('   ХНЯ   ', 2) --или 1, если это группа
 



и еще такой
Код
Выбрать все
INSERT INTO ВремТаблица (val, isfolder)
    SELECT
        SC.id as val,
        SC.isfolder as isfolder
    FROM $Справочник.Номенклатура as SC
    WHERE
        (SC.parentid IN (SELECT T.val FROM ВремТаблица as T))
        AND (SC.id NOT IN (SELECT TT.val FROM ВремТаблица as TT))
 



В твоем случае второй запрос лишнее. Убери третий параметр.
ps: подзапрос конечно будет быстрее, вместо укладки списка.
  
Наверх
ICQ  
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Помогите навести порядок
Ответ #22 - 06. Апреля 2007 :: 14:57
Печать  
Большое спасибо!
А то я думал.. чого меня все игнорируют  Смущённый

Вот еще бы кто подсказал по вопросам  Круглые глаза

1. как в запросе по справочнику получить таблицу вида:
Номенклатура    НоменклатураВУ    Цена

где Цена - реквизит
НоменклатураВУ   - номенклатура самого верхнего уровня (НоменклатураВУ.PARENTID = $ПустойИд, НоменклатураВУ.ISFOLDER <> 2)

2. Как получить одну колонку вместо двух? (надо брать не максимальную цену, а по такому принципу: если в регистре цена есть - брать ее, если нет - себестоимость)
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Помогите навести порядок
Ответ #23 - 10. Апреля 2007 :: 09:23
Печать  
1) А как получается НоменклатураВУ и как она связана с Номенклатура и Цена? То условие, которое ты приводишь никак не связано с остальными параметрами.
2) Под MSSQL есть функция CASE, под драйвер для ДБФ ничего сказать не могу Печаль
  
Наверх
ICQ  
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Помогите навести порядок
Ответ #24 - 10. Апреля 2007 :: 11:03
Печать  
Цены тут никаким боком
Просто вот интересно, как на ДБФ получить допустим в приведенном запросе еще и родителя верхнего уровня
Ну или в простом запросе по справочнику
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать