|
v7: Ннеизвестная ошибка | ☑ | ||
---|---|---|---|---|
0
Glypa9 Defka
04.12.19
✎
10:46
|
Приветствую помогите пожалуйста.
Ошибка [ Б.СоздатьФайл(Путь); {C:\KP\EXTFORMS\ВЫГРУЗКАУСЗН.ERT(506)}:Длина имени файла превысила 8 символов! Б.ОткрытьФайл(Путь); {C:\KP\EXTFORMS\ВЫГРУЗКАУСЗН.ERT(511)}:Длина имени файла превысила 8 символов! Не удалось открыть файл DBF] Сам код отчёта Перем ЖрнКв; Перем Док; Перем СтарКолМесяцев; Перем ТПодразд; Перем ТКлиент; //-------------------------------------------------------------------------- Процедура Заполнить() СпрКлиентов=СоздатьОбъект("Справочник.Клиенты"); СпрКлиентов.ВыбратьЭлементы(); Пока СпрКлиентов.ПолучитьЭлемент()=1 Цикл ТекКл=СпрКлиентов.ТекущийЭлемент(); Если (ТекКл.ПометкаУдаления()=0) и (ТекКл.ЭтоГруппа()=0) Тогда Если ТекКл.Льготник=1 Тогда ЛицСчета.ДобавитьЗначение(ТекКл); КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры // Заполнить //-------------------------------------------------------------------------- //---------------------------------------------------------------------------- //Процедура ПриВыбореКлиента(Идент) // Если Идент="ЛицСчет" Тогда // Если ПустоеЗначение(ЛицСчет)>0 Тогда // Адрес="";Клиент=""; // Возврат; // КонецЕсли; // НазначитьВид(Клиент, "Клиенты"); // НайтиЛС(ЛицСчет, Контекст); // Адрес=Клиент.Дом.Наименование+?(ПустаяСтрока(Клиент.Кв)=0, " кв."+Клиент.Кв, Клиент.Кв); // ИначеЕсли Идент="Клиент" Тогда // Если ПустоеЗначение(Клиент)>0 Тогда // Адрес="";ЛицСчет=""; // Возврат; // КонецЕсли; // Если (Клиент.Вид()="Клиенты") Тогда // НайтиЛС(Клиент, Контекст); // Адрес=Клиент.Дом.Наименование+?(ПустаяСтрока(Клиент.Кв)=0, " кв."+Клиент.Кв, Клиент.Кв); // ИначеЕсли (Клиент.Вид()="Дома") Тогда // ЛицСчет=""; // Адрес=АдресДома(Клиент); // КонецЕсли; // ИначеЕсли (Клиент.Вид()="Дома") Тогда // ЛицСчет=""; // Адрес=АдресДома(Клиент); // КонецЕсли; // Если Клиент.Выбран()>0 Тогда // Подразделение=Клиент.Подразделение; // КонецЕсли; //КонецПроцедуры //--------------------------------------------------------------------------------------------- //Процедура ПриВыбореТипаОтчета() // чНомСтр=спТипОтчета.ТекущаяСтрока(); // Если спТипОтчета.ПолучитьЗначение(чНомСтр)="Копия" Тогда // Форма.Текст1.Видимость(1); // Форма.Текст2.Видимость(1); // Форма.КолМесяцев.Видимость(1); // ИначеЕсли спТипОтчета.ПолучитьЗначение(чНомСтр)="Счет" Тогда // Форма.Текст1.Видимость(0); // Форма.Текст2.Видимость(0); // Форма.КолМесяцев.Видимость(0); // КонецЕсли; //КонецПроцедуры //--------------------------------------------------------------------------------------------- Процедура ПриОткрытии() Подразделение=ЖЭУ; ФПечать=1; // спТипОтчета.ДобавитьЗначение("Копия", "Копия лиц.счета"); // спТипОтчета.ДобавитьЗначение("Счет1", "Счет/Квитанция"); // Если ПустоеЗначение(Форма.Параметр)=0 Тогда // Если Форма.Параметр="Копия" Тогда // чСтрока=1; // ИначеЕсли Форма.Параметр="Счет" Тогда // чСтрока=2; // КонецЕсли; // спТипОтчета.ТекущаяСтрока(чСтрока); // Иначе // спТипОтчета.ТекущаяСтрока(1); // КонецЕсли; // // Подразделение=ЖЭУ; // ТПодразд=СоздатьОбъект("ТаблицаЗначений"); // глПриВыбореПодразделения(ТПодразд, Подразделение); // // ПриВыбореТипаОтчета(); // // КолМесяцев=ВосстановитьЗначение("ОтчетКопияКолМесяцев"); // СтарКолМесяцев=?(ПустоеЗначение(КолМесяцев)>0, 0, КолМесяцев); // КолМесяцев=?(ПустоеЗначение(КолМесяцев)>0, 12, КолМесяцев); // //// Клиент.ВидыДляВыбора("Клиенты,Дома"); КонецПроцедуры //--------------------------------------------------------------------------------------------- Процедура ПриЗакрытии() //Если СтарКолМесяцев<>КолМесяцев Тогда // СохранитьЗначение("ОтчетКопияКолМесяцев", КолМесяцев); //КонецЕсли; КонецПроцедуры //--------------------------------------------------------------------------------------------- Процедура УдалитьИзСписка(ЛС) Если ЛС>0 Тогда ЛицСчета.УдалитьЗначение(ЛС); КонецЕсли; // ?(ЛицСчета.ТекущаяСтрока()>0,ЛицСчета.УдалитьЗначение(ЛицСчета.ТекущаяСтрока()),"") КонецПроцедуры // //******************************************* Функция НаимНачисл(Начисл, чПорядок) Если СокрЛП(Начисл.Наименование)="Квартплата" Тогда сНачисл="Содержание жилья";чПорядок=1; ИначеЕсли СокрЛП(Начисл.Наименование)="Наем" Тогда сНачисл="Оплата за найм";чПорядок=2; ИначеЕсли СокрЛП(Начисл.Наименование)="КапРемонт" Тогда сНачисл="Отчисления на кап.ремонт";чПорядок=3; ИначеЕсли СокрЛП(Начисл.Наименование)="Мусор" Тогда Если Найти(Начисл.Начисление.Наименование,"Без мусор")>0 Тогда сНачисл="Вывоз мусора"; Иначе сНачисл="Мусоропровод"; КонецЕсли; чПорядок=4; Иначе Если СокрЛП(Начисл.Наименование)="Канализация" Тогда чПорядок=5; ИначеЕсли СокрЛП(Начисл.Наименование)="Холодная вода" Тогда чПорядок=6; ИначеЕсли СокрЛП(Начисл.Наименование)="Подогрев" Тогда чПорядок=7; ИначеЕсли СокрЛП(Начисл.Наименование)="Лифт" Тогда чПорядок=8; Иначе чПорядок=9; КонецЕсли; сНачисл=Начисл.Наименование; КонецЕсли; Возврат сНачисл; КонецФункции ////******************************************* //******************************************* Процедура Копия(Клиент, Таб) Таб.ВывестиСекцию("Начало"); //********* //Таб.ПовторятьПриПечатиСтроки(4,6); Дата2=ЖрнКв.КонецПериодаПоДате(Дата1); Клиент.ИспользоватьДату(Дата1); Если Клиент.Выбран()=0 Тогда Предупреждение("Надо указать лицевой счет!",0); Возврат; КонецЕсли; ПчТипСобств=Строка(Клиент.ТипСобств); ПчОбщПл=Строка(Клиент.ОбщПл)+" м.кв."; ПчЖилПл=Строка(Клиент.ЖилПл)+" м.кв."; ПчКолПроп=Строка(Клиент.КолПроп)+" чел."; Если Клиент.КолАрм>0 Тогда ПчНеПрож=Строка(Клиент.КолАрм)+" чел." Иначе ПчНеПрож="Нет" КонецЕсли; Таб.ВывестиСекцию("Собственность");//********* чКолЛьгот=глПолучитьЛьготникиСписок(Клиент, Дата1); Для к=1 По чКолЛьгот Цикл Таб.ВывестиСекцию("Льгот_ш"); ПчНаимЛьгот=глТабЛьготники.Льгота.Наименование; ПчФамЛьгот=глТабЛьготники.Льготник.Наименование; ПчНомУд=глТабЛьготники.НомУдост; Таб.ВывестиСекцию("Льготы");//********* КонецЦикла; Таб.ВывестиСекцию("Тарифы_Шапка");//********* Начисл=СоздатьОбъект("Справочник.Начисления"); Начисл.ИспользоватьДату(Дата1); Начисл.ИспользоватьВладельца(Клиент.ТекущийЭлемент()); Начисл.ВыбратьЭлементы(); Пока Начисл.ПолучитьЭлемент()>0 Цикл Если ((Начисл.ФлагРасчета=Перечисление.ФлагУчастияВРасчете.Расчет) или (Начисл.ФлагРасчета=Перечисление.ФлагУчастияВРасчете.Счетчик)) и (Начисл.Начисление.Тариф.Получить(Дата1)<>0) Тогда Если Начисл.Начисление.ВидРасч.Выбран()>0 Тогда ВидРасч=Начисл.Начисление.ВидРасч; ИначеЕсли Начисл.Начисление.Родитель.ВидРасч.Выбран()>0 Тогда ВидРасч=Начисл.Начисление.Родитель.ВидРасч; Иначе Сообщить("Не найден вид расчета для начисления::"+Начисл.Начисление); КонецЕсли; Если (Начисл.ФлагРасчета=Перечисление.ФлагУчастияВРасчете.Счетчик) Тогда ПчТариф=Строка(Начисл.Начисление.Норма.Цена.Получить(Дата1))+" руб."; ИначеЕсли (Начисл.ФлагРасчета=Перечисление.ФлагУчастияВРасчете.Расчет) Тогда ПчТариф=Строка(Начисл.Начисление.Тариф.Получить(Дата1))+" руб."; КонецЕсли; ПчНаимТариф=Начисл.Начисление.Наименование; ВидТарифа=Начисл.Начисление; ПчВидТариф=?(СокрЛП(Начисл.Наименование)="Квартплата", "Тех. обслуж.", Начисл.Наименование); //Если (ПчВидТариф="Отопление") или (ПчВидТариф="Квартплата") или (ПчВидТариф="Наем") или // (ПчВидТариф="КапРемонт") или (ПчВидТариф="Тех. обслуж.") Тогда // ПчЕдИзм="за 1 м.кв. общ.площ."; //ИначеЕсли (Начисл.ФлагРасчета=Перечисление.ФлагУчастияВРасчете.Счетчик) Тогда // ПчЕдИзм="за 1 "+Начисл.Начисление.Норма.Единица.ПолнНаименование; //Иначе // ПчЕдИзм="с 1 человека"; //КонецЕсли; Если (Начисл.Начисление.ЕдРасч=Перечисление.РасчЕдиницы.На1ОбщМ2) Тогда ПчЕдИзм="за 1 м.кв. общ.площ."; ИначеЕсли (Начисл.Начисление.ЕдРасч=Перечисление.РасчЕдиницы.На1ЖилМ2) Тогда ПчЕдИзм="за 1 м.кв. жил.площ."; ИначеЕсли (Начисл.Начисление.ЕдРасч=Перечисление.РасчЕдиницы.На1Чел) Тогда ПчЕдИзм="с 1 человека"; ИначеЕсли (Начисл.Начисление.ЕдРасч=Перечисление.РасчЕдиницы.НаЛицСчет) Тогда ПчЕдИзм="с лиц.счета"; Иначе ПчЕдИзм="<>"; КонецЕсли; Таб.ВывестиСекцию("Тарифы"); КонецЕсли; КонецЦикла; ПчНачСальдо=Сальдо(Клиент,Дата1); Если ПчНачСальдо<0 Тогда ПчНачДолг=Строка(-ПчНачСальдо)+" руб. (Переплата)"; ИначеЕсли ПчНачСальдо>0 Тогда ПчНачДолг=Строка(ПчНачСальдо)+" руб. (Долг)"; Иначе ПчНачДолг=Строка(ПчНачСальдо)+" руб. "; КонецЕсли; ИтогоСуммаМес=0;ФлагСубсидия=0; ЖрнКв.ВыбратьПериодПоОбъекту(Клиент.ТекущийЭлемент(),Дата1); Таб.ВывестиСекцию("Начисл"); к=0; Оплата=0; НачСаль=0; СторноДонач=0; Перерасч=0; ПчДолг=0; Пока ЖрнКв.ПолучитьЗапись()>0 Цикл Если ЖрнКв.Перерасчет=0 Тогда Флаг=0; ПчСумма=ЖрнКв.Результат; ПчНаим=СокрЛП(ЖрнКв.ВидРасч.Наименование); ПчНаим=?(СокрЛП(ПчНаим)="Квартплата", "Тех.обслуж.", СокрЛП(ПчНаим)); Если ЖрнКв.Результат=0 Тогда Флаг=1; КонецЕсли; Если (ЖрнКв.Сторно=1) Тогда СторноДонач=СторноДонач+ПчСумма; Флаг=1; ИначеЕсли (ЖрнКв.ВидРасч=ВидРасчета.КоррСторно) Тогда СторноДонач=СторноДонач-ПчСумма; Флаг=1; ИначеЕсли (ЖрнКв.ВидРасч=ВидРасчета.КоррДоначислено) Тогда СторноДонач=СторноДонач+ПчСумма; Флаг=1; ИначеЕсли ЖрнКв.ВидРасч.ВходитВГруппу(ГруппаРасчетов.ВсеНачисления)>0 Тогда ИтогоСуммаМес=ИтогоСуммаМес+ПчСумма; ИначеЕсли (ЖрнКв.ВидРасч.ВходитВГруппу(ГруппаРасчетов.ВсеОплаты)>0) и (ЖрнКв.ВидРасч<>ВидРасчета.Субсидия) Тогда Оплата=Оплата+ПчСумма; Флаг=1; ИначеЕсли ЖрнКв.ВидРасч=ВидРасчета.НачальноеСальдо Тогда НачСаль=ПчСумма; Флаг=1; ИначеЕсли (ЖрнКв.ВидРасч=ВидРасчета.Субсидия) Тогда Если ФлагСубсидия=0 Тогда ПчСумма=ПолучРасчПоЖурналу("Квартплата", Клиент, ЖрнКв.ВидРасч, Дата1); ИтогоСуммаМес=ИтогоСуммаМес-ПчСумма;ФлагСубсидия=1; Иначе Продолжить; КонецЕсли; КонецЕсли; Если Флаг=0 Тогда к=к+1; м=к-3*Цел((к-1)/3); Если (м>1) и (м<=3) Тогда Таб.ПрисоединитьСекцию("Начислено|нач"+Строка(м)); Иначе Таб.ВывестиСекцию("Начислено|нач"+Строка(м)); КонецЕсли; КонецЕсли; ИначеЕсли ЖрнКв.Перерасчет=1 Тогда Перерасч=ЖрнКв.Результат; КонецЕсли; КонецЦикла; Таб.ВывестиСекцию("Итог_нач"); //---------------------------- Пени ------------------------------------------------- ПениНачСальдо=СальдоПени(Клиент, Дата1, 0);//0 - выбрать нач.сальдо из журнала //1 - рассч. нач.сальдо по пред. периоду ПениНачисл=0;ПениОплата=0;ПениСторно=0;ПениДоначисл=0; ПениНачисл=ПениЗаПериод(Дата1,,ПениОплата,ПениСторно,ПениДоначисл,Клиент); ПениКонСальдо=ПениНачСальдо+ПениНачисл-ПениОплата-ПениСторно+ПениДоначисл; Если (ПениСторно<>0) или (ПениДоначисл<>0) Тогда сПениКорр="Сторно(Доначислено) "+ПениСторно+" ( "+ПениДоначисл+" ) руб." Иначе сПениКорр=""; КонецЕсли; Если (ПениНачСальдо<>0) или (ПениНачисл<>0) или (ПениОплата<>0) или (ПениСторно<>0) или (ПениДоначисл<>0) или (ПениКонСальдо<>0)Тогда Таб.ВывестиСекцию("Пени"); КонецЕсли; //---------------------------- Пени ------------------------------------------------- ПчДол=НачСаль+ИтогоСуммаМес+СторноДонач+Перерасч-(Оплата-ПениОплата)+ ПениКонСальдо; Если ПчДол<0 Тогда ПчДолг=Строка(-ПчДол)+" руб. (Переплата)"; ИначеЕсли ПчДол>0 Тогда ПчДолг=Строка(ПчДол)+" руб. (Долг)"; Иначе ПчДолг=Строка(ПчДол)+" руб. "; КонецЕсли; Если (ПениСторно<>0) или (ПениДоначисл<>0) Тогда сПениКорр="Сторно(Доначислено) "+ПениСторно+" ( "+ПениДоначисл+" ) руб." Иначе сПениКорр=""; КонецЕсли; Таб.ВывестиСекцию("Остаток"); Дата3=ДобавитьМесяц(Дата1, ?(КолМесяцев=0, -2, -КолМесяцев)); ОплЧКас=0; Зпл=0; ВзРасч=0; Выбран=ЖрнКв.ВыбратьЗаписиПоОбъекту(Клиент.ТекущийЭлемент(),Дата3,Дата2); ФлагДляВывода=0; к=0; Пока ЖрнКв.ПолучитьЗапись()>0 Цикл Если (ЖрнКв.ВидРасч.ВходитВГруппу(ГруппаРасчетов.ВсеОплаты)=1) и (ЖрнКв.ВидРасч<>ВидРасчета.Субсидия) Тогда к=к+1; ФлагДляВывода=ФлагДляВывода+1; Если ФлагДляВывода=1 Тогда Таб.ВывестиСекцию("Плата_нач"); КонецЕсли; Если ЖрнКв.ВидРасч=ВидРасчета.ОплатаЧерезКассу Тогда ПчПоясн="касс."; ИначеЕсли ЖрнКв.ВидРасч=ВидРасчета.ОплатаВзаимозачет Тогда ПчПоясн="взаим."; ИначеЕсли ЖрнКв.ВидРасч=ВидРасчета.ОплатаЗарплата Тогда ПчПоясн="з/пл."; КонецЕсли; ПчДата=ЖрнКв.Документ.ДатаДок; ПчОплата=Строка(ЖрнКв.Результат)+" "+ПчПоясн; Док.НайтиДокумент(ЖрнКв.Документ); Если к=1 Тогда Таб.ВывестиСекцию("Плата|нач1"); Иначе Таб.ПрисоединитьСекцию("Плата|нач"+Строка(к)); КонецЕсли; Если к=3 Тогда к=0; КонецЕсли; КонецЕсли; КонецЦикла; Если ФлагДляВывода=0 Тогда Таб.ВывестиСекцию("Плата_отс"); КонецЕсли; ДатаНач=ЖрнКв.НачалоПериодаПоДате(Дата1); ДатаКон=ЖрнКв.КонецПериодаПоДате(ЖрнКв.КонецПериодаПоДате(Дата1)+1); Запрос=СоздатьОбъект("Запрос"); ТекстЗапроса="//{{ЗАПРОС(БудДокНаОплату) |Период с ДатаНач по ДатаКон; |ОбрабатыватьДокументы НеПроведенные; |Обрабатывать НеПомеченныеНаУдаление; |ДокОпл = Документ.ПлатКвит.ТекущийДокумент, Документ.ОплатаВзаим.ТекущийДокумент; |КодЛС = Документ.ПлатКвит.ЛицСчет, Документ.ОплатаВзаим.ЛицСчет; |Сумма = Документ.ПлатКвит.Сумма, Документ.ОплатаВзаим.Сумма; |Функция ВсегоСумма = Сумма(Сумма); |Группировка ДокОпл упорядочить по ДокОпл.ДатаДок; |Условие(КодЛС=ЛицСчет); |"//}}ЗАПРОС ; Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда Сообщить("Не выполнен запрос !!!"); Иначе ФлагДляВывода=0;к=0; Пока Запрос.Группировка(1)>0 Цикл к=к+1;ФлагДляВывода=ФлагДляВывода+1; Если ФлагДляВывода=1 Тогда Таб.ВывестиСекцию("Плата_непров"); КонецЕсли; Если Запрос.ДокОпл.Вид()="ПлатКвит" Тогда ПчПоясн="касс."; ИначеЕсли Запрос.ДокОпл.Вид()="ОплатаВзаим" Тогда ПчПоясн="взаим."; КонецЕсли; ПчДата=Запрос.ДокОпл.ДатаДок; ПчОплата=Строка(Запрос.ВсегоСумма)+" "+ПчПоясн; Док.НайтиДокумент(Запрос.ДокОпл); Если к=1 Тогда Таб.ВывестиСекцию("Плата|нач1"); Иначе Таб.ПрисоединитьСекцию("Плата|нач"+Строка(к)); КонецЕсли; Если к=3 Тогда к=0; КонецЕсли; КонецЦикла; КонецЕсли; Если ФлагДляВывода=0 Тогда Таб.ВывестиСекцию("НепровПлата_отс"); КонецЕсли; Таб.ВывестиСекцию("Конец"); //*********************** КонецПроцедуры ///********************** //процедура записывает данные об использовании отчёта в файл dBase формата DBF Процедура ВыгрузитьКлиентовВДБФ() Экспорт // ЛицСчета.выбратьЗначение(,,,); СписокВыбрКлиентов = СоздатьОбъект("СписокЗначений"); СпрКлиентов = СоздатьОбъект("Справочник.Клиенты"); // СпрКлиентов.ИспользоватьДату(Дата1); СпрУлицы=СоздатьОбъект("Справочник.Улицы"); Если (ЛицСчета.РазмерСписка() = 1) Тогда СписокВыбрКлиентов.ДобавитьЗначение(ЛицСчета.ПолучитьЗначение(1)); Иначе //а здесь был передан список элементов - будем использовать непосредственно его Для Сч = 1 По ЛицСчета.РазмерСписка() Цикл // Сообщить( ТипЗначенияСтр(ЛицСчета.ПолучитьЗначение(Сч))) ; // СпрКлиентов.ВыбратьЭлементыПоРеквизиту("Наименование",ЛицСчета.ПолучитьЗначение(Сч),0,0); // Пока СпрКлиентов.ПолучитьЭлемент()=1 Цикл СписокВыбрКлиентов.ДобавитьЗначение(ЛицСчета.ПолучитьЗначение(Сч)); // КонецЦикла; КонецЦикла; КонецЕсли; //путь к файлу; имя файла не должно превышать 8 знаков Путь=КаталогИБ()+".dbf"; //создание нового файла Если ФС.СуществуетФайл(Путь)=1 Тогда ФС.УдалитьФайл(Путь); КонецЕсли; Б=СоздатьОбъект("XBase"); Б.КодоваяСтраница(1); //добавление полей Б.ДобавитьПоле("KODORG","N",10,0); Б.ДобавитьПоле("NAZVORG","S",100,0); Б.ДобавитьПоле("GOD","N",4,0); Б.ДобавитьПоле("MES","N",2,0); Б.ДобавитьПоле("NUMLS","S",20,0); Б.ДобавитьПоле("SOB","N",8,2); Б.ДобавитьПоле("TIPZF","S",50,0); Б.ДобавитьПоле("KOLCHLS","N",2,0); Б.ДобавитьПоле("TNAIM","N",8,2); Б.ДобавитьПоле("TSODERG","N",8,2); Б.ДобавитьПоле("TKAPREM","N",8,2); Б.ДобавитьПоле("TMS","N",8,2); Б.ДобавитьПоле("TOtop","N",8,2); Б.ДобавитьПоле("THV","N",8,2); Б.ДобавитьПоле("TGV","N",8,2); Б.ДобавитьПоле("TSTOKI","N",8,2); Б.ДобавитьПоле("TGAZ","N",8,2); Б.ДобавитьПоле("TELEN","N",8,2); Б.ДобавитьПоле("SUMNAIM","N",8,2); Б.ДобавитьПоле("SUMSOGERG","N",8,2); Б.ДобавитьПоле("SUMKAPREM","N",8,2); Б.ДобавитьПоле("SUMMS","N",8,2); Б.ДобавитьПоле("SUMOTOP","N",8,2); Б.ДобавитьПоле("SUMHV","N",8,2); Б.ДобавитьПоле("SUMGV","N",8,2); Б.ДобавитьПоле("SUMSTOKI","N",8,2); Б.ДобавитьПоле("SUMGAZ","N",8,2); Б.ДобавитьПоле("SUMELEN","N",8,2); Б.ДобавитьПоле("SCHHV","N",1,0); Б.ДобавитьПоле("SCHGV","N",1,0); Б.ДобавитьПоле("SCHSTOKI","N",1,0); Б.ДобавитьПоле("SCHGAZ","N",1,0); Б.ДобавитьПоле("NORMHV","N",8,2); Б.ДобавитьПоле("NORMGV","N",8,2); Б.ДобавитьПоле("NORMSTOKI","N",8,2); Б.ДобавитьПоле("NORMGAZ","N",8,2); Б.ДобавитьПоле("NORMELEN","N",8,2); Б.ДобавитьПоле("KODPLITA","N",1,0); Б.ДобавитьПоле("KOLFML","N",2,0); Б.ДобавитьПоле("FAM","S",20,0); Б.ДобавитьПоле("IM","S",20,0); Б.ДобавитьПоле("OT","S",20,0); Б.ДобавитьПоле("DTR","D",,); Б.ДобавитьПоле("NAS_P","S",40,); Б.ДобавитьПоле("STREET","S",40,); Б.ДобавитьПоле("DOM","S",6,); Б.ДобавитьПоле("KOR","S",6,); Б.ДобавитьПоле("KV","S",6,); Б.ДобавитьПоле("ADRES","S",100,); Б.ДобавитьПоле("DOLG","N",8,2); Б.ДобавитьПоле("KNOTKU","N",2,0); Б.ДобавитьПоле("GOG","N",1,0); Б.ДобавитьПоле("GVD","N",1,0); Б.ДобавитьПоле("GGV","N",1,0); //создание файла Б.КодоваяСтраница(1); Б.СоздатьФайл(Путь); Б.ЗакрытьФайл(); //открытие файла Б.ОткрытьФайл(Путь); Если Б.Открыта()=0 Тогда Сообщить("Не удалось открыть файл DBF","!"); Возврат; КонецЕсли; //добавление записи Если ФПечать=1 Тогда Таб = СоздатьОбъект("Таблица"); Таб.ПараметрыСтраницы(1,,,,,,,,); Таб.ИсходнаяТаблица("Таблица1"); Таб.ВывестиСекцию("Шапка"); КонецЕсли; СпрДомов = СоздатьОбъект("Справочник.Дома"); СпрУлицы= СоздатьОбъект("Справочник.Улицы"); ///ЦИКЛ ПО ВЫБРАННЫМ СЧЕТАМ Для Сч=1 По СписокВыбрКлиентов.РазмерСписка() Цикл // СпрКлиентов.ИспользоватьДату(Дата1); КолПроп=0; Дом=""; Отоп=0; ГорВода=0; Стоки=0; СтокиТариф=0; ГорВодаТариф=0; ОтопТариф=0 ; СчГорВода=0; СчСтоки=0; ТКлиент=СписокВыбрКлиентов.ПолучитьЗначение(Сч); // Сообщить(ТКлиент); Если СпрКлиентов.НайтиЭлемент(ТКлиент)=1 Тогда Клиент=СпрКлиентов.ТекущийЭлемент(); // СпрКлиентов.ИспользоватьВладельца(Клиент); // Сообщить(ТСК.Наименование); ТипЖилья=Клиент.ТипСобств.Получить(Дата1); // ТипЖилья=ТЖ.Вид(); КолПроп= Клиент.КолПроп.Получить(Дата1); ТипЖилья=Строка(ТипЖилья); КУ=Клиент.Улица; КД=Клиент.Дом; КК=Клиент.Кв; // СпрУлицы.ВыбратьЭлементы(); // Пока СпрУлицы.ПолучитьЭлемент()=1 Цикл // Если СпрУлицы=Клиент.Улица Тогда // ТСУ=СпрУлицы.ТекущийЭлемент(); // Улица=ТСУ.Улица; // Иначе // Улица="Не нашли улицу"; // КонецЕсли; // Сообщить(СпрУлицы.Улица); // Сообщить(Клиент.Улица.); // //КонецЦикла; //Если СпрУлицы.НайтиЭлемент(Клиент.Улица)=1 Тогда // Сообщить("Нашли"); //Иначе // Сообщить("пусто"); //КонецЕсли; //Улица="Не нашли улицу"; Если СпрДомов.НайтиЭлемент(КД)=1 Тогда Дом=СпрДомов.ТекущийЭлемент().Номер; Улица=СпрДомов.ТекущийЭлемент().Улица.Наименование; Адрес= СокрЛП(Улица)+" д."+СокрЛП(Дом)+ " кв. "+КК; // Сообщить(Дом); Иначе Сообщить("пусто дом"); КонецЕсли; // Адрес=Дом+?(ПустаяСтрока(КК)=0, " кв."+КК, КК); // Сообщить(Метаданные.ПолныйИдентификатор(КУ)); // //Для К=1 По Перечисление.ТипКварт.КоличествоЗначений() Цикл // Сообщить(Перечисление.ТипКварт.ЗначениеПоНомеру(К)); // ТК= Перечисление.ТипКварт.ЗначениеПоНомеру(К) ; // Если ТК=ТипЖилья Тогда // Сообщить("Нашли"); // КонецЕсли; // //КонецЦикла; //// ТипЖилья=Перечисление.ТипКварт.ЗначениеПоИдентификатору(ТСК.ТипМунКв).ПредставлениеВида(); //// ТипЖильяСтр=ПрТипЖилья)); //// Сообщить(ТипЖилья.Наименование); //*********************************** // Возврат; Дата2=ЖрнКв.КонецПериодаПоДате(Дата1); // Клиент.ИспользоватьДату(Дата1); //Если Клиент.Выбран()=0 Тогда // Предупреждение("Надо указать лицевой счет!",0); // Возврат; //КонецЕсли; чНачСальдо=Сальдо(Клиент,Дата1); //---------------------------- Пени ------------------------------------------------- спПени=СоздатьОбъект("СписокЗначений"); ПениКонСальдо=ПениПоЛицСчету(Клиент,Дата1,спПени); ПениНачСальдо=спПени.Получить("НачСальдо"); Попытка ПениДеб=?(ПениНачСальдо>=0, ПениНачСальдо, 0);ПениКред=?(ПениНачСальдо<0, ПениНачСальдо, 0); Исключение ПениДеб=0;ПениКред=0;ПениНачСальдо=0; КонецПопытки; ПчПениДеб=" "+Формат(ПениДеб, "Ч015.2");ПчПениКред=" "+Формат(-ПениКред, "Ч015.2"); ПчНачПени=?(ПениНачСальдо<0, ПчПениКред, ПчПениДеб); ПчПениДолг=?(ПениНачСальдо<=0,"К","Д"); //---------------------------- Пени ------------------------------------------------- чОбщНачСальдо=чНачСальдо+ПениНачСальдо; НачДеб=?(чОбщНачСальдо>=0, чОбщНачСальдо, 0);НачКред=?(чОбщНачСальдо<0, чОбщНачСальдо, 0); ПчНачДеб=" "+Формат(НачДеб, "Ч015.2");ПчНачКред=" "+Формат(-НачКред, "Ч015.2"); Если чНачСальдо=0 Тогда ПчНачСальдо=0; ПчДолг=" "; Иначе ПчНачСальдо=?(чОбщНачСальдо<0, ПчНачКред, ПчНачДеб); ПчДолг=?(чНачСальдо<=0,"Переплата","Долг"); КонецЕсли; Т=СоздатьОбъект("ТаблицаЗначений"); Т.НоваяКолонка("Наименование");Т.НоваяКолонка("Шифр");Т.НоваяКолонка("Сумма"); Т.НоваяКолонка("ВидРасч");Т.НоваяКолонка("Сторно"); Т.НоваяКолонка("Порядок");Т.НоваяКолонка("Документ"); Т.НоваяКолонка("Группа");Т.НоваяКолонка("Тариф"); Т.НоваяКолонка("ЕдинРасч");Т.НоваяКолонка("ЕдинРасч"); Начисл=СоздатьОбъект("Справочник.Начисления"); Начисл.ИспользоватьДату(Дата1); Начисл.ИспользоватьВладельца(Клиент.ТекущийЭлемент()); Начисл.ВыбратьЭлементы();ФлагСубсидия=0; Пока Начисл.ПолучитьЭлемент()>0 Цикл Если Начисл.ПометкаУдаления()=0 Тогда Если ((Начисл.ФлагРасчета=глРАСЧЕТ) или (Начисл.ФлагРасчета=глРАСЧЕТСЧЕТЧИК)) и (Начисл.Начисление.Тариф.Получить(Дата1)<>0) Тогда ВидРасч=?(ПустоеЗначение(Начисл.Начисление.ВидРасч)=0, Начисл.Начисление.ВидРасч, Начисл.Начисление.Родитель.ВидРасч); ЕдинРасч=?(ПустоеЗначение(Начисл.Начисление.ЕдРасч)=0, Начисл.Начисление.ЕдРасч, Начисл.Начисление.Родитель.ЕдРасч); // сообщить(ЕдинРасч); Если ПустоеЗначение(ВидРасч)>0 Тогда Сообщить("Обнаружено неправильное начисление "+Начисл.Начисление.Наименование); Продолжить; КонецЕсли; Т.НоваяСтрока();чПорядок=0; Т.Наименование=НаимНачисл(Начисл, чПорядок); Т.Порядок=чПорядок; Т.ВидРасч=ВидРасч; Т.Сторно=0; Т.Шифр=Начисл.Код; Т.Сумма=0; Т.ЕдинРасч=ЕдинРасч; ТарифПревыш=0; Если (Начисл.ФлагРасчета=глРАСЧЕТСЧЕТЧИК) Тогда Т.Тариф=Начисл.Начисление.Норма.Цена.Получить(Дата1); ИначеЕсли (Начисл.ФлагРасчета=глРАСЧЕТ) Тогда Т.Тариф=Начисл.Начисление.Тариф.Получить(Дата1); КонецЕсли; //1-начисления,0-нач.сальдо,-1-оплата,-2-субсидия,2-коррекции,3-пени Т.Группа=1; ИначеЕсли (Начисл.ФлагРасчета=глСУБСИДИЯ) и (ФлагСубсидия=0) и (Клиент.Доход>0) Тогда ФлагСубсидия=1; Т.НоваяСтрока(); Т.Наименование="Субсидия";Т.Порядок=100; Т.ВидРасч=ВидРасчета.Субсидия; Т.Сторно=0;Т.Шифр="";Т.Сумма=0; КонецЕсли; КонецЕсли; КонецЦикла; ИтогоСуммаМес=0;ФлагСубсидия=0; ЖрнКв.ВыбратьПериодПоОбъекту(Клиент.ТекущийЭлемент(),Дата1); к=0; чОплата=0; чСторно=0; чДонач=0; чПерерасч=0; чДолг=0;НачСальдо=0; Пока ЖрнКв.ПолучитьЗапись()>0 Цикл чСумма=ЖрнКв.Результат; Если ЖрнКв.Перерасчет=0 Тогда Если (ЖрнКв.Сторно=1) и (ЖрнКв.Результат<0) Тогда чНомСтроки=0; Если Т.НайтиЗначение(-1,чНомСтроки,"Сторно")=0 Тогда Т.НоваяСтрока(); Т.Наименование="Сторно"; Т.Сторно=-1;Т.Документ=ЖрнКв.Документ; Иначе Т.ПолучитьСтрокуПоНомеру(чНомСтроки); КонецЕсли; //1-начисления,0-нач.сальдо,-1-оплата,2-коррекции,3-пени, 4-нач.сальдо пени Т.Группа=2; Т.Порядок=97; ИначеЕсли (ЖрнКв.Сторно=1) и (ЖрнКв.Результат>0) Тогда чНомСтроки=0; Если Т.НайтиЗначение(1,чНомСтроки,"Сторно")=0 Тогда Т.НоваяСтрока(); Т.Наименование="Доначислено"; Т.Сторно=1;Т.Документ=ЖрнКв.Документ; Иначе Т.ПолучитьСтрокуПоНомеру(чНомСтроки); КонецЕсли; //1-начисления,0-нач.сальдо,-1-оплата,2-коррекции,3-пени, 4-нач.сальдо пени Т.Группа=2; Т.Порядок=98; ИначеЕсли ЖрнКв.ВидРасч.ВходитВГруппу(ГруппаРасчетов.ВсеНачисления)>0 Тогда чНомСтроки=0; Если Т.НайтиЗначение(ЖрнКв.ВидРасч,чНомСтроки,"ВидРасч")>0 Тогда Т.ПолучитьСтрокуПоНомеру(чНомСтроки); ИтогоСуммаМес=ИтогоСуммаМес+чСумма; Иначе Продолжить; КонецЕсли; ИначеЕсли (ЖрнКв.ВидРасч.ВходитВГруппу(ГруппаРасчетов.ВсеОплаты)>0) и (ЖрнКв.ВидРасч<>ВидРасчета.Субсидия) Тогда Т.НоваяСтрока();Т.ВидРасч=ЖрнКв.ВидРасч; Т.Порядок=99; Т.Наименование="№ "+ЖрнКв.Документ.НомерДок+" от "+ЖрнКв.Документ.ДатаДок; Т.Документ=ЖрнКв.Документ; Т.Сумма=чСумма; //1-начисления,0-нач.сальдо,-1-оплата,2-коррекции,3-пени, 4-нач.сальдо пени Т.Группа=-1; Продолжить; ИначеЕсли ЖрнКв.ВидРасч=ВидРасчета.НачальноеСальдо Тогда Т.НоваяСтрока(); Т.Наименование="Нач.сальдо";Т.Порядок=100; Т.ВидРасч=ВидРасчета.НачальноеСальдо; Т.Сторно=0;Т.Шифр=""; //1-начисления,0-нач.сальдо,-1-оплата,2-коррекции,3-пени, 4-нач.сальдо пени Т.Группа=0; ИначеЕсли (ЖрнКв.ВидРасч=ВидРасчета.Субсидия) Тогда чНомСтроки=0; Если Т.НайтиЗначение(ЖрнКв.ВидРасч,чНомСтроки,"ВидРасч")>0 Тогда Т.ПолучитьСтрокуПоНомеру(чНомСтроки); //1-начисления,0-нач.сальдо,-1-оплата,-2-субсидия,2-коррекции,3-пени, 4-нач.сальдо пени Т.Группа=-2; КонецЕсли; КонецЕсли; Т.Сумма=?(ПустоеЗначение(Т.Сумма)>0,0,Т.Сумма); Т.Сумма=Т.Сумма+чСумма; ИначеЕсли ЖрнКв.Перерасчет=1 Тогда чНомСтроки=0; Если Т.НайтиЗначение(2,чНомСтроки,"Сторно")=0 Тогда Т.НоваяСтрока(); Т.Наименование="Перерасчет"; Т.Сторно=2; Иначе Т.ПолучитьСтрокуПоНомеру(чНомСтроки); КонецЕсли; Т.Порядок=96; Т.Сумма=?(ПустоеЗначение(Т.Сумма)>0,0,Т.Сумма); Т.Сумма=Т.Сумма+чСумма; //1-начисления,0-нач.сальдо,-1-оплата,2-коррекции,3-пени, 4-нач.сальдо пени Т.Группа=2; КонецЕсли; чСумма=0; КонецЦикла; Т.Сортировать("Порядок"); // Т.ВыбратьСтроку(,,); Т.ВыбратьСтроки(); Пока Т.ПолучитьСтроку()>0 Цикл Если ((СокрЛП(Т.Наименование)="Водоотведение") или (СокрЛП(Т.Наименование)="Канализация")) Тогда СтокиТариф=Т.Тариф; Стоки=Т.Сумма; ИначеЕсли ((СокрЛП(Т.Наименование)="Подогрев") или (СокрЛП(Т.Наименование)="Горячее водоснабжение")) Тогда ГорВода=Т.Сумма ; ГорВодаТариф= Т.Тариф; ИначеЕсли СокрЛП(Т.Наименование)="Отопление" Тогда ОтопТариф=Т.Тариф; Отоп=Т.Сумма; Иначе КонецЕсли; Сообщить(СокрЛП(Т.Наименование)); КонецЦикла; Т.ВыбратьСтроки(); Пока Т.ПолучитьСтроку()>0 Цикл ФлагОплаты=0; Попытка Если (Т.ВидРасч.ВходитВГруппу(ГруппаРасчетов.ВсеОплаты)>0) и (Т.ВидРасч<>ВидРасчета.Субсидия) Тогда ФлагОплаты=1; КонецЕсли; Исключение КонецПопытки; Если (ФлагОплаты>0) Тогда // Таб.ВывестиСекцию("Оплата"); ИначеЕсли (Т.ВидРасч=ВидРасчета.Субсидия) Тогда // Таб.ВывестиСекцию("Субсидия"); ИначеЕсли (Т.Сторно=0) и (Т.ВидРасч<>ВидРасчета.НачальноеСальдо) Тогда // Таб.ВывестиСекцию("Начисление"); ИначеЕсли Т.Сторно<>0 Тогда // Таб.ВывестиСекцию("Сторно"); КонецЕсли; КонецЦикла; // //---------------------------- Пени ------------------------------------------------- Если ПениНачСальдо<>0 Тогда Т.НоваяСтрока();Т.Наименование="Пени";Т.ВидРасч=ВидРасчета.Пени;Т.Группа=4; Т.Сумма=ПениНачСальдо; КонецЕсли; ПениНачисл=спПени.Получить("Начислено"); Если (ПениНачисл<>0) и (ПустоеЗначение(ПениНачисл)=0) Тогда Т.НоваяСтрока();Т.Наименование="Пени";Т.ВидРасч=ВидРасчета.Пени;Т.Группа=3; Т.Сумма=ПениНачисл; КонецЕсли; ПениСторно=спПени.Получить("Сторно"); Если (ПениСторно<>0) и (ПустоеЗначение(ПениСторно)=0) Тогда Т.НоваяСтрока();Т.Наименование="Пени";Т.ВидРасч=ВидРасчета.Пени;Т.Группа=3; Т.Сумма=-ПениСторно; КонецЕсли; ПениДоначисл=спПени.Получить("Доначислено"); Если (ПениДоначисл<>0) и (ПустоеЗначение(ПениДоначисл)=0) Тогда Т.НоваяСтрока();Т.Наименование="Пени";Т.ВидРасч=ВидРасчета.Пени;Т.Группа |
|||
1
GROOVY
04.12.19
✎
10:51
|
Длина имени файла превысила 8 символов!
|
|||
2
vladko
04.12.19
✎
10:52
|
(0) ограничение dbf: 8 символов до расширения. Это ещё с DOS осталось.
|
|||
3
Glypa9 Defka
04.12.19
✎
10:52
|
А где имя можно исправить?
|
|||
4
vladko
04.12.19
✎
10:53
|
(3) просто переименуй файл
|
|||
5
vladko
04.12.19
✎
10:54
|
сократи кол-во символов имени файла
|
|||
6
GROOVY
04.12.19
✎
10:54
|
Я очень извиняюсь, но лучше позовите программиста.
//путь к файлу; имя файла не должно превышать 8 знаков Путь=КаталогИБ()+".dbf"; |
|||
7
НЕА123
04.12.19
✎
10:54
|
(3)
в обработке. даже комментарий есть. |
|||
8
Glypa9 Defka
04.12.19
✎
10:55
|
(6) тут исправлено Путь=КаталогИБ()+"S" +"-"+ ДатаМесяц(ТекущаяДата())+"-"+ ДатаГод(ТекущаяДата())+".dbf";
|
|||
9
НЕА123
04.12.19
✎
10:57
|
(8)
зачЁт. |
|||
10
Glypa9 Defka
04.12.19
✎
10:57
|
(4) Где именно изменить имя файла,в самом коде ? просто не очень хорошо с программой дружу
|
|||
11
vladko
04.12.19
✎
10:57
|
(8) запусти отладчик и посмотри какое имя файла формируется в итоге у тебя
|
|||
12
Peltik
04.12.19
✎
10:57
|
(8) итого 9 получается
S-00-0000 |
|||
13
Peltik
04.12.19
✎
10:59
|
(12) до октября должно работать
|
|||
14
vladko
04.12.19
✎
10:59
|
(8)
сократи хотя бы так Путь=КаталогИБ()+"S" +""+ ДатаМесяц(ТекущаяДата())+""+ ДатаГод(ТекущаяДата())+".dbf"; |
|||
15
HawkEye
04.12.19
✎
11:02
|
(0) а почему она не известная, если по русски написано:
"Длина имени файла превысила 8 символов!" ты читать не умеешь? |
|||
16
Vladal
04.12.19
✎
11:03
|
Создать файл с именем в формате 8.3, а потом, если уж надо получить S-00-0000.dbf, переименовать после закрітия файла .dbf
|
|||
17
Glypa9 Defka
04.12.19
✎
11:03
|
(14),помогло но теперь другая ошибка
ИначеЕсли (Начисл.ФлагРасчета=глСУБСИДИЯ) и (ФлагСубсидия=0) и (Клиент.Доход>0) Тогда {C:\KP\EXTFORMS\ВЫГРУЗКАУСЗН.ERT(684)}: Операции сравнения на больше-меньше допустимы только над значениями совпадающих базовых типов (число, строка, дата) |
|||
18
GROOVY
04.12.19
✎
11:04
|
Операции сравнения на больше-меньше допустимы только над значениями совпадающих базовых типов (число, строка, дата)
|
|||
19
Vladal
04.12.19
✎
11:06
|
А теперь надо (например, в отладчике) посмотреть значения переменных и реквизитов, которые сравниваются: глСУБСИДИЯ, ФлагСубсидия, Клиент.Доход, начисл.Флаграсчета
Например, где-то переменная не инициализирована и равна Неопределено. Или в переменной строка "0", а сравнивается с числом 0. Или составной тип у реквизита, и по идее, там должна быть строка, но он еще не инициализирован и потом Неопределено. |
|||
20
hhhh
04.12.19
✎
11:06
|
(13) там в годе еще пробел. получается 10 символов
|
|||
21
Vladal
04.12.19
✎
11:07
|
(13) Это если без ведущих нулей.
(20) Семерка же. |
|||
22
vladko
04.12.19
✎
11:08
|
(17) скорее всего не посчитался
Клиент.Доход Говорю же, бери отладчик и смотри где там не число. Если не знаешь, что такое отладчик, то позови программиста. |
|||
23
Kigo_Kigo
04.12.19
✎
11:09
|
Путь=КаталогИБ()+"S" + СтраЗаменить(СокрЛП(Сред(ТекущаяДата(),4),".","-") +".dbf";
|
|||
24
Peltik
04.12.19
✎
11:09
|
(21) ДатаМесяц() число возвращает какие ведущие нули?
|
|||
25
Vladal
04.12.19
✎
11:11
|
(24) Обсуждаем решение поставленной задачи.\Если хочется пословоблудить - в (20) и вовсе про НПП в годе пишут. Чего туда не всунул пятачок?
Если хочется поправить - то поправь, а хамить будешь родственникам. |
|||
26
Peltik
04.12.19
✎
11:11
|
(20) с чего вдруг там пробел?
|
|||
27
Glypa9 Defka
04.12.19
✎
11:16
|
(22) смотрю в отладчик.программист в отпуске,решаем вопрос этот сами
|
|||
28
Peltik
04.12.19
✎
11:17
|
(27) проверяй что возвращает глСУБСИДИЯ
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |