Имя: Пароль:
1C
1С v8
Запрос не отрабатывает Остаток Почему?
,
0 nickname1c
 
05.11.14
14:32
ВЫБРАТЬ
    РасходнаяСписокНоменклатуры.Номенклатура КАК Номенклатура,
    СУММА(РасходнаяСписокНоменклатуры.Количество) КАК Количество,
    СУММА(РасходнаяСписокНоменклатуры.Сумма) КАК Сумма,
    РасходнаяСписокНоменклатуры.Номенклатура.Услуга КАК Услуга
ПОМЕСТИТЬ ТЧ
ИЗ
    Документ.Расходная.СписокНоменклатуры КАК РасходнаяСписокНоменклатуры
ГДЕ
    РасходнаяСписокНоменклатуры.Ссылка = &Ссылка

СГРУППИРОВАТЬ ПО
    РасходнаяСписокНоменклатуры.Номенклатура.Услуга,
    РасходнаяСписокНоменклатуры.Номенклатура

ИНДЕКСИРОВАТЬ ПО
    Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТЧ.Количество КАК Количество,
    ТЧ.Сумма КАК Сумма,
    ОстаткиОстатки.Партия КАК Партия,
    ВЫБОР
        КОГДА ОстаткиОстатки.Партия = &Партия
            ТОГДА 0
        ИНАЧЕ 1
    КОНЕЦ КАК Порядок,
    ЕСТЬNULL(ОстаткиОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
    ЕСТЬNULL(ОстаткиОстатки.СуммаОстаток, 0) КАК СтоимостьОстаток,
    ТЧ.Номенклатура КАК Номенклатура1,
    ТЧ.Услуга
ИЗ
    ТЧ КАК ТЧ
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Остатки.Остатки(
                &МоментВремени,
                Номенклатура В
                    (ВЫБРАТЬ
                        РасходнаяСписокНоменклатуры.Номенклатура
                    ИЗ
                        Документ.Расходная.СписокНоменклатуры КАК РасходнаяСписокНоменклатуры)) КАК ОстаткиОстатки
        ПО ТЧ.Номенклатура = ОстаткиОстатки.Номенклатура

УПОРЯДОЧИТЬ ПО
    Порядок,
    ОстаткиОстатки.Партия.МоментВремени
1 Ненавижу 1С
 
гуру
05.11.14
14:34
что есть "не отрабатывает"?
2 nickname1c
 
05.11.14
14:35
ЕСТЬNULL(ОстаткиОстатки.КоличествоОстаток, 0)
КАК КоличествоОстаток,
видно что он(остатко) есть, но почему то он его выводит нулевым
3 nickname1c
 
05.11.14
14:35
Ненавижу 1С нулевым выводит
4 Ненавижу 1С
 
гуру
05.11.14
14:36
(2) если "видно", что он есть, то что значит "нулевым выводит"?
5 nickname1c
 
05.11.14
14:38
(4) Зачем придираться если ты понял о чем я?
Нулевым...значит что количествоОстаток=0 хотя оно 0 не =
6 Галахад
 
гуру
05.11.14
14:40
Наверное, "Расходная" это не регистратор РН "Остатки".
7 Maxus43
 
05.11.14
14:40
Это вот -

Номенклатура В
                    (ВЫБРАТЬ
                        РасходнаяСписокНоменклатуры.Номенклатура......

убрать нафиг, просто соединяй по номенклатуре.

Что в параметре МоментВремени?
8 nickname1c
 
05.11.14
14:41
Что в параметре МоментВремени? Дата
Это вот -

Номенклатура В
                    (ВЫБРАТЬ
                        РасходнаяСписокНоменклатуры.Номенклатура......
убирал но толку не было
9 Maxus43
 
05.11.14
14:42
(8) я к тому что на эту дату возможно остатка нет
10 nickname1c
 
05.11.14
14:42
(6) Нет, вы ошибаетесь)
11 Maxus43
 
05.11.14
14:42
насчет убрать - просто лишний этот кусок запроса
12 nickname1c
 
05.11.14
14:43
Maxus43 (9) Есть, точно
13 vicof
 
05.11.14
14:44
(12) Ну а ты попробуй поменять, или вообще убрать дату из запроса
14 Maxus43
 
05.11.14
14:44
(12) чудес не бывает, остатка либо нет, либо номенклатуры этой в ВТ нет
15 nickname1c
 
05.11.14
14:45
насчет убрать - просто лишний этот кусок запроса
Не подскажешь что он вообще делает?
во всех примерах такие условия используют...
как по мне то этот кусок кода особой смысловой нагрузки не несет
16 Maxus43
 
05.11.14
14:45
не забываем что у вирт таблицы остатки &дата не включается в результат, смотрится ДО неё
17 vicof
 
05.11.14
14:46
(15) несет
18 Maxus43
 
05.11.14
14:46
(15) в данном примере он не несёт нагрузки никакой, у тебя соединение заменяет этот кусок запроса
19 nickname1c
 
05.11.14
14:46
Ну вот и я об этом
20 vicof
 
05.11.14
14:47
(18) Сначала будут отобраны остатки, а потом будет сделано соединение, так что несет
21 Галахад
 
гуру
05.11.14
14:48
(18) Несет. В запросе, почему-то номенклатура всех регистраторов.
22 Maxus43
 
05.11.14
14:48
(20) это лирика. Результат не изменится. В данной случае лишнее
23 Maxus43
 
05.11.14
14:49
(21) при чем тут регистраторы вобще? Остатки и есть остатки, к регистраторам отношения не имеют
24 vicof
 
05.11.14
14:49
(21) Я тож не понял
25 Крошка Ру
 
05.11.14
14:49
(19) А документ(который &Сcылка) проведен?
(22) Немного время выполнения экономится
26 Крошка Ру
 
05.11.14
14:50
+(25) А, да, там из ТЧ выборку нужно делать, а не по всем накладным
27 Maxus43
 
05.11.14
14:51
(25) зависит от многих факторов, не всегда предварительный отбор быстрее. Ну это опять же лирика, имхо тут этим можно пренебречь
28 nickname1c
 
05.11.14
14:51
Процедура ОбработкаПроведения(Отказ, Режим)
    
    МетодСписания = РегистрыСведений.УчетСебестоимости.ПолучитьПоследнее(Дата).ВидСписания;
    
    Если МетодСписания = Перечисления.ВидСписанияСебестоимости.ФИФО Тогда
        ПорядокПартий = "ВОЗР";
    ИначеЕсли МетодСписания = Перечисления.ВидСписанияСебестоимости.ЛИФО Тогда
        ПорядокПартий = "УБЫВ";
    КонецЕсли;
    
    Движения.ТоварыНаСкладах.Записывать = Истина;
    Движения.Продажи.Записывать = Истина;
    
    Движения.ТоварыНаСкладах.Записать();
    Движения.Продажи.Записать();
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    РасходнаяНакладнаяНоменклатура.ТоварУслуга.Услуга,
    |    РасходнаяНакладнаяНоменклатура.ТоварУслуга КАК ТоварУслуга,
    |    СУММА(РасходнаяНакладнаяНоменклатура.Количество) КАК Количество,
    |    СУММА(РасходнаяНакладнаяНоменклатура.Сумма) КАК Сумма
    |ПОМЕСТИТЬ РасходнаяНакладная
    |ИЗ
    |    Документ.РасходнаяНакладная.Номенклатура КАК РасходнаяНакладнаяНоменклатура
    |ГДЕ
    |    РасходнаяНакладнаяНоменклатура.Ссылка = &Ссылка
    |
    |СГРУППИРОВАТЬ ПО
    |    РасходнаяНакладнаяНоменклатура.ТоварУслуга.Услуга,
    |    РасходнаяНакладнаяНоменклатура.ТоварУслуга
    |
    |ИНДЕКСИРОВАТЬ ПО
    |    ТоварУслуга
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    РасходнаяНакладная.ТоварУслуга КАК Номенклатура,
    |    РасходнаяНакладная.ТоварУслугаУслуга КАК Услуга,
    |    РасходнаяНакладная.Количество КАК Количество,
    |    РасходнаяНакладная.Сумма КАК Сумма,
    |    ТоварыНаСкладахОстатки.Партия КАК Партия,
    |    ВЫБОР
    |        КОГДА ТоварыНаСкладахОстатки.Партия = &Партия
    |            ТОГДА 0
    |        ИНАЧЕ 1
    |    КОНЕЦ КАК Порядок,
    |    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
    |    ЕСТЬNULL(ТоварыНаСкладахОстатки.СуммаОстаток, 0) КАК СтоимостьОстаток
    |ИЗ
    |    РасходнаяНакладная КАК РасходнаяНакладная
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
    |                &МоментВремени,
    |                Номенклатура В
    |                    (ВЫБРАТЬ
    |                        РасходнаяНакладнаяНоменклатура.ТоварУслуга
    |                    ИЗ
    |                        Документ.РасходнаяНакладная.Номенклатура КАК РасходнаяНакладнаяНоменклатура)) КАК ТоварыНаСкладахОстатки
    |        ПО (ТоварыНаСкладахОстатки.Номенклатура = РасходнаяНакладная.ТоварУслуга)
    |
    |УПОРЯДОЧИТЬ ПО
    |    Порядок,
    |    ТоварыНаСкладахОстатки.Партия.МоментВремени " + ПорядокПартий +"
    |ИТОГИ
    |    МАКСИМУМ(Услуга),
    |    МАКСИМУМ(Количество),
    |    МАКСИМУМ(Сумма),
    |    СУММА(КоличествоОстаток)
    |ПО
    |    Номенклатура";
    
    Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Запрос.УстановитьПараметр("Партия", Партия);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаНоменклатура = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    СуммаПродаж = 0;
    
    Пока ВыборкаНоменклатура.Следующий() Цикл
        
        Если ВыборкаНоменклатура.Количество > ВыборкаНоменклатура.КоличествоОстаток  И ВыборкаНоменклатура.Номенклатура.Услуга = ЛОЖЬ Тогда
            Отказ = Истина;
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "По номенклатуре " + ВыборкаНоменклатура.Номенклатура + " осталось только " + ВыборкаНоменклатура.КоличествоОстаток
            + ". Не хватает " + (ВыборкаНоменклатура.Количество - ВыборкаНоменклатура.КоличествоОстаток) + " штук.";
            Сообщение.Сообщить();
        КонецЕсли;
        
        Если Отказ Тогда
            Продолжить;
        КонецЕсли;
        
        ВыборкаДетальныеЗаписи = ВыборкаНоменклатура.Выбрать();
        
        ОсталосьСписать = ВыборкаНоменклатура.Количество;
        
        Пока ОсталосьСписать >0 И ВыборкаДетальныеЗаписи.Следующий() Цикл
            
            Если ВыборкаДетальныеЗаписи.КоличествоОстаток = 0 Тогда
                Продолжить;
            КонецЕсли;
            
            КоличествоСписания = МИН(ОсталосьСписать, ВыборкаДетальныеЗаписи.КоличествоОстаток);
            Если ВыборкаНоменклатура.Номенклатура.Услуга = ИСТИНА Тогда
                СуммаСписания = 0;
            ИначеЕсли ВыборкаДетальныеЗаписи.КоличествоОстаток > ОсталосьСписать Тогда
                СуммаСписания =  ОсталосьСписать * ВыборкаДетальныеЗаписи.СтоимостьОстаток / ВыборкаДетальныеЗаписи.КоличествоОстаток;
            Иначе
                СуммаСписания = ВыборкаДетальныеЗаписи.СтоимостьОстаток;
            КонецЕсли;
            
            
            // регистр ТоварыНаСкладах
            
        
            Движение = Движения.ТоварыНаСкладах.Добавить();
            Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
            Движение.Период = Дата;
            Движение.Номенклатура = ВыборкаНоменклатура.Номенклатура;
            Движение.Партия = ВыборкаДетальныеЗаписи.Партия;
            Движение.Количество = КоличествоСписания;
            Движение.Сумма = СуммаСписания;
    
            
            ОсталосьСписать = ОсталосьСписать - КоличествоСписания;
            
            //СуммаПродаж = СуммаПродаж + Движение.Сумма;
        КонецЦикла;
        
        
        // регистр Продажи
        Движения.Продажи.Записывать = Истина;
        
        Движение = Движения.Продажи.Добавить();
        Движение.Период = Дата;
        Движение.Номенклатура = ВыборкаНоменклатура.Номенклатура;
        Движение.Количество = ВыборкаНоменклатура.Количество;
        //Движение.Себестоимость = СуммаПродаж;  удален ресурс себестоимость
        Движение.Выручка = ВыборкаНоменклатура.Сумма;
        
        
    КонецЦикла;    
КонецПроцедуры
29 nickname1c
 
05.11.14
14:52
Запрос отработал правильно, но при проведении расходной не видит остатков, дата прихода раньше чем расхода.
30 vicof
 
05.11.14
14:52
Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
Замени на границу
31 nickname1c
 
05.11.14
14:55
(30) Какие параметры у границы?
32 vicof
 
05.11.14
14:55
загляни уж синтакс-помощник. Код украл, так хоть СП поюзай.
33 nickname1c
 
05.11.14
14:56
(32) Код по примеру делал, не крал....по другому как же научится)
34 Галахад
 
гуру
05.11.14
14:57
Это чего? Из статьи о новой методики проверки остатков?
35 Maxus43
 
05.11.14
14:58
нафига там    
Движения.ТоварыНаСкладах.Записывать = Истина;
    Движения.Продажи.Записывать = Истина;
    
    Движения.ТоварыНаСкладах.Записать();
    Движения.Продажи.Записать();

?
36 nickname1c
 
05.11.14
14:59
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{Документ.Расходная.МодульОбъекта(81)}: Ошибка при вызове метода контекста (Выполнить)

по причине:
{(36, 20)}: Ошибка обработки представления "РегистрНакопления.Остатки.Остатки:Несоответствие типов (Параметр номер ""1"")"
ЛЕВОЕ СОЕДИНЕНИЕ <<?>>РегистрНакопления.Остатки.Остатки(
37 nickname1c
 
05.11.14
14:59
Maxus43 я в 1с месяц с хвостом, не суди уж строго
38 vicof
 
05.11.14
15:06
(37) Может быть сначала на Профессионала сдать и падаваном поработать, а потом на спеца готовиться?
39 nickname1c
 
05.11.14
15:13
(38) я как бы и работаю подаваном
40 Maxus43
 
05.11.14
15:13
41 floody
 
05.11.14
15:17
в запросе какая-то бредятина.. по какому примеру это было сделано? даже переписать не мог нормально?
42 nickname1c
 
05.11.14
15:20
(41) По тому который был
43 floody
 
05.11.14
15:21
1)левое соединение с ВТ - плохо

2)в условии ВТ заменить:
Номенклатура В (ВЫБРАТЬ
                        Т.Номенклатура
                    ИЗ
                        ТЧ КАК Т)
44 floody
 
05.11.14
15:21
(43) но сути это конечно не поменяет, это я так, придираюсь
45 Maxus43
 
05.11.14
15:22
не надо вобще никаких соединений, переписать по нормальному примеру всё
46 nickname1c
 
05.11.14
15:35
Что удивляет так это то что примеры работают у меня точ в точ и нет
47 vicof
 
05.11.14
15:36
(46) Еще русский подучить, и научиться мысли выражать - будешь золотым падаваном.
48 Maxus43
 
05.11.14
15:43
(46) у тебя не "точ в точ"
49 nickname1c
 
05.11.14
15:59
"(46) Еще русский подучить, и научиться мысли выражать - будешь золотым падаваном." это мышь блин скачет, слова переставляет,
насчет русского точ в точ, это просто разговорное выражение, не стоит придираться.
Я хотел сказать что у меня точно также, как и в примере все, но  не работало.
Теперь все нормально, после того как я просто скопировал и вставил мой, сюда присланный, код. И перезагрузил 1с, без понятия почему.