БланкСШаблоном "Отчет по проведению капитального ремонта за счет средств федерального бюджета";


-- Переменные бланка

ГГ: Ц = [Год(Сегодня)];
НаДату: Д = [Сегодня];
Учр: С;
КБК: С;
НачальникФЭО: С;
ДолжностьИсп: С;
Исполнитель: С;
Точн: Ц = [3];  -- округлять и выводить до

перем Объекты: Ц;
перем ПП[]: Ц;
перем НаимОбъекта[]: С;
перем МестоОбъекта[]: С;
перем ПотребВсего[];
перем Доведено[];
перем ДатаДог[]: Д;
перем СуммаДог[];
перем Антитеррор[];
перем ПожБезопасн[];
перем ЭнергЭффект[];
перем Энергоснаб[];
перем Прочее[];
перем Всего[] = Антитеррор[$] + ПожБезопасн[$] + ЭнергЭффект[$] + Энергоснаб[$] + Прочее[$];
перем Приложение[]: С;
перем Итог[]: Л;
перем Годы[]: С;

перем ПотребВсего_;
перем Доведено_;
перем СуммаДог_;
перем Антитеррор_;
перем ПожБезопасн_;
перем ЭнергЭффект_;
перем Энергоснаб_;
перем Прочее_;
перем Всего_ = Антитеррор_ + ПожБезопасн_ + ЭнергЭффект_ + Энергоснаб_ + Прочее_;

-- Объекты бланка

секцОбъекты: Секция;
секцИтоги: Секция;


-- Процедуры и функции

Проц ЗадатьТочность;
  перем стлб, стлбВсего, клТип: ц;
  стлбВсего = КакЦелое(секцОбъекты.КоличествоСтб);
  для стлб = 1 .. стлбВсего цикл
    клТип = КакЦелое(секцОбъекты.Клетка(1, стлб, КлеткаТипПоля, ""));
    если клТип = ктпЧисловоеПоле:
      секцОбъекты.Клетка(1, стлб, КлеткаФормат, "0." + Повтор('0', Точн) + ";;-");
    илсе;
  лкиц;
  стлбВсего = КакЦелое(секцИтоги.КоличествоСтб);
  для стлб = 1 .. стлбВсего цикл
    клТип = КакЦелое(секцИтоги.Клетка(1, стлб, КлеткаТипПоля, ""));
    если клТип = ктпЧисловоеПоле:
      секцИтоги.Клетка(1, стлб, КлеткаФормат, "0." + Повтор('0', Точн) + ";;-");
    илсе;
  лкиц;
цорп;

Проц ОчисткаИтогов;
  ОчиститьПеременную(ПотребВсего_);
  ОчиститьПеременную(Доведено_);
  ОчиститьПеременную(СуммаДог_);
  ОчиститьПеременную(Всего_);
  ОчиститьПеременную(Антитеррор_);
  ОчиститьПеременную(ПожБезопасн_);
  ОчиститьПеременную(ЭнергЭффект_);
  ОчиститьПеременную(Энергоснаб_);
  ОчиститьПеременную(Прочее_);
цорп;

Функ Очистка: Л;
  если Объекты > 0 и не (Объекты = 1 и НаимОбъекта[1] = ""):
    если ВопрДаОтказ("Данные отчета будут очищены!") = кмдОтказ:
      ^ложь; 
    илсе;
  илсе;
  ОчиститьПеременную(ПП);
  ОчиститьПеременную(НаимОбъекта);
  ОчиститьПеременную(МестоОбъекта);
  ОчиститьПеременную(ПотребВсего);
  ОчиститьПеременную(Доведено);
  ОчиститьПеременную(ДатаДог);
  ОчиститьПеременную(СуммаДог);
  ОчиститьПеременную(Антитеррор);
  ОчиститьПеременную(ПожБезопасн);
  ОчиститьПеременную(ЭнергЭффект);
  ОчиститьПеременную(Энергоснаб);
  ОчиститьПеременную(Прочее);
  ОчиститьПеременную(Всего);
  ОчиститьПеременную(Приложение);
  ОчиститьПеременную(Итог);
  ОчиститьПеременную(Объекты);
  ОчисткаИтогов;
  ^истина;
кнуф;

Функ ОкрТ(Знач: Ч): Ч;
  ^Окр(Знач, Точн);
кнуф;

Проц РасчетИтогов;
  перем инд: ц;
  ОчисткаИтогов;
  для инд = 1 .. Объекты цикл
    если Итог[инд]:
      ПотребВсего_ = ПотребВсего_ + ПотребВсего[инд];
      Доведено_ = Доведено_ + Доведено[инд];
      СуммаДог_ = СуммаДог_ + СуммаДог[инд];
      Прочее_ = Прочее_ + Прочее[инд];
      Антитеррор_ = Антитеррор_ + Антитеррор[инд];
      ПожБезопасн_ = ПожБезопасн_ + ПожБезопасн[инд];
      ЭнергЭффект_ = ЭнергЭффект_ + ЭнергЭффект[инд];
      Энергоснаб_ = Энергоснаб_ + Энергоснаб[инд];
    илсе;
  лкиц;
цорп;

Проц Расчет;
  перем призн, признДог, кбк17_, косгу_: с;
  перем ДН, ДК: д;
  перем обДог: ч;
  перем запДог: запись;
  перем ном: ц;

  если не Очистка: выход; илсе;

  Обработать(False);
  RefreshAna;

  для признака призн = "КВ.*" цикл
    подсказка("Расчет по " + призн + "...");
    ДН = Дат(1, 1, ГГ);
    ДК = Если(ГГ = Год(НаДату): Дат(1, 1, ГГ + 1), НаДату);
    если КБК = "":
      кбк17_ = "*";
      косгу_ = "???";
    иначе
      кбк17_ = Раб.Бюджет2005.ВзятьКодКБК(КБК, "ФКР", "ВР", истина);
      косгу_ = Раб.Бюджет2005.ВзятьКодКБК(КБК, "ФКР", "КОСГУ", ложь);
    илсе;
    -- Вывод объектов кап.строительства
    ном = ном + 1;
    ВставитьРамку(Объекты, Объекты + 1);
    НаимОбъекта[Объекты] = Наим_П(призн);
    Доведено[Объекты] = ОкрТ(-Оборот("-" + кбк17_ + ".1.501.13." + косгу_ + "{" + призн + "}", ДН, ДК) / ОкрТ(1000));
    СуммаДог[Объекты] = ОкрТ(Оборот("+" + кбк17_ + ".1.501.13." + косгу_ + "/" + кбк17_ + ".1.502.11." + косгу_ +  "{" + призн + "}", ДН, ДК) / ОкрТ(1000));
    Прочее[Объекты] = ОкрТ(-Оборот(кбк17_ + ".1.304.05." + косгу_ + "{" + призн + "}", ДН, ДК) / ОкрТ(1000));
    Итог[Объекты] = истина;
    ПП[Объекты] = ном;
    -- Вывод строк договоров
    для признака признДог = "ДОГОВОР." + Стр(ГГ) + ".*" цикл
      обДог = Оборот("+" + кбк17_ + ".1.501.13." + косгу_ + "/" + кбк17_ + ".1.502.11." + косгу_ +  "{" + признДог + "&" + призн + "}", ДН, ДК);
      если обДог <> 0:
        запДог = ПризнакВЗапись(признДог, ложь);
        if SignCardFile(признДог, False) = "РПО_ДОГОВОР":
           запДог = запДог;
        elsif SignCardFile(признДог, False) = "РПО_ДОГОВОР_ПРИЗНАК":
           запДог = GetCardFieldR("РПО_ДОГОВОР_ПРИЗНАК", запДог, "ДОГОВОР");
        else
           запДог = nil;
        fi;
        если запДог <> Пусто:
          ВставитьРамку(Объекты, Объекты + 1);
          ДатаДог[Объекты] = ВзятьКартПолеД("РПО_ДОГОВОР", запДог, "ДАТАРЕГ");
          СуммаДог[Объекты] = ОкрТ(ВзятьКартПолеЧ("РПО_ДОГОВОР", запДог, "СУМДОК") / ОкрТ(1000));
          Прочее[Объекты] = ОкрТ(-Оборот(кбк17_ + ".1.304.05." + косгу_ + "{" + признДог + ".*" + "&" + призн + "}", ДН, ДК) / ОкрТ(1000));
          НаимОбъекта[Объекты] = "   - " + ВзятьКартПолеС("РПО_ДОГОВОР", запДог, "КОНТР.КОРИМЯ");
          --МестоОбъекта[Объекты] = "";
        илсе;
      илсе;
    лкиц;
  лкиц;
  РасчетИтогов;
цорп;


-- Обработчики событий

Функ Учр_ПриВходе(Поле: С; Итер: Ц): Л;
  перем Зап: Запись;
  Зап = ОткрытьКартотеку("Контрагент", "Наше");
  если не Зап = пусто:
    Учр = ВзятьКартПолеС("Контрагент", Зап, "КорИмя");
  илсе;
  ^ложь;
кнуф;

Функ КБК_ПриВходе(Поле: С; Итер: Ц): Л;
  КБК = Раб.КБК.ВыбратьМаскуКБК("ФКР", Раб.Бюджет2005.МаскаСчетаФКР, КБК, истина);
  ^ложь;
кнуф;

Функ ГГ_ПриВходе(Поле: С; Итер: Ц): Л;
  перем г, г1, г2, выбор, инд: ц;
  ОчиститьПеременную(Годы);
  г1 = Год(Сегодня) - 3;
  г2 = Год(Сегодня);
  инд = 1;
  для г = г1 .. г2 цикл
    Годы[инд] = Стр(г);
    инд = инд + 1;
  лкиц;
  выбор =Альтернатива("Выбор года", Годы, 25, ПоискВМассиве(Годы, Стр(ГГ)), 12);
  если выбор > 0:
    ГГ = Цел(Годы[выбор]);
  илсе;
  ^ложь;
кнуф;

Функ Сотрудник_ПриОбзоре(Сек: С; Стр: Ц; Столб: Ц; Тек: С): С;
  перем зап: запись;
  перем сотр, должнисп: с;
  Шаблон.СкрытьРедактор(ложь);
  зап = ОткрытьКартотеку('Сотрудники');
  если зап = пусто: ^Тек; илсе;
  сотр = ВзятьКартПолеС('Сотрудники', зап, 'ФАМИЛИЯ') + ' ' + ВзятьКартПолеС('Сотрудники', зап, 'ИНИЦИАЛЫ');
  должнисп = ВзятьКартПолеС('Сотрудники', зап, 'ДОЛЖНОСТЬ.ДОЛЖ');
  если КакСтрока(Шаблон.Поле) = 'НачальникФЭО': НачальникФЭО = сотр;
      |КакСтрока(Шаблон.Поле) = 'Исполнитель': Исполнитель = сотр; ДолжностьИсп = должнисп;
  илсе;
  ^'';
кнуф;

Проц Точн_ПриВыходе(Поле: С; Итер: Ц);
  ЗадатьТочность;
цорп;

Проц кнЗакрыть_ПриНажатии(Отправитель: С);
  Закрыть;
цорп;

Проц кнРасчет_ПриНажатии(Отправитель: С);
  Расчет;
  Сообщение("Расчет завершен!");
цорп;

Проц кнРасчетИтогов_ПриНажатии(Отправитель: С);
  РасчетИтогов;
  Сообщение("Расчет итогов завершен!");
цорп;

Проц кнОчистка_ПриНажатии(Отправитель: С);
  если Очистка:
    Сообщение("Очистка завершена!");
  илсе;
цорп;

Проц ПриОткрытии(Создать: Л);
  ЗадатьТочность;
цорп;



Конец
