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

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

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

Ник:
Пароль:

Меню сайта




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

От друга, знакомого
Из печатных источников
Из поисковой машины
По ссылке с другого сайта
Случайно
Не знаю


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

Всего голосов: 1033
Комментарии: 4


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



Статистика




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);
ТЗ.