// Нэкосан 30.12.04 старт
// глобальная функция для проведения новогоднего отжыга:
// комплектует команду для отжыга, устанавливает ответственных,
// обеспечивает необходимые ресурсы и проводит анализ
// отжыга методом устного опроса участникофф
Функция НавагоднийОтжыг() Экспорт;
Перем Запрос, ТекстЗапроса;
Перем Касса;
Перем Хата, Жратва, Трава, Бухло;
Запрос = СоздатьОбъект("Запрос");
КомандаДляОтжыга= СоздатьОбъект("СписокЗначений");
Пелотки= СоздатьОбъект("СписокЗначений");
Падонки= СоздатьОбъект("СписокЗначений");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|фл = Справочник.ФизЛица.ТекущийЭлемент;
|сост = Справочник.ФизЛица.СостояниеФизЛица;
|Условие (сост = Перечисление.СостоянияФизЛица.Готофф);
|ОбщаяКасса= Сумма(Окр(фл.Заначка, 2));
|Группировка фл упорядочить по фл.ФИО без групп;
|"//}}ЗАПРОС
;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Сообщить("Запрос по отжыгу не выполнен!");
Возврат;
КонецЕсли;
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("КомандаДляОтжыга");
Таб.ВывестиСекцию("Заголовок");
Состояние("Заполнение выходной таблицы...");
// обнуление исходных значений
Касса= 0;
Хата= ПустоеЗначение("Справочник.ФизЛица");
Жратва= ПустоеЗначение("Справочник.ФизЛица");
Трава= ПустоеЗначение("Справочник.ФизЛица");
Бухло= ПустоеЗначение("Справочник.ФизЛица");
Пока Запрос.Группировка(1) = 1 Цикл
Если Запрос.фл.ЭтоОн()= 1 Тогда
КомандаДляОтжыга.ДобавитьЗначение(Запрос.фл);
Падонки.ДобавитьЗначение(Запрос.фл);
Таб.ВывестиСекцию("падонак");
ИначеЕсли Запрос.фл.ЭтоОна()= 1 Тогда
КомандаДляОтжыга.ДобавитьЗначение(Запрос.фл);
Пелотки.ДобавитьЗначение(Запрос.фл);
Таб.ВывестиСекцию("пелотка");
Иначе
Если СпрКЛ.НайтиЭлемент(Запрос.фл)= 1 Тогда
Пидор= СпрКЛ.ТекущийЭлемент();
// непосредственное удаление
Пидор.Удалить(1);
Иначе
Предупреждение("АХТУНГ! Найден пидор:"+ Запрос.кл);
КонецЕсли;
Продолжить;
КонецЕсли;
КонецЦикла;
// печать списка участников
Таб.ТолькоПросмотр(1);
Таб.Показать();
Таб.Напечатать(0);
// распределение центров ответственности
Касса= Запрос.ОбщаяКасса;
Хата= УстановитьОтветствЗаХату(КомандаДляОтжыга);
Жратва= УстановитьОтветствЗаЖратву(КомандаДляОтжыга);
Трава= УстановитьОтветствЗаТраву(КомандаДляОтжыга);
Бухло= УстановитьОтветствЗаБухло(КомандаДляОтжыга);
Если ((ПустоеЗначение(Хата)= 1) или
(ПустоеЗначение(Жратва)= 1) или
(ПустоеЗначение(Бухло)= 1)) Тогда
НазначитьОтветственных(Хата, Жратва, Трава, Бухло, КомандаДляОтжыга);
КонецЕсли;
Для к= 1 По СписокТочек.РазмерСписка() Цикл
ВернутьНеобходимыйРесурс(Хата, Итого);
ВернутьНеобходимыйРесурс(Жратва, Итого);
ВернутьНеобходимыйРесурс(Трава, Итого);
ВернутьНеобходимыйРесурс(Бухло, Итого);
Если Касса <= 0 Тогда
Предупреждение("Бабло на исходе!!!");
Прервать;
КонецЕсли;
КонецЦикла;
Попытка
// начинаем...
Отжыг= СоздатьОбъект("Справочник.Отжыги");
Отжыг.Новый();
Отжыг.Код= 2005;
Отжыг.Наименование= "Новый год нах!";
Отжыг.Записать();
Сообщить("ОТЖЫГ НАЧАЛСЯ", "i");
ИспользоватьРесурс(Отжыг, КомандаДляОтжыга, Хата);
ИспользоватьРесурс(Отжыг, КомандаДляОтжыга, Жратва);
ИспользоватьРесурс(Отжыг, КомандаДляОтжыга, Трава);
ИспользоватьРесурс(Отжыг, КомандаДляОтжыга, Бухло);
Ебстись(Пелотки, Падонки);
ХорошоЛи= 0;
Для к= 1 по КомандаДляОтжыга.РазмерСписка() Цикл
УчастникОтжыга= КомандаДляОтжыга.ПолучитьЗначение(к);
Если УчастникОтжыга.Выбран()= 1 Тогда
ХорошоЛи= ХорошоЛи + ПокаЗаебись(УчастникОтжыга);
КонецЕсли;
КонецЦикла;
Пока ХорошоЛи < КомандаДляОтжыга.РазмерСписка() Цикл
Если Касса= 0 Тогда
Касса= НайтиБабло(КомандаДляОтжыга);
КонецЕсли;
Для к= 1 По СписокТочек.РазмерСписка() Цикл
ВернутьНеобходимыйРесурс(Хата, Итого);
ВернутьНеобходимыйРесурс(Жратва, Итого);
ВернутьНеобходимыйРесурс(Трава, Итого);
ВернутьНеобходимыйРесурс(Бухло, Итого);
Если Касса <= 0 Тогда
Предупреждение("Бабло на исходе!!!");
Прервать;
КонецЕсли;
КонецЦикла;
Сообщить("ОТЖЫГ ПРАДАЛЖАЕЦЦА!!!", "i");
ИспользоватьРесурс(Отжыг, КомандаДляОтжыга, Хата);
ИспользоватьРесурс(Отжыг, КомандаДляОтжыга, Жратва);
ИспользоватьРесурс(Отжыг, КомандаДляОтжыга, Трава);
ИспользоватьРесурс(Отжыг, КомандаДляОтжыга, Бухло);
Ебстись(Пелотки, Падонки);
КонецЦикла;
Исключение
// нихуя не может быть исключений!
КонецПопытки;
АктивацыяУчастников(КомандаДляОтжыга);
Подсчёт_и_ИдентификацыяУчастников(КомандаДляОтжыга);
ОпохмелУчастников(КомандаДляОтжыга);
ПовторнаяАктивацыяУчастников(КомандаДляОтжыга);
// падводим итоги
Результат= 0;
Для к= 1 по КомандаДляОтжыга.РазмерСписка() Цикл
УчастникОтжыга= КомандаДляОтжыга.ПолучитьЗначение(к);
Если УчастникОтжыга.Выбран()= 1 Тогда
Результат= Результат + БылоЗаебись(УчастникОтжыга);
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
// Нэкосан 30.12.04 финиш