Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
23 ноя 2024, 12:51

Задание на основе Радченко

Автор Самофалов Владимир, 04 апр 2020, 14:47

0 Пользователей и 1 гость просматривают эту тему.

Самофалов Владимир

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


Самофалов Владимир


Теги: Радченко 1С8.3 

Похожие темы (5)

Рейтинг@Mail.ru

Поиск