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

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

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

    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
3 ZloyRafa
 
14.09.16
06:22
(2) Исправлю, не тот скинул код

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

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

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

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