Имя: Пароль:
1C
1С v8
Проблема с документом ОплатаПокупателя
,
0 sovsemnovichek
 
22.07.13
16:41
При проведении документа "ОплатаПокупателя" должна, по моей идее, автоматически подставляться Сумма К Оплате из Регистра Накопления "Задолженность"
Но что-то не так, не выходит, подскажите в чем ошибка

Эта функция вытаскивает Сумму из Регистра и находится она в общем модуле

ункция ПолучитьСуммуДолга(Контрагент,Организация,Дата)    Экспорт

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    ЗадолженностиОстатки.СуммаДолгаОстаток КАК СуммаДолга,
|    ЗадолженностиОстатки.Организация КАК Организация,
|    ЗадолженностиОстатки.Контрагент КАК Контрагент
|ИЗ
|    РегистрНакопления.Задолженности.Остатки(
|            &Дата,
|            Контрагент = &Контрагент
|                И Организация = &Организация) КАК ЗадолженностиОстатки
|ГДЕ
|    ЗадолженностиОстатки.Контрагент = &Контрагент
|    И ЗадолженностиОстатки.Организация = &Организация";

Запрос.УстановитьПараметр("Дата",Дата);
Запрос.УстановитьПараметр("Контрагент",Контрагент);
Запрос.УстановитьПараметр("Организация",Организация);

Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
   Возврат Выборка.СуммаДолга Иначе
   Возврат 0;
   
   КонецЕсли;


КонецФункции

А эта функция должна срабатывать при подстановке Контрагента или его изменении, однако это происходит при только при повторном проведении

&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
    M = РаботаСоСправочниками.ПолучитьСуммуДолга(Объект.Контрагент,Объект.Организация,Объект.Дата);
    Объект.СуммаКОплате = M;
КонецПроцедуры

и в регистре Задолженность Сумма тоже появляется только после повторного проведения
1 mikecool
 
22.07.13
16:43
потому что при первом проведении проводок еще нет
и это, зачем для выбора суммы выбираешь еще и
|    ЗадолженностиОстатки.Организация КАК Организация,
|    ЗадолженностиОстатки.Контрагент КАК Контрагент
?
2 Wobland
 
22.07.13
16:51
куда должна сумма подставляться? при записи подставляй
3 sovsemnovichek
 
22.07.13
16:51
дак чтобы узнавать какой конкретно контрагент какую конкретно сумму должен! Ведь по идее при подстановке контрагента подставляется сумма его долга
4 Wobland
 
22.07.13
16:52
(3) зачем тубу узнавать контрагента?
5 mikecool
 
22.07.13
16:53
(3) "чтобы узнавать какой конкретно контрагент какую конкретно сумму должен!" это ты написал здесь:
   РегистрНакопления.Задолженности.Остатки(
|            &Дата,
|            Контрагент = &Контрагент
|                И Организация = &Организация)
это вообще выкинуть надо:
|ГДЕ
|    ЗадолженностиОстатки.Контрагент = &Контрагент
|    И ЗадолженностиОстатки.Организация = &Организация
6 mikecool
 
22.07.13
16:53
итого остается
Запрос.Текст =
"ВЫБРАТЬ
|    ЗадолженностиОстатки.СуммаДолгаОстаток КАК СуммаДолга
|ИЗ
|    РегистрНакопления.Задолженности.Остатки(
|            &Дата,
|            Контрагент = &Контрагент
|                И Организация = &Организация) КАК ЗадолженностиОстатки
7 Wobland
 
22.07.13
16:54
странно как-то сумму взаиморасчётов суммой долга звать
8 sovsemnovichek
 
22.07.13
16:54
Я не хочу его знать, я хочу его просто вставить в поле "Контрагент" и чтобы после этого подставилась сумма его долга в поле "Сумма к оплате" вот и все. Если напортачил в коде, укажи где, буду признателен)
9 Wobland
 
22.07.13
16:55
(8) не хочешь знать, а выбираешь зачем-то. ай-ай
10 sovsemnovichek
 
22.07.13
16:57
|ГДЕ
|    ЗадолженностиОстатки.Контрагент = &Контрагент
|    И ЗадолженностиОстатки.Организация = &Организация

почему это выкинуть надо? это же параметры, которые я передаю... Если этого не будет, то как параметры определять?
11 Wobland
 
22.07.13
16:59
(10) а у тебя только там параметры?
12 sovsemnovichek
 
22.07.13
17:00
ну еще при обработке проведения в модуле в запросе параметры есть
13 Wobland
 
22.07.13
17:01
(12) а в тексте запроса?
14 sovsemnovichek
 
22.07.13
17:09
ну да, в тексте запроса есть


Процедура ОбработкаПроведения(Отказ, Режим)

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

   КонецПроцедуры
15 Wobland
 
22.07.13
17:11
ВТ зачем?
16 Wobland
 
22.07.13
17:15
ЕСТЬNULL что такое?
чо-т я не понял. движения формируются из движений? документ тогда чисто для галочки?
17 sovsemnovichek
 
22.07.13
17:19
В смысле движения из движений?
18 sovsemnovichek
 
22.07.13
17:19
ЕСТЬNULL проверяет наличие остатков в регистре
19 mikecool
 
22.07.13
17:20
(18) нет
20 sovsemnovichek
 
22.07.13
17:43
что нет?
21 mikecool
 
22.07.13
17:47
(20) ЕСТЬNULL не проверяет наличие остатков в регистре
22 sovsemnovichek
 
22.07.13
17:51
а что же?
23 Wobland
 
22.07.13
17:54
(22) заменяет значение при условии
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн