Переключение на Главную Страницу Страницы: 1 2 [3] 4 5 ... 8 ОтправитьПечать
Очень популярная тема (более 25 ответов) Выборка остатков прямым запросом (число прочтений - 30170 )
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Выборка остатков прямым запросом
Ответ #30 - 16. Сентября 2010 :: 11:26
Печать  
Neo писал(а) 16. Сентября 2010 :: 11:06:
Цитата:
Переходи на табличное поле, там расчет будет для всех видимых строк сразу, 1 запрос летит на сервер, а не куча мелких для каждой строки.


Ну это понятно, просто рассматриваю все варианты)) Если на ТП переходить, то это же надо вообще всю форму переделывать (всякие панельки, дерево групп, механизм копирования и т.п.). Чувствую, много гемороя предстоит  Очень довольный


Возьми готовый класс  - там усё реализовано.
  
Наверх
 
IP записан
 
Foma
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 61
Зарегистрирован: 16. Сентября 2010
Re: Выборка остатков прямым запросом
Ответ #31 - 16. Сентября 2010 :: 12:04
Печать  
Переходить на ТП - по вкусу.
Мне почему нужен расчет по каждой строчке каждый раз: работает порядка 30 продавцов в единой базе и скоро планируется еще 10-15. И продажа единицы товара двум покупателям (срок поставки может доходить до 3 месяцев) из наличия, хотя товара всего одна единица, может привести к выплате неустойки приличного размера. Поэтому, расчет остатка нужен постоянный.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Выборка остатков прямым запросом
Ответ #32 - 16. Сентября 2010 :: 12:26
Печать  
Foma писал(а) 16. Сентября 2010 :: 12:04:
Переходить на ТП - по вкусу.
Мне почему нужен расчет по каждой строчке каждый раз: работает порядка 30 продавцов в единой базе и скоро планируется еще 10-15. И продажа единицы товара двум покупателям (срок поставки может доходить до 3 месяцев) из наличия, хотя товара всего одна единица, может привести к выплате неустойки приличного размера. Поэтому, расчет остатка нужен постоянный.

не понимаю предположим один склад один товар
всего количество 30
первый продавец завел строку на 20 ( на остатках 30 )
в это же время второй тоже завел строку на 20  ( на остатках 30 )
первый продавец покурил
второй продавец покурил
первый продавец сохранил и провел
второй начал записывать и что должно происходить ?
или Вы после каждой строки записываете и перепроводите документ ?
  
Наверх
 
IP записан
 
Foma
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 61
Зарегистрирован: 16. Сентября 2010
Re: Выборка остатков прямым запросом
Ответ #33 - 17. Сентября 2010 :: 03:01
Печать  
Да, согласен. При проведении документа 1С ругнется на отсутствие остатков. Но у нас не 30 штук на остатке, а 1-2, и стоимость обычно более 50т.р.. Один продавец скажет клиенту, что есть в наличии и второй. Первый оформит и проведет, а второй в итоге скажет, извините, оказывается нет в наличии, а только под заказ со сроком поставки 45 дней. Человек скорее всего развернется и уйдет, т.к. его обманули. А вот если бы ему сказали сразу, мол нет в наличии и только под заказ, дали бы доп. скидку и пр., то наверняка он бы согласился. Процесс оформления договора может длиться и пол часа, т.к. товар дорогой. Поэтому чем актуальней информация, тем лучше.
  
Наверх
 
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Выборка остатков прямым запросом
Ответ #34 - 17. Сентября 2010 :: 05:54
Печать  
Цитата:
Поэтому чем актуальней информация, тем лучше.


А чем тут ТП будет хуже стандартного механизма? В ТП же вроде можно настраивать таймаут обновления, как нужно. Чем меньше таймаут, тем быстрее происходит обновление.

Кстати, попутно вопрос возник по поводу ТП. Если взять стандартную форму списка и вывод остатков в текстовую колонку, то если движения по справочнику нет, то колонки-реквизиты обновляются автоматически (и если были изменения, то мы их сразу увидим). А вот остатки пересчитаются, только если будет движение по строкам. Как с этим обстоит в ТП? Если поставить таймаут обновления, то когда движения по справочнику не будет, информация по остаткам будет все равно обновляться?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Выборка остатков прямым запросом
Ответ #35 - 17. Сентября 2010 :: 06:32
Печать  
Neo писал(а) 17. Сентября 2010 :: 05:54:
Цитата:
Поэтому чем актуальней информация, тем лучше.


А чем тут ТП будет хуже стандартного механизма? В ТП же вроде можно настраивать таймаут обновления, как нужно. Чем меньше таймаут, тем быстрее происходит обновление.



Тем более, что обычные формы списка тоже имеют таймаут обновления, который задается в Сервис-параметры.
  
Наверх
 
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Выборка остатков прямым запросом
Ответ #36 - 17. Сентября 2010 :: 07:24
Печать  
Цитата:
обычные формы списка тоже имеют таймаут обновления, который задается в Сервис-параметры.


При этом колонки с функциями не пересчитываются. Поэтому если пользователь не будет перемещаться по позициям, то он не увидит, что кто-то уже списал этот товар
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Выборка остатков прямым запросом
Ответ #37 - 17. Сентября 2010 :: 07:29
Печать  
Neo писал(а) 17. Сентября 2010 :: 07:24:
Цитата:
обычные формы списка тоже имеют таймаут обновления, который задается в Сервис-параметры.


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


Можно принудительно обновлять форму списка по таймауту.
  
Наверх
 
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Выборка остатков прямым запросом
Ответ #38 - 17. Сентября 2010 :: 08:00
Печать  
Цитата:
Можно принудительно обновлять форму списка по таймауту.


- Ну это понятно. Я просто к тому, что стандартные формы по умолчанию тоже не гарантируют актуальности.

Хотя я как раз таки напротив, стараюсь по возможности уменьшить число запросов к базе при работе со справочниками. Т.к. народу много, многие распахивают форму списка всерьез и надолго, даже когда со справочником не работают. Сделал даже, чтобы при перемещениями между окнами (опять таки, раскроют справочник и начинают работать в других окнах) проверялось, изменился ли текущий товар. Если не изменился, то остатки берутся из ИТЗ и к базе обращений нет. А по поводу актуальности... исхожу из того, что если человек активно работает, набивает товары в документ, перемещается по номенклатуре, то обновление нужно (в разумных пределах), если нет, то и нафиг не нужна куча лишних запросов к базе.

Соответственно, вставлять еще свой таймаут и принудительно обновлять, в то время как и так обновление происходит при каждом чихе, темь самым нагружая базу - это полный изврат)))
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Выборка остатков прямым запросом
Ответ #39 - 17. Сентября 2010 :: 08:23
Печать  
У нас останки только в подборе. А больше они никому и не упали.
Всё можно отчетом поглядеть.
  
Наверх
 
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Выборка остатков прямым запросом
Ответ #40 - 17. Сентября 2010 :: 08:35
Печать  
Цитата:
А больше они никому и не упали.


У нас все иначе, всем нужно все и сразу. Привычка видеть сразу остатки при работе со справочником у многих уже отложилась на генетическом уровне и этого уже не победить  Улыбка Так что остается только оптимизировать то, что есть..
  
Наверх
 
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Выборка остатков прямым запросом
Ответ #41 - 17. Сентября 2010 :: 13:53
Печать  
Хочу параметрическим запросом получить из регистра ПартииНаличие себестоимость рублевую (СуммаРуб/Кол) и долларовую (СуммаУпр/Кол). Можно ли это (и лучше ли) сделать в одном запросе или лучше сделать 3 раза ВыполнитьСкалярный?      

Т.е., просто остатки получаю как-то так:

//Остатки товара в партиях
           RS_СебестКол=СоздатьОбъект("ODBCRecordset");
           ТекстЗапроса_СебестКол = "
           |SELECT
           |SUM($Рег.Количество) as Количество
           |FROM
           |$РегистрИтоги.ПартииНаличие as Рег With (NOLOCK)
           |WHERE
           |Рег.PERIOD= cast('"+стрдатыТА+"'as datetime) AND
           |$Рег.Товар = ?";
           
           RS_СебестКол.Подготовить(ТекстЗапроса_СебестКол);
RS_СебестКол.ПостроитьПараметры();

                             RS_СебестКол.УстПараметр(1,Тов);
Ост=RS_СебестКол.ВыполнитьСкалярный();

Как получить обе себестоимости наиболее оптимально, чтобы было меньше обращений к базе, т.к., будет юзаться в форме списка?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Выборка остатков прямым запросом
Ответ #42 - 17. Сентября 2010 :: 14:41
Печать  
Код
Выбрать все
RS_СебестКол=СоздатьОбъект("ODBCRecordset");
	     ТекстЗапроса_СебестКол = "
	     |SELECT
	     | SUM($Рег.Количество) as Количество
	     |,SUM($Рег.СуммаРуб) as СуммаРуб
	     |,SUM($Рег.СуммаУпр) as СуммаУпр
	     |FROM
	     |$РегистрИтоги.ПартииНаличие as Рег With (NOLOCK)
	     |WHERE
	     |Рег.PERIOD= cast('"+стрдатыТА+"'as datetime) AND
	     |$Рег.Товар = ?";

	     RS_СебестКол.Подготовить(ТекстЗапроса_СебестКол);
RS_СебестКол.ПостроитьПараметры();

				     RS_СебестКол.УстПараметр(1,Тов);
ТЗ=RS_СебестКол.ВыполнитьИнструкцию(); 


получишь ТЗ из одной строки и трех колонок
  
Наверх
 
IP записан
 
Альтаир
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 13
Местоположение: Харьков, Украина
Зарегистрирован: 26. Сентября 2008
Пол: Мужской
Re: Выборка остатков прямым запросом
Ответ #43 - 22. Сентября 2010 :: 13:08
Печать  
У меня тоже появилась такая необходимость.
Сделал тестовую обработку. Выполнил ее не монопольно на рабочем сервере в копии рабочей базы при активной работе пользователей (в других базах).
Конфигурация: Windows 2008 Server, MS SQL 2008, 1С 27 релиз патченный-перепатченный  Подмигивание

Код:

Перем глОстТовара  Экспорт;

//*******************************************
Процедура ПриОткрытии()
     стрдатыТА=строка(формат(НачМесяца(ПолучитьДатуТА()),"ДГГГГММДД"));
     глОстТовара = СоздатьОбъект("ODBCRecordset");
     ТекстЗапроса = "
     |SELECT
     |      SUM($Рег.ОстатокТовара)
     |FROM
     |      $РегистрИтоги.ОстаткиТоваров Рег (NoLock)
     |WHERE
     |      Рег.PERIOD='"+стрдатыТА+"' AND
     |      $Рег.Товар = ?
     |";
     
     Если глОстТовара.Подготовить(ТекстЗапроса)=0 тогда
           сообщить("Ошибка подготовки запроса остатков по складу (гл)! "+глОстТовара.ПолучитьОписаниеОшибки()+РазделительСтрок+"Свяжитесь с админитсратором!!!");
     КонецЕсли;
     глОстТовара.ПостроитьПараметры();
КонецПроцедуры

//*******************************************
Функция глОстатокТовара(товар) Экспорт
     ост=0;
     глОстТовара.УстПараметр(1, товар);
     ост=глОстТовара.ВыполнитьСкалярный();
     Возврат ост;
КонецФункции

//*******************************************
Процедура Сформировать()
     спр=СоздатьОбъект("Справочник.Номенклатура");

     Для Инд=1 По 10 Цикл
           Сообщить("Попытка № "+Инд);
           спр.ВыбратьЭлементы();
           А=0;
           ОбщееНачало=_GetPerformanceCounter();
           Пока Спр.ПолучитьЭлемент()=1 Цикл
                 Если Спр.ЭтоГруппа()=1 Тогда
                       Продолжить;
                 КонецЕсли;
                 Ост=глОстатокТовара(Спр.ТекущийЭлемент());
                 А=А+1;
                 Если А=1000 Тогда
                       Прервать;
                 КонецЕсли;
           КонецЦикла;
           ОбщееВремя=(_GetPerformanceCounter()-ОбщееНачало)/1000;
           Сообщить("Прямой запрос = "+ОбщееВремя);
     
           спр.ВыбратьЭлементы();
           А=0;
           ОбщееНачало=_GetPerformanceCounter();
           Пока Спр.ПолучитьЭлемент()=1 Цикл
                 Если Спр.ЭтоГруппа()=1 Тогда
                       Продолжить;
                 КонецЕсли;
                 ");
                 А=А+1;
                 Если А=1000 Тогда
                       Прервать;
                 КонецЕсли;
           КонецЦикла;
           ОбщееВремя=(_GetPerformanceCounter()-ОбщееНачало)/1000;
           Сообщить("Регистр = "+ОбщееВремя);
     КонецЦикла;
КонецПроцедуры

//*******************************************

Результаты как-то не порадовали  Улыбка
Попытка № 1
Прямой запрос = 39.703
Регистр = 43.021
Попытка № 2
Прямой запрос = 44.288
Регистр = 40.961
Попытка № 3
Прямой запрос = 38.426
Регистр = 39.642
Попытка № 4
Прямой запрос = 41.505
Регистр = 42.717
Попытка № 5
Прямой запрос = 41.22
Регистр = 38.238
Попытка № 6
Прямой запрос = 41.178
Регистр = 41.793
Попытка № 7
Прямой запрос = 38.793
Регистр = 40.759
Попытка № 8
Прямой запрос = 39.377
Регистр = 39.712
Попытка № 9
Прямой запрос = 40.323
Регистр = 39.845
Попытка № 10
Прямой запрос = 40.099
Регистр = 40.799
  

Все животные равны, но некоторые равнее других.&&© Джордж Оруэлл "Скотный двор"
Наверх
www  
IP записан
 
Альтаир
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 13
Местоположение: Харьков, Украина
Зарегистрирован: 26. Сентября 2008
Пол: Мужской
Re: Выборка остатков прямым запросом
Ответ #44 - 22. Сентября 2010 :: 13:27
Печать  
Предыдущий замер делался при отлюченном отборе итогов в регистре по измерению Товар.
При включенном все горазде лучше  Очень довольный

Попытка № 1
Прямой запрос = 2.766
Регистр = 1.23
Попытка № 2
Прямой запрос = 0.714
Регистр = 1.203
Попытка № 3
Прямой запрос = 0.753
Регистр = 1.263
Попытка № 4
Прямой запрос = 0.84
Регистр = 1.355
Попытка № 5
Прямой запрос = 0.714
Регистр = 1.356
Попытка № 6
Прямой запрос = 0.824
Регистр = 1.245
Попытка № 7
Прямой запрос = 0.734
Регистр = 1.333
Попытка № 8
Прямой запрос = 0.705
Регистр = 1.239
Попытка № 9
Прямой запрос = 0.751
Регистр = 1.331
Попытка № 10
Прямой запрос = 0.871
Регистр = 1.38

тут уже видно преимущество прямых запросов
  

Все животные равны, но некоторые равнее других.&&© Джордж Оруэлл "Скотный двор"
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 [3] 4 5 ... 8
ОтправитьПечать