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


1C++ rocks!

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

Функция ЗапросСКЛ(Товар)
             
     ТекстЗапроса = "
           |SELECT
           |      $Рег.Количество as Количество
           |FROM
           |      $РегистрИтоги.ОстаткиТМЦ as Рег
           |WHERE
           |      Рег.Period = {d'2014-04-01'} AND
           //|      $Рег.Фирма = ? AND
           |      $Рег.Склад = ? AND
           |      $Рег.Номенклатура = ?
             |";  
           
               RS.УстПараметр(1, Склад);
               RS.УстПараметр(2, Товар);

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

Все бы хорошо, но вот после первой итерации вылетает ошибка MS SQL: connection is busy with results for another hstmt.
Что не так, можно ли это обойти?!
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #1 - 02. Апреля 2014 :: 08:48
Печать  
(nolock)
воткни в текст запроса + это, остатки всегда на ТА нужны вам разве ?
Улыбка

+ не ясно, что есть Склад у вас
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #2 - 02. Апреля 2014 :: 09:28
Печать  
sum($Рег.Количество) as Количество
  

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


1C++ rocks!

Сообщений: 18
Зарегистрирован: 02. Апреля 2014
Пол: Мужской
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #3 - 02. Апреля 2014 :: 10:21
Печать  
Так что "воткнуть"?! Склад это параметр формы, он определяется при ее открытии, а номенклатура - это текущий элемент для которого рассчитывается остаток?!
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #4 - 02. Апреля 2014 :: 10:38
Печать  
Для сочетания: Параметрических запрос + ВыполнитьСкалярный - нужно писать запрос, гарантированно возвращающий одну строку в выборке.
Твой запрос возвращает более одной. Вероятно из-за наличия итогов по разным фирмам.
Один из вариантов решения показан в #2
  

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


1C++ rocks!

Сообщений: 18
Зарегистрирован: 02. Апреля 2014
Пол: Мужской
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #5 - 02. Апреля 2014 :: 12:00
Печать  
Как он может вернуть более одного значения, если в него передается 2 параметра Склад и Номенклатура, это конечные элементы и остаток только один. Запрос построен на основе методических рекомендаций к компоненте 1C++?! Вы предлагаете убрать один параметр из запроса?!
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #6 - 02. Апреля 2014 :: 12:08
Печать  
Улыбка
у вас же в регистре не 2 измерения, склад и товар , не так ли ?
Вот ваш запрос может возвратить не одну, а две или больше строк..
Чтоб этого избежать - вам предлагается проссумировать количество.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #7 - 02. Апреля 2014 :: 12:26
Печать  
Eugene1980 писал(а) 02. Апреля 2014 :: 12:00:
Вы предлагаете убрать один параметр из запроса?!
нет, не предлагал я такого.
Я предлагаю гарантировать одну строку в выборке. Это достигается либо путем агрегирования, как я показал, либо указанием отбора по значениям всех измерений регистра.
  

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


1C++ rocks!

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #9 - 02. Апреля 2014 :: 12:44
Печать  
Через УстановитьТекстовыйПараметр..
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #10 - 02. Апреля 2014 :: 16:50
Печать  
Eugene1980 писал(а) 02. Апреля 2014 :: 12:35:
С агрегированием измерения понятно, сегодня попробуем, спасибо.
Тогда не подскажите как в параметр прямого запроса список значений передать, например по всем фирмам, возможно это?!  


Передать то можно, но зачем???

И не проще ли воспользоваться Виртуальной таблицей?
типа:

Код
Выбрать все
Функция ЗапросСКЛ(Товар)

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

		   RS.УстПараметр(1, Склад);
		   RS.УстПараметр(2, Товар);

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

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

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


1C++ rocks!

Сообщений: 18
Зарегистрирован: 02. Апреля 2014
Пол: Мужской
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #11 - 02. Апреля 2014 :: 17:16
Печать  
Попробовал, но теперь другая ошибка - message [Microsoft][ODBC SQL Server Driver]Invalid Descriptor Index, что то с индексом?!
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #12 - 03. Апреля 2014 :: 05:18
Печать  
Salimbek писал(а) 02. Апреля 2014 :: 16:50:
И не проще ли воспользоваться Виртуальной таблицей?
типа:

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

Если все же хочется использовать ВТ, то нужно либо, считая остатки на ТА, перед подготовкой вызвать метод ОбратныйРасчетОтТА(1)
Либо писать запрос так:
declare @nomen char(9)
set @nomen = ?
select
...
from $РегистрОстатки.ОстаткиТМЦ(... Номенклатура = @nomen...)

, при этом можно будет считать на ТА и не на ТА
  

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



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #13 - 03. Апреля 2014 :: 05:19
Печать  
Eugene1980 писал(а) 02. Апреля 2014 :: 17:16:
Попробовал, но теперь другая ошибка - message [Microsoft][ODBC SQL Server Driver]Invalid Descriptor Index, что то с индексом?!

Не с индексом, с построением параметров, у тебя в (0) никак не указано, как подготавливается запрос и как создаются параметры.
Например, была такая ветка с аналогичной проблемой: http://www.1cpp.ru/forum/YaBB.pl?num=1288688923/0
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #14 - 03. Апреля 2014 :: 05:23
Печать  
Eugene1980 писал(а) 02. Апреля 2014 :: 12:35:
Тогда не подскажите как в параметр прямого запроса список значений передать, например по всем фирмам, возможно это?!  

Так если нужно по всем фирмам, то зачем какой то список передавать?
sum() как раз просуммирует остатки по всем фирмам.
  

1&&2&&3
Наверх
 
IP записан
 
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 записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #30 - 03. Апреля 2014 :: 11:33
Печать  
И при работе с Виртуальной таблицей это sum(Рег.КоличествоОстаток) лишнее, там оно и так просуммировано будет. Так что достаточно написать просто Рег.КоличествоОстаток
  
Наверх
ICQ  
IP записан
 
Eugene1980
Junior Member
**
Отсутствует


1C++ rocks!

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

Вот код обработки для теста прямого запроса, в таблицу на форме выводит элементы группы номенклатуры
и остаток, все просто блин, ошибка
Возврат RS.ВыполнитьСкалярный();      
{D:\1C ADMIN\ОБРАБОТКИ\SQL_ПОДБОР.ERT(40)}: State 07009, native 0, message [Microsoft][ODBC SQL Server Driver]Invalid Descriptor Index

Перем RS;


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

    Возврат ТекстЗапроса;
     
КонецФункции


Функция ПолучитьОстатокНоменклатурыСКЛ(Товар)  
     
     RS.УстПараметр(3, Товар);
     Возврат RS.ВыполнитьСкалярный();      
     
КонецФункции


Процедура ПриОткрытии()
           
     ВыбФирма = глЗначениеПоУмолчанию("ОсновнаяФирма");
     ФирмаДляОстатковТМЦ = глФирмаДляОстатковТМЦ(ВыбФирма);
     ВыбСклад = глЗначениеПоУмолчанию("ОсновнойСклад");
     
     ТаблицаПодбора.НоваяКолонка("Номенклатура",       ,  , ,"Выбранный товар",20   );
     ТаблицаПодбора.НоваяКолонка("Единица"     ,       ,  , ,"Ед."            ,4    );
     ТаблицаПодбора.НоваяКолонка("ОстатокФ"    ,"Число",14,3,"Ост. ф."        ,10,,2);
           
КонецПроцедуры      // ПриОткрытии



Процедура Сформировать()                      
                   
     Если ПустоеЗначение(ВыбФирма) = 1 Тогда
           Предупреждение("Не указана фирма!",10);
           СтатусВозврата(0);
           Возврат;
     КонецЕсли;  
     
     Если ПустоеЗначение(ВыбСклад) = 1 Тогда
           Предупреждение("Не указан  склад!",10);
           СтатусВозврата(0);
           Возврат;
     КонецЕсли;
     
     Если ПустоеЗначение(ВыбТМЦ) = 1 Тогда
           Предупреждение("Не указана группа ТМЦ!",10);
           СтатусВозврата(0);
           Возврат;
     КонецЕсли;
     
     Если ЗагрузитьВнешнююКомпоненту("1cpp.dll") = 0 Тогда
           Сообщить("Неудачная попытка загрузить 1cpp.dll! Выполнение отчета невозможно!","!");
           СтатусВозврата(0);
           Возврат;
     КонецЕсли;  
     
     RS = СоздатьОбъект("ODBCRecordset");
     ТекстЗапроса = ТекстЗапросаСКЛ();
     Если RS.Подготовить(ТекстЗапроса) = 0 Тогда
             Сообщить(RS.ПолучитьОписаниеОшибки());
     КонецЕсли;
     RS.ПостроитьПараметры();  
     RS.УстПараметр(1, ВыбФирма);
     RS.УстПараметр(2, ВыбСклад);
           
     Спр = СоздатьОбъект("Справочник.Номенклатура");
     Спр.ИспользоватьРодителя(ВыбТМЦ);  
     Спр.ВыбратьЭлементы();
     Пока Спр.ПолучитьЭлемент() > 0 Цикл
           Если Спр.ЭтоГруппа() = 1 Тогда
                 Продолжить;
           КонецЕсли;    
           ТаблицаПодбора.НоваяСтрока();
           ТаблицаПодбора.Номенклатура = Спр.ТекущийЭлемент();
           ТаблицаПодбора.Единица      = Спр.БазоваяЕдиница;
           ТаблицаПодбора.ОстатокФ     = ПолучитьОстатокНоменклатурыСКЛ(Спр.ТекущийЭлемент());
     КонецЦикла;
     
КонецПроцедуры  


// ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ
//
ДатаКонца = ПолучитьДатуТА();
ВыбТМЦ.ВыборГруппы(1);
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #32 - 03. Апреля 2014 :: 13:33
Печать  
вместо
RS.ПостроитьПараметры(); 
напиши
RS.ДобПараметр(1,14,9,0); 
RS.ДобПараметр(1,14,9,0); 
RS.ДобПараметр(1,14,9,0); 
и забудь навсегда про этот шайтан-метод
  

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


1C++ rocks!

Сообщений: 18
Зарегистрирован: 02. Апреля 2014
Пол: Мужской
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #33 - 03. Апреля 2014 :: 14:05
Печать  
Неужели, действительно, вот это помогло. Спасибо ОГРОМНОЕ!
А в чем шайтан, открой секрет?!
И вопрос по поводу даты остатков, если я захочу ее сам задавать, использовать тоже
RS.ДобПараметр(1,14,9,0);
RS.УстПараметр(1, ДатаОст);
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



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

Параметризировать дату не получится, т.к. от нее зависит трансляция ВТ в реальный запрос
  

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


1C++ rocks!

Сообщений: 18
Зарегистрирован: 02. Апреля 2014
Пол: Мужской
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #35 - 03. Апреля 2014 :: 14:22
Печать  
Т.е. задавать дату в параметрическом запросе  невозможно?!
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



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

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


1C++ rocks!

Сообщений: 18
Зарегистрирован: 02. Апреля 2014
Пол: Мужской
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #37 - 03. Апреля 2014 :: 16:29
Печать  
Так отработает RS.УстановитьТекстовыйПараметр("ДатаОст", ДатаКонца)?!
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



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

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


1C++ rocks!

Сообщений: 18
Зарегистрирован: 02. Апреля 2014
Пол: Мужской
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #39 - 04. Апреля 2014 :: 05:47
Печать  
Всем спасибо господа вот теперь все заработало, если необходимо могу выложить полный текст запроса, т. с для потомков?!
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Рассчет остатков напрямую в подборе Номенклатуры
Ответ #40 - 04. Апреля 2014 :: 06:24
Печать  
Да особо не  нужен он...
ЗЫ: все давно переделали подборы с показом останков на ТабличноеПоле с поставщиком в виде прямого запроса.
Так что, у вас всё еще впереди.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать