Добро пожаловать,
Расходы на производство (счета 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; //расчет не выполнялся
Скачать обработку Внимание! Если у вас не получилось найти нужную информацию, используйте
рубрикатор или воспользуйтесь
поиском .
Обработки 1С Расходы на производство счета 20 25 26 Отчет по расходам на производство разрезе статей затрат подразделений формирует сводную информацию счетам Статьи формируются основании данных справочникам & quot Ст затр производ-во& Общехоз-е Обще-производ-е затр& Позволяет гибко настроить порядок колонок подразделений& может быть сформирован группам расшифровкой содержимого детализацией конкретному счету виду деятельности Код //*****************************Контрольная