Версия для печати темы (https://pro1c.org.ua/index.php?s=c8d16b994be68de42122c6fe322575f5&showtopic=22381)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Учетная цена при проведении

Автор: Астахов 08.03.15, 12:52

конфигурация учебная
в расходной накладной сделал что бы уч цена (формула остатокСумма / остатокКоличество) рассчитывалась в модуле формы мне сказали что это не правильно нужно обязательно при проведении вот я не пойму как это реализовать
в модуле формы у меня был вот такой запрос

&НаКлиенте
Процедура РасходТМЦПриИзменении(Элемент)
    стр = Элементы.Расход.ТекущиеДанные;
    стр.Цена = ПолучитьЦену.ПолучитьЦену(стр.ТМЦ,объект.Дата);
    стр.УчЦена = ПолучитьУчЦену(стр.ТМЦ,объект.Дата,объект.Склад);
    РаботаСдокументами.РассчитатьУчСумму(стр);
    РаботаСдокументами.РассчитатьСумму(стр);
    РаботаСдокументами.РассчитатьСуммуСНДС(стр,объект);
КонецПроцедуры

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

Кто может подсказать как это сделать при проведении расходной накладной?

Автор: Астахов 09.03.15, 17:29

Правильный ответ

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    СуммаСНДС=Расход.Итог("СуммаСНДС");
    Для каждого ТекСтрокаРасход из Расход цикл
        ТекСтрокаРасход.УчЦена = ПолучитьУчЦену(ТекСтрокаРасход.ТМЦ,Дата,Склад);
        ТекСтрокаРасход.УчСумма = ТекСтрокаРасход.УчЦена * ТекСтрокаРасход.Количество;
    КонецЦикла;    
КонецПроцедуры

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

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua