Имя: Пароль:
1C
1С v8
Движение регистра накопление с запросом
,
0 Shamil84
 
09.12.17
18:26
Здравствуйте! Подскажите пожалуйста что не так? Я только учусь) Создаю конструктором движение по документу Расходные. Затем добавляю запрос в движение по выборке. Движение не происходит)

Процедура ОбработкаПроведения(Отказ, Режим)
    
    
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

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

    КонецЦикла;
    
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

    
    
            

    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
1 Shamil84
 
09.12.17
18:28
Чуть подправил))

Движение.Номенклатура = Выборка.Номенклатура;
        Движение.Количество = Выборка.Количество;
        Движение.Стоимость = Выборка.Сумма;
2 Pandoch
 
09.12.17
18:39
попробуй добавить Движения.ОстаткиТоваров.Записать()
3 Pandoch
 
09.12.17
18:45
хотя и без этого должно работать.

параметры запроса в рабочем коде же раскоменчены? отладкой проверял, в цикл вобще заходит?
4 Mankubus
 
09.12.17
20:24
В начале добавь движения. Остатки товаров. Записывать = истина
5 Shamil84
 
09.12.17
21:46
Да разкоментировал параметры, блин отладкой в цикл не заходит( чет я не догадался посмотреть отладкой.
6 Shamil84
 
09.12.17
21:47
Запрос рабочий, в консоле запроса набирал все четко выходит, чет с кодом не то((
7 Shamil84
 
09.12.17
21:50
Да если запустить конструктор движений регистр накопления там отсутствует(. код с запросом затираешь регистр снова появляется в конструкторе
8 Мимохожий Однако
 
09.12.17
22:12
Используй набор записей
9 Shamil84
 
09.12.17
22:19
Все ок в Цикл заходит. Крутится)) блин но в регистре движении по остаткам ничего(
10 Мимохожий Однако
 
09.12.17
22:21
выкинь запрос, бери из табличной части данные
11 Shamil84
 
09.12.17
22:28
Да я понял, запрос нужен, дело в том что мне нужно посчитать себестоимость всего товара сколько осталось в остатках. Т.е мне нужно с регистра остатков вытащить количество и сумму. Один фиг то же самое.

Процедура ОбработкаПроведения(Отказ, Режим)
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    // регистр РегистрЦен
    
    Движения.РегистрЦен.Записывать = Истина;
        Для Каждого ТекСтрокаТабличнаяЧасть1 Из ТабличнаяЧасть1 Цикл
        Движение = Движения.РегистрЦен.Добавить();
        Движение.Период = Дата;
        Движение.Номенклатура = ТекСтрокаТабличнаяЧасть1.Номенклатура;
        Движение.Контрагент = Контрагент;
        Движение.Цена = ТекСтрокаТабличнаяЧасть1.Цена;
        
    КонецЦикла;
    
        Движения.ОстаткиТоваров.Записывать = Истина;

    // регистр ОстаткиТоваров Расход
    
            //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

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

    КонецЦикла;
    
    
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

    
    
            

    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
12 Shamil84
 
09.12.17
22:43
Все ОК записывает. Странно а почему он в конструкторе не отражается? Т.е если конструктором строишь движение там ведь регистры появляются ставишь регистры и сохраняешь, а тут как бы заходишь в конструктор движение а там только один сохраненый регистр хотя должно быть два.
13 Мимохожий Однако
 
09.12.17
22:54
Конструктор для затравки. Остальное пишешь сам.
14 h-sp
 
09.12.17
23:51
(12) может из-за этого

        Если Выборка.Количество > Выборка.КоличествоОстаток Тогда


остатка не хватает