Помогите с запросом

1. апостол 32 24.12.12 11:53 Сейчас в теме
Здравствуйте!
В только начинаю разбираться, так что вопрос юзера.
Помогите разобраться с запросом.
Стоит задача, если при проведении документа "Реализация товаров и услуг" долг контрагента принимает значение что он нам должен, то документ не проводиться, если мы ему должны то соответственно проводиться.
В модуль документа поместил следующий код:


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

Ссылку на эту процедуру поместил в процедуру "ПередЗаписью".
при попытке записать документ он выдает сообщение


{Документ.РеализацияТоваровУслуг.МодульОбъекта(5419)}: Ошибка при вызове метода контекста (Выполнить)
Запрос = Запрос.Выполнить().Выбрать();
по причине:
{(3, 1)}: Ожидается выражение "ВЫБРАТЬ"
<<?>>Дог = Регистр.ВзаиморасчетыСКонтрагентами.ДоговорКонтрагентавор;
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
7. dimaskl 24.12.12 13:17 Сейчас в теме
Если необходимо проверять задолженность перед проведением документа, то надо писать такой код в "обработке проведения" документа. проверку прошел провелся, не прошел не провелся. все просто.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Ягг 497 24.12.12 12:13 Сейчас в теме
(1) апостол,
1. Такие проверки делаются не в процедуре "ПредЗаписью" а в ОбработкаПроведения (иначе будут проблемы :) )
2. Как справедливо сказано в (2) у 7-ке и 8-ки совершенно разные языки запросов (ничего общего). И тут запрос буддет скорее такой (на вскидку)

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

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

Показать
2. olbu 24.12.12 12:02 Сейчас в теме
Не надо путать запросы 77 и 8.х
Лучше начать с конструктора запросов.
4. A_kryl 162 24.12.12 12:16 Сейчас в теме
ДоговорКонтрагентавор - точно такое поле есть ? Слово Функция... запрос из 77
5. dimaskl 24.12.12 13:13 Сейчас в теме
Вот рабочий код проверки взаиморасчетов

Процедура КнДолгНажатие(Элемент)
// Вставить содержимое обработчика.
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Взаиморасчеты.Контрагент,
| Взаиморасчеты.СуммаВзаиморасчетовКонечныйОстаток КАК Долг,
| Взаиморасчеты.СуммаВзаиморасчетовПриход КАК Реализация,
| Взаиморасчеты.СуммаВзаиморасчетовРасход КАК Оплата
|ИЗ
| РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(
| ,
| &КонецПериода,
| Период,
| ,
| Организация = &Организация И Контрагент = &Контрагент) КАК Взаиморасчеты";
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Запрос.УстановитьПараметр("КонецПериода", Дата);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить("По контрагенту """ + Выборка.Контрагент + """ на " + Дата + "
|Реализовано на " + Выборка.Реализация + " руб.
|Оплачено " + Выборка.Оплата + " руб.
|Долг " + ?(Выборка.Долг < 0, "фирмы", "контрагента") + " " + Выборка.Долг + " руб.");
КонецЦикла;
КонецПроцедуры
6. pandaa61 24.12.12 13:14 Сейчас в теме
попробуйте запустить конструктор запросов на этом запросе.. код 77 и 82 отличается достаточно сильно
7. dimaskl 24.12.12 13:17 Сейчас в теме
Если необходимо проверять задолженность перед проведением документа, то надо писать такой код в "обработке проведения" документа. проверку прошел провелся, не прошел не провелся. все просто.
8. evn-zorin 35 24.12.12 13:26 Сейчас в теме
такое лучше не на форумах изучать, а через мануалы - быстрее будет
9. апостол 32 24.12.12 13:27 Сейчас в теме
Спасибо всем огромное!!!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот