Имя: Пароль:
1C
1C 7.7
v7: Выбрать склад в запросе
,
0 Rasetsu
 
02.02.15
10:56
Доброго времени суток!
Прошу помощи у опытных программистов, на работе срочно понадобилось сделать отчетик в 1С 7.7 ТиС Нужно сделать фильтр по складу, чтобы выводил только товар который находится на складе "Торговый Зал". Никак не могу разобраться, до этого в 1С не программировал.

Сделал так:

Запрос = СоздатьОбъект("Запрос");  
ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ДатаКонца по ДатаКонца;
    |Номенклатура    = Регистр.ОстаткиТМЦ.Номенклатура;      
    |Склад            = Регистр.ОстаткиТМЦ.Склад;            
    |Количество = Регистр.ОстаткиТМЦ.Количество;
    |Функция КоличествоКонОст = КонОст(Количество);
    |Условие (Склад = 'Торговый Зал');  
    |Группировка Номенклатура;";
    
     Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;                              
    КонецЕсли;                                
    Пока (Запрос.Группировка("Номенклатура") = 1)  Цикл  
        ТМЦ = Запрос.Номенклатура;
        Если Запрос.ЭтоГруппа("Номенклатура") = 0 Тогда  
             Кол = Запрос.КоличествоКонОст;
         глВернутьЦену(ТМЦ,РознЦена,РабочаяДата(),ОбЦена, ЕдИзм, ВалЦены);
        КонецЕсли;      
      Если ПустоеЗначение(ОбЦена) = 0 Тогда
        Цена1 = ОбЦена;
      Иначе
        Цена1 = 0;
      КонецЕсли;  
                
      Т.ДобавитьСтроку(ТМЦ.Код+"^"+ТМЦ.Наименование+"^"+Цена1+" "+ВалЦены);
      
  КонецЦикла;


Файл="oc_export.csv";

Т.Записать (Файл);

Сообщить ("Файл с данными "+Файл+" сохранен в каталоге пользователя");
1 DGorgoN
 
02.02.15
10:59
ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)

    |Период с ДатаКонца по ДатаКонца;
    |Номенклатура    = Регистр.ОстаткиТМЦ.Номенклатура;      
    |Склад            = Регистр.ОстаткиТМЦ.Склад;            
    |Количество = Регистр.ОстаткиТМЦ.Количество;
    |Функция КоличествоКонОст = КонОст(Количество);
    |Условие (Склад = 'Торговый Зал');  
    |Группировка Номенклатура;";

|Условие (Склад = 'Торговый Зал');- неправильно
2 DGorgoN
 
02.02.15
11:00
|Условие (Склад = 'Торговый Зал');- неправильно

заменить на:

На форме создать текстовое поле, там выбрать тип: Справочник.МестаХранения (склады) с идент. СкладНаФорме и сделать условие:
|Условие (Склад = СкладНаФорме);
3 Rasetsu
 
02.02.15
11:03
Спасибо, а захардкодить нельзя? Чтобы без форм, так как этот отчет будет выгружатся автоматически без участия пользователя...
4 Spyke
 
02.02.15
11:05
(3) Константу добавь
5 Rasetsu
 
02.02.15
11:05
Может быть как то так?

Перем ВыбСклад;
Выбсклад='Торговый Зал';

|Условие (Склад в ВыбСклад);
6 Остап Сулейманович
 
02.02.15
11:07
Какой тип будет у переменной Выб склад после этого вот : "Выбсклад='Торговый Зал'"?
7 Spyke
 
02.02.15
11:08
(5) Если конфу менять нельзя, то нужно спозиционировать
ВыбСкл = СоздатьОбъект("справочник.Склады");
ВыбСкл.НайтиПоКоду() или ВыбСкл.НайтиПоНаименованию()
// Но это если нельзя менять конфу, но так делать можно в крайнем случаи ибо изм кода или наим и ничего работать не будет
8 Rasetsu
 
02.02.15
11:11
(4) Спасибо:

Константа.ВыбСклад = "Торговый Зал";

А еще в отчет почему то попадают названия групп, хотя по идее должен пропускать...

Например:

00003323^ВИДЕОКАМЕРЫ^1345 Руб
9 kissolo
 
02.02.15
11:12
(8)
Группировка Номенклатура без групп;
10 Остап Сулейманович
 
02.02.15
11:19
(8) "Константа.ВыбСклад = "Торговый Зал"" - расстрелять без права переписки.
11 kissolo
 
02.02.15
11:22
(10) Да уж. Тут, получается, сравнивают элемент спр-ка со строкой...
12 Rasetsu
 
02.02.15
11:35
Делаю так:

   ВыбСкл = СоздатьОбъект("Справочник.Склады");
   ВыбСклад = ВыбСкл.НайтиПоКоду("000002");

|Условие (Склад в ВыбСклад);

Отчет не идет, фаил 0 Кб получается.
13 kissolo
 
02.02.15
11:49
(12)
Условие (Склад = ВыбСклад)
если, конечно, ВыбСклад - это элемент, а не группа.
14 kissolo
 
02.02.15
11:49
(12) И я бы добавил в НайтиПоКоду проверку - а вдруг не находится просто...
15 Ёпрст
 
02.02.15
11:50
(12) НайтиПоКоду возвращает ЧИСЛО, если что
16 Spyke
 
02.02.15
11:55
|Условие (Склад в ВыбСклад.ТекущийЭлемент());
17 Ёпрст
 
02.02.15
11:58
(16) еще хуже
18 Builder
 
02.02.15
11:58
(16) Давно заметил, что такие условия отрабатываются криво.
Лучше и надежнее сделать так:
1. на форме поле "ВыбСклад"
2. ПриОткрытии()
ВыбСклад.НайтиПоКоду("000002") или ПоНаименованию()
3. Условие (Склад в ВыбСклад);
19 Rasetsu
 
02.02.15
12:17
Признателен всем за помощь, проблема решилась.