Переключение на Главную Страницу Страницы: 1 2 [3]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Рассчет остатков напрямую в подборе Номенклатуры (число прочтений - 9473 )
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 2 [3] 
ОтправитьПечать