Имя: Пароль:
1C
1С v8
подскажите. как правильно выбрать неликвидный товар в запросе.
,
0 zladenuw
 
02.08.13
11:20
ВЫБРАТЬ
    ОстаткиЗЧОстатки.Товар.Код КАК Артикул,
    ОстаткиЗЧОстатки.Товар.Артикул КАК КодБух,
    ОстаткиЗЧОстатки.Товар,
    СУММА(ОстаткиЗЧОстатки.УчСто1Остаток) КАК ЦенаПокупки,
    СУММА(ОстаткиЗЧОстатки.КвоОстаток) КАК Кво,
    РАЗНОСТЬДАТ(ОстаткиЗЧОстатки.Партия.Дата, &ТекДата, ГОД) КАК КоличествоЛет
ИЗ
    РегистрНакопления.ОстаткиЗЧ.Остатки(
            &ТекДата,
            Партия.Поставщик = &Поставщик
                И Партия.Дата <= &Дата) КАК ОстаткиЗЧОстатки

СГРУППИРОВАТЬ ПО
    ОстаткиЗЧОстатки.Товар,
    РАЗНОСТЬДАТ(ОстаткиЗЧОстатки.Партия.Дата, &ТекДата, ГОД),
    ОстаткиЗЧОстатки.Товар.Код,
    ОстаткиЗЧОстатки.Товар.Артикул
1 Капитан О
 
02.08.13
11:21
СГРУППИРОВАТЬ ПО РАЗНОСТЬДАТ
планируется только в версии 8.5
2 Капитан О
 
02.08.13
11:22
(1) чо-та вру я..
3 wPa
 
02.08.13
11:23
(0) ты вступил на шаткий путь. для начала надо выяснить что же такое неликвид. формул его получения чуть больше, чем докуя и везде свои
4 zladenuw
 
02.08.13
11:25
(3) пользователь задает параметр. лет неликвида.
сделал вот так
ВЫБРАТЬ
    ОстаткиЗЧОстаткиИОбороты.Товар,
    ОстаткиЗЧОстаткиИОбороты.Партия,
    ОстаткиЗЧОстаткиИОбороты.КвоНачальныйОстаток,
    ОстаткиЗЧОстаткиИОбороты.КвоКонечныйОстаток,
    ОстаткиЗЧОстаткиИОбороты.КвоОборот
ИЗ
    РегистрНакопления.ОстаткиЗЧ.ОстаткиИОбороты(
            ,
            &ТекДата,
            ,
            ,
            Партия.Поставщик = &Поставщик
                И Партия.Дата <= &Дата) КАК ОстаткиЗЧОстаткиИОбороты
ГДЕ
    ОстаткиЗЧОстаткиИОбороты.КвоКонечныйОстаток = ОстаткиЗЧОстаткиИОбороты.КвоОборот

но чую где то что то не так
5 zladenuw
 
02.08.13
11:28
(4) заменил на параметр условие

            Партия.Поставщик = &Поставщик
                И РАЗНОСТЬДАТ(Партия.Дата, &ТекДата, ГОД) >= &ЛетНелеквида) КАК ОстаткиЗЧОстаткиИОбороты
6 azernot
 
02.08.13
11:31
Я бы лучше в днях делал, умноженных на 365.
Потому как разность дат между 01.01.2011 и 31.12.2012 - 1 год.
7 zladenuw
 
02.08.13
11:33
(6) лучше множить или делить ?

    И РАЗНОСТЬДАТ(Партия.Дата, &ТекДата, День)/365 >= &ЛетНелеквида)
8 azernot
 
02.08.13
11:41
(7) Ну, ты меня понял. А вообще, я конечно не знаю, что у вас за товары, но если товар лежит больше года, то уже поздно его анализировать. Его уже дешевле просто выкинуть ибо затраты на его хранение, потенциальные банковские проценты с той суммы, которую уплатили поставщику вместо того, чтобы разместить на депозите явно уже превысили тот профит, который ожидался от реализации такого товара...
9 zladenuw
 
02.08.13
11:46
(8) автомагазин и сто. некоторые товары должны быть в остатках. такие условия у поставщика авто
10 zladenuw
 
02.08.13
11:47
вот такое чудо получилось

ВЫБРАТЬ
    ОстаткиЗЧОстаткиИОбороты.Товар.Код КАК Артикул,
    ОстаткиЗЧОстаткиИОбороты.Товар.Артикул КАК КодБух,
    ОстаткиЗЧОстаткиИОбороты.Товар,
    ОстаткиЗЧОстаткиИОбороты.КвоКонечныйОстаток КАК Остаток,
    РАЗНОСТЬДАТ(ОстаткиЗЧОстаткиИОбороты.Партия.Дата, &ТекДата, ГОД) КАК КоличествоЛет
ИЗ
    РегистрНакопления.ОстаткиЗЧ.ОстаткиИОбороты(
            ,
            &ТекДата,
            ,
            ,
            ВЫБОР
                    КОГДА &Поставщик <> ЗНАЧЕНИЕ(Справочник.Клиенты.ПустаяСсылка)
                        ТОГДА Партия.Поставщик = &Поставщик
                    ИНАЧЕ ИСТИНА
                КОНЕЦ
                И РАЗНОСТЬДАТ(Партия.Дата, &ТекДата, ДЕНЬ) / 365 >= &ЛетНелеквида
                И ВЫБОР
                    КОГДА &ФильтрТовар <> ЗНАЧЕНИЕ(Справочник.Запчасти.ПустаяСсылка)
                        ТОГДА Товар В ИЕРАРХИИ (&ФильтрТовар)
                    ИНАЧЕ ИСТИНА
                КОНЕЦ) КАК ОстаткиЗЧОстаткиИОбороты
ГДЕ
    ОстаткиЗЧОстаткиИОбороты.КвоКонечныйОстаток = ОстаткиЗЧОстаткиИОбороты.КвоОборот
11 zladenuw
 
02.08.13
11:47
(10) стоит ли ставить параметр на дату начала периода ?
12 azernot
 
02.08.13
11:48
(9) Тем более нет смысла анализировать такие неликвиды. Явно нужно "очищать" данные от минимального запаса по условиям поставщиков авто.
13 azernot
 
02.08.13
11:49
(10) Скажи, для чего это условие:
ГДЕ
    ОстаткиЗЧОстаткиИОбороты.КвоКонечныйОстаток = ОстаткиЗЧОстаткиИОбороты.КвоОборот

Т.е. если из 1000 штук хотя бы одну продали, всё, это не неликвид?
14 zladenuw
 
02.08.13
11:52
(13) наоборот. если не было движений.
15 azernot
 
02.08.13
11:54
(14) А если было, то всё, ликвид?
16 zladenuw
 
02.08.13
11:57
(15) до этого дойдем.
пока надо вывести товар которые вообще не продавался.

а по поводу если была продажа. то в процентном соотношение проверять

как тут http://infostart.ru/public/16281/

только там в цикле проверка. а я ее в запросе сделаю по параметру. который укажет пользователь
17 azernot
 
02.08.13
12:00
(16) А не лучше тогда и анализировать продажи товаров соединяя их с остатками? Где не было продаж - там и неликвд? А то мало ли какие движения могли быть... со склада на склад перекинули.
18 zladenuw
 
02.08.13
12:02
(17) да не могу так. нету такого регистра :(. самопал а не конфа.
19 azernot
 
02.08.13
12:04
(18) Не верю, что в этой конфе нельзя отдельно выдернуть продажи. Любая конфа торговой организации позволяет сделать это. А если нет - то в первую очередь надо делать это, а потом уже неликвиды (особенно таким образом) рассматривать. Из каких соображений товары-то заказываются/пополняются, если продаж никто не знает?
20 zladenuw
 
02.08.13
12:11
(19) продажи знают.
вот такое чудо получает
НомерВалюты = 1 + ЭлементыФормы.ВыбВалюта.СписокВыбора.Индекс(ЭлементыФормы.ВыбВалюта.списокВыбора.НайтиПоЗначению(ЭлементыФормы.ВыбВалюта.Значение));
        
    ТбЗнТипЗч.Очистить();
    ТекстФильтра = "  ГДЕ (ВнД = &ВидДвижЗЧ) И (Период Между  &Дата1 И &Дата2) ";
    ТекстФильтра = ТекстФильтра + ?(ВыбЗЧ.Количество() > 0, " И (Товар "+ ?(ТипФильтраЗЧ = "Все_Кроме"," НЕ ","") + " В ИЕРАРХИИ  (&ВыбЗЧ))", "");
    ТекстФильтра = ТекстФильтра + ?(ВыбСклад.Количество() > 0, " И (Склад "+ ?(ТипФильтраСклад = "Все_Кроме"," НЕ ","") + " В  (&ВыбСклад))", "");
    ТекстФильтра = ТекстФильтра + ?(ВыбПокупатель.Количество() > 0, " И (Покупатель "+ ?(ТипФильтраПокупатель = "Все_Кроме"," НЕ ","") + " В ИЕРАРХИИ (&ВыбПокупатель))", "");
    ТекстФильтра = ТекстФильтра + ?(ВыбПартия.Количество() > 0, " И (Партия "+ ?(ТипФильтраПартия = "Все_Кроме"," НЕ ","") + " В  (&ВыбПартия))", "");
    ТекстФильтра = ТекстФильтра + ?(ВыбПоставщик.Количество() > 0, " И (Партия.Поставщик  "+ ?(ТипФильтраПоставщик = "Все_Кроме"," НЕ ","") + " В ИЕРАРХИИ  (&ВыбПоставщик))", "");
    ТекстФильтра = ТекстФильтра + ?(ВыбФирма.Количество() > 0, " И (Фирма  "+ ?(ТипФильтраФирма = "Все_Кроме"," НЕ ","") + " В ИЕРАРХИИ  (&ВыбФирма))", "");
    ТекстФильтра = ТекстФильтра + ?(ВыбСотрудник.Количество() > 0, " И (Сотрудник  "+ ?(ТипФильтраСотрудник = "Все_Кроме"," НЕ ","") + " В ИЕРАРХИИ  (&ВыбСотрудник))", "");
    ТекстФильтра = ТекстФильтра + ?(ВыбСтеллаж.Пустая() = 0, " И (Стеллаж  = &ВыбСтеллаж) ", "");
    ТекстФильтра = ТекстФильтра + ?(ВыбПроект.Пустая() = 0, " И (Партия.Проект  = &ВыбПроект) ", "");
    ТекстФильтра = ТекстФильтра + ?(ВыбКласс.Пустая() = 0, " И (Товар.НоменклатураКасса  = &ВыбКласс) ", "");
    ТекстФильтра = ТекстФильтра + ?(ВыбТипЦены.Пустая() = 0, " И (ТипЦены  = &ВыбТипЦены) ", "");
    ТекстФильтра = ТекстФильтра + ?(ВыбКатегория.Пустая() = 0, " И (Категория  = &ВыбКатегория) ", "");
    ТекстФильтра = ТекстФильтра + ?(ВыбТипЗЧ.Количество() > 0, " И (Товар.ТипЗЧ  в (&ВыбТипЗЧ)) ", "");
    
    
    
    
    Если (Фл_ОтделПродаж = 1) И (Фл_СТО = 0) Тогда        
        ТекстФильтра = ТекстФильтра +  " И ((Регистратор ССЫЛКА Документ.РасходнаяЗЧ ) ИЛИ (Регистратор ССЫЛКА Документ.АктНаш))";
    ИначеЕсли (Фл_ОтделПродаж = 0) И (Фл_СТО = 1) Тогда        
        ТекстФильтра = ТекстФильтра +  " И (Регистратор ССЫЛКА Документ.ЗаявкаТО )";        
    КонецЕсли;        
    
    Если (ФлТовар = 1) И (ФлУслуги = 0) Тогда        
        ТекстФильтра = ТекстФильтра +  " И (Товар.ВидЗЧ в (&ВидТовар)) ";
    ИначеЕсли (ФлТовар = 0) И (ФлУслуги = 1) Тогда        
        ТекстФильтра = ТекстФильтра +  " И (Товар.ВидЗЧ = &ВидУслуга ) ";
    КонецЕсли;        
    
    
    
    
    
    ТекстФильтра = ТекстФильтра + ?(ФильтрВидОплаты.Пустая(), " " , " И (Регистратор.ВидОплаты =  &ВидОплаты) ");    
    Если флТолькоМинус = 1 Тогда
        ТекстФильтра = ТекстФильтра + " И (Профит" +  НомерВалюты + " < 0) ";            
    КонецЕсли;
    ТУп = " ";
    
    Если Фл_ПрофитВозр = 1 Тогда
        ТУп = " Упорядочить По Профит Возр "    
    КонецЕсли;    
    
    Если Фл_ПрофитУбыв = 1 Тогда
        ТУп = " Упорядочить По Профит Убыв "    
    КонецЕсли;    

    ТЧисло = " ";    
    Если ЧислоСтрок > 0 Тогда
        ТЧисло = " Первые " + ЧислоСтрок;
    КонецЕсли;    
        
    ГлобСуммаОтклонения = 0;    
    
    Макет = ПолучитьМакет("МакетПродажаЗЧ");

    Запрос = Новый Запрос;
    Запрос.Текст =  "ВЫБРАТЬ " + ТЧисло + ?(ФлПериод = 1, " Период,"," ") + "    
    |   Товар,
    |   Товар.Код как Код,    
    |    Товар.ВидЗЧ как ВидЗЧ,        
    |    Товар.ТипЗЧ как ТипЗЧ,    
    |    Товар.НоменклатураКасса как НоменклатураКласса,    
    |    Склад,
    |    Партия,
    |   ТипЦены,
    |     Стеллаж,    
    |    Регистратор как Документ,    
    |    Регистратор.Авто как Авто,        
    |    Категория,    
    |   Период,
    |    Покупатель,
    |    Покупатель.ТипЦены Как КатегорияКлиента,
    
    |    Сотрудник,
    |    Фирма,    
    |    Партия.ПризнакУчета как ПризнакУчета,    
    |    КонтрактПродажа,
    |    Страна,    
    |    Партия.Поставщик как Поставщик,    
    |    Партия.Проект как Проект,        
    |    Регистратор.ВидОплаты как ВидОплаты,    
    |    Кво,
    |   УчСто" +  НомерВалюты + "  как УчСто,
    |   Оборот" +  НомерВалюты + " как Оборот,
    |   Профит" +  НомерВалюты + " как Профит,
    |   Скидка" +  НомерВалюты + " как Скидка        
    |    ИЗ РегистрНакопления.ОстаткиЗЧ" + ТекстФильтра + Туп + "
    |    ИТОГИ Сумма(Кво), Сумма(УчСто), Сумма(Оборот), Сумма(Профит), Сумма(Скидка)  ПО  Общие, ";
                            
     ТекстГр = "";
     Для Каждого стр из ТабГр Цикл
            ТекстГр =  ТекстГр + "  " + стр.Ключ + ?(Стр.Группа = Истина," ИЕРАРХИЯ,",",");
     КонецЦикла;
     ТекстГр = ЛЕВ(ТекстГр, СтрДлина(ТекстГр) - 1);
    
    Запрос.Текст = Запрос.Текст +  ТекстГр + " АВТОУПОРЯДОЧИВАНИЕ";

    Запрос.УстановитьПараметр("ВидДвижЗЧ", Перечисления.ВидыДвижЗЧ.Продажа);
    
    Запрос.УстановитьПараметр("Дата1", НачалоДня(Дата1));
    Запрос.УстановитьПараметр("Дата2", КонецДня(Дата2));

    Запрос.УстановитьПараметр("ВыбСклад", ВыбСклад);    
    Запрос.УстановитьПараметр("ВыбЗЧ", ВыбЗЧ);
    Запрос.УстановитьПараметр("ВыбПокупатель", ВыбПокупатель);
    Запрос.УстановитьПараметр("ВыбПартия", ВыбПартия);
    Запрос.УстановитьПараметр("ВыбПоставщик", ВыбПоставщик);
    Запрос.УстановитьПараметр("ВыбФирма", ВыбФирма);
    Запрос.УстановитьПараметр("ВыбСотрудник", ВыбСотрудник);
    Запрос.УстановитьПараметр("ВидОплаты", ФильтрВидОплаты);
    Запрос.УстановитьПараметр("ВыбСтеллаж", ВыбСтеллаж);
    Запрос.УстановитьПараметр("ВыбПроект", ВыбПроект);
    Запрос.УстановитьПараметр("ВыбКласс", ВыбКласс);
    Запрос.УстановитьПараметр("ВыбТипЦены", ВыбТипЦены);
    Запрос.УстановитьПараметр("ВыбКатегория", ВыбКатегория);
    СпЗнПарам = Новый СписокЗначений;
    СпЗнПарам.Добавить(Перечисления.ВидЗЧ.Запчасть);
    СпЗнПарам.Добавить(Перечисления.ВидЗЧ.Аксессуар);
    Запрос.УстановитьПараметр("ВидТовар", СпЗнПарам);
    Запрос.УстановитьПараметр("ВидУслуга", Перечисления.ВидЗЧ.Услуга);
    Запрос.УстановитьПараметр("ВыбТипЗЧ", ВыбТипЗЧ);
    
    
    
        
        
    Рез = Запрос.Выполнить();
21 zladenuw
 
02.08.13
12:12
(19) просто нет времени ломать то что работает. по немного исправляю. а сейчас горят другие задачи.