<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="uk">
	<id>https:///index.php?action=history&amp;feed=atom&amp;title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0%D0%BC%3A_%D0%B7%D0%B0%D0%BC%D0%BE%D1%80%D0%BE%D0%B7%D0%BA%D0%B0_%D1%83%D1%81%D0%BB%D1%83%D0%B3</id>
	<title>Разработчикам: заморозка услуг - Історія редагувань</title>
	<link rel="self" type="application/atom+xml" href="https:///index.php?action=history&amp;feed=atom&amp;title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0%D0%BC%3A_%D0%B7%D0%B0%D0%BC%D0%BE%D1%80%D0%BE%D0%B7%D0%BA%D0%B0_%D1%83%D1%81%D0%BB%D1%83%D0%B3"/>
	<link rel="alternate" type="text/html" href=""/>
	<updated>2026-05-05T12:30:11Z</updated>
	<subtitle>Історія редагувань цієї сторінки в вікі</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id></id>
		<title>Sv: /* Параметр &quot;Не уходить в минус&quot; в самой услуге */</title>
		<link rel="alternate" type="text/html" href=""/>
		<updated>2024-12-26T15:04:17Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Параметр &amp;quot;Не уходить в минус&amp;quot; в самой услуге&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Нова сторінка&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=== Параметр &amp;quot;Не уходить в минус&amp;quot; в самой услуге ===&lt;br /&gt;
&lt;br /&gt;
В услуге в таблице services в поле param вставляется фрагмент: 'wait_pos_balance' =&amp;gt; '1'. Когда эта конкретная услуга подключается клиенту, то проверяется:&lt;br /&gt;
$service_new-&amp;gt;{param}{wait_pos_balance} &amp;amp;&amp;amp; $user-&amp;gt;{balance} &amp;lt; $service_new-&amp;gt;{approximate_price}&lt;br /&gt;
и тогда в этой подключаемой услуге устанавливается нулевая стоимость и тег wait_pos_balance. Длительность услуги 1 сек - т.е. как можно скорейшее завершение.&lt;br /&gt;
&lt;br /&gt;
В этом варианте заморозки wait_pos_balance вроде как не проверяется модулем ядра services - он просто постоянно пытается завершить эту услугу. А если денег недостаточно и в услуге уже есть тег wait_pos_balance, то ее завершение блокируется (die в самой услуге). Как только денег становится достаточно - замораживаемая услуга таки завершается и подключается новая на полную стоимость.&lt;br /&gt;
&lt;br /&gt;
* ajUserSrvInfo.pl кода в тегах услуги видит wait_pos_balance, пишет: Будет активирована когда будет достаточно финансов&lt;br /&gt;
* ajUserSrvList.pl в поле &amp;quot;стоимость&amp;quot; пишет &amp;quot;Заморожена&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Параметр модуля ядра services ===&lt;br /&gt;
Настройки - Ядро - Услуги - Если после завершения услуги баланс станет отрицательным, то все услуги отключаются...&lt;br /&gt;
&lt;br /&gt;
$cfg::k_services_wait_pos_balance&lt;br /&gt;
&lt;br /&gt;
Модуль ядра services с основным периодом (5 сек) смотрит у кого отрицательный баланс (вернее, ниже границы отключения) с подключенными услугами, имеющими стоимость. В этом случае проходится по всем услугам клиента и завершает их. Используеьтся обычный механизм досрочного завершения, т.е. у каждой услуги меняется сумма списания пропорционально отработанному времени. Также в pays создается событие категории 208: Приостановка услуг (недостаточно финансов). В поле reason одним из параметров устанавливается сумма списаний по всем завершаемым услугам, а другим список id услуг.&lt;br /&gt;
&lt;br /&gt;
С периодом 61 сек этот же модуль ядра services смотрит у кого в pays есть запись с категорией 208. Если текущий баланс больше суммы списания замороженных услуг (хранится в записи с категорией 208) - категория меняется на 209 (Возобновление услуг (появились финансы)) и устанавливаются все замороженные услуги.&lt;br /&gt;
&lt;br /&gt;
Какие тут недостатки: для проверки достаточности финансов, стоимость подключаемых услуг не расчитывается, а берется по их последнему списанию. Т.е. если изменилась их стоимость или скидки у клиента или иные параметры - может так оказаться, что суммы не будет достаточно для подключения всех услуг. Либо же может возникнуть ситуация, что финансов уже достаточно, но модуль ядра &amp;quot;не видит&amp;quot; этого т.к. не знает про уменьшение стоимости услуг.&lt;br /&gt;
&lt;br /&gt;
=== Параметр модуля ядра balance ===&lt;br /&gt;
Настройки - Ядро - Балансы - Удалять все подключенные услуги при отрицательном балансе&lt;br /&gt;
&lt;br /&gt;
$cfg::k_balance_remove_service&lt;br /&gt;
&lt;br /&gt;
Периодически (настраивается, по умолчанию раз в 10 секунд) для всех клиентов, у которых баланс меньше границы отключения, стоит галка &amp;quot;Отключать ли по балансу&amp;quot; и состояние &amp;quot;не заблокирован&amp;quot; (!), у всех подключенных услуг устанавливается тег end_now. Также создается событие с категорией 423 (Блокировка по задолженности) - чисто информационное.&lt;br /&gt;
&lt;br /&gt;
Модуль ядра services в самом ближайшем времени завершит все услуги с тегом end_now&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [[Честные услуги]] ===&lt;/div&gt;</summary>
		<author><name>Sv</name></author>
	</entry>
</feed>