Версия для печати темы (https://pro1c.org.ua/index.php?showtopic=1622)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ 1С Торговля и Склад 7.7 для Украины _ На что влияет значение "максимальная сумма кредита покупателю"

Автор: Vlad23 13.05.10, 11:19

В справочнике "Контрагенты" в закладке "Кредиты" можна задать максимальную сумму кредита покупателю, но на что влияет установленное значение понять трудно. Установил значение 100 для определенного контрагента. При этом безболезненно проводятся расходные накладные (товар) по товарному кредиту на любую сумму этому клиенту? Хотелось бы, чтобы при привышении заданной суммы был запрет на продажу в кредит данному контрагенту ...

Автор: Zaval 13.05.10, 11:52

А что в Константе РазрешитьПревышениеКредита? Еще могут быть подобные настройки для Пользователя... читайте справку.

Автор: Vlad23 13.05.10, 14:41

Благодарю.
Установил РазрешитьПревышениеКредита в "НЕТ" - теперь не дает провести документ в случае превышения задолжености - правда не сообщает об этом красивенько "Превышен лимит по кредиту" к примеру, а ругается:
Не распределилась проводка * 7021 на сумму -64,71
Сформирована проводка 00 7021
Не понятно как сумма 64,71 считается - лимит превышается на 5 грн. ...?

В справочнике "Пользователисистемы " задаются для только параметры:
1. Редактировать № документа
2. Изменять документы любого периода
3. Изменять категорию цен

Где можно задать для пользователя "РазрешитьПревышениеКредита" не нашел ...

Автор: Zaval 13.05.10, 15:03

Это что-то другое, возможно ошибка... или детальность комментариев...
Должно быть "Сумма накладной вместе с текущим долгом клиента......" учтите, МаксКредит - периодический (берется на дату Док) и при необх пересчитывается для приведения валют.

Автор: Vlad23 13.05.10, 15:14

Цитата(Zaval @ 13.05.10, 17:03) *
Это что-то другое, возможно ошибка... или детальность комментариев...
Должно быть "Сумма накладной вместе с текущим долгом клиента......" учтите, МаксКредит - периодический (берется на дату Док) и при необх пересчитывается для приведения валют.


Опять Вы правы - действительно детальность коментариев ...

А можно какому-то пользователю Разрешить проводить документ?

Автор: Zaval 13.05.10, 15:50

Без доработки - нет. Отключать константу - не выход, другие доки будут тоже проводиться...

Автор: Vlad23 14.05.10, 9:40

Цитата(Zaval @ 13.05.10, 17:50) *
Без доработки - нет. Отключать константу - не выход, другие доки будут тоже проводиться...


Простите не совсем понял "другие доки будут тоже проводиться". Допустим установлен запрет на превышение кредита, а нам нужно контрагенту все-таки провести документ - всех выгоняем из базы (или предупреждаем), устанавливаем константу в "ДА" и проводим только нужный дркумент. Но непонятно как тогда перепроводить цепочку документов - получается перепроводящему пользователю тоже надо дать право ПревышениеКредита или же непроведутся документы, где был проделан такой маневр. Или проведение зависит от автора документа, а не от проводящего?

Получается самый приемлемый вариант - просто увеличить кредит контрагенту?

По доработке я так понимаю нужно сделать следующее:
В справочник "Пользователи" добавить реквизит "РазрешитьПревышениеКредита". Затем в модуле документа Т_РасходнаяНакладная заменить Константа.РазрешитьПревышениеКредита на значение реквизита для пользователя (правда как к нему обратиться еше не знаю smile.gif) ... Константа.РазрешитьПревышениеКредита встречается в 2-ух местах модуля документа в Процедуре ДвиженияВзаиморасчеты():
1)
Если (ВидОперации <> 1) и (ВидТорговли = Перечисление.ВидыТорговли.Кредит )
и (Константа.РазрешитьПревышениеКредита = Нет) Тогда

ВремРегКред = СоздатьОбъект("Регистры");
глРассчитатьИтогиВзаиморасчетов(Контекст,ВремРегКред,спФирмы,ЗнакОплаты,Контраге
нт,0);

КонецЕсли;

2)
// Проверяем возможность кредита
Если (ВидОперации <> 1) и (ВидТорговли = Перечисление.ВидыТорговли.Кредит )
и (Константа.РазрешитьПревышениеКредита = Нет) Тогда

глКомментарий("Проверяется возможность кредита",2);
тбДолгиКред = глПолучитьИтогиВзаиморасчетов(Контекст, ВремРегКред, текФирма,ЗнакОплаты, Контрагент, 0);

ДолгКонтрагента = 0;
ВалютаДолга = ?(ПустоеЗначение(текФирма)=0,Гривня,Доллары);

Просрочено = 0;
ПросроченныйДолг = 0;

тбДолгиКред.ВыбратьСтроки();
Пока тбДолгиКред.ПолучитьСтроку()=1 Цикл

ДолгКонтрагента = ДолгКонтрагента + глПересчет(тбДолгиКред.ДолгОсн,ВалютаДолга,ДатаДок,Контрагент.ВалютаКредита,Дата
Док,);

Если тбДолгиКред.ДолгОсн <= 0 Тогда
Продолжить;
КонецЕсли;

ВидДокКред = тбДолгиКред.КредДокумент.Вид();

Если глЕстьРеквизитШапки("ДатаОплаты",ВидДокКред)=Да Тогда
ДатаОплатыДолга = тбДолгиКред.КредДокумент.ДатаОплаты;
Если ПустоеЗначение(ДатаОплатыДолга)=1 Тогда
ДатаОплатыДолга = тбДолгиКред.КредДокумент.ДатаДок;
КонецЕсли;
Иначе
ДатаОплатыДолга = тбДолгиКред.КредДокумент.ДатаДок + Контрагент.Глубина.Получить(тбДолгиКред.КредДокумент.ДатаДок);
КонецЕсли;

Если ДатаДок > ДатаОплатыДолга Тогда
ПросроченныйДолг = ПросроченныйДолг + тбДолгиКред.ДолгОсн;
Если Просрочено<(ДатаДок-ДатаОплатыДолга) Тогда
Просрочено = ДатаДок-ДатаОплатыДолга;
КонецЕсли;
КонецЕсли;

КонецЦикла;

ДолгКонтрагента = ДолгКонтрагента + глПересчет(Итог("СуммаСНДС"),Валюта,ДатаДок,Контрагент.ВалютаКредита,ДатаДок,);
СуммаКредита = Контрагент.СуммаКредита.Получить(ДатаДок);
глКомментарий("Долг контрагента составляет "+глФРМ(ДолгКонтрагента,Контрагент.ВалютаКредита,1)+", сумма кредита "+ глФРМ(СуммаКредита,Контрагент.ВалютаКредита,1) +".",3);
Если ПустоеЗначение(СуммаКредита) = 0 Тогда
Если ДолгКонтрагента > СуммаКредита Тогда
глНеПроводить(Контекст,Шаблон("Сумма накладной вместе с текущим долгом клиента ([глФРМ(ДолгКонтрагента,Контрагент.ВалютаКредита,1)]) превышает сумму кредита ([глФРМ(СуммаКредита,Контрагент.ВалютаКредита,1)]). "));
Возврат;
КонецЕсли;
КонецЕсли;

Если Просрочено>0 Тогда
глНеПроводить(Контекст,Шаблон("Просрочена оплата [глФРМ(ПросроченныйДолг,ВалютаДолга,1)] на [Просрочено] дней."));
Возврат;
КонецЕсли;
глКомментарий("Отпуск товаров в кредит разрешен",3);
КонецЕсли;

Можно ли так сделать?

Автор: Zaval 14.05.10, 13:38

Цитата(Vlad23 @ 14.05.10, 11:40) *
Т_РасходнаяНакладная

У Вас не ТиС, а комплексная, мои советы могли привести к плачевным результатам(((
Добавьте в спр Пользователи рекв РазрешитьПревышениеКредита - число, длина 1, точность 0. неотрицательный. На форму поместите Флажок. Избранному поставьте галочку.
Если ДолгКонтрагента > СуммаКредита Тогда
      глНеПроводить(Контекст,Шаблон("Сумма накладной вместе с текущим долгом клиента ([глФРМ(ДолгКонтрагента,Контрагент.ВалютаКредита,1)])   превышает сумму кредита ([глФРМ(СуммаКредита,Контрагент.ВалютаКредита,1)]). "));
      Возврат;
КонецЕсли;


Вот этот фрагмент замените таким:
Попытка
    РазрешитьПроведениеСПревышением = ?(глПользователь.РазрешитьПревышениеКредита=1, 1, 0);
Исключение
    РазрешитьПроведениеСПревышением = 0;
КонецПопытки;
Если (ДолгКонтрагента > СуммаКредита) И (РазрешитьПроведениеСПревышением = 0) Тогда
        глНеПроводить(Контекст,Шаблон("Сумма накладной вместе с текущим долгом клиента ([глФРМ(ДолгКонтрагента,Контрагент.ВалютаКредита,1)]) превышает сумму кредита ([глФРМ(СуммаКредита,Контрагент.ВалютаКредита,1)]). "));
        Возврат;
КонецЕсли;


*глПользователь - переменная глобМодуля, заполняется в процедуре ПриНачалеРаботыСистемы

Автор: Vlad23 14.05.10, 14:07

Цитата(Zaval @ 14.05.10, 15:38) *
У Вас не ТиС, а комплексная, мои советы могли привести к плачевным результатам(((
Добавьте в спр Пользователи рекв РазрешитьПревышениеКредита - число, длина 1, точность 0. неотрицательный. На форму поместите Флажок. Избранному поставьте галочку.
Если ДолгКонтрагента > СуммаКредита Тогда
      глНеПроводить(Контекст,Шаблон("Сумма накладной вместе с текущим долгом клиента ([глФРМ(ДолгКонтрагента,Контрагент.ВалютаКредита,1)])   превышает сумму кредита ([глФРМ(СуммаКредита,Контрагент.ВалютаКредита,1)]). "));
      Возврат;
КонецЕсли;


Вот этот фрагмент замените таким:
Попытка
    РазрешитьПроведениеСПревышением = ?(глПользователь.РазрешитьПревышениеКредита=1, 1, 0);
Исключение
    РазрешитьПроведениеСПревышением = 0;
КонецПопытки;
Если (ДолгКонтрагента > СуммаКредита) И (РазрешитьПроведениеСПревышением = 0) Тогда
        глНеПроводить(Контекст,Шаблон("Сумма накладной вместе с текущим долгом клиента ([глФРМ(ДолгКонтрагента,Контрагент.ВалютаКредита,1)]) превышает сумму кредита ([глФРМ(СуммаКредита,Контрагент.ВалютаКредита,1)]). "));
        Возврат;
КонецЕсли;


*глПользователь - переменная глобМодуля, заполняется в процедуре ПриНачалеРаботыСистемы


Спасибо!
Какие Ваши советы могли привести к непоправимым результатам? - я только задал константу РазрешитьПревышениеКредита в "НЕТ" и все заработало smile.gif

Автор: Vlad23 18.05.10, 8:03

Еще маленький вопрос по глубине кредита - что она собой являет? К примеру дебиторская задолженость контрагента состовляет 1000 грн., я устанавливаю сумму кредита в 2000 грн. Кредит уже возник или он откроется при проведении первого документа из оставшейся тысячи? Если под глубиной кредита считать количество дней, на который он выдается, то что является событием его открытия и что будет по истечению срока?

Автор: Zaval 18.05.10, 9:27

Тут же все написано:

Цитата(Vlad23 @ 14.05.10, 11:40) *
 ДатаОплатыДолга = тбДолгиКред.КредДокумент.ДатаДок + Контрагент.Глубина.Получить(тбДолгиКред.КредДокумент.ДатаДок);
                                ......
          Если ДатаДок > ДатаОплатыДолга Тогда
                 ПросроченныйДолг = ПросроченныйДолг + тбДолгиКред.ДолгОсн;
                 Если Просрочено<(ДатаДок-ДатаОплатыДолга) Тогда
                       Просрочено = ДатаДок-ДатаОплатыДолга;
                 КонецЕсли;
          КонецЕсли;


Дата оплаты долга по креддокументу(документ возникновения задолженности) = дата креддокумента + гллубина кредита на ту же дату.
Просроченные долги суммируются и определяется макс просрочка в днях.

Автор: Vlad23 19.05.10, 13:47

Цитата(Zaval @ 18.05.10, 11:27) *
Тут же все написано:



Дата оплаты долга по креддокументу(документ возникновения задолженности) = дата креддокумента + гллубина кредита на ту же дату.
Просроченные долги суммируются и определяется макс просрочка в днях.


Что-то я немного запутался ...
Допустим Сумма кредита составляет 2000 грн., глубина 10 дней.
Отпущен товар в кредит на 1000 грн. Что будет через 10 дней? Я не смогу взять еще 1000? Влияет ли дата оплаты долга на проведение документа - судя из приведенного выше фрагмента кода нет?

Автор: Zaval 19.05.10, 14:55

Через 10 дней отгрузки будут блокироваться независимо от суммы.
На 11 день после первой неоплаченной отгрузки Просрочено станет 1 и позовет злого и страшного глНеПроводить smile.gif
Или так
Просрочка оплаты отгрузки и превышение суммы кредита контролируются независимо друг от друга.
Текущая отгрузка блокируется любым из этих обстоятельств.
Режим контроля отсрочки по отдельной РН может быть "смягчен": для этого нужно заполнить в ней рекв ДатаОплаты значением, превышающим ДатаДок+ГлубинаКредита.
Чтобы делать это задним числом без ущерба для системы - нужно правильно настроить права уполномоченного пользователя.
*При избыточных правах пользователей в этом может быть лазейка для злоупотреблений.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua