Ошибка возникает при выполнении следующих действий:
В результате получаем ошибку
Условия возникновения ошибки
Откуда «растут ноги»
В модуле общей формы ПодборПоРасчетамСПартнерами есть процедура ПоместитьПлатежиВХранилище().
В процедуре есть вызов функции ДенежныеСредстваСервер.ДоговорПоУмолчанию(). В качестве первого параметра передается значение Неопределено.
&НаСервере Процедура ПоместитьПлатежиВХранилище() Платежи = ТаблицаОстатковРасчетов.Выгрузить(, "Выбран, Сумма, Заказ, СтатьяДвиженияДенежныхСредств, ВалютаВзаиморасчетов, Партнер, Контрагент, ТипРасчетов"); МассивУдаляемыхСтрок = Новый Массив; Для Каждого СтрокаТаблицы Из Платежи Цикл Если Не СтрокаТаблицы.Выбран Тогда МассивУдаляемыхСтрок.Добавить(СтрокаТаблицы); КонецЕсли; КонецЦикла; Для Каждого СтрокаТаблицы Из МассивУдаляемыхСтрок Цикл Платежи.Удалить(СтрокаТаблицы); КонецЦикла; Если Платежи.Итог("Сумма") < СуммаДокумента Тогда СтрокаТаблицы = Платежи.Добавить(); СтрокаТаблицы.Сумма = СуммаДокумента - Платежи.Итог("Сумма"); Если ЗначениеЗаполнено(Партнер) Тогда СтрокаТаблицы.Партнер = Партнер; Иначе СтрокаТаблицы.Партнер = ДенежныеСредстваСервер.ПолучитьПартнераПоКонтрагенту(Контрагент); КонецЕсли; Если ЗначениеЗаполнено(ДоговорКонтрагента) Тогда СтрокаТаблицы.Заказ = ДоговорКонтрагента; Иначе СтрокаТаблицы.Заказ = ДенежныеСредстваСервер.ДоговорПоУмолчанию( Неопределено,//Обратите внимание!! СтрокаТаблицы.Партнер, Контрагент, Организация, ПолучитьХозяйственнуюОперациюДоговора(ХозяйственнаяОперация)); КонецЕсли; КонецЕсли; Платежи.Колонки.Добавить("ОснованиеПлатежа"); Платежи.ЗагрузитьКолонку(Платежи.ВыгрузитьКолонку("Заказ"), "ОснованиеПлатежа"); АдресПлатежейВХранилище = ПоместитьВоВременноеХранилище(Платежи, УникальныйИдентификатор); КонецПроцедуры
В функции ДоговорПоУмолчанию()это значение передается в запрос, выполнение которого вызывает ошибку SQL
Функция ДоговорПоУмолчанию( ТекущийДоговор,//Сюда передано значение Неопределено Партнер, Контрагент, Организация, ХозяйственныеОперации ) Экспорт СписокПартнеров = Новый СписокЗначений; ПартнерыИКонтрагенты.ЗаполнитьСписокПартнераСРодителями(Партнер, СписокПартнеров); Запрос = Новый Запрос(" |ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 2 | ДоговорыКонтрагентов.Ссылка | |ИЗ | Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов | |ГДЕ | (НЕ ДоговорыКонтрагентов.ПометкаУдаления) | И ДоговорыКонтрагентов.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыДоговоровКонтрагентов.Действует) | И ДоговорыКонтрагентов.Партнер В (&СписокПартнеров) | И ДоговорыКонтрагентов.Контрагент = &Контрагент | И ДоговорыКонтрагентов.Организация = &Организация | И ((НЕ &ОтборХозяйственнаяОперация) | ИЛИ ДоговорыКонтрагентов.ХозяйственнаяОперация В (&ХозяйственнаяОперация)) | И ДоговорыКонтрагентов.ПорядокРасчетов = ЗНАЧЕНИЕ(Перечисление.ПорядокРасчетов.ПоДоговорамКонтрагентов) | |УПОРЯДОЧИТЬ ПО | ВЫБОР | КОГДА &ТекущийДоговор = ДоговорыКонтрагентов.Ссылка//Неопределено используется в тексте запроса | ТОГДА 1 | ИНАЧЕ 0 | КОНЕЦ УБЫВ |"); Запрос.УстановитьПараметр("ТекущийДоговор", ТекущийДоговор);//Неопределено передается в запрос Запрос.УстановитьПараметр("СписокПартнеров", СписокПартнеров); Запрос.УстановитьПараметр("Контрагент", Контрагент); Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("ОтборХозяйственнаяОперация", ЗначениеЗаполнено(ХозяйственныеОперации)); Запрос.УстановитьПараметр("ХозяйственнаяОперация", ХозяйственныеОперации); Выборка = Запрос.Выполнить().Выбрать();
Решение
В форме ПодборПоРасчетамСПартнерами в процедуре ПоместитьПлатежиВХранилище(), при вызове функции ДенежныеСредстваСервер.ДоговорПоУмолчанию() первым параметром передавать пустую ссылку на договор.
&НаСервере Процедура ПоместитьПлатежиВХранилище() Платежи = ТаблицаОстатковРасчетов.Выгрузить(, "Выбран, Сумма, Заказ, СтатьяДвиженияДенежныхСредств, ВалютаВзаиморасчетов, Партнер, Контрагент, ТипРасчетов"); МассивУдаляемыхСтрок = Новый Массив; Для Каждого СтрокаТаблицы Из Платежи Цикл Если Не СтрокаТаблицы.Выбран Тогда МассивУдаляемыхСтрок.Добавить(СтрокаТаблицы); КонецЕсли; КонецЦикла; Для Каждого СтрокаТаблицы Из МассивУдаляемыхСтрок Цикл Платежи.Удалить(СтрокаТаблицы); КонецЦикла; Если Платежи.Итог("Сумма") < СуммаДокумента Тогда СтрокаТаблицы = Платежи.Добавить(); СтрокаТаблицы.Сумма = СуммаДокумента - Платежи.Итог("Сумма"); Если ЗначениеЗаполнено(Партнер) Тогда СтрокаТаблицы.Партнер = Партнер; Иначе СтрокаТаблицы.Партнер = ДенежныеСредстваСервер.ПолучитьПартнераПоКонтрагенту(Контрагент); КонецЕсли; Если ЗначениеЗаполнено(ДоговорКонтрагента) Тогда СтрокаТаблицы.Заказ = ДоговорКонтрагента; Иначе СтрокаТаблицы.Заказ = ДенежныеСредстваСервер.ДоговорПоУмолчанию( Справочники.ДоговорыКонтрагентов.ПустаяСсылка(),//Неопределено,Вместо Неопределено передаем пустую ссылку СтрокаТаблицы.Партнер, Контрагент, Организация, ПолучитьХозяйственнуюОперациюДоговора(ХозяйственнаяОперация)); КонецЕсли; КонецЕсли; Платежи.Колонки.Добавить("ОснованиеПлатежа"); Платежи.ЗагрузитьКолонку(Платежи.ВыгрузитьКолонку("Заказ"), "ОснованиеПлатежа"); АдресПлатежейВХранилище = ПоместитьВоВременноеХранилище(Платежи, УникальныйИдентификатор); КонецПроцедуры
Релизы
У автора эта ошибка проявилась в УТ 11.1.7.67 на платформах 8.3.1231 и 8.3.1248, в текущем релизе УТ 11.1.9.56 ошибка не исправлена.
Техподдержка 1С
Техподдержка посоветовала выполнить Тестирование и исправление, обратил их внимание на то, что ошибка находится в коде, ждем ответа.
Ошибка исправлена в релизе 11.1.9.61
Изменен текст запроса в функции ДенежныеСредстваСервер.ДоговорПоУмолчанию()