Пользователь

Добро пожаловать,

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

Меню сайта




Ваше мнение
Как вы оцените наш сайт?

Замечательный
Хороший
Обычный
Плохой
Отвратительный


Результаты
Другие опросы

Всего голосов: 846
Комментарии: 10


Наши партнеры



Статистика




Programming books  Download software  Documentation  Scripts  Content Managment Systems(CMS)  Templates  Icon Sets  Articles  Contacts  Voting  Site Search




Расходы на производство (счета 20, 25, 26)


Отчет по расходам на производство в разрезе статей затрат и подразделений.
Отчет формирует сводную информацию по счетам 20, 25, 26 в разрезе статей затрат и подразделений. Статьи затрат формируются на основании данных по справочникам "Ст.затр. на производ-во", "Общехоз-е затр.", "Обще-производ-е затр".
Позволяет гибко настроить порядок колонок ("подразделений").
Отчет может быть сформирован по группам подразделений, с расшифровкой содержимого и детализацией по конкретному счету затрат и виду деятельности.

Код


//*****************************Контрольная область****************************

перем //необходимы т.к расчет и печать выполняется раздельно.
пар1,пар2,пар3,пар4,пар5,пар6,пар7,пар8,пар9,пар10,флРасчета,
Период1,Период2,сп1,сп2;

//возвращает 1 при совпадении списка и пометок.
//функции аналогичны, но их нельзя объединить, т.к используются пометки списка
//расположенного на форме
функция ПроверкаСпискаСпРазделы();
флаг = 1; //считаем что совпадение
для инд=1 по СпРазделы.РазмерСписка() цикл
сп1.Выбратьстроки();
пока сп1.ПолучитьСтроку()=1 цикл
если (спРазделы.ПолучитьЗначение(инд) = сп1.Данные) тогда
если спРазделы.Пометка(инд) <> сп1.Пометка тогда
флаг=0;
конецесли;
прервать;
конецесли;
конеццикла;
конеццикла;
возврат флаг;
конецфункции

функция ПроверкаСпискаСпПодр();
флаг = 1; //считаем что совпадение
для инд=1 по спПодр.РазмерСписка() цикл
сп2.Выбратьстроки();
пока сп2.ПолучитьСтроку()=1 цикл
если (спПодр.ПолучитьЗначение(инд) = сп2.Данные) тогда
если спПодр.Пометка(инд) <> сп2.Пометка тогда
флаг=0;
конецесли;
прервать;
конецесли;
конеццикла;
конеццикла;
возврат флаг;
конецфункции

функция ПолучитьСнимокСписка(список) //список к-й нужно скопировать в таблицу
ТЗ = создатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Данные");
ТЗ.НоваяКолонка("Пометка");
для инд=1 по список.РазмерСписка() цикл
ТЗ.НоваяСтрока();
ТЗ.Данные = список.ПолучитьЗначение(инд);
ТЗ.Пометка= список.Пометка(инд);
конеццикла;
возврат ТЗ;
конецфункции

//*****************************Интерфейсная область****************************

процедура СортироватьСписок(флаг)
если (спПодрПеч.РазмерСписка()>0) и (ПустоеЗначение(спПодрПеч.ТекущаяСтрока())=0) тогда
спПодрПеч.СдвинутьЗначение(флаг,спПодрПеч.ТекущаяСтрока());
конецесли;
конецпроцедуры

процедура ПриВыбореЗакладки(номерЗакл,значЗакл)
если номерЗакл = 1 тогда
Форма.ИспользоватьСлой("Основной");
иначе
Форма.ИспользоватьСлой("Дополнительный");
конецесли;
конецпроцедуры

процедура ПроверкаСписков(список)
если СпРазделы.РазмерСписка()<1 тогда
список.УдалитьВсе();
конецесли;
конецпроцедуры

процедура УдалениеЕдиничныхЗначений(список)
флРасчета=0;
если список.РазмерСписка()<>0 тогда
список.УдалитьЗначение(список.ТекущаяСтрока());
конецесли;
ПроверкаСписков(СпПодр);
ПроверкаСписков(СпВидДеят);
ПроверкаСписков(СпПодрПеч);
конецпроцедуры

процедура УдалитьВсе(список)
флРасчета=0;
список.УдалитьВсе();
ПроверкаСписков(СпПодр);
ПроверкаСписков(СпВидДеят);
ПроверкаСписков(СпПодрПеч);
конецпроцедуры


Процедура ОбработкаПодбора(ВыбранноеЗначение,Конт)
флаг = Конт.Форма.Параметр.флаг;
список = Конт.Форма.Параметр.список;
ВыбранныйЭлемент = ВыбранноеЗначение.ТекущийЭлемент();
э=0;
для инд = 1 по список.РазмерСписка() цикл
если список.получитьЗначение(инд).Родитель = ВыбранноеЗначение тогда
э=1;
конецесли;
конеццикла;
Если (список.НайтиЗначение(ВыбранныйЭлемент) =0)
и (список.НайтиЗначение(ВыбранныйЭлемент.Родитель)=0) и
(э=0) тогда
список.ДобавитьЗначение(ВыбранныйЭлемент);
Конецесли;
КонецПроцедуры

//флаг - 0 снять.
процедура ПометитьСписок(список,флаг)
флРасчета=0;
для инд =1 по список.РазмерСписка() цикл
Список.Пометка(инд,флаг);
конеццикла;
конецпроцедуры

Процедура РедактироватьОтбор(Спр,список,флаг)
флРасчета=0;
ТЗ = создатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Список");
ТЗ.НоваяКолонка("Флаг");
ТЗ.НоваяСтрока();
ТЗ.Список = список;
ТЗ.Флаг = флаг;
Конт = ТЗ;
ОткрытьПодбор(Спр,,Конт);
Конт.ВыборГруппы(флаг);
КонецПроцедуры

функция ЗагрузитьСписокПодр(список)
если СпРазделы.РазмерСписка()<0 тогда //не пустой
возврат 0;
конецесли;
для инд=1 по СпРазделы.РазмерСписка() цикл
сп = создатьОбъект("Справочник.Подразделения");
если СпРазделы.ПолучитьЗначение(инд).ЭтоГруппа()=1 тогда
сп.ИспользоватьРодителя(СпРазделы.ПолучитьЗначение(инд));
иначе
список.ДобавитьЗначение(СпРазделы.ПолучитьЗначение(инд));
конецесли;
сп.ВыбратьЭлементы();
пока сп.ПолучитьЭлемент()=1 цикл
если СпРазделы.ПолучитьЗначение(инд).ЭтоГруппа()=1 тогда
список.ДобавитьЗначение(сп.ТекущийЭлемент());
конецесли;
конеццикла;
конеццикла;
конецфункции

процедура ДобавитьОтбор(список)
перем значение;
флРасчета=0;
СпПодрОтбор= создатьОбъект("СписокЗначений");
ЗагрузитьСписокПодр(СпПодрОтбор);
если (СпПодрОтбор.ВыбратьЗначение(значение,
"Выборка разворачиваемых подразделений")= 1) и
(список.НайтиЗначение(значение)=0) тогда
список.ДобавитьЗначение(значение);
конецесли;
конецпроцедуры

//*****************************Расчетная область****************************

Процедура ПриОткрытии()
НачДата = НачМесяца(РабочаяДата());//НачалоПериодаБИ();
КонДата = КонМесяца(РабочаяДата());//КонецПериодаБИ();
КонецПроцедуры

//формирует ТабЗнач по указанному счету в разрезе 2-х субконто.
функция ФормированиеТЗ(ТЗ,Сч,субк1,субк2)
БИ = СоздатьОбъект("БухгалтерскиеИтоги");
БИ.ИспользоватьПланСчетов(ПланыСчетов.Основной);
БИ.ИспользоватьСубконто(субк1);
БИ.ИспользоватьСубконто(субк2);
БИ.ВыполнитьЗапрос(НачДата,КонДата,Сч,,,,,"С");
ТЗ.Очистить();
ТЗ.НоваяКолонка("СтЗатрат");
//ТЗ.НоваяКолонка("ГрСт");
ТЗ.НоваяКолонка("Подр");
//ТЗ.НоваяКолонка("ГрПодр");
ТЗ.НоваяКолонка("Счет");
ТЗ.НоваяКолонка("Сумма","Число",10,2);
БИ.ВыбратьСубконто(1);
Пока БИ.ПолучитьСубконто(1)=1 Цикл
БИ.ВыбратьСубконто(2);
Пока БИ.ПолучитьСубконто(2)=1 Цикл
//проверка на пустые поля (статей и подразделений,ДО) их не включаем
если (ПустоеЗначение(БИ.Субконто(1).Наименование)=1) или
(ПустоеЗначение(БИ.Субконто(2).Наименование)=1) или
(ПустоеЗначение(БИ.ДО(Сч))=1)тогда
продолжить;
конецесли;
//фильтр для исключения 2-х статей по жесткой привязке к названию
если (БИ.Субконто(1).Наименование="Общепроизводственные затраты") или
(БИ.Субконто(1).Наименование="Общехозяйственные затраты") тогда
продолжить;
конецесли;
//отберем выбранные группы
если (СпРазделы.НайтиЗначение(БИ.Субконто(2).Родитель) <> 0)
или (СпРазделы.НайтиЗначение(БИ.Субконто(2)) <> 0)
тогда
ТЗ.НоваяСтрока();
ТЗ.СтЗатрат =БИ.Субконто(1);
//ТЗ.ГрСт =БИ.Субконто(1).Родитель;
ТЗ.Подр =БИ.Субконто(2);
//ТЗ.ГрПодр =БИ.Субконто(2).Родитель;
ТЗ.Счет =Сч; //строка
ТЗ.Сумма =БИ.ДО(Сч);
конецесли;
КонецЦикла;
Конеццикла;
возврат ТЗ;
Конецфункции

функция ФормированиеТЗ20(ТЗ,Сч,субк1,субк2,субк3)
БИ = СоздатьОбъект("БухгалтерскиеИтоги");
БИ.ИспользоватьПланСчетов(ПланыСчетов.Основной);
БИ.ИспользоватьСубконто(субк1);
БИ.ИспользоватьСубконто(субк2);
БИ.ИспользоватьСубконто(субк3);
БИ.ВыполнитьЗапрос(НачДата,КонДата,Сч,,,,,"С");
ТЗ.Очистить();
ТЗ.НоваяКолонка("СтЗатрат");
//ТЗ.НоваяКолонка("ГрСт");
ТЗ.НоваяКолонка("Подр");
//ТЗ.НоваяКолонка("ГрПодр");
ТЗ.НоваяКолонка("Счет");
ТЗ.НоваяКолонка("ВидДеят");
ТЗ.НоваяКолонка("Сумма","Число",10,2);
БИ.ВыбратьСубконто(1);
Пока БИ.ПолучитьСубконто(1)=1 Цикл
БИ.ВыбратьСубконто(2);
Пока БИ.ПолучитьСубконто(2)=1 Цикл
БИ.ВыбратьСубконто(3);
Пока БИ.ПолучитьСубконто(3)=1 Цикл
//проверка на пустые поля (статей и подразделений,ДО) их не включаем
если (ПустоеЗначение(БИ.Субконто(1).Наименование)=1) или
(ПустоеЗначение(БИ.Субконто(2).Наименование)=1) или
(ПустоеЗначение(БИ.Субконто(3).Наименование)=1) или
(ПустоеЗначение(БИ.ДО(Сч))=1)тогда
продолжить;
конецесли;
//фильтр для исключения 2-х статей по жесткой привязке к названию
если (БИ.Субконто(1).Наименование="Общепроизводственные затраты") или
(БИ.Субконто(1).Наименование="Общехозяйственные затраты") тогда
продолжить;
конецесли;
//отберем выбранные группы
если (СпРазделы.НайтиЗначение(БИ.Субконто(2).Родитель) <> 0)
или (СпРазделы.НайтиЗначение(БИ.Субконто(2)) <> 0)
тогда
ТЗ.НоваяСтрока();
ТЗ.СтЗатрат =БИ.Субконто(1);
//ТЗ.ГрСт =БИ.Субконто(1).Родитель;
ТЗ.Подр =БИ.Субконто(2);
//ТЗ.ГрПодр =БИ.Субконто(2).Родитель;
ТЗ.Счет =Сч; //строка
ТЗ.Сумма =БИ.ДО(Сч);
инд = СпПодр.НайтиЗначение(БИ.Субконто(2));
если инд <> 0 тогда
если СпПодр.Пометка(инд) = 1 тогда
если (СпВидДеят.НайтиЗначение(БИ.Субконто(3))<>0) тогда
ТЗ.ВидДеят =БИ.Субконто(3);
иначе
ТЗ.ВидДеят ="";
конецесли;
иначе
ТЗ.ВидДеят ="";
конецесли;
иначе
ТЗ.ВидДеят ="";
конецесли;
конецесли;
Конеццикла;
КонецЦикла;
Конеццикла;
возврат ТЗ;
Конецфункции

процедура ДобавлениеТЗ(ТЗОбщ,ТЗ)
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
ТЗОбщ.НоваяСтрока();
ТЗОбщ.СтЗатрат =ТЗ.СтЗатрат;
//ТЗОбщ.ГрСт =ТЗ.ГрСт;
ТЗОбщ.Подр =ТЗ.Подр;
//ТЗОбщ.ГрПодр =ТЗ.ГрПодр;
ТЗОбщ.Счет =ТЗ.Счет;
ТЗОбщ.Сумма =ТЗ.Сумма;
конеццикла;
конецпроцедуры

//возвращает успешность получения данных - 1, 0-отсутствие данных
Функция ОбъединениеТабЗн(ТЗ,ТЗ20,ТЗ25,ТЗ26)
кол20 = ТЗ20.КоличествоСтрок();
кол25 = ТЗ25.КоличествоСтрок();
кол26 = ТЗ26.КоличествоСтрок();
если (кол20<1) и (кол25<1) и (кол26<1) тогда
возврат 0;
конецесли;
ТЗ.НоваяКолонка("СтЗатрат");
//ТЗ.НоваяКолонка("ГрСт");
ТЗ.НоваяКолонка("Подр");
//ТЗ.НоваяКолонка("ГрПодр");
ТЗ.НоваяКолонка("Счет");
ТЗ.НоваяКолонка("ВидДеят");
ТЗ.НоваяКолонка("Сумма","Число",10,2);
ТЗ.Загрузить(ТЗ20);
ДобавлениеТЗ(ТЗ,ТЗ25);
ДобавлениеТЗ(ТЗ,ТЗ26);
возврат 1;
Конецфункции

//обнуляет счета у строк таблицы (не требуется развертка по счетам)
процедура ГруппировкаПоСчИГруп(ТЗ)
ТЗ.НоваяКолонка("ФлагСвор");
ТЗ.ВыбратьСтроки();
пока ТЗ.ПолучитьСтроку() = 1 цикл
если СпПодр.РазмерСписка()>0 тогда
инд = СпПодр.НайтиЗначение(ТЗ.Подр);
если инд = 0 тогда
ТЗ.Счет = "";
конецесли;
иначе
ТЗ.Счет = "";
конецесли;
инд = СпРазделы.НайтиЗначение(ТЗ.Подр.Родитель);
если (инд<>0) тогда
если СпРазделы.Пометка(инд) =1 тогда
ТЗ.ФлагСвор = 1;
конецесли;
конецесли;
конеццикла;
конецпроцедуры

функция ОпределительСпискаГруппСтатей(ТЗ) //из ТЗОбщ
ТЗГруппСт=СоздатьОбъект("ТаблицаЗначений");
ТЗГруппСт.НоваяКолонка("Группа","строка"); //т.к Группы статей совпадают из разных спр-ов.
ТЗГруппСт.НоваяКолонка("Сумма","Число",10,2);
ТЗ.ВыбратьСтроки();
пока ТЗ.ПолучитьСтроку()=1 цикл
если ПустоеЗначение(ТЗ.СтЗатрат.Родитель)=1 тогда
продолжить; //статьи у к-х нет родителя
конецесли;
ТЗГруппСт.НоваяСтрока();
ТЗГруппСт.Группа=строка(ТЗ.СтЗатрат.Родитель);
ТЗГруппСт.Сумма=1;
конеццикла;
ТЗГруппСт.Свернуть("Группа","Сумма");
ТЗГруппСт.Сортировать("Группа+");
ТЗГруппСт.УдалитьКолонку("Сумма");
возврат ТЗГруппСт;
Конецфункции

функция ОпределительСпискаГруппПодр(); //из спРазделы
ТЗГруппПодр=СоздатьОбъект("ТаблицаЗначений");
ТЗГруппПодр.НоваяКолонка("Группа","строка");
ТЗГруппПодр.НоваяКолонка("Ссылка");
для инд=1 по спРазделы.РазмерСписка() цикл
если спРазделы.ПолучитьЗначение(инд).ЭтоГруппа()=0 тогда
продолжить;
конецесли;
ТЗГруппПодр.НоваяСтрока();
ТЗГруппПодр.Группа=строка(спРазделы.ПолучитьЗначение(инд));
ТЗГруппПодр.Ссылка=спРазделы.ПолучитьЗначение(инд);
конеццикла;
возврат ТЗГруппПодр;
конецфункции

//строит общую таблицу на основе ТЗОБщ
функция ПостроитьОбщуюТаблСт(ТЗОбщ,ТЗГруппСт)
ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("СтЗатрат");
ТЗ.НоваяКолонка("Подр");
//ТЗ.НоваяКолонка("ГрПодр");
//ТЗ.НоваяКолонка("Счет");
//ТЗ.НоваяКолонка("ФлагСвор");
//ТЗ.НоваяКолонка("ВидДеят");
ТЗ.НоваяКолонка("Сумма","Число",10,2);
ТЗГруппСт.ВыбратьСтроки();
пока ТЗГруппСт.ПолучитьСтроку()=1 цикл //цикл по группам
ТЗОбщ.ВыбратьСтроки();
ТЗ.НоваяСтрока();
ТЗ.СтЗатрат=ТЗГруппСт.Группа;
пока ТЗОбщ.ПолучитьСтроку()=1 цикл //цикл по статьям
если Нрег(ТЗГруппСт.Группа) = Нрег(строка(ТЗОбщ.СтЗатрат.Родитель)) тогда
ТЗ.НоваяСтрока();
ТЗ.СтЗатрат=ТЗОбщ.СтЗатрат;
ТЗ.Подр =ТЗОбщ.Подр;
//ТЗ.ГрПодр =ТЗОбщ.ГрПодр;
//ТЗ.Счет =ТЗОбщ.Счет;
//ТЗ.ФлагСвор=ТЗОбщ.ФлагСвор;
//ТЗ.ВидДеят =ТЗОбщ.ВидДеят;
ТЗ.Сумма =ТЗОбщ.Сумма;
конецесли;
конеццикла;
конеццикла;
//запишем статьи 1-х уровней справочников (у которых нет групп)
ТЗОбщ.ВыбратьСтроки();
пока ТЗОбщ.ПолучитьСтроку()=1 цикл //цикл по статьям
если пустоезначение(ТЗОбщ.СтЗатрат.Родитель)=1 тогда
ТЗ.НоваяСтрока();
ТЗ.СтЗатрат=ТЗОбщ.СтЗатрат;
ТЗ.Подр =ТЗОбщ.Подр;
//ТЗ.ГрПодр =ТЗОбщ.ГрПодр;
//ТЗ.Счет =ТЗОбщ.Счет;
//ТЗ.ФлагСвор=ТЗОбщ.ФлагСвор;
//ТЗ.ВидДеят =ТЗОбщ.ВидДеят;
ТЗ.Сумма =ТЗОбщ.Сумма;
конецесли;
конеццикла;
возврат ТЗ;
конецфункции

//сперва формируются подр-я с группами, а затем без групп
функция ПостроитьОбщуюТаблПодр(ТЗОбщ,ТЗГруппПодр)
ТЗ = создатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Подр","строка");
ТЗ.НоваяКолонка("СтЗатрат");
ТЗ.НоваяКолонка("ПодрСсылка");
//ТЗ.НоваяКолонка("Счет");
//ТЗ.НоваяКолонка("ВидДеят");
ТЗ.НоваяКолонка("Сумма","Число",10,2);
ТЗГруппПодр.ВыбратьСтроки();
пока ТЗГруппПодр.ПолучитьСтроку()=1 цикл
ТЗОбщ.ВыбратьСтроки();
пока ТЗОбщ.ПолучитьСтроку()=1 цикл
если ПустоеЗначение(ТЗОбщ.ФлагСвор) = 1 тогда // разворачиваем
если (ТЗГруппПодр.Ссылка = ТЗОбщ.Подр.Родитель) тогда
ТЗ.НоваяСтрока();
если ПустоеЗначение(ТЗОбщ.Счет)= 0 тогда
ТЗ.Подр =строка(ТЗОбщ.Подр) + " "+строка(ТЗОбщ.Счет);
ТЗ.ПодрСсылка = ТЗОбщ.Подр;
//ТЗ.Счет = ТЗОбщ.Счет;
если ПустоеЗначение(ТЗОбщ.ВидДеят)= 0 тогда
ТЗ.Подр =строка(ТЗОбщ.Подр) + " "+строка(ТЗОбщ.Счет)+" "+строка(ТЗОбщ.ВидДеят);
ТЗ.ПодрСсылка = ТЗОбщ.Подр;
//ТЗ.ВидДеят =ТЗОБщ.ВидДеят;
иначе
//ТЗ.ВидДеят = "";
конецесли;
иначе
ТЗ.Подр =строка(ТЗОбщ.Подр);
ТЗ.ПодрСсылка = ТЗОбщ.Подр;
//ТЗ.Счет ="";
конецесли;
ТЗ.СтЗатрат=ТЗОбщ.СтЗатрат;
ТЗ.Сумма =ТЗОбщ.Сумма;
конецесли;
иначе
продолжить;
конецесли;
конеццикла;
ТЗ.НоваяСтрока();
ТЗ.Подр = ТЗГруппПодр.Группа; //строка
ТЗ.ПодрСсылка = ТЗГруппПодр.Ссылка;
конеццикла;
// для подразделений без родителей
ТЗОбщ.ВыбратьСтроки();
пока ТЗОбщ.ПолучитьСтроку()=1 цикл
если спРазделы.НайтиЗначение(ТЗОбщ.Подр.Родитель)=0 тогда
ТЗ.НоваяСтрока();
если ПустоеЗначение(ТЗОбщ.Счет)= 0 тогда
ТЗ.Подр =строка(ТЗОбщ.Подр) + " "+строка(ТЗОбщ.Счет);
ТЗ.ПодрСсылка = ТЗОбщ.Подр;
//ТЗ.Счет = ТЗОбщ.Счет;
если ПустоеЗначение(ТЗОбщ.ВидДеят)= 0 тогда
ТЗ.Подр =строка(ТЗОбщ.Подр) + " "+строка(ТЗОбщ.Счет)+" "+строка(ТЗОбщ.ВидДеят);
ТЗ.ПодрСсылка = ТЗОбщ.Подр;
//ТЗ.ВидДеят =ТЗОБщ.ВидДеят;
иначе
//ТЗ.ВидДеят ="";
конецесли;
иначе
ТЗ.Подр =строка(ТЗОбщ.Подр);
ТЗ.ПодрСсылка = ТЗОбщ.Подр;
//ТЗ.Счет="";
конецесли;
ТЗ.СтЗатрат=ТЗОбщ.СтЗатрат;
ТЗ.Сумма =ТЗОбщ.Сумма;
конецесли;
конеццикла;
возврат ТЗ;
конецфункции

функция ПостроитьПечатныйСпПодр(ТЗПодр)
//спПодрПеч = создатьОбъект("СписокЗначений"); уже есть на форме
спПодрПеч.УдалитьВсе();
ТЗПодр.ВыбратьСтроки();
пока ТЗПодр.ПолучитьСтроку()=1 цикл
если спПодрПеч.НайтиЗначение(ТЗПодр.Подр)=0 тогда
спПодрПеч.ДобавитьЗначение(ТЗПодр.Подр);
конецесли;
конеццикла;
возврат спПодрПеч;
конецфункции

функция ПостроитьПечатныйСпСт(ТЗСт)
спСтПеч = создатьОбъект("ТаблицаЗначений");
спСтПеч.НоваяКолонка("СтЗатрат","строка");
спСтПеч.НоваяКолонка("ФлГруппа");
спСтПеч.НоваяКолонка("Сумма"); // для свертки
ТЗСт.ВыбратьСтроки();
пока ТЗСт.ПолучитьСтроку()=1 цикл
спСтПеч.НоваяСтрока();
спСтПеч.СтЗатрат = строка(ТЗСт.СтЗатрат);
спСтПеч.Сумма =1;
если ПустоеЗначение(ТЗСт.Подр)=1 тогда //это группа
спСтПеч.ФлГруппа = 1;
иначе
спСтПеч.ФлГруппа = 0;
конецесли;
конеццикла;
спСтПеч.Свернуть("СтЗатрат,ФлГруппа","Сумма");
спСтПеч.УдалитьКолонку("Сумма");
возврат спСтПеч;
конецфункции

функция ПостроитьТЗАдрГрСт_Подр(спСтПеч,спПодрПеч,ТЗГрСт_Подр)
ТЗ = создатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Стр");
ТЗ.НоваяКолонка("Кол");
ТЗ.НоваяКолонка("Сумма");

ТЗГрСт_Подр.ВыбратьСтроки();
пока ТЗГрСт_Подр.ПолучитьСтроку()=1 цикл
для инд=1 по спСтПеч.КоличествоСтрок() цикл
если (ТЗГрСт_Подр.ГрСт = спСтПеч.ПолучитьЗначение(инд,"СтЗатрат")) и
(спСтПеч.ПолучитьЗначение(инд,"ФлГруппа")=1) тогда
ТЗ.НоваяСтрока();
ТЗ.стр = инд;
если ПустоеЗначение(ТЗГрСт_Подр.Счет)=0 тогда
ТЗ.кол = спПодрПеч.НайтиЗначение(ТЗГрСт_Подр.Подр+" "+ТЗГрСт_Подр.Счет);
если ПустоеЗначение(ТЗГрСт_Подр.ВидДеят)=0 тогда
ТЗ.кол = спПодрПеч.НайтиЗначение(ТЗГрСт_Подр.Подр+" "+
ТЗГрСт_Подр.Счет+" "+ТЗГрСт_Подр.ВидДеят);
конецесли;
иначе
ТЗ.кол = спПодрПеч.НайтиЗначение(ТЗГрСт_Подр.Подр);
конецесли;
ТЗ.Сумма= ТЗГрСт_Подр.Сумма;
конецесли;
конеццикла;
конеццикла;
возврат ТЗ;
конецфункции

функция ПостроитьТЗАдрГрСт_ГрПодр(спСтПеч,спПодрПеч,ТЗГрСт_ГрПодр)
ТЗ = создатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Стр");
ТЗ.НоваяКолонка("Кол");
ТЗ.НоваяКолонка("Сумма");

ТЗГрСт_ГрПодр.ВыбратьСтроки();
пока ТЗГрСт_ГрПодр.ПолучитьСтроку()=1 цикл
для инд=1 по спСтПеч.КоличествоСтрок() цикл
если (ТЗГрСт_ГрПодр.ГрСт = спСтПеч.ПолучитьЗначение(инд,"СтЗатрат")) и
(спСтПеч.ПолучитьЗначение(инд,"ФлГруппа")=1) тогда
ТЗ.НоваяСтрока();
ТЗ.стр = инд;
ТЗ.кол = спПодрПеч.НайтиЗначение(ТЗГрСт_ГрПодр.ГрПодр);
ТЗ.Сумма= ТЗГрСт_ГрПодр.Сумма;
конецесли;
конеццикла;
конеццикла;
возврат ТЗ;
конецфункции

функция ПостроитьТЗАдрСт_ГрПодр(спСтПеч,спПодрПеч,ТЗСт_ГрПодр)
ТЗ = создатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Стр");
ТЗ.НоваяКолонка("Кол");
ТЗ.НоваяКолонка("Сумма");

ТЗСт_ГрПодр.ВыбратьСтроки();
пока ТЗСт_ГрПодр.ПолучитьСтроку()=1 цикл
для инд=1 по спСтПеч.КоличествоСтрок() цикл
если (ТЗСт_ГрПодр.Ст = спСтПеч.ПолучитьЗначение(инд,"СтЗатрат")) и
(спСтПеч.ПолучитьЗначение(инд,"ФлГруппа")=0) тогда
ТЗ.НоваяСтрока();
ТЗ.стр = инд;
ТЗ.кол = спПодрПеч.НайтиЗначение(ТЗСт_ГрПодр.Подр);
ТЗ.Сумма= ТЗСт_ГрПодр.Сумма;
конецесли;
конеццикла;
конеццикла;
возврат ТЗ;
конецфункции

функция ПостроитьТЗАдрСт_Подр(ТЗСт,ТЗПодр,спПодрПеч,спСтПеч,ТЗИтогПодр)
ТЗ = создатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Стр");
ТЗ.НоваяКолонка("Кол");
ТЗ.НоваяКолонка("Сумма");

ТЗПодр.ВыбратьСтроки();
пока ТЗПодр.ПолучитьСтроку()=1 цикл
//------------------------------
если ТЗПодр.ПодрСсылка.ЭтоГруппа()=0 тогда
ТЗИтогПодр.НоваяСтрока();
ТЗИтогПодр.Подр=ТЗПодр.Подр;
ТЗИтогПодр.Сумма=ТЗПодр.Сумма;
конецесли;
//------------------------------
ТЗ.Новаястрока();
ТЗ.кол = спПодрПеч.НайтиЗначение(ТЗПодр.Подр); // тип "строка" (кгр_20_пер)
ТЗ.Сумма= ТЗПодр.сумма;
для стр=1 по спСтПеч.КоличествоСтрок() цикл
если (строка(ТЗПодр.СтЗатрат)=спСтПеч.ПолучитьЗначение(стр,"СтЗатрат"))и
(спСтПеч.ПолучитьЗначение(стр,"ФлГруппа")=0) тогда
ТЗ.стр = стр;
конецесли;
конеццикла;
конеццикла;
ТЗИтогПодр.Свернуть("Подр","Сумма");
возврат ТЗ;
конецфункции


процедура ПолучитьИтогиГрПодр(ТЗ,ТЗИтогГрПодр,ТЗИтогСт,ТЗИтогГрСт,
ТЗСт_ГрПодр,ТЗГрСт_ГрПодр,
ТЗГрСт_Подр)
ТЗ.ВыбратьСтроки(); //ТЗОБщ
пока ТЗ.ПолучитьСтроку()=1 цикл
//----------------------------
ТЗИтогГрПодр.НоваяСтрока();
ТЗИтогГрПодр.ГрПодр = строка(ТЗ.Подр.Родитель);
ТЗИтогГрПодр.Сумма = ТЗ.Сумма;
//----------------------------
ТЗИтогСт.НоваяСтрока();
ТЗИтогСт.Ст = строка(ТЗ.СтЗатрат);
ТЗИтогСт.Сумма=ТЗ.Сумма;
//----------------------------
ТЗИтогГрСт.НоваяСтрока();
ТЗИтогГрСт.Ст = строка(ТЗ.СтЗатрат.Родитель);
ТЗИтогГрСт.Сумма=ТЗ.Сумма;
//----------------------------
ТЗСт_ГрПодр.НоваяСтрока();
ТЗСт_ГрПодр.Ст = строка(ТЗ.СтЗатрат);
ТЗСт_ГрПодр.Подр = строка(ТЗ.Подр.Родитель);
ТЗСт_ГрПодр.Сумма= ТЗ.Сумма;
//----------------------------
ТЗГрСт_ГрПодр.НоваяСтрока();
ТЗГрСт_ГрПодр.ГрСт = строка(ТЗ.СтЗатрат.Родитель);
ТЗГрСт_ГрПодр.ГрПодр= строка(ТЗ.Подр.Родитель);
ТЗГрСт_ГрПодр.Сумма = ТЗ.Сумма;
//----------------------------
ТЗГрСт_Подр.НоваяСтрока();
ТЗГрСт_Подр.ГрСт = строка(ТЗ.СтЗатрат.Родитель);
ТЗГрСт_Подр.Подр = строка(ТЗ.Подр);
ТЗГрСт_Подр.Счет = ТЗ.Счет;
ТЗГрСт_Подр.ВидДеят= строка(ТЗ.ВидДеят);
ТЗГрСт_Подр.Сумма = ТЗ.Сумма;
конеццикла;
ТЗИтогГрПодр.Свернуть("ГрПодр","Сумма");
ТЗИтогСт.Свернуть("Ст","Сумма");
ТЗИтогГрСт.Свернуть("Ст","Сумма");
ТЗСт_ГрПодр.Свернуть("Ст,Подр","Сумма");
ТЗГрСт_ГрПодр.Свернуть("ГрСт,ГрПодр","Сумма");
ТЗГрСт_Подр.Свернуть("ГрСт,Подр,Счет,ВидДеят","Сумма");
конецпроцедуры

процедура Печать(ТЗСт,ТЗПодр,спПодрПеч,спСтПеч,ТЗАдрСт_Подр,ТЗИтогПодр,
ТЗИтогСт,ТЗИтогГрПодр,ТЗИтогГрСт,
ТЗАдрСт_ГрПодр,ТЗАдрГрСт_ГрПодр,ТЗАдрГрСт_Подр)
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
ТАб.ВывестиСекцию("Заголовок");
таб.вывестиСекцию("Шапка|СекЗаг");

//печать подразделений
для инд =1 по спПодрПеч.РазмерСписка() цикл
подр =спПодрПеч.ПолучитьЗначение(инд);
таб.ПрисоединитьСекцию("Шапка|СекПодр");
конеццикла;
таб.ПрисоединитьСекцию("Шапка|ГлИтого");

если ФлЗеркалоСт=1 тогда
таб.ПрисоединитьСекцию("Шапка|СекЗаг");
конецесли;

//печать статей
спСтПеч.ВыбратьСтроки();
пока спСтПеч.ПолучитьСтроку()=1 цикл
если спСтПеч.ФлГруппа = 1 тогда
Гр = спСтПеч.СтЗатрат; //группы
таб.ВывестиСекцию("Груп|СекЗаг");
иначе
Ст =спСтПеч.СтЗатрат; //статьи
таб.ВывестиСекцию("Стат|СекЗаг");
конецесли;
если ФлЗеркалоСт=1 тогда
для инд =1 по спПодрПеч.РазмерСписка() цикл
таб.ПрисоединитьСекцию("Итог|СекПодр");
конеццикла;
таб.ПрисоединитьСекцию("Итог|ГлИтого");
если спСтПеч.ФлГруппа = 1 тогда
Гр = спСтПеч.СтЗатрат; //группы
таб.ПрисоединитьСекцию("Груп|СекЗаг");
иначе
Ст =спСтПеч.СтЗатрат; //статьи
таб.ПрисоединитьСекцию("Стат|СекЗаг");
конецесли;
конецесли;
конеццикла;
таб.ВывестиСекцию("Итог|СекЗаг");
если ФлЗеркалоСт=1 тогда
для инд =1 по спПодрПеч.РазмерСписка() цикл
таб.ПрисоединитьСекцию("Итог|СекПодр");
конеццикла;
таб.ПрисоединитьСекцию("Итог|ГлИтого");
таб.ПрисоединитьСекцию("Итог|СекЗаг");
конецесли;

если ФлЗеркалоПодр=1 тогда
таб.вывестиСекцию("Шапка|СекЗаг");
для инд =1 по спПодрПеч.РазмерСписка() цикл
подр =спПодрПеч.ПолучитьЗначение(инд);
таб.ПрисоединитьСекцию("Шапка|СекПодр");
конеццикла;
таб.ПрисоединитьСекцию("Шапка|ГлИтого");
если ФлЗеркалоСт=1 тогда
таб.ПрисоединитьСекцию("Шапка|СекЗаг");
конецесли;
конецесли;
//-----------------
попрстр = 2;
попркол = 2;
КолСтрок = спСтПеч.КоличествоСтрок(); //таблица
КолСтолбцов = спПодрПеч.РазмерСписка(); //список


//********************Независимая область печати от состояния колонок***********************

//итоги по статьям ОБЩИЙИТОГ
ТЗИтогСт.ВыбратьСтроки();
пока ТЗИтогСт.ПолучитьСтроку()=1 цикл
выводитьСумму = 0;
для инд=1 по спСтПеч.КоличествоСтрок() цикл
если (спСтПеч.ПолучитьЗначение(инд,"СтЗатрат") = ТЗИтогСт.Ст)и
(спСтПеч.ПолучитьЗначение(инд,"ФлГруппа")=0) тогда
адрес = инд;
выводитьСумму = 1;
прервать;
конецесли;
конеццикла;
если выводитьСумму =1 тогда
Таб.Область(адрес+попрстр,КолСтолбцов+попркол+1).Полужирный(1);
Таб.Область(адрес+попрстр,КолСтолбцов+
попркол+1).ГоризонтальноеПоложение(2);
Таб.Область(адрес+попрстр,КолСтолбцов+попркол+1).Текст=
ФорматС(ТЗИтогСт.Сумма);
конецесли;
конеццикла;

//итоги по группам стетей ОБЩИЙИТОГ
ТЗИтогГрСт.Выбратьстроки();
пока ТЗИтогГрСт.ПолучитьСтроку()=1 цикл
выводитьСумму = 0;
для инд=1 по спСтПеч.КоличествоСтрок() цикл
если (спСтПеч.ПолучитьЗначение(инд,"СтЗатрат") = ТЗИтогГрСт.Ст)и
(спСтПеч.ПолучитьЗначение(инд,"ФлГруппа")=1) тогда
адрес = инд;
выводитьСумму = 1;
прервать;
конецесли;
конеццикла;
если выводитьСумму =1 тогда
Таб.Область(адрес+попрстр,КолСтолбцов+попркол+1).Полужирный(1);
Таб.Область(адрес+попрстр,КолСтолбцов+
попркол+1).ГоризонтальноеПоложение(2);
Таб.Область(адрес+попрстр,КолСтолбцов+попркол+1).Текст=
ФорматС(ТЗИтогГрСт.Сумма);
конецесли;
конеццикла;

//итоги по группам подразделений подвал итого
ТЗИтогГрПодр.ВыбратьСтроки();
пока ТЗИтогГрПодр.ПолучитьСтроку()=1 цикл
адрес = спПодрПеч.НайтиЗначение(ТЗИтогГрПодр.ГрПодр);
если адрес=0 тогда
продолжить;
конецесли;
Таб.Область(КолСтрок+попрстр+1,адрес+попркол).Полужирный(1);
Таб.Область(КолСтрок+попрстр+1,адрес+
попркол).ГоризонтальноеПоложение(2);
Таб.Область(КолСтрок+попрстр+1,адрес+попркол).Текст=
ФорматС(ТЗИтогГрПодр.Сумма);
конеццикла;

//итоги Ст+ГРПодр
ТЗАдрСт_ГрПодр.ВыбратьСтроки();
пока ТЗАдрСт_ГрПодр.ПолучитьСтроку()=1 цикл
если (ТЗАдрСт_ГрПодр.Кол=0) тогда
продолжить; // т.к группы иногда могут не печататься
конецесли;
Таб.Область(ТЗАдрСт_ГрПодр.Стр+попрстр,ТЗАдрСт_ГрПодр.Кол+
попркол).Полужирный(1);
Таб.Область(ТЗАдрСт_ГрПодр.Стр+попрстр,ТЗАдрСт_ГрПодр.Кол+
попркол).ГоризонтальноеПоложение(2);
Таб.Область(ТЗАдрСт_ГрПодр.Стр+попрстр,ТЗАдрСт_ГрПодр.Кол+
попркол).Текст=ФорматС(ТЗАдрСт_ГрПодр.Сумма);
конеццикла;

ТЗАдрГрСт_ГрПодр.ВыбратьСтроки();
пока ТЗАдрГрСт_ГрПодр.ПолучитьСтроку()=1 цикл
если (ТЗАдрГрСт_ГрПодр.Кол=0) тогда
продолжить; // т.к группы иногда могут не печататься
конецесли;
Таб.Область(ТЗАдрГрСт_ГрПодр.Стр+попрстр,ТЗАдрГрСт_ГрПодр.Кол+
попркол).Полужирный(1);
Таб.Область(ТЗАдрГрСт_ГрПодр.Стр+попрстр,ТЗАдрГрСт_ГрПодр.Кол+
попркол).ГоризонтальноеПоложение(2);
Таб.Область(ТЗАдрГрСт_ГрПодр.Стр+попрстр,ТЗАдрГрСт_ГрПодр.Кол+
попркол).Текст=ФорматС(ТЗАдрГрСт_ГрПодр.Сумма);
конеццикла;

//Финальный итог
Таб.Область(КолСтрок+попрстр+1,КолСтолбцов+
попркол+1).Полужирный(1);
Таб.Область(КолСтрок+попрстр+1,КолСтолбцов+
попркол+1).ГоризонтальноеПоложение(2);
Таб.Область(КолСтрок+попрстр+1,КолСтолбцов+
попркол+1).Текст=ФорматС(ТЗИтогГрПодр.Итог("Сумма"));

//********************Зависимая область печати от состояния колонок***********************
//Выше перечисленные таблицы по составу зависят от ТЗОБЩ как и фин.итог
//Печать основных сумм
если ПустоеЗначение(ТЗАдрСт_Подр)=0 тогда
ТЗАдрСт_Подр.ВыбратьСтроки();
пока ТЗАдрСт_Подр.ПолучитьСтроку()=1 цикл
если (ПустоеЗначение(ТЗАдрСт_Подр.Стр)=0) тогда
Таб.Область(ТЗАдрСт_Подр.Стр+попрстр,ТЗАдрСт_Подр.Кол+
попркол).ГоризонтальноеПоложение(2);
Таб.Область(ТЗАдрСт_Подр.Стр+попрстр,ТЗАдрСт_Подр.Кол+
попркол).Текст=ФорматС(ТЗАдрСт_Подр.Сумма);
конецесли;
конеццикла;

//итоги по подразделениям подвал - Итого
ТЗИтогПодр.ВыбратьСтроки();
пока ТЗИтогПодр.ПолучитьСтроку()=1 цикл
адрес = спПодрПеч.НайтиЗначение(ТЗИтогПодр.Подр);
если адрес=0 тогда
продолжить;
конецесли;
Таб.Область(КолСтрок+попрстр+1,адрес+попркол).Полужирный(1);
Таб.Область(КолСтрок+попрстр+1,адрес+
попркол).ГоризонтальноеПоложение(2);
Таб.Область(КолСтрок+попрстр+1,адрес+попркол).Текст=
ФорматС(ТЗИтогПодр.Сумма);
конеццикла;

ТЗАдрГрСт_Подр.ВыбратьСтроки();
пока ТЗАдрГрСт_Подр.ПолучитьСтроку()=1 цикл
если (ПустоеЗначение(ТЗАдрГрСт_Подр.Кол)=0) тогда
Таб.Область(ТЗАдрГрСт_Подр.Стр+попрстр,ТЗАдрГрСт_Подр.Кол+
попркол).Полужирный(1);
Таб.Область(ТЗАдрГрСт_Подр.Стр+попрстр,ТЗАдрГрСт_Подр.Кол+
попркол).ГоризонтальноеПоложение(2);
Таб.Область(ТЗАдрГрСт_Подр.Стр+попрстр,ТЗАдрГрСт_Подр.Кол+
попркол).Текст=ФорматС(ТЗАдрГрСт_Подр.Сумма);
конецесли;
конеццикла;
конецесли;

//прочертим сетку
Обл=Таб.Область(3,3,КолСтрок+попрстр+1,КолСтолбцов+попркол+1);
Обл.ЦветРамки(0);
Обл.Рамка(3,3,3,3);
//--------------------------------
Таб.ТолькоПросмотр(1);
Таб.Опции(0,0,2,2); //фиксация
Таб.Показать("Отчет по ДО сч.(20,25,26)");
конецпроцедуры

Процедура Рассчитать()
перем субк1,субк2,субк3;//ответ;
ТЗОбщ = СоздатьОбъект("ТаблицаЗначений");
ТЗ20 = СоздатьОбъект("ТаблицаЗначений");
ТЗ25 = СоздатьОбъект("ТаблицаЗначений");
ТЗ26 = СоздатьОбъект("ТаблицаЗначений");

//проверка корректного ввода даты
Если НачДата>КонДата тогда
Предупреждение("Интервал введён некорректно!");
КонДата="";
Возврат;
КонецЕсли;
Если (ПустоеЗначение(НачДата)=1) или (ПустоеЗначение(КонДата)=1) тогда
Предупреждение("Интервал введён некорректно!");
Возврат;
Конецесли;
если СпРазделы.РазмерСписка()<1 тогда //список пуст
Предупреждение ("Список подразделений пуст!");
возврат;
конецесли;

Если КонДата > КонецРассчитанногоПериодаБИ() Тогда
Предупреждение("За выбранный период итоги не рассчитаны!"+РазделительСтрок+
"Расчет итогов выполняется в режиме"+РазделительСтрок+
"""Операции - Управление бухгалтерскими итогами"".");
возврат;
КонецЕсли;

субк1=ВидыСубконто.СтатьиЗатратНаПроизводство;
субк2=ВидыСубконто.Подразделения;

субк3=ВидыСубконто.ВидыНоменклатуры;
ФормированиеТЗ20(ТЗ20,"20",субк1,субк2,субк3);

субк1=ВидыСубконто.СтатьиОбщепроизводственныхЗатрат;
ФормированиеТЗ(ТЗ25,"25",субк1,субк2);

субк1=ВидыСубконто.СтатьиОбщехозяйственныхЗатрат;
ФормированиеТЗ(ТЗ26,"26",субк1,субк2);

если ОбъединениеТабЗн(ТЗОбщ,ТЗ20,ТЗ25,ТЗ26) = 0 тогда //нет данных.
спПодрПеч.УдалитьВсе();
Предупреждение ("За указанный период нет данных!");
статусвозврата(0);
возврат;
конецесли;

ГруппировкаПоСчИГруп(ТЗОбщ); // развертка по счетам и свертка по группам

ТЗОбщ.Свернуть("СтЗатрат,Подр,Счет,ФлагСвор,ВидДеят","Сумма");
ТЗОбщ.Сортировать("СтЗатрат+");

ТЗГруппСт = ОпределительСпискаГруппСтатей(ТЗОбщ);
ТЗГруппПодр = ОпределительСпискаГруппПодр(); //кроме определения групп, сортирует их согласно спРазделы

ТЗСт =ПостроитьОбщуюТаблСт(ТЗОбщ,ТЗГруппСт);
ТЗПодр=ПостроитьОбщуюТаблПодр(ТЗОбщ,ТЗГруппПодр);

ПостроитьПечатныйСпПодр(ТЗПодр); // печатный список подразделений
СпСтПеч = ПостроитьПечатныйСпСт(ТЗСт);// печатный список статей

//---------------------------------------------
ТЗИтогСт =создатьОбъект("ТаблицаЗначений");
ТЗИтогСт.НоваяКолонка("Ст");
ТЗИтогСт.НоваяКолонка("Сумма");
ТЗИтогГрПодр=создатьОбъект("ТаблицаЗначений");
ТЗИтогГрПодр.НоваяКолонка("ГрПодр");
ТЗИтогГрПодр.НоваяКолонка("Сумма");
ТЗИтогГрСт=создатьОбъект("ТаблицаЗначений");
ТЗИтогГрСт.НоваяКолонка("Ст");
ТЗИтогГрСт.НоваяКолонка("Сумма");
ТЗСт_ГрПодр=создатьОбъект("ТаблицаЗначений");
ТЗСт_ГрПодр.НоваяКолонка("Ст");
ТЗСт_ГрПодр.НоваяКолонка("Подр");
ТЗСт_ГрПодр.НоваяКолонка("Сумма");
ТЗГрСт_ГрПодр=создатьОбъект("ТаблицаЗначений");
ТЗГрСт_ГрПодр.НоваяКолонка("ГрСт");
ТЗГрСт_ГрПодр.НоваяКолонка("ГрПодр");
ТЗГрСт_ГрПодр.НоваяКолонка("Сумма");
ТЗГрСт_Подр=создатьОбъект("ТаблицаЗначений");
ТЗГрСт_Подр.НоваяКолонка("ГрСт");
ТЗГрСт_Подр.НоваяКолонка("Подр");
ТЗГрСт_Подр.НоваяКолонка("Счет");
ТЗГрСт_Подр.НоваяКолонка("ВидДеят");
ТЗГрСт_Подр.НоваяКолонка("Сумма");

ПолучитьИтогиГрПодр(ТЗОбщ,ТЗИтогГрПодр,ТЗИтогСт,ТЗИтогГрСт,
ТЗСт_ГрПодр,ТЗГрСт_ГрПодр,
ТЗГрСт_Подр);
//----------------------------------------------

//проверка на уровне интерфейса при изменении настроек---------
пар1=ТЗСт;
пар2=ТЗПодр;
пар7=ТЗОбщ;

пар4=спСтПеч; //таблица

пар3=ТЗИтогГрПодр;
пар5=ТЗИтогСт;
пар6=ТЗИтогГрСт;
пар8=ТЗСт_ГрПодр;
пар9=ТЗГрСт_ГрПодр;
пар10=ТЗГрСт_Подр;

флРасчета=1; // флаг расчета
Период1=НачДата; // контроль смены периода
Период2=КонДата;

//контроль смены флажков
сп1 =ПолучитьСнимокСписка(спРазделы); //таблица
сп2 =ПолучитьСнимокСписка(спПодр); //таблица
КонецПроцедуры

процедура Сформировать()
если (флРасчета=0) или (Период1<>НачДата) или (Период2<>КонДата)тогда //невыполнен расчет
Предупреждение("Необходимо выполнить расчет!");
статусВозврата(0);
возврат;
конецесли;

//проверка на флажки в списках возможна только после предыдущего расчета
если (ПроверкаСпискаспРазделы()=0) или (ПроверкаСпискаСпПодр()=0) тогда
Предупреждение("Необходимо выполнить расчет!");
статусВозврата(0);
возврат;
конецесли;

//Таблиа итогов по подразделениям
ТЗИтогПодр=создатьОбъект("ТаблицаЗначений");
ТЗИтогПодр.НоваяКолонка("Подр");
ТЗИтогПодр.НоваяКолонка("Сумма");

//перестроение таблицы адресов, т.к колонки могли пересортироваться
ТЗАдрСт_Подр=ПостроитьТЗАдрСт_Подр(пар1,пар2,спПодрПеч,пар4,
ТЗИтогПодр);
ТЗАдрСт_Подр.Свернуть("Стр,Кол","Сумма");

ТЗАдрСт_ГрПодр =ПостроитьТЗАдрСт_ГрПодр(пар4,спПодрПеч,пар8);
ТЗАдрГрСт_ГрПодр=ПостроитьТЗАдрГрСт_ГрПодр(пар4,спПодрПеч,
пар9);
ТЗАдрГрСт_Подр =ПостроитьТЗАдрГрСт_Подр(пар4,спПодрПеч,пар10);

Печать(пар1,пар2,спПодрПеч,пар4,ТЗАдрСт_Подр,ТЗИтогПодр,пар5,
пар3,пар6,ТЗАдрСт_ГрПодр,
ТЗАдрГрСт_ГрПодр,ТЗАдрГрСт_Подр);
конецпроцедуры

Форма.ИспользоватьЗакладки(1);
Форма.ИспользоватьСлой("Основной");
Форма.Закладки.ДобавитьЗначение("Основная");
Форма.Закладки.ДобавитьЗначение("Настройки");
флРасчета=0; //расчет не выполнялся


Скачать обработку


Внимание! Если у вас не получилось найти нужную информацию, используйте рубрикатор или воспользуйтесь поиском


.



Обработки Расходы на производство счета 20 25 26 Отчет по расходам на производство разрезе статей затрат подразделений формирует сводную информацию счетам Статьи формируются основании данных справочникам & quot Ст затр производ-во& Общехоз-е Обще-производ-е затр& Позволяет гибко настроить порядок колонок подразделений& может быть сформирован группам расшифровкой содержимого детализацией конкретному счету виду деятельности Код //*****************************Контрольная