Имя: Пароль:
1C
1C 7.7
v7: Помогите по запросу 1С 7.7
,
0 Jeema
 
22.10.12
05:42
День добрый!Суть отчета показать определенный неликвидный товар в складе который не продавался в определенный период.

Вот что я накалякал:

Перем Запрос, ТекстЗапроса;
//*******************************************
Процедура Сформировать()
   тз=создатьобъект("ТаблицаЗначений");
   тз.новаяколонка("Фирма");
   тз.новаяколонка("Склад");
   тз.новаяколонка("Номенклатура");
   тз.новаяколонка("Колприход");
   тз.новаяколонка("Колрасход");
   тз.новаяколонка("Начост");
   тз.новаяколонка("Коност");
   тз.новаяколонка("НачСумма");
   тз.новаяколонка("ПрихСумма");
   тз.новаяколонка("РасхСумма");
   тз.новаяколонка("КонСумма");    
   тз.новаяколонка("КодОперации");
   тз.новаяколонка("ЦенаПрод");                                        
   
   //инициация таблицы
   Таблица = СоздатьОбъект("Таблица");
   Таблица.ИсходнаяТаблица("Таблица");
   Таблица.Опции(0,0,0,0);
   Таблица.ВывестиСекцию("Шапка");
   НомСтроки = 0;                                                  
   //конец инициации    
//*******************************************************************

//*******************************************************************
     //формирование запроса
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса="                                                  
   
   |ПЕРИОД С ДатаНачала По ДатаКонца;
   |Фирма        = Регистр.ОстаткиНаСкладах.Склад.Фирма;
   |Склад        = Регистр.ОстаткиНаСкладах.Склад;
   |Номенклатура = Регистр.ОстаткиНаСкладах.Товар;
   |Сумма        = Регистр.ОстаткиНаСкладах.Сумма;
   |Количество   = Регистр.ОстаткиНаСкладах.Количество;
   |ЦенаПрод     = Регистр.ОстаткиНаСкладах.Ценапрод;
   |";
   //*****************************************************************                                      
       ТекстЗапроса = ТекстЗапроса + "
       |Группировка Номенклатура без групп;";
     //|Группировка КодОперации;";                                                                    
       ТекстЗапроса = ТекстЗапроса +      
       "Функция НачКоличество       = НачОст(Количество);
       |Функция ПрихКоличество    = Приход(Количество);  
       |Функция РасхКоличество    = Расход(Количество);
       |Функция КонКоличество       = КонОст(Количество);";  
       ТекстЗапроса = ТекстЗапроса +
       "Функция НачСумма       = НачОст(Сумма);
       |Функция ПрихСумма     = Приход(Сумма);  
       |Функция РасхСумма     = Расход(Сумма);
       |Функция КонСумма       = КонОст(Сумма);";  
   //"Условие (КодОперации<>Перечисление.КодыОпераций.Продажа);"
   //"Условие (КодОперации=Перечисление.КодыОпераций.Перемещение);"
                                                                       
   //********************************************************************    
     
   //********************************************************************    
   Если ВыбСклад.Выбран() = 1 Тогда        
       ТекстЗапроса = ТекстЗапроса +        
       "Условие (Склад = ВыбСклад);";
   КонецЕсли;
   
   Если ВыбНом.Выбран() = 1 Тогда
       ТекстЗапроса = ТекстЗапроса +        
       "Условие (Номенклатура = ВыбНом);";
   КонецЕсли;
   
   Если ВыбФирма.Выбран() = 1 Тогда
       ТекстЗапроса = ТекстЗапроса +
       "Условие (Фирма = ВыбФирма);";                                  
   
   КонецЕсли;
   
   //*****************************************************************************************      
         
//         Если колво>0 тогда
//                                                                        
//            если выбзнач.получитьзначение(выбзнач.текущаястрока()) = ">" тогда  
//                ТекстЗапроса = ТекстЗапроса +
//                "Условие(количество>колво);";           //оператор1                                                        
//            Иначеесли   выбзнач.получитьзначение(выбзнач.текущаястрока()) = "<" тогда  
//                ТекстЗапроса = ТекстЗапроса +
//                "Условие(количество<колво);";            //оператор2
//            Иначеесли   выбзнач.получитьзначение(выбзнач.текущаястрока()) = "=" тогда  
//                ТекстЗапроса = ТекстЗапроса +
//                "Условие(количество=колво);";           //оператор3
//            конецесли
//                
//        Конецесли;
//
//    
   //**************************************************************************************
   //конец блока формирования запроса
   
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
       сообщить("запрос упал!!!");
       Возврат;
       
   КонецЕсли;                                                          
                                                             
   
   //***********************************************************************
                               
   
   //цикл обработки запроса
   //***********************************************************************
   СуммаВсегоПриход=0;
       НомСтроки=1;    
   //сообщить(текстзапроса);
   пока Запрос.группировка(1)  =  1 цикл    
       //пока Запрос.группировка(2)  =  1 цикл
       Если запрос.КонКоличество <> 0 тогда
           Ценаприход = запрос.сумма/запрос.конколичество;                                  
           СуммаВсегоПриход=суммаВсегоПриход+Ценаприход;
           Таблица.ВывестиСекцию("Строка");    
           НомСтроки=НомСтроки+1;
       КонецЕсли;
       //Сообщить("куда дели "+запрос.номенклатура+" ?");
       //конецесли;
       
   тз.новаястрока();
   тз.Фирма=запрос.фирма;
   тз.Склад=запрос.склад;
   тз.Номенклатура=запрос.номенклатура;
   тз.Колприход=запрос.ПрихКоличество;
   тз.Колрасход=запрос.РасхКоличество;
   тз.Начост=запрос.НачКоличество;
   тз.Коност=запрос.КонКоличество;
   тз.НачСумма=запрос.начсумма;
   тз.ПрихСумма=запрос.прихсумма;
   тз.РасхСумма=запрос.расхсумма;
   тз.КонСумма=запрос.консумма;    
   //тз.КодОперации=запрос.кодоперации;
   
   Если запрос.КонКоличество < колво тогда
       СуммаВсегоПриход=суммаВсегоПриход+Ценаприход;    
       Таблица.ВывестиСекцию("Строка");
       НомСтроки=НомСтроки+1;
   КонецЕсли;
   Если Запрос.конколичество > колво тогда
       СуммаВсегоПриход=суммаВсегоПриход+Ценаприход;
       Таблица.ВывестиСекцию("Строка");
       НомСтроки=НомСтроки+1;
   КонецЕсли;
     
   //***********************************************************************
   //иначеЕсли Запрос.КонКоличество = 0 Тогда
   //сообщить("Товар "+ запрос.номенклатура +" количество равно нулю!!!!!!");
КонецЦикла;
//КонецЦикла;
   //***********************************************************************
   //конец цикла обработки запроса
   Таблица.Защита(0);                                                                                          
   Если глПолучитьПолномочие("РазрешитьРедактироватьПечатнуюФорму") = 0 Тогда
   Таблица.Защита(1);    
КонецЕсли;
   Таблица.ВывестиСекцию("Строка");
   Таблица.ВывестиСекцию("Всего");
   Таблица.ВывестиСекцию("Подвал");
   Таблица.Показать("Отчет неликвидный товар","");
   
   тз.выбратьстроку();
КонецПроцедуры

//******************************************************************************
  Процедура ПриОткрытии()
   ВыбЗнач.добавитьзначение("<",);
   ВыбЗнач.добавитьзначение(">",);                
   ВыбЗнач.добавитьзначение("=",);
   ВыбФирма = глЗначениеПоУмолчанию("Фирма");
   ВыбСклад= глзначениеПоУмолчанию("Склад");
   ДатаКонца   = ПолучитьДатуТА();
   ДатаНачала  = НачМесяца(ПолучитьДатуТА());  
   КонецПроцедуры

   //Если Условие <> "< Не выбран >" Тогда
   //    ТекстЗапроса = ТекстЗапроса +
   //    "Условие ("+Условие+"ЗначениеУсловия);";
   //КонецЕсли;    
                               
Процедура тст()
     сообщить(выбзнач.текущаястрока());    
конецпроцедуры
 


  Процедура выбзнач()
     сообщить(выбзнач.текущаястрока());    
конецпроцедуры
//******************************************************************************      


//********************************************************************************
1 povar
 
22.10.12
05:47
Помнится, в ЖКК был пример подобной задачи
2 Jeema
 
22.10.12
05:50
можно ссылку
3 povar
 
22.10.12
05:52
(2) ссылка в коробке
4 Jeema
 
22.10.12
05:53
я тут новичок, что за коробка?
5 ado
 
22.10.12
05:53
А в чем проблема то?
6 ado
 
22.10.12
05:55
(4) Коробка с программным продуктом 1С:Предприятие. В ней лежит такая стопка желто-красных книжек.
7 Jeema
 
22.10.12
05:56
нету у меня ни коробки, ничего
8 Jeema
 
22.10.12
06:37
помогите, плиз
9 Гефест
 
22.10.12
06:40
чем помочь-то?
10 Sserj
 
22.10.12
06:42
А что хочешь то непонятно.
Ну и как подсказка, по этому отчету будут неверные данные если было просто движение без продажи, типа перемещение или переоценка.
11 povar
 
22.10.12
06:44
(7) нет коробки - "нет мультиков"
12 dk
 
22.10.12
07:34
ну код накалякал, а что не устраивает в коде?
13 Simod
 
22.10.12
07:40
(0) Алгоритм примерно таков: необходимо получить список номенклатуры которая имеется на остатке на конец выбранного периода и по которой нет движений расход с кодами операций относящийся к продаже. Расход может может быть вызван перемещением, изменением статуса и т.д. Эти операции не должны учитываться.

При установке условий в тексте запроса по складу, номенклатуре или фирме необходимо учитывать, являются они элементом или группой и использовать оператор "в" или "=" (см. синтаксис-помощник).
14 Jeema
 
22.10.12
07:43
Щас проверю
15 Jeema
 
22.10.12
07:51
и еще вопрос (не к топу) что за "ГлОживить???"
16 Simod
 
22.10.12
07:53
Функция из глоб.модуля. Открой и прочитай описание.
17 Jeema
 
22.10.12
07:55
в глобальнике не нашел
18 Jeema
 
22.10.12
07:57
может в типовом? у меня внешка
19 povar
 
22.10.12
08:02
(18) может, все таки, заняться своим делом ?
20 badboychik
 
22.10.12
08:51
ставь 1cpp.dll и забудь про эти наркоманские запросы
21 пипец
 
22.10.12
08:57
(20) шютка? :)))