Aleks_ckjy
Гость
|
|
« : 05-02-2009 20:57 » |
|
Добрый день, ВСЕМ! Стоит 1С 7.7 Есть вот такой файлик <УчКарточка.ert>: вся нужная инфа уместилась в ём:), только, незадача - выводиться инфа про одного человека, а надобно в виде таблицы на всех человеков... ВОПРОС: как зациклить работу данного файла и "вытянуть", выдаваемую инфу в строку и, желательно, записать всё в DBF-ку!!?...и ещё один вопрос... Есть внешняя информация: ФИО, паспорт, Банковские реквизиты и т.д. Нужно всё это "затянуть" в 1С, чтобы не вводить дважды. ВОПРОС: как сие сделать!!?
ПРИМЕЧАНИЕ: если в XML-файле, то как узнать тэги, которые распознаёт 1С? Перем ПС; Перем ДогВ,ДогУ,Уч,Вкл; Перем Док; Перем БИ,СчП01_01,СчП01_02,СчП01_03,СчП01_04,СчП02_02,СчП13,СчП24,СчП12,СчП23; Перем РазмерВыплаты,СрокВыплат; Перем СуммаВкладаФиз , СуммаВкладаЮр , СуммаИДФиз , СуммаИДЮр , СуммаУК ; Перем СуммаВыкупНачисл , СуммаВыкупВыпл ; Перем СуммаНаследНачисл , СуммаНаследВыпл ; Перем НДФЛ;
//*******************************************
Процедура ПолучитьСрокВыплат() Перем Схема; Схема=ПС.ПенсионнаяСхема; Если Схема.ФиксированныеВыплаты = 0 Тогда Если Схема.ТипПенсионнойСхемы = Перечисление.ТипыПенсионныхСхем.СрочныхВыплат Тогда СрокВыплат = ПС.Срок; РазмерВыплаты = "Не фиксирована"; ИначеЕсли Схема.ТипПенсионнойСхемы = Перечисление.ТипыПенсионныхСхем.ФиксированныхВыплат Тогда РазмерВыплаты = ПС.Выплата.Получить(ДатаОтчета); СрокВыплат = ""; //так в программе НПФ ИначеЕсли Схема.ТипПенсионнойСхемы = Перечисление.ТипыПенсионныхСхем.ПожизненныхВыплат Тогда СрокВыплат = "Пожизненные выплаты"; РазмерВыплаты = "Не фиксирована"; КонецЕсли; Иначе Если Схема.ТипПенсионнойСхемы = Перечисление.ТипыПенсионныхСхем.СрочныхВыплат Тогда СрокВыплат = ПС.Срок; РазмерВыплаты = ПС.Выплата.Получить(ДатаОтчета); ИначеЕсли Схема.ТипПенсионнойСхемы = Перечисление.ТипыПенсионныхСхем.ФиксированныхВыплат Тогда РазмерВыплаты = ПС.Выплата.Получить(ДатаОтчета); СрокВыплат = ""; //так в программе НПФ ИначеЕсли Схема.ТипПенсионнойСхемы = Перечисление.ТипыПенсионныхСхем.ПожизненныхВыплат Тогда СрокВыплат = "Пожизненные выплаты"; РазмерВыплаты = ПС.Выплата.Получить(ДатаОтчета); КонецЕсли; КонецЕсли; КонецПроцедуры
//*******************************************
Функция ПолучитьСостояниеДоговора( ) Перем СостояниеДоговора ; Перем стр; СостояниеДоговора = ПС. СостояниеДоговора .Получить(ДатаОтчета); Если СостояниеДоговора = Перечисление.ЖизньДоговора.НакопительныйПериод Тогда стр ="Накопительный период"; ИначеЕсли СостояниеДоговора = Перечисление.ЖизньДоговора.ВыплатнойПериод Тогда стр ="Выплатной период"; ИначеЕсли СостояниеДоговора = Перечисление.ЖизньДоговора.ДоговорРасторгнут Тогда стр ="Договор расторгнут"; ИначеЕсли СостояниеДоговора = Перечисление.ЖизньДоговора.ДоговорЗавершен Тогда стр ="Договор завершен"; ИначеЕсли СостояниеДоговора = Перечисление.ЖизньДоговора.УчастникУмер Тогда стр ="Участник умер"; КонецЕсли; Если ПС.Приостановлен.Получить(ДатаОтчета) =1 Тогда стр=стр+". Действие договора приостановлено"; КонецЕсли; Возврат стр; КонецФункции //_____________________________________________________________________________ Процедура ПолучитьСуммы() Перем СумБИ; БИ.ИспользоватьПланСчетов(ПланыСчетов.ПР); БИ.Опции(1,0) ; БИ.ИспользоватьСубконто(ВидыСубконто.Вкладчики,Вкл.ТекущийЭлемент(),2); БИ.ИспользоватьСубконто(ВидыСубконто.Участники,Уч.ТекущийЭлемент(),2); БИ.ИспользоватьСубконто(ВидыСубконто.Договоры, ДогВ.ТекущийЭлемент() ,2); БИ.ВыполнитьЗапрос(,ДатаОтчета , "П01.01,П01.02,П01.03,П01.04,П02.02,П13,П24,П12,П23",,,1); БИ.ВыбратьСчета(); СуммаВкладаФиз =0; СуммаВкладаЮр =0; СуммаИДФиз =0; СуммаИДЮр =0; СуммаИДЮр =0; СуммаУК =0; СуммаВыкупНачисл =0; СуммаВыкупВыпл =0; СуммаНаследНачисл =0; СуммаНаследВыпл =0; СумБИ=0; Пока БИ.ПолучитьСчет() = 1 Цикл СумБИ= БИ.СКД() - БИ.СКК() ; Если БИ.Счет = СчП01_01 Тогда СуммаВкладаФиз = СумБИ; ИначеЕсли БИ.Счет = СчП01_02 Тогда СуммаВкладаЮр = СумБИ; ИначеЕсли БИ.Счет = СчП01_03 Тогда СуммаИДФиз = СумБИ; ИначеЕсли БИ.Счет = СчП01_04 Тогда СуммаИДЮр = СумБИ; ИначеЕсли БИ.Счет = СчП02_02 Тогда СуммаУК = СумБИ; ИначеЕсли БИ.Счет = СчП13 Тогда СуммаВыкупНачисл = СумБИ; ИначеЕсли БИ.Счет = СчП24 Тогда СуммаВыкупВыпл = СумБИ; ИначеЕсли БИ.Счет = СчП12 Тогда СуммаНаследНачисл = СумБИ; ИначеЕсли БИ.Счет = СчП23 Тогда СуммаНаследВыпл = СумБИ; КонецЕсли; КонецЦикла; КонецПроцедуры //ПолучитьСуммы //_______________________________________________________________________ //Процедура ПолучитьСуммыВкладов() // Перем СумБИ; // БИ.ИспользоватьПланСчетов(ПланыСчетов.ПР); // БИ.Опции(1,0) ; // //БИ.ВключатьСубсчета(-1,0); // БИ.ИспользоватьСубконто(ВидыСубконто.Вкладчики,Вкл.ТекущийЭлемент(),2); // БИ.ИспользоватьСубконто(ВидыСубконто.Участники,Уч.ТекущийЭлемент(),2); // БИ.ИспользоватьСубконто(ВидыСубконто.Договоры, ДогВ.ТекущийЭлемент() ,2); // // БИ.ВыполнитьЗапрос(,ДатаОтчета , "П01.01,П01.02,П01.03,П01.04,П02.02",,,1); // БИ.ВыбратьСчета(); // СуммаВкладаФиз =0; // СуммаВкладаЮр =0; // СуммаИДФиз =0; // СуммаИДЮр =0; // СуммаИДЮр =0; // СуммаУК =0; // // СумБИ=0; // Пока БИ.ПолучитьСчет() = 1 Цикл // СумБИ= БИ.СКД() - БИ.СКК() ; // Если БИ.Счет = СчП01_01 Тогда // СуммаВкладаФиз = СумБИ; // ИначеЕсли БИ.Счет = СчП01_02 Тогда // СуммаВкладаЮр = СумБИ; // ИначеЕсли БИ.Счет = СчП01_03 Тогда // СуммаИДФиз = СумБИ; // ИначеЕсли БИ.Счет = СчП01_04 Тогда // СуммаИДЮр = СумБИ; // ИначеЕсли БИ.Счет = СчП02_02 Тогда // СуммаУК = СумБИ; // КонецЕсли; // КонецЦикла; //КонецПроцедуры ////_______________________________________________________________________ //Процедура ПолучитьСуммуВыкупную() // Перем СумБИ; // БИ.ИспользоватьПланСчетов(ПланыСчетов.ПР); // БИ.Опции(1,0) ; // //БИ.ВключатьСубсчета(-1,0); // БИ.ИспользоватьСубконто(ВидыСубконто.Вкладчики,Вкл.ТекущийЭлемент(),2); // БИ.ИспользоватьСубконто(ВидыСубконто.Участники,Уч.ТекущийЭлемент(),2); // БИ.ИспользоватьСубконто(ВидыСубконто.Договоры, ДогВ.ТекущийЭлемент() ,2); // // БИ.ВыполнитьЗапрос(,ДатаОтчета , "П13,П24",,,1); // БИ.ВыбратьСчета(); // СуммаВыкупНачисл =0; // СуммаВыкупВыпл =0; // // СумБИ=0; // Пока БИ.ПолучитьСчет() = 1 Цикл // СумБИ= БИ.СКД() - БИ.СКК() ; // Если БИ.Счет = СчП13 Тогда // СуммаВыкупНачисл = СумБИ; // ИначеЕсли БИ.Счет = СчП24 Тогда // СуммаВыкупВыпл = СумБИ; // КонецЕсли; // КонецЦикла; //КонецПроцедуры ////_______________________________________________________________________ //Процедура ПолучитьСуммуНаследникам() // Перем СумБИ; // БИ.ИспользоватьПланСчетов(ПланыСчетов.ПР); // БИ.Опции(1,0) ; // //БИ.ВключатьСубсчета(-1,0); // БИ.ИспользоватьСубконто(ВидыСубконто.Вкладчики,Вкл.ТекущийЭлемент(),2); // БИ.ИспользоватьСубконто(ВидыСубконто.Участники,Уч.ТекущийЭлемент(),2); // БИ.ИспользоватьСубконто(ВидыСубконто.Договоры, ДогВ.ТекущийЭлемент() ,2); // // БИ.ВыполнитьЗапрос(,ДатаОтчета , "П12,П23",,,1); // БИ.ВыбратьСчета(); // СуммаНаследНачисл =0; // СуммаНаследВыпл =0; // // СумБИ=0; // Пока БИ.ПолучитьСчет() = 1 Цикл // СумБИ= БИ.СКД() - БИ.СКК() ; // Если БИ.Счет = СчП12 Тогда // СуммаНаследНачисл = СумБИ; // ИначеЕсли БИ.Счет = СчП23 Тогда // СуммаНаследВыпл = СумБИ; // КонецЕсли; // КонецЦикла; //КонецПроцедуры //_____________________________________________________________________________ Процедура ПолучитьНДФЛ() Перем Сч; НДФЛ=0; Сч=СоздатьОбъект("Счет.ПР"); Если Сч.НайтиПоКоду("ПNL") = 0 Тогда Возврат; КонецЕсли; БИ.ИспользоватьПланСчетов(ПланыСчетов.ПР); БИ.Опции(1,0) ; БИ.ИспользоватьСубконто(ВидыСубконто.Вкладчики,Вкл.ТекущийЭлемент(),2); БИ.ИспользоватьСубконто(ВидыСубконто.Участники,Уч.ТекущийЭлемент(),2); БИ.ИспользоватьСубконто(ВидыСубконто.Договоры, ДогВ.ТекущийЭлемент() ,2); БИ.ВыполнитьЗапрос(,ДатаОтчета , Сч,,,1); НДФЛ = БИ.СКД() - БИ.СКК() ; КонецПроцедуры //ПолучитьНДФЛ //_______________________________________________________________________ Процедура ОбновитьДоговора() СписокДоговоров.УдалитьВсе(); СпрПС = СоздатьОбъект("Справочник.ПенсионныеСчета"); Док = СоздатьОбъект("Документ.ПенсионныйДоговор"); Сотр=УчастникНПФ; СпрПС.ВыбратьЭлементыПоРеквизиту("Участник",Сотр,0,0); Пока СпрПС.ПолучитьЭлемент()=1 Цикл сДог=СпрПС.ТекущийЭлемент().Владелец; // Ищем Документ, которым был создан найденный ПС Если СпрПС.ПометкаУдаления() = 1 Тогда Продолжить; КонецЕсли; Если Док.НайтиПоНомеру(сДог.Наименование)=1 Тогда Док.ВыбратьСтроки(); Есть=0; Пока Док.ПолучитьСтроку()=1 Цикл Если Док.ФИО=Сотр Тогда Есть=1; Прервать; КонецЕсли; КонецЦикла; Если Есть=1 Тогда СписокДоговоров.ДобавитьЗначение(Док.ТекущийДокумент(), "№"+Строка(Док.НомерДок)+" от "+Строка(Док.ДатаДок)); Иначе // Если в основном Договоре Участника нет, // то ищем его в Дополнительных Соглашениях допДок=СоздатьОбъект("Документ.ДополнительноеСоглашение"); допДок.ВыбратьДокументы(Док.ДатаДок,); Есть=0; Пока допДок.ПолучитьДокумент()=1 Цикл Пока допДок.ПолучитьСтроку()=1 Цикл Если допДок.ФИО=Сотр Тогда Есть=1; Прервать; КонецЕсли; КонецЦикла; Если Есть=1 Тогда СписокДоговоров.ДобавитьЗначение(допДок.ТекущийДокумент(), "№"+Строка(Док.НомерДок)+" от "+Строка(Док.ДатаДок)); Прервать; КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла; Если СписокДоговоров.РазмерСписка()>0 Тогда СписокДоговоров.ТекущаяСтрока(1); КонецЕсли; КонецПроцедуры
// Параметр - СпЗнач (ДокПД + Участник) Процедура Сформировать() Перем Парам; Перем Таб; Перем СуммаНачислНаследникам, СуммаВыплНаследникам, СуммаНачислВыкуп, СуммаВыплВыкуп; Перем ДатаПриобретенияПрав; Перем СостояниеДоговора ; ПС = СоздатьОбъект("Справочник.ПенсионныеСчета"); ДогВ = СоздатьОбъект("Справочник.Договоры"); ДогУ = СоздатьОбъект("Справочник.Договоры"); Вкл = СоздатьОбъект("Справочник.Контрагенты"); Уч = СоздатьОбъект("Справочник.Контрагенты"); Док = СоздатьОбъект("Документ.ПенсионныйДоговор"); Если ТипЗначения( Форма.Параметр ) = 0 Тогда // Интерактивно //Если (ПустоеЗначение(УчастникНПФ) = 1) ИЛИ ( ПустоеЗначение(ДоговорУчастникНПФ) = 1 ) Тогда // Предупреждение("Задайте Участника и Договор", 10); // Возврат; //Иначе // Уч.НайтиЭлемент( УчастникНПФ ) ; // ДогУ.ИспользоватьВладельца( Уч.ТекущийЭлемент()) ; // ДогУ.НайтиЭлемент( ДоговорУчастникНПФ ) ; // Если Док.НайтиПоНомеру(СокрЛП(ДогУ.Наименование),Дата("01.01.1980")) = 0 Тогда // Предупреждение("Документ ПенсионныйДоговор не найден!", 10); // Возврат; // КонецЕсли; //КонецЕсли; Если СписокДоговоров.РазмерСписка() = 0 Тогда Предупреждение("Участник "+УчастникНПФ+" не найден ни в одном договоре"); Возврат; Иначе Док = СписокДоговоров.ПолучитьЗначение(СписокДоговоров.ТекущаяСтрока()); КонецЕсли; Уч = УчастникНПФ; ИначеЕсли ТипЗначенияСтр( Форма.Параметр ) = "СписокЗначений" Тогда //По кнопке из Док ПД Док.НайтиДокумент(Парам.ПолучитьЗначение(1) ); Если Док.Проведен() = 0 Тогда Предупреждение("Документ ПенсионныйДоговор не проведен!", 10); Возврат; КонецЕсли; Уч.НайтиЭлемент( Парам.ПолучитьЗначение(2) ) ; ДогУ.ИспользоватьВладельца( Уч.ТекущийЭлемент()) ; Если ДогУ.НайтиПоНаименованию( СокрЛП(Док.НомерДок), ,1 ) = 0 Тогда Предупреждение("Договор Участника не найден!", 10); Возврат; КонецЕсли; Если ДогУ.ТипДоговора <> Перечисление.ТипыДоговоров.Пенсионный Тогда Предупреждение("Договор Участника не Пенсионный!", 10); Возврат; КонецЕсли; Иначе //Неправильный вызов По кнопке (программная ошибка) Сообщить("Некорректный вызов"); Возврат; КонецЕсли; Если Уч.ВидКонтрагента <> Перечисление.ВидыКонтрагентов.ЧастноеЛицо Тогда Предупреждение("ВидКонтрагента Не ЧастноеЛицо !", 10); Возврат; КонецЕсли; Вкл.НайтиЭлемент( Док.Вкладчик ) ; ДогВ.ИспользоватьВладельца( Вкл.ТекущийЭлемент()) ; Если ДогВ.НайтиПоНаименованию( СокрЛП(Док.НомерДок), ,1 ) = 0 Тогда Предупреждение("Договор Вкладчика не найден!", 10); Возврат; КонецЕсли; ПС.ИспользоватьВладельца( ДогВ.ТекущийЭлемент()) ; Если ПС.НайтиПоРеквизиту( "Участник",Уч.ТекущийЭлемент(),0 ) = 0 Тогда Предупреждение("ПС участника не найден!", 10); Возврат; КонецЕсли; СостояниеДоговора= ПолучитьСостояниеДоговора( ) ; ДатаПриобретенияПрав = ""; Если ПустоеЗначение(Уч.ДатаНазначенияГП) = 0 Тогда ДатаПриобретенияПрав = Уч.ДатаНазначенияГП ; ИначеЕсли ПустоеЗначение(Уч.ДатаРождения) = 0 Тогда Если Уч.Пол = Перечисление.Пол.Женский Тогда ДатаПриобретенияПрав = ДобавитьМесяц(Уч.ДатаРождения,12*55); Иначе ДатаПриобретенияПрав = ДобавитьМесяц(Уч.ДатаРождения,12*60); КонецЕсли; КонецЕсли; //Сумма на счете //ПолучитьСуммыВкладов(); //БИ на П01,П02 ПолучитьСуммы(); ПолучитьНДФЛ(); Таб=СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Таблица"); Таб.ВывестиСекцию("Шапка"); Таб.ВывестиСекцию("Пустая"); Таб.ВывестиСекцию("Участник"); Таб.ВывестиСекцию("Пустая"); Таб.ВывестиСекцию("ПС"); Если ПустоеЗначение(ПС.ДатаОткрытияСчета) <> 1 Тогда Таб.ВывестиСекцию("Открыт"); КонецЕсли; Если ПустоеЗначение(ПС.ДатаРасторжения) <> 1 Тогда Таб.ВывестиСекцию("Расторг"); КонецЕсли; Таб.ВывестиСекцию("Пустая"); Таб.ВывестиСекцию("Договор"); Если Док.Вкладчик.ВидКонтрагента =Перечисление.ВидыКонтрагентов.ЧастноеЛицо Тогда Таб.ВывестиСекцию("ВклФиз"); Иначе Таб.ВывестиСекцию("ВклЮр"); КонецЕсли; //Если ПС.ПенсионнаяСхема.ТипСчета= Перечисление.ТипыЛицевыхСчетов.ИПС Тогда // //Иначе //Таб.ВывестиСекцию("СПСЮр"); //КонецЕсли; Таб.ВывестиСекцию("Схема"); Таб.ВывестиСекцию("Пустая"); Таб.ВывестиСекцию("Даты"); Таб.ВывестиСекцию("Пустая"); Таб.ВывестиСекцию("Пустая"); Если (СуммаВкладаФиз <> 0) ИЛИ ( СуммаИДФиз <> 0 )Тогда Таб.ВывестиСекцию("ВзносыФиз"); КонецЕсли; Если (СуммаВкладаЮр <> 0 ) ИЛИ ( СуммаИДЮр <> 0 ) Тогда Таб.ВывестиСекцию("ВзносыЮр"); КонецЕсли; Если СуммаУК <> 0 Тогда Таб.ВывестиСекцию("СПСЮр"); КонецЕсли; Если ( СуммаВкладаФиз =0 ) И ( СуммаИДФиз =0) И ( СуммаВкладаЮр=0) И ( СуммаИДЮр =0) И ( СуммаУК =0) Тогда Таб.ВывестиСекцию("Сум0"); КонецЕсли; Если НДФЛ <> 0 Тогда Таб.ВывестиСекцию("НДФЛ"); КонецЕсли; Если ПС. СостояниеДоговора .Получить(ДатаОтчета) = Перечисление.ЖизньДоговора.ВыплатнойПериод Тогда ПолучитьСрокВыплат(); Таб.ВывестиСекцию("Пенсии"); КонецЕсли; //Если ПС. СостояниеДоговора .Получить(ДатаОтчета) = Перечисление.ЖизньДоговора.ДоговорРасторгнут Тогда // ПолучитьСуммуВыкупную(); Если СуммаВыкупНачисл <> 0 Тогда Таб.ВывестиСекцию("НачислВыкуп"); КонецЕсли; Если СуммаВыкупВыпл <> 0 Тогда Таб.ВывестиСекцию("ВыплВыкуп"); КонецЕсли; // Таб.ВывестиСекцию("Пустая"); //КонецЕсли; //Если ПС. СостояниеДоговора .Получить(ДатаОтчета) = Перечисление.ЖизньДоговора.УчастникУмер Тогда // ПолучитьСуммуНаследникам(); Если СуммаНаследНачисл <> 0 Тогда Таб.ВывестиСекцию("НачислНаслед"); КонецЕсли; Если СуммаНаследВыпл <> 0 Тогда Таб.ВывестиСекцию("ВыплНаслед"); КонецЕсли; //КонецЕсли; Таб.ВывестиСекцию("Пустая"); Таб.ВывестиСекцию("Пустая"); Таб.ВывестиСекцию("Пустая"); Таб.ВывестиСекцию("Пустая"); Таб.ВывестиСекцию("Банк"); Таб.ТолькоПросмотр(1); //Таб.Опции(0, 0, ФиксСтрок, 0, "ОпцииПечатиАнализСчетаПоСубконто", "АнализСчетаПоСубконто"); //Т.ОбластьПечати(2); //Т.ПовторятьПриПечатиСтроки(ФиксСтрок-1,ФиксСтрок); Таб.ПараметрыСтраницы(1,,,,,,,,, 1); Таб.Показать("Учетная карточка участника НПФ "+СокрЛП(Уч.ПолнНаименование)+" на дату "+ДатаОтчета, ""); КонецПроцедуры
//______________________________________________________ ДатаОтчета = РабочаяДата(); БИ = СоздатьОбъект("БухгалтерскиеИтоги");
СчП01_01=СчетПоКоду("П01.01",ПланыСчетов.ПР); СчП01_02=СчетПоКоду("П01.02",ПланыСчетов.ПР); СчП01_03=СчетПоКоду("П01.03",ПланыСчетов.ПР); СчП01_04=СчетПоКоду("П01.04",ПланыСчетов.ПР); СчП02_02=СчетПоКоду("П02.02",ПланыСчетов.ПР); СчП13=СчетПоКоду("П13",ПланыСчетов.ПР); СчП24=СчетПоКоду("П24",ПланыСчетов.ПР); СчП12=СчетПоКоду("П12",ПланыСчетов.ПР); СчП23=СчетПоКоду("П23",ПланыСчетов.ПР); //СчП04=СчетПоКоду("П04",ПланыСчетов.ПР); //СчП05=СчетПоКоду("П05",ПланыСчетов.ПР); //СчП11=СчетПоКоду("П11",ПланыСчетов.ПР); //СчП30=СчетПоКоду("П30",ПланыСчетов.ПР); //СчП31=СчетПоКоду("П31",ПланыСчетов.ПР);
|
|
« Последнее редактирование: 05-02-2009 22:39 от Finch »
|
Записан
|
|
|
|