Имя: Пароль:
1C
1С v8
Вывод остатков номенклатуры
, ,
0 Сухраб
 
13.07.18
07:26
Доброго дня! есть такой код, остаток выводит, но списания не учитывает, помогите пожалуйста в чем ошибка:

&НаСервере
Функция ВсеОстатки(Материал)
    Запрос = Новый Запрос; Остаток = 0;
    Запрос.Текст =
        "ВЫБРАТЬ
        |   ОстаткиМатериалов.МестаХранения,
        |   ОстаткиМатериалов.Материал,
        |   ОстаткиМатериалов.КоличествоОстаток,
        |   ОстаткиМатериалов.СуммаОстаток
        |ИЗ
        |   РегистрНакопления.ОстаткиМатериалов.Остатки(
        |       &Дата,
        |       МестаХранения = &МестаХранения И
        |       Материал = &Материал
        |   ) КАК ОстаткиМатериалов";
    //Если Объект.Ссылка.Пустая() Тогда
    //    Д = КонецДня(Объект.Дата);
    //Иначе
    //    Д = Новый Граница(Объект.Ссылка.МоментВремени(), ВидГраницы.Исключая);
    //КонецЕсли;
    //
    Запрос.УстановитьПараметр("Дата",
        Новый Граница(Объект.Ссылка.МоментВремени(), ВидГраницы.Включая));
    
    Запрос.УстановитьПараметр("МестаХранения",
        Справочники.МестаХранения.НайтиПоНаименованию(Объект.МестаХранения.Наименование));
        
    Запрос.УстановитьПараметр("Материал",
        Справочники.Материалы.НайтиПоНаименованию(Материал));    
        
    РезультатЗапроса = Запрос.Выполнить();
    
    Записи = РезультатЗапроса.Выбрать();
    
    Пока Записи.Следующий() Цикл
        Остаток = Записи.КоличествоОстаток;
        Себестоимость = ?(Записи.КоличествоОстаток>0,Записи.СуммаОстаток/Записи.КоличествоОстаток,0);
    КонецЦикла;
    
    Возврат Остаток;
    
КонецФункции
1 NickEge
 
13.07.18
07:48
Мда...
2 Сухраб
 
13.07.18
08:01
(1) это значит что все плохо? Я новичок прошу не судите строго)
3 K1RSAN
 
13.07.18
08:02
(0) А списания формируют проводки по этому регистру?
4 VladZ
 
13.07.18
08:03
Вот тут бред:

Запрос.УстановитьПараметр("МестаХранения",
        Справочники.МестаХранения.НайтиПоНаименованию(Объект.МестаХранения.Наименование));
5 VladZ
 
13.07.18
08:05
(0) "но списания не учитывает" - смотри, какие движения делает списание. Код, который ты здесь привел к этому отношения не имеет.
6 Сухраб
 
13.07.18
08:11
тогда как будет правильно? есть регистр ОстаткиМатериалов, измерения - МестаХранения, Материал, ресурсы - Количество, Сумма, нужно вывести остаток выбранного материала в колонку Остаток на дату этого документа?
7 Сухраб
 
13.07.18
08:12
(4) что здесь не так?
8 WhiteDragon93
 
13.07.18
08:18
(7) бред в том, что ты имея ссылку на места хранения, ищешь его по справочнику, чтобы получить ту же самую ссылку.

И что будет, если будет два места хранения с одинаковым наименованием?
9 Кац
 
13.07.18
08:20
Получай себестоимость прямо в запросе!
10 Сухраб
 
13.07.18
08:23
(8) согласен, исправил спасибо!
11 Сухраб
 
13.07.18
08:24
(9) хооршо, но как получить правильный остаток?
12 WhiteDragon93
 
13.07.18
08:24
(0) по теме - смотри регистраторы для регистра ОстаткиМатериалов, есть ли там эти списания.


Или под списаниями имеется в виду весь расход по регистру?
13 Кац
 
13.07.18
08:25
(11) что такое "правильный остаток" ? КоличествоОстаток > 0 ?
14 Сухраб
 
13.07.18
08:26
(12) "Или под списаниями имеется в виду весь расход по регистру?"
да, после всех расходов, нужен актуальный остаток на дату дока
15 catena
 
13.07.18
08:29
(9)Зачем, если он ее никуда не отдает потом?

(14)Ты проверил, в регистре списания есть? С чего ты взял, что остаток не правильный?
16 Сухраб
 
13.07.18
08:31
(15) движения по регистру "расход" формирует, проверял
17 WhiteDragon93
 
13.07.18
08:31
(16) аналитики совпадают?
18 Сухраб
 
13.07.18
08:31
вроде работает!
&НаСервере
Функция ВсеОстатки(Материал)
    Запрос = Новый Запрос; Остаток = 0;
    Запрос.Текст =
        "ВЫБРАТЬ
        |   ОстаткиМатериалов.МестаХранения,
        |   ОстаткиМатериалов.Материал,
        |   ОстаткиМатериалов.КоличествоОстаток,
        |   ОстаткиМатериалов.СуммаОстаток
        |ИЗ
        |   РегистрНакопления.ОстаткиМатериалов.Остатки(
        |       &Дата,
        |       МестаХранения = &МестаХранения И
        |       Материал = &Материал
        |   ) КАК ОстаткиМатериалов";
    Если Объект.Ссылка.Пустая() Тогда
        Д = КонецДня(Объект.Дата);
    Иначе
        Д = Новый Граница(Объект.Ссылка.МоментВремени(), ВидГраницы.Исключая);
    КонецЕсли;
    
    Запрос.УстановитьПараметр("Дата",
        Д);
    
    //Запрос.УстановитьПараметр("Дата",
    //    Новый Граница(Объект.Ссылка.МоментВремени(), ВидГраницы.Включая));
    
    Запрос.УстановитьПараметр("МестаХранения",
        Объект.МестаХранения);
        
    Запрос.УстановитьПараметр("Материал",
        Материал);    
        
    РезультатЗапроса = Запрос.Выполнить();
    
    Записи = РезультатЗапроса.Выбрать();
    
    Пока Записи.Следующий() Цикл
        Остаток = Записи.КоличествоОстаток;
        Себестоимость = ?(Записи.КоличествоОстаток>0,Записи.СуммаОстаток/Записи.КоличествоОстаток,0);
    КонецЦикла;
    
    Возврат Остаток;
    
КонецФункции
19 WhiteDragon93
 
13.07.18
08:33
(18) а теперь сравни параметры запроса из (0) и из (18), одни и те же передавались?
20 Сухраб
 
13.07.18
08:34
(19) мда, тупонул
21 Пес Барбос
 
13.07.18
08:36
зачем выборка. сразу в запросе и подели СуммаОстаток на Записи.КоличествоОстаток
22 Сухраб
 
13.07.18
08:36
в 7-ке была функция СводныйОстаток(), такого в 8-ке нет?
или это и есть?
  
    Пока Записи.Следующий() Цикл
        Остаток = Записи.КоличествоОстаток;
        Себестоимость = ?(Записи.КоличествоОстаток>0,Записи.СуммаОстаток/Записи.КоличествоОстаток,0);
    КонецЦикла;
23 Сухраб
 
13.07.18
08:37
(21) попробую, спасибо!
24 Пес Барбос
 
13.07.18
08:42
(22)
ВЫБОР
КОГДА КоличествоОстаток>0
ТОГДА СуммаОстаток/КоличествоОстаток
ИНАЧЕ 0
КОНЕЦ КАК Себестоимость
25 Кац
 
13.07.18
08:52
(21) я еще говорил в (9)

Доктор меня все игнорируют. Следующий! ©
26 Пес Барбос
 
13.07.18
09:03
(25) Так я ему контрольный в голову )
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший