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

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

    //Если СуммаВсего>0 Тогда //если сумма дока еще не равна нулю, то создается Аванс на контрагента
    //    
    //    Движение = Движения.Взаиморасчеты.Добавить();
    //    Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
    //    Движение.Период = Дата;
    //    Движение.Аванс =  "Аванс";
    //    Движение.Контрагент = Контрагент;
    //    Движение.Сумма = СуммаВсего;
    //КонецЕсли;
    //    Движения.Взаиморасчеты.Записать();
КонецПроцедуры


Поле "СуммаОстаток" не возвращает значение. Запрос отрабатывает верно, проверял в консоле. При отладке в программе поле СуммаОстаток не чему не равно...неопределенно. Накиньте вариантов
1 Wobland
 
12.11.14
17:06
Пока не Выборка.Следующий(), хрен тебе что будет
2 nickname1c
 
12.11.14
17:06
(1) поподробнее...не понял
3 Эмбеддер
 
12.11.14
17:09
Выборка= Результат.Выбрать();
...
     Сумма1=Выборка.СуммаОстаток;

вот это неправильно, т.к. итога нет
надо написать в запросе для этого хотя бы
ИТОГИ СУММА(...) ОБЩИЕ
4 Wobland
 
12.11.14
17:09
(2) Пока не сработает Выборка.Следующий(), хрен тебе что будет
5 Эмбеддер
 
12.11.14
17:09
ну или выборка.следующий сделать
6 nickname1c
 
12.11.14
17:11
(4) что предлагаешь ? как исправить?
7 nickname1c
 
12.11.14
17:11
(3) то я убрал....то лишнее
8 Эмбеддер
 
12.11.14
17:15
чтобы сразу все увидеть, выгрузи в таблицу
ТЗ=Результат.Выгрузить();
а потом вместо Выборка.Следующий() пройди по строкам таблицы
9 lefthander
 
12.11.14
17:24
Я бы вот так в запросе написал, там где нет суммы, получил бы 0

|СУММА(ЕСТЬNULL(ВзаиморасчетыОстатки.СуммаОстаток, 0)) КАК СуммаОстаток,
10 nickname1c
 
12.11.14
17:25
(8) спасибо помогло
11 nickname1c
 
12.11.14
17:25
Исправил....только теперь другие ошибки...пошел поиграю с ними
12 Эмбеддер
 
12.11.14
17:30
(9) в данном случае значений NULL не будет
13 lefthander
 
12.11.14
17:32
СуммаОплаты=Сумма;
     Сумма1=Выборка.СуммаОстаток;
    Пока Выборка.Следующий() И СуммаОплаты>0 Цикл

Что такое Сумма в данном коде и откуда она берется?

И должно быть так
  Пока Выборка.Следующий() И СуммаОплаты>0 Цикл
    Сумма1=Выборка.СуммаОстаток;
и так далее
14 lefthander
 
12.11.14
17:34
(12) если не будет это хорошо, а если вдруг, то приведется к нулю и можно будет проверить на ноль.
15 lefthander
 
12.11.14
17:38
Если СуммаОплаты Тогда

СуммаОплаты это число, а используется как булево
Может так - Если СуммаОплаты > 0 Тогда
16 Эмбеддер
 
12.11.14
17:47
(14) просто код становится более громоздким
17 Enders
 
12.11.14
17:54
(14) А откуда там NULL появится? Соединений нет, получения данных через точку тоже нет
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn