Вход | Регистрация


Расчет оплаты по документам.

Расчет оплаты по документам.
Я
   ZloyRafa
 
14.09.16 - 05:28
Есть документ поступление средств, в нем указаны все документы по которым контрагент имеет задолжность, вносит сумму не превышаю его долги, сумма автоматически распределяется от самого раннего документа задолжности(раньше появился).
Запрос из ригистра сделал, все документы отсортировал по возрастанию даты создания, сумму задолжности знаю, как в запросе организовать расчет по этим документам?
 
 
   ZloyRafa
 
1 - 14.09.16 - 06:19
как передать переменной значение реквизита оплачено?
вроде сообразил как сделать расчет
   ZloyRafa
 
2 - 14.09.16 - 06:19
Процедура ОбработкаПроведения(Отказ, Режим)
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

    // Данный фрагмент построен конструктором.

    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!


    // регистр ВзаиморасчетыСПокупателями Расход

    Движения.ВзаиморасчетыСПокупателями.Записывать = Истина;
                           //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

    // Данный фрагмент построен конструктором.

    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

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

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

    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

КонецПроцедуры
   ZloyRafa
 
3 - 14.09.16 - 06:22
(2) Исправлю, не тот скинул код

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

    // Данный фрагмент построен конструктором.

    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!


    // регистр ВзаиморасчетыСПокупателями Расход

    Движения.ВзаиморасчетыСПокупателями.Записывать = Истина;
                           //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

    // Данный фрагмент построен конструктором.

    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

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

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

    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

КонецПроцедуры
   AneJIbcuH
 
4 - 14.09.16 - 06:24
В обработке проведения вот это зачем: ДокументОбъект=РеквизитФормыВЗначение("Объект"); ?
   AneJIbcuH
 
5 - 14.09.16 - 06:25
Задача в чем состоит? "как передать переменной значение реквизита оплачено? "
   ZloyRafa
 
6 - 14.09.16 - 06:29
(4) это лишнее, код не тот скинул
Мне нужно узнать, как передать значение реквизита формы, в модуль объекта
   AneJIbcuH
 
7 - 14.09.16 - 06:32
Почему просто не создать реквизит объекта?
   ZloyRafa
 
8 - 14.09.16 - 06:34
(7) Не понял
   AneJIbcuH
 
9 - 14.09.16 - 06:39
Я так понял, тебе нужен реквизит Оплачено, но вот ты его же получил - Оплата=Объект.Оплачено
   ZloyRafa
 
10 - 14.09.16 - 06:43
Ругается, Оплата=Оплачено не ругается, но теперь ругается на "не задано значение параметра момент времени"
 
 Рекламное место пустует
   AneJIbcuH
 
11 - 14.09.16 - 06:53
Ну попробуй момент передать как "Новый МоментВремени(Дата, Ссылка)"
   ZloyRafa
 
12 - 14.09.16 - 07:00
Параметры надо было ставить после запроса, а не после выполнения его
   AneJIbcuH
 
13 - 14.09.16 - 07:09
Естественно :)

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует