Цитата(Zaval @ 13.05.10, 17:50)
Без доработки - нет. Отключать константу - не выход, другие доки будут тоже проводиться...
Простите не совсем понял "другие доки будут тоже проводиться". Допустим установлен запрет на превышение кредита, а нам нужно контрагенту все-таки провести документ - всех выгоняем из базы (или предупреждаем), устанавливаем константу в "ДА" и проводим только нужный дркумент. Но непонятно как тогда перепроводить цепочку документов - получается перепроводящему пользователю тоже надо дать право ПревышениеКредита или же непроведутся документы, где был проделан такой маневр. Или проведение зависит от автора документа, а не от проводящего?
Получается самый приемлемый вариант - просто увеличить кредит контрагенту?
По доработке я так понимаю нужно сделать следующее:
В справочник "Пользователи" добавить реквизит "РазрешитьПревышениеКредита". Затем в модуле документа Т_РасходнаяНакладная заменить Константа.РазрешитьПревышениеКредита на значение реквизита для пользователя (правда как к нему обратиться еше не знаю
) ... Константа.РазрешитьПревышениеКредита встречается в 2-ух местах модуля документа в Процедуре ДвиженияВзаиморасчеты():
1)
Если (ВидОперации <> 1) и (ВидТорговли = Перечисление.ВидыТорговли.Кредит )
и (Константа.РазрешитьПревышениеКредита = Нет) Тогда
ВремРегКред = СоздатьОбъект("Регистры");
глРассчитатьИтогиВзаиморасчетов(Контекст,ВремРегКред,спФирмы,ЗнакОплаты,Контраге
нт,0);
КонецЕсли;
2)
// Проверяем возможность кредита
Если (ВидОперации <> 1) и (ВидТорговли = Перечисление.ВидыТорговли.Кредит )
и (Константа.РазрешитьПревышениеКредита = Нет) Тогда
глКомментарий("Проверяется возможность кредита",2);
тбДолгиКред = глПолучитьИтогиВзаиморасчетов(Контекст, ВремРегКред, текФирма,ЗнакОплаты, Контрагент, 0);
ДолгКонтрагента = 0;
ВалютаДолга = ?(ПустоеЗначение(текФирма)=0,Гривня,Доллары);
Просрочено = 0;
ПросроченныйДолг = 0;
тбДолгиКред.ВыбратьСтроки();
Пока тбДолгиКред.ПолучитьСтроку()=1 Цикл
ДолгКонтрагента = ДолгКонтрагента + глПересчет(тбДолгиКред.ДолгОсн,ВалютаДолга,ДатаДок,Контрагент.ВалютаКредита,Дата
Док,);
Если тбДолгиКред.ДолгОсн <= 0 Тогда
Продолжить;
КонецЕсли;
ВидДокКред = тбДолгиКред.КредДокумент.Вид();
Если глЕстьРеквизитШапки("ДатаОплаты",ВидДокКред)=Да Тогда
ДатаОплатыДолга = тбДолгиКред.КредДокумент.ДатаОплаты;
Если ПустоеЗначение(ДатаОплатыДолга)=1 Тогда
ДатаОплатыДолга = тбДолгиКред.КредДокумент.ДатаДок;
КонецЕсли;
Иначе
ДатаОплатыДолга = тбДолгиКред.КредДокумент.ДатаДок + Контрагент.Глубина.Получить(тбДолгиКред.КредДокумент.ДатаДок);
КонецЕсли;
Если ДатаДок > ДатаОплатыДолга Тогда
ПросроченныйДолг = ПросроченныйДолг + тбДолгиКред.ДолгОсн;
Если Просрочено<(ДатаДок-ДатаОплатыДолга) Тогда
Просрочено = ДатаДок-ДатаОплатыДолга;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ДолгКонтрагента = ДолгКонтрагента + глПересчет(Итог("СуммаСНДС"),Валюта,ДатаДок,Контрагент.ВалютаКредита,ДатаДок,);
СуммаКредита = Контрагент.СуммаКредита.Получить(ДатаДок);
глКомментарий("Долг контрагента составляет "+глФРМ(ДолгКонтрагента,Контрагент.ВалютаКредита,1)+", сумма кредита "+ глФРМ(СуммаКредита,Контрагент.ВалютаКредита,1) +".",3);
Если ПустоеЗначение(СуммаКредита) = 0 Тогда
Если ДолгКонтрагента > СуммаКредита Тогда
глНеПроводить(Контекст,Шаблон("Сумма накладной вместе с текущим долгом клиента ([глФРМ(ДолгКонтрагента,Контрагент.ВалютаКредита,1)]) превышает сумму кредита ([глФРМ(СуммаКредита,Контрагент.ВалютаКредита,1)]). "));
Возврат;
КонецЕсли;
КонецЕсли;
Если Просрочено>0 Тогда
глНеПроводить(Контекст,Шаблон("Просрочена оплата [глФРМ(ПросроченныйДолг,ВалютаДолга,1)] на [Просрочено] дней."));
Возврат;
КонецЕсли;
глКомментарий("Отпуск товаров в кредит разрешен",3);
КонецЕсли;
Можно ли так сделать?