ПОМОГИТЕ А ТО ШЕФ УБЬЕТ!!!
21.11.2008
13:39
#1
Помогите пожалуйста !!!
1С Управление торговлей 10.3.3.3
Проблема такая
У нас на одном контрагенте несколько договоров ....
как сделать если по одному договору не выполняется условие (либо превышено колво дней задолженности или сумма задолженности)то по другим договорам выписка блокируется...
Заранее благодарен!
1С Управление торговлей 10.3.3.3
Проблема такая
У нас на одном контрагенте несколько договоров ....
как сделать если по одному договору не выполняется условие (либо превышено колво дней задолженности или сумма задолженности)то по другим договорам выписка блокируется...
Заранее благодарен!
21.11.2008
13:40
#2
"код такой:
// Контроль числа дней задолженности
Если Платеж.ВестиПоДокументамРасчетовСКонтрагентом Тогда
Если Платеж.КонтролироватьЧислоДнейЗадолженности И (НЕ (РасчетыВозврат=Перечисления.РасчетыВозврат.Возврат ИЛИ ВходящийПлатеж)) Тогда
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ДоговорКонтрагента", ДоговорКонтрагента);
Запрос.Текст =
"ВЫБРАТЬ // Выбирает даты самых ранних сделок по договорам, указанным в т.ч.
| МИНИМУМ(ДокументРасчетовСКонтрагентом.Дата) КАК ДатаПервойСделки,
| ДоговорКонтрагента
| ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(,
| ДоговорКонтрагента) // = ДоговорКонтрагента)
| ГДЕ СуммаВзаиморасчетовОстаток > 0 // *** задолженность больше 0
| И УпрУчет
| И ДоговорКонтрагента.КонтролироватьЧислоДнейЗадолженности
| СГРУППИРОВАТЬ ПО ДоговорКонтрагента";
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() И НЕ Выборка.ДатаПервойСделки=NULL Тогда
ДопустимоеЧислоДнейЗадолженности = ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности;
РазницаДатВСекундах = (ДатаПлатежа - Выборка.ДатаПервойСделки);
РазницаДней = Цел(РазницаДатВСекундах/(24 * 60 * 60));
Если РазницаДней > ДопустимоеЧислоДнейЗадолженности Тогда
ОбщегоНазначения.СообщитьОбОшибке("Превышено допустимое число дней задолженности по договору " + ДоговорКонтрагента +
Символы.ПС + Символы.Таб +
" Допустимое число дней задолженности: " + ДопустимоеЧислоДнейЗадолженности +
", дата самой старой задолженности: " + Выборка.ДатаПервойСделки +
", превышение: " +
РазницаДней + " дней",
Отказ, Заголовок);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
"
// Контроль числа дней задолженности
Если Платеж.ВестиПоДокументамРасчетовСКонтрагентом Тогда
Если Платеж.КонтролироватьЧислоДнейЗадолженности И (НЕ (РасчетыВозврат=Перечисления.РасчетыВозврат.Возврат ИЛИ ВходящийПлатеж)) Тогда
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ДоговорКонтрагента", ДоговорКонтрагента);
Запрос.Текст =
"ВЫБРАТЬ // Выбирает даты самых ранних сделок по договорам, указанным в т.ч.
| МИНИМУМ(ДокументРасчетовСКонтрагентом.Дата) КАК ДатаПервойСделки,
| ДоговорКонтрагента
| ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(,
| ДоговорКонтрагента) // = ДоговорКонтрагента)
| ГДЕ СуммаВзаиморасчетовОстаток > 0 // *** задолженность больше 0
| И УпрУчет
| И ДоговорКонтрагента.КонтролироватьЧислоДнейЗадолженности
| СГРУППИРОВАТЬ ПО ДоговорКонтрагента";
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() И НЕ Выборка.ДатаПервойСделки=NULL Тогда
ДопустимоеЧислоДнейЗадолженности = ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности;
РазницаДатВСекундах = (ДатаПлатежа - Выборка.ДатаПервойСделки);
РазницаДней = Цел(РазницаДатВСекундах/(24 * 60 * 60));
Если РазницаДней > ДопустимоеЧислоДнейЗадолженности Тогда
ОбщегоНазначения.СообщитьОбОшибке("Превышено допустимое число дней задолженности по договору " + ДоговорКонтрагента +
Символы.ПС + Символы.Таб +
" Допустимое число дней задолженности: " + ДопустимоеЧислоДнейЗадолженности +
", дата самой старой задолженности: " + Выборка.ДатаПервойСделки +
", превышение: " +
РазницаДней + " дней",
Отказ, Заголовок);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
"
21.11.2008
14:07
#5
Такой запрос в принципе работать не может, если он именно такой
смущает
> | ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(,
> | ДоговорКонтрагента) // = ДоговорКонтрагента)
или у вас стоит
ДоговорКонтрагента = &ДоговорКонтрагента)
Тогда вы получаете остатки только по одному договору
или вообще не должно быть упоминания о договоре в параметрах виртуальной таблицы
Если вы хотите выбрать все договора контрагента, то должно быть так
ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(,Контрагент = &Контрагент)
А вот ДопустимоеЧислоДнейЗадолженности, логичнее получать в запросе через договор, чем еще раз потом обращаться к базе
| ДоговорКонтрагента,
| МАКСИМУМ(ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности) КАК ДопустимоеЧислоДнейЗадолженности
И Выборка.ДатаПервойСделки=NULL, тоже хорошо бы обработать в запросе. Такое значение у вас может быть в одном только случае, когда договор ведется не по документам расчетов, а целом по договору. Как вы в таком случае дату возникновения задолженность определять?
смущает
> | ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(,
> | ДоговорКонтрагента) // = ДоговорКонтрагента)
или у вас стоит
ДоговорКонтрагента = &ДоговорКонтрагента)
Тогда вы получаете остатки только по одному договору
или вообще не должно быть упоминания о договоре в параметрах виртуальной таблицы
Если вы хотите выбрать все договора контрагента, то должно быть так
ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(,Контрагент = &Контрагент)
А вот ДопустимоеЧислоДнейЗадолженности, логичнее получать в запросе через договор, чем еще раз потом обращаться к базе
| ДоговорКонтрагента,
| МАКСИМУМ(ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности) КАК ДопустимоеЧислоДнейЗадолженности
И Выборка.ДатаПервойСделки=NULL, тоже хорошо бы обработать в запросе. Такое значение у вас может быть в одном только случае, когда договор ведется не по документам расчетов, а целом по договору. Как вы в таком случае дату возникновения задолженность определять?
Читают тему
(гостей: 1)