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

Как получить (вставить) себестоимость из регистров накопления в документ Продажа

Автор Катенька, 23 апр 2019, 14:09

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

Катенька

Всем привет! У меня есть есть вопрос к вам.
Как получить (вставить) себестоимость из регистров накопления ОстаткиНоменклатурыПоПартиям в документ РеализацияТоваров (представление-Продажа) в табличную часть Товары в колонку Себестоимость?

Например : Документ.РеализацияТоваров.Товары.Себестоимость = Движение.Сумма;
Но выводит ошибка, что {Документ.РеализацияТоваров.МодульОбъекта(85,1)}: Переменная не определена (Объект)

И в модуле формы Документ РеализацияТоваров тоже не может получить, хотя есть там объект Движения.
Как правильно прописать код ?
Спасибо!

Пример
В модуле объекта:

Процедура ОбработкаПроведения(Отказ, РежимПроведения)

//P.S.Расчет суммы себестоимости и списание партий должно осуществляться по методу FIFO

//  1. Очистка старых движений регистра
Движения.ОстаткиНоменклатурыПоПартиям.Очистить();   

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

КонецЦикла;


КонецЕсли;
КонецЦикла;

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

КонецЦикла;

КонецПроцедуры



Катенька

    Извините, неправильно задала вопрос... Напишу по-другому :befhbt:  :D

    Как получить (вставить) "Сумма" из регистров накопления "ОстаткиНоменклатурыПоПартиям" в документ "РеализацияТоваров" в табличную часть Товары в колонку "Себестоимость"???
     Так как вычисление себестоимости находится в процедуре обработки проведения(в модули объекта Документ "РеализацияТоваров") в регистр накопления "ОстаткиНоменклатурыПоПартиям" в "Движение.Сумма". Как чтоб  одновременно сразу вставила и в документ после вычисления?

alexandr_ll

Цитата: Катенька от 25 апр 2019, 09:47
    Извините, неправильно задала вопрос... Напишу по-другому :befhbt:  :D

    Как получить (вставить) "Сумма" из регистров накопления "ОстаткиНоменклатурыПоПартиям" в документ "РеализацияТоваров" в табличную часть Товары в колонку "Себестоимость"???
     Так как вычисление себестоимости находится в процедуре обработки проведения(в модули объекта Документ "РеализацияТоваров") в регистр накопления "ОстаткиНоменклатурыПоПартиям" в "Движение.Сумма". Как чтоб  одновременно сразу вставила и в документ после вычисления?
Пока документ не проведен, эта колонка не будет заполнена. У проведенного документа можно получить, прочитав записи нужного регистра. Подробнее https://helpme1c.ru/registry-nakopleniya-v-yazyke-1s-8-v-primerax

Катенька

alexandr_ll, все равно у меня ошибка. Вы можете привести пример как правильно ? Пожалуйста, подскажите как?

wise

(0) Вы в модуле объекта обращаетесь КУДА.??
//Документ.РеализацияТоваров.Товары.Себестоимость = Движение.Сумма;  здесь не работает

Документ.РеализацияТоваров - Вы попадаете в МОДУЛЬ МЕНЕДЖЕРА!!

При обращении к табличной части - Товары[ЗДЕСЬ надо ИНДЕКС строки].Себестоимость

p.s. Ваша строка НЕ работает, потому что это просто НАБОР букв...
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

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

Рейтинг@Mail.ru

Поиск