8.х Цена и стоимость номнклатуры, в чем отличие

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем parti, 23 июл 2008.

  1. TopicStarter Overlay
    parti
    Offline

    parti

    Регистрация:
    6 июн 2008
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Радченко, Часть II, Глава третья : Проведение документа по нескольким регистрам.

    Изменение процедуры проведения документа «Оказание услуги»
    И в заключение этой главы мы внесем изменения в процедуру обработки проведения документа ОказаниеУслуги. На данном этапе мы будем исходить из пожелания, высказанного руководством ООО «На все руки мастер». Суть его заключается в том, что на первом этапе, при списании материалов, израсходованных в процессе оказания услуги, должна быть возможность указывать различную стоимость для одного и того же материала, которая рассчитана руководством исходя из текущих конъюнктурных соображений.
    Поскольку в документе ОказаниеУслуги у нас отражена только цена номенклатуры, нам понадобится добавить в табличную часть документа еще одно поле, в котором будет указываться стоимость номенклатуры.

    Я не понял. В табличной части документа ОказаниеУслуги имеется Номенклатура,Количество,Цена,Сумма Зачем понадобилось вводить еще и Стоимость?
    И чем отличается цена номенлатуры от стоимости номенклатуры?? И что же такое номенклатура?
  2. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Цена - это цена, а стоимость, это рассчитанная по какой-нибудь формуле общая стоимость.

    Например, у нас есть товар по цене 100 р. за штуку. Но если мы продаем сразу больше 100 шт. мы даем скидку в 10%.
    Тогда цена остается 100р. за шт. А стоимость продажи, в случае реализации 100 шт. становится 100*100 - 10% = 9000р.

    =) Например вот так.

    А в случае с услугами - это вообще отдельно, есть цена услуги по прайсу, но какому-то клиенту мы хотим эту услугу сделать дешевле/дороже. Или для наса себестоимость услуги больше/меньше.

    В общем такие ситуации всегда есть.
  3. TopicStarter Overlay
    parti
    Offline

    parti

    Регистрация:
    6 июн 2008
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Эмин, это понятно. Я не пойму, зачем в книге указаны цена, сумма и стоимость товара.Сумма=количество*цена.

    Номенклатура|Стоимость|Количество|Цена|Сумма
    товар 90 5 100 500

    Так получается?
  4. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Ну например так =) Это сделано скорее для того, чтобы показать, что разные регистры могут учитывать разную информацию, а потом все смотреть в разных отчетах, сравнивать.
  5. vgv8
    Offline

    vgv8 Опытный в 1С

    Регистрация:
    4 сен 2007
    Сообщения:
    79
    Симпатии:
    2
    Баллы:
    29
    Нет, не так

    Цена и Сумма - реквизиты (читай "колонки") из ТЧ ПереченьНоменклатуры док-та ОказаниеУслуги,
    а Стоимость - ресурс Стоимость из регистра накопления СтоимостьМатериалов.

    При проведении док-та (ОбработкаПроведения(Отказ, Режим) из модуля объекта документа) ОказаниеУслуги
    значение Сумма (возможно, с некоторым преобразованием) копируется в "колонку" Стоимость
    (если смотреть на табличку регистра) регистра накопления СтоимостьМатериалов

    стр.107-8 Радченко

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

    Для Каждого ТекСтрокаМатериалы Из Материалы Цикл
    // регистр СтоимостьМатериалов
    Движение = Движения.СтоимостьМатериалов.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
    Движение.Период = Дата;
    Движение.Материал = ТекСтрокаМатериалы.Материал;
    Движение.Стоимость = ТекСтрокаМатериалы.Сумма;
    КонецЦикла;​
    //}}_КОНСТРУКТОРЛВИЖЕНИЙ_РЕГИСТРОВ ​
    КонецПроцедуры


    стр.111-2 книги Радченко

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

    Для Каждого ТекСтрокаМатериалы Из Материалы Цикл
    // регистр ОстаткиМатериалов Расход
    Движение = Движения.ОстаткиМатериалов.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
    Движение.Период = Дата;
    Движение.Материал = ТекСтрокаМатериалы.Материал;
    Движение.Склад = Склад;
    Движение.Количество = ТекСтрокаМатериалы.Количество;
    //КонецЦикла;
    //Для Каждого ТекСтрокаМатериалы Из Материалы Цикл
    // регистр СтоимостьМатериалов Расход
    Движение = Движения.СтоимостьМатериалов.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
    Движение.Период = Дата;
    Движение.Материал = ТекСтрокаМатериалы.Материал;
    Движение.Стоимость = ТекСтрокаМатериалы.Сумма;
    КонецЦикла;
    //}}_КОНСТРУКТОРЛВИЖЕНИЙ_РЕГИСТРОВ ​
    КонецПроцедуры


    А, ещё дальше в Часть 2 Глава 6 "Оптимизация процедуры проведения документа
    ОказаниеУслуги" книги идёт:

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

Поделиться этой страницей