Здравствуйте!
В только начинаю разбираться, так что вопрос юзера.
Помогите разобраться с запросом.
Стоит задача, если при проведении документа "Реализация товаров и услуг" долг контрагента принимает значение что он нам должен, то документ не проводиться, если мы ему должны то соответственно проводиться.
В модуль документа поместил следующий код:
Ссылку на эту процедуру поместил в процедуру "ПередЗаписью".
при попытке записать документ он выдает сообщение
{Документ.РеализацияТоваровУслуг.МодульОбъекта(5419)}: Ошибка при вызове метода контекста (Выполнить)
Запрос = Запрос.Выполнить().Выбрать();
по причине:
{(3, 1)}: Ожидается выражение "ВЫБРАТЬ"
<<?>>Дог = Регистр.ВзаиморасчетыСКонтрагентами.ДоговорКонтрагентавор;
В только начинаю разбираться, так что вопрос юзера.
Помогите разобраться с запросом.
Стоит задача, если при проведении документа "Реализация товаров и услуг" долг контрагента принимает значение что он нам должен, то документ не проводиться, если мы ему должны то соответственно проводиться.
В модуль документа поместил следующий код:
Процедура Контроль()
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);
Запрос.Текст =
"Выбрать
|Контр = Регистр.ВзаиморасчетыСКонтрагентами.Контрагент;
|Дог = Регистр.ВзаиморасчетыСКонтрагентами.ДоговорКонтрагентавор;
|Сум = Регистр.ВзаиморасчетыСКонтрагентами.СуммаВзаиморасчетов;
|Функция СумКонОст = КонОст(Сум);
|ИЗ
| РегистрНакопления.ВзаиморасчетыСКонтрагентами КАК ВзаиморасчетыСКонтрагентами";
Запрос = Запрос.Выполнить().Выбрать();
Долг=Запрос.СумКонОст;
Если Долг>0 Тогда
Мы=Долг;
Нам=0;
ИначеЕсли Долг<0 Тогда
Мы=0;
Нам=-Долг;
Предупреждение("По данному контрагенту нет предоплаты");
Отказ=Истина;
КонецЕсли;
КонецПроцедуры
ПоказатьСсылку на эту процедуру поместил в процедуру "ПередЗаписью".
при попытке записать документ он выдает сообщение
{Документ.РеализацияТоваровУслуг.МодульОбъекта(5419)}: Ошибка при вызове метода контекста (Выполнить)
Запрос = Запрос.Выполнить().Выбрать();
по причине:
{(3, 1)}: Ожидается выражение "ВЫБРАТЬ"
<<?>>Дог = Регистр.ВзаиморасчетыСКонтрагентами.ДоговорКонтрагентавор;
По теме из базы знаний
- История оптимизации одного большого запроса средствами MSSQL Profiler и 1С
- Неоплаченные долги при распределении оплаты по правилу ФИФО одним запросом и намного быстрее, чем Вы думали
- Консоль запросов к базе Oracle для 1С, без использования специализированных программ
- Оптимизатор запроса. Часть первая
- Как читать чужой код? Часть 3. Разбор и доработка запросов
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) апостол,
1. Такие проверки делаются не в процедуре "ПредЗаписью" а в ОбработкаПроведения (иначе будут проблемы :) )
2. Как справедливо сказано в (2) у 7-ке и 8-ки совершенно разные языки запросов (ничего общего). И тут запрос буддет скорее такой (на вскидку)
1. Такие проверки делаются не в процедуре "ПредЗаписью" а в ОбработкаПроведения (иначе будут проблемы :) )
2. Как справедливо сказано в (2) у 7-ке и 8-ки совершенно разные языки запросов (ничего общего). И тут запрос буддет скорее такой (на вскидку)
Запрос.Текст =
"ВЫБРАТЬ
| ВзаиморасчетыСКонтрагентами.СуммаОстаток
|ИЗ
| РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(&Дата, Контрагент= &Контрагент) КАК ВзаиморасчетыСКонтрагентами";
Запрос.УстановитьПараметр("Дата",МоментВремени());
Запрос.УстановитьПараметр("Контрагент",Контрагент);
Показать
Вот рабочий код проверки взаиморасчетов
Процедура КнДолгНажатие(Элемент)
// Вставить содержимое обработчика.
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Взаиморасчеты.Контрагент,
| Взаиморасчеты.СуммаВзаиморасчетовКонечныйОстаток КАК Долг,
| Взаиморасчеты.СуммаВзаиморасчетовПриход КАК Реализация,
| Взаиморасчеты.СуммаВзаиморасчетовРасход КАК Оплата
|ИЗ
| РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(
| ,
| &КонецПериода,
| Период,
| ,
| Организация = &Организация И Контрагент = &Контрагент) КАК Взаиморасчеты";
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Запрос.УстановитьПараметр("КонецПериода", Дата);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить("По контрагенту """ + Выборка.Контрагент + """ на " + Дата + "
|Реализовано на " + Выборка.Реализация + " руб.
|Оплачено " + Выборка.Оплата + " руб.
|Долг " + ?(Выборка.Долг < 0, "фирмы", "контрагента") + " " + Выборка.Долг + " руб.");
КонецЦикла;
КонецПроцедуры
Процедура КнДолгНажатие(Элемент)
// Вставить содержимое обработчика.
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Взаиморасчеты.Контрагент,
| Взаиморасчеты.СуммаВзаиморасчетовКонечныйОстаток КАК Долг,
| Взаиморасчеты.СуммаВзаиморасчетовПриход КАК Реализация,
| Взаиморасчеты.СуммаВзаиморасчетовРасход КАК Оплата
|ИЗ
| РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(
| ,
| &КонецПериода,
| Период,
| ,
| Организация = &Организация И Контрагент = &Контрагент) КАК Взаиморасчеты";
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Запрос.УстановитьПараметр("КонецПериода", Дата);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить("По контрагенту """ + Выборка.Контрагент + """ на " + Дата + "
|Реализовано на " + Выборка.Реализация + " руб.
|Оплачено " + Выборка.Оплата + " руб.
|Долг " + ?(Выборка.Долг < 0, "фирмы", "контрагента") + " " + Выборка.Долг + " руб.");
КонецЦикла;
КонецПроцедуры
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот