Переключение на Главную Страницу Страницы: 1 [2] 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Рассчет остатков напрямую в подборе Номенклатуры (число прочтений - 9474 )
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #15 - 03. Апреля 2014 :: 05:24
Печать  
trad писал(а) 03. Апреля 2014 :: 05:18:
Параметрический запрос и использование ВТ в таком виде несовместимо.
ВТ развернется в два подзапроса и знаков "?" вместо двух станет четыре, что приведет к ошибке при выполнении.

Вот спасибо, теперь стало понятнее
  
Наверх
ICQ  
IP записан
 
Eugene1980
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 18
Зарегистрирован: 02. Апреля 2014
Пол: Мужской
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #16 - 03. Апреля 2014 :: 08:05
Печать  
Вот код функции:

Функция ЗапросСКЛ()
            
     ТекстЗапроса = "
          |DECLARE @Товар CHAR(9)
          |Set @Товар = ?
          |SELECT
          |      sum(Рег.КоличествоОстаток) as Количество
          |FROM
          |      $РегистрОстатки.ОстаткиТМЦ(,,Фирма = ? AND Склад = ? AND Номенклатура = @Товар,(Фирма,Склад,Номенклатура), Количество) as Рег
          |";

       RS = СоздатьОбъект("ODBCRecordset");
     ТекстЗапроса = ТекстЗапросаСКЛ();
     Если RS.Подготовить(ТекстЗапроса) = 0 Тогда
             Сообщить(RS.ПолучитьОписаниеОшибки());
     КонецЕсли;
     RS.ПостроитьПараметры(); 

     RS.УстПараметр(1, ВыбФирма);
     RS.УстПараметр(2, ВыбСклад);
       RS.УстПараметр(3, Товар);

     Возврат RS.ВыполнитьСкалярный();
     
КонецФункции

все-равно валится на мндексе?!
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #17 - 03. Апреля 2014 :: 08:20
Печать  
Улыбка)

Товар описал как переменную, а на остальные переменные болт положил ?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #18 - 03. Апреля 2014 :: 09:29
Печать  
а это шо це таке?
ТекстЗапроса = ТекстЗапросаСКЛ();
  

1&&2&&3
Наверх
 
IP записан
 
Eugene1980
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 18
Зарегистрирован: 02. Апреля 2014
Пол: Мужской
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #19 - 03. Апреля 2014 :: 10:36
Печать  
Так что ли?!

Функция ЗапросСКЛ()
           
     ТекстЗапроса = "
         |DECLARE @Товар CHAR(9)
         |Set @Фирма = ?,
         |Set @Склад = ?,
         |Set @Товар = ?
         |SELECT
         |      sum(Рег.КоличествоОстаток) as Количество
         |FROM
         |      $РегистрОстатки.ОстаткиТМЦ(,,Фирма = ? AND Склад = ? AND Номенклатура = @Товар,(Фирма,Склад,Номенклатура), Количество) as Рег
         |";

     RS = СоздатьОбъект("ODBCRecordset");
     Если RS.Подготовить(ТекстЗапроса) = 0 Тогда
            Сообщить(RS.ПолучитьОписаниеОшибки());
     КонецЕсли;
     RS.ПостроитьПараметры(); 

     RS.УстПараметр(1, ВыбФирма);
     RS.УстПараметр(2, ВыбСклад);
      RS.УстПараметр(3, Товар);

     Возврат RS.ВыполнитьСкалярный();
    
КонецФункции
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #20 - 03. Апреля 2014 :: 10:48
Печать  
Фирма = @Фирма AND Склад = @Склад
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #21 - 03. Апреля 2014 :: 10:50
Печать  
+
DECLARE @Товар CHAR(9), @Склад CHAR(9), @Фирма CHAR(9)
  

1&&2&&3
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #22 - 03. Апреля 2014 :: 10:51
Печать  
и в определении
   |DECLARE @Товар CHAR(9),@Фирма CHAR(9),@Склад CHAR(9)
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #23 - 03. Апреля 2014 :: 10:51
Печать  
и запятые после set лишние
  

1&&2&&3
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #24 - 03. Апреля 2014 :: 10:53
Печать  
Блин, за это время можно было уже все способы опробовать, ну или хотя бы в bol посмотреть описалово синтаксиса..или так, примеров как грязи
Улыбка
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #25 - 03. Апреля 2014 :: 10:57
Печать  
и вообще зачем подготавливать запрос при каждом получении остатка?..
весь профит от параметрического запроса коту под хвост
  

1&&2&&3
Наверх
 
IP записан
 
Eugene1980
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 18
Зарегистрирован: 02. Апреля 2014
Пол: Мужской
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #26 - 03. Апреля 2014 :: 11:01
Печать  
Так где эта "грязь", покажите хоть один работающий пример параметрического запроса?! Информации полно, но вся она сопряжена с ошибками такими же как у меня?!
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #27 - 03. Апреля 2014 :: 11:15
Печать  
Воспользуйтесь поиском.
Хотя, ваш пример довести до ума, не так и тяжело.
Достаточно в ПриОткртыиии написать текст запроса, подготовить его, и построить параметры, а в функции только устанавливать парметры и выполнять его.
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #28 - 03. Апреля 2014 :: 11:23
Печать  
1. Если подготавливаешь запрос, то делать надо в "ПриОткрытии", или еще где, один раз
2. Если же строишь запрос каждый раз по новому, то проще без Параметров, а так:
Код
Выбрать все
Функция ЗапросСКЛ()
	    
    ТекстЗапроса = "
	   |SELECT
	   |	sum(Рег.КоличествоОстаток) as Количество
	   |FROM
	   |	$РегистрОстатки.ОстаткиТМЦ(,,Склад = @Склад AND Номенклатура = @Товар,(Склад,Номенклатура), Количество) as Рег
	   |";

    RS = СоздатьОбъект("ODBCRecordset");

    RS.УстановитьТекстовыйПараметр ("Склад", ВыбСклад);
    RS.УстановитьТекстовыйПараметр ("Товар", Товар);

    Возврат RS.ВыполнитьСкалярный(ТекстЗапроса);
  
КонецФункции 

  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #29 - 03. Апреля 2014 :: 11:29
Печать  
А так - с параметрическим (если я правильно все понял)

Код
Выбрать все
Перем RS;
Процедура ИнициализироватьЗапрос()
    ТекстЗапроса = "
	   |DECLARE @Товар CHAR(9),@Фирма CHAR(9),@Склад CHAR(9)
	   |Set @Фирма = ?
	   |Set @Склад = ?
	   |Set @Товар = ?
	   |SELECT
	   |	sum(Рег.КоличествоОстаток) as Количество
	   |FROM
	   |	$РегистрОстатки.ОстаткиТМЦ(,,Фирма = @Фирма AND Склад = @Склад AND Номенклатура = @Товар,(Фирма,Склад,Номенклатура), Количество) as Рег
	   |";

    RS = СоздатьОбъект("ODBCRecordset");
    Если RS.Подготовить(ТекстЗапроса) = 0 Тогда
		Сообщить(RS.ПолучитьОписаниеОшибки());
    КонецЕсли;
    RS.ПостроитьПараметры();
КонецПроцедуры
//------------------------------------------
Процедура ПриОткрытии()
  ИнициализироватьЗапрос();
...
КонецПроцедуры
//------------------------------------------
Функция ЗапросСКЛ()
    RS.УстПараметр(1, ВыбФирма);
    RS.УстПараметр(2, ВыбСклад);
    RS.УстПараметр(3, Товар);

    Возврат RS.ВыполнитьСкалярный();

КонецФункции 

  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 
ОтправитьПечать