Имя: Пароль:
1C
1C 7.7
v7: Печатная форма квитанций
0 Allasstor
 
04.10.13
09:59
Здраствуйте! Помогите пожалуста как сделать чтобы квитанции сортировались по улицам потом по домам и по квартирам
выводица на альбомном листе 4 квитанции  но в разнобой ??

Перем Жрн,ЖрнЛг,Клиент,_Льготники,Ош;
//******************************************************************************
Процедура Сформировать()
    Если (КолСтраниц = 0) Тогда
        Предупреждение("Не выбрано количество страниц",5);
        Возврат;
    КонецЕсли;
    ФлЛг = 0;      
    ФлС = 0;
    СтрОплД="";
    СтрОплДД="";
    СтрКвит = "ООО Карпогорская УК,с.Карпогоры,ул.Ленина 21,телефон 2-24-34,2-10-83";
    ДатаАк = КонМесяца(ДатаАктуальности)+1;
    ОплМес = СокрЛП(Нрег(Формат(ДатаАк, "ДММММ")));
    ОплГод = ""+ДатаГод(ДатаАк)+"г.";
    ОплДат=?(Прав(ОплМес,1)="т",ОплМес+"а ",Лев(ОплМес,СтрДлина(ОплМес)-1)+"я ")+ОплГод;        //Янв
    _ОплДат = ?(Прав(ОплМес,1)="т",ОплМес+"е ",Лев(ОплМес,СтрДлина(ОплМес)-1)+"е ")+ОплГод;
    ОплМ = СокрЛП(Нрег(Формат(ДатаАктуальности, "ДММММ")));
    ОплГ = ""+ДатаГод(ДатаАктуальности)+"г.";                                                //Дек
    ОплД=?(Прав(ОплМ,1)="т",ОплМ+"а ",Лев(ОплМ,СтрДлина(ОплМ)-1)+"я ")+ОплГ;
    ОплДД = ?(Прав(ОплМ,1)="т",ОплМ+"е ",Лев(ОплМ,СтрДлина(ОплМ)-1)+"е ")+ОплГ;
    ОплДДД = ОплМ +" "+ОплГ;
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Квитанции");
    НомСтроки = 0;ВыбД=0;
    Если (ВыбДом.Выбран() = 1) И (ВыбПодр.Выбран() = 0) Тогда
        Клиент.ВыбратьЭлементыПоРеквизиту("Дом",ВыбДом);
    ИначеЕсли (ВыбПодр.Выбран() = 1) И (ВыбДом.Выбран() = 0) Тогда
        Клиент.ВыбратьЭлементыПоРеквизиту("Подразделение",ВыбПодр);
    Иначе
        Клиент.ВыбратьЭлементы();
        Клиент.ПорядокРеквизита("КодКвартиры");
        ВыбД=1;
    КонецЕсли;
    Страница = 0;    
    Пока Клиент.ПолучитьЭлемент()=1  Цикл  
        Если (Клиент.ЭтоГруппа()=1) Или (Клиент.ПометкаУдаления()=1) Или (Клиент.ПринадлежитГруппе(ВЫБЫВШИЕ) = 1) Тогда
            Продолжить;
        КонецЕсли;
        Если (ВыбД = 1) Тогда
            Если (Клиент.Дом<>ВыбДом) Или (Клиент.Подразделение<>ВыбПодр) Тогда
                Продолжить;
            КонецЕсли;
        КонецЕсли;    
        СтрКод = СокрЛП(Клиент.ПолныйКод());
        _Код = Число(Сред(СтрКод,1,Найти(СтрКод,"/")-1));
        _Д = Клиент.Дом.Наименование;
        _Клиент = Клиент.ТекущийЭлемент();
        ФлЛг = 0;
        НаимЛьгота = "";
        Адрес = "";
        Подр = _Клиент.Подразделение.Код;
        _Подр = СокрЛП(_Клиент.Подразделение.Наименование);
        Адрес = "";    
        НИзв = СокрЛП(Строка(ДатаМесяц(ДатаАктуальности)))+СокрЛП(Строка(ДатаГод(ДатаАктуальности)))+СокрЛП(_Клиент.Код);
        Адрес=_Клиент.Дом.Наименование+?(ПустаяСтрока(_Клиент.Кв)=0, " кв."+_Клиент.Кв, _Клиент.Кв);
        Если СокрЛП(_Клиент.Подразделение.ПодрАдрес)<>"" Тогда
            Адрес= СокрЛП(_Клиент.Подразделение.ПодрАдрес)+", "+Адрес;
        КонецЕсли;    
        ВсегоН=0;ВсегоК=0;ВсегоКЛ=0;ВсегоО=0;ВсегоС=0;Ном=0;НСальдо=0;СумОплаты=0;_КолЛг=0;    
        ТаблН=СоздатьОбъект("ТаблицаЗначений");
        ТаблН.НоваяКолонка("Расчет","Строка",30,,,,,2);
        ТаблН.НоваяКолонка("СуммаНач","Число",8,2,,,,2);
        ТаблН.НоваяКолонка("СуммаКор","Число",8,2,,,,2);
        ТаблН.НоваяКолонка("СуммаЛг","Число",8,2,,,,2);
        ТаблН.НоваяКолонка("Тариф","Число",8,2,,,,2);
        ТаблН.НоваяКолонка("КолСтр","Число",2,0,,,,);
        
        ТаблП=СоздатьОбъект("ТаблицаЗначений");
        ТаблП.НоваяКолонка("Расчет","Строка",30,,,,,2);
        ТаблП.НоваяКолонка("СуммаНач","Число",8,2,,,,2);
        ТаблП.НоваяКолонка("СуммаКор","Число",8,2,,,,2);
        ТаблП.НоваяКолонка("СуммаЛг","Число",8,2,,,,2);
        ТаблП.НоваяКолонка("Тариф","Число",8,2,,,,2);
        ТаблП.НоваяКолонка("Итог","Число",9,2,,,,2);
        
        Жрн.ВыбратьПериодПоОбъекту(_Клиент,ДатаАктуальности);
        Пока Жрн.ПолучитьЗапись()>0 Цикл
            _ВР = СокрЛП(Жрн.Расчет);
            ВТ_ = Жрн.ВидТарифа;
            _ВТ = СокрЛП(ВТ_.Расчет);
            _ВР =?(_ВР="",_ВТ,_ВР);
            Если (Жрн.ВидРасч.ВходитВГруппу(ГруппаРасчетов.НачальноеСальдо) = 1) И (Жрн.Результат <> 0) Тогда
//*******************************************
//Начало изменений "АРБИС:Прикладные решения"
//*******************************************
                Если (Жрн.ВидРасч <> ВидРасчета.НачальноеСальдо)
                    Или (НачМесяца(ДатаАктуальности) < НачМесяца(Константа.ДатаНачалаОстатковБезЛьгот)) Тогда
//*******************************************
//Конец изменений "АРБИС:Прикладные решения"
//*******************************************
                    НСальдо = НСальдо + Жрн.Результат;
//*******************************************
//Начало изменений "АРБИС:Прикладные решения"
//*******************************************
                Конецесли;
//*******************************************
//Конец изменений "АРБИС:Прикладные решения"
//*******************************************
            КонецЕсли;            
//*******************************************
//Начало изменений "АРБИС:Прикладные решения"
//*******************************************
            Если (Жрн.ВидРасч = ВидРасчета.НачальноеСальдоБезЛьгот)
                И (КонМесяца(ДатаАктуальности) > НачМесяца(Константа.ДатаНачалаОстатковБезЛьгот)) Тогда
                НСальдо = НСальдо + Жрн.Результат;
            Конецесли;
//*******************************************
//Конец изменений "АРБИС:Прикладные решения"
//*******************************************
            Если (Жрн.ВидРасч.ВходитВГруппу(ГруппаРасчетов.ВсеНачисления) = 1) И (Жрн.Результат <> 0) Тогда
                Ном = Ном + 1;
                ТаблН.НоваяСтрока(Ном);
                ТаблН.УстановитьЗначение(Ном,1,_ВР);
                Если  (Жрн.Тариф > 0)  Тогда
//*******************************************
//Начало изменений "АРБИС:Прикладные решения"
//*******************************************
                    ТаблН.УстановитьЗначение(Ном,2,Жрн.Результат + Жрн.СуммаЛьготы);
//                    ТаблН.УстановитьЗначение(Ном,2,Жрн.Результат);
//*******************************************
//Конец изменений "АРБИС:Прикладные решения"
//*******************************************
                    ТаблН.УстановитьЗначение(Ном,3,0);
                    ТаблН.УстановитьЗначение(Ном,4,Жрн.СуммаЛьготы);
                    ТаблН.УстановитьЗначение(Ном,5,Жрн.Тариф);
                    ТаблН.УстановитьЗначение(Ном,6,1);
                    ВсегоН = ВсегоН + Жрн.Результат;
                Иначе
                    ТаблН.УстановитьЗначение(Ном,2,0);
                    ТаблН.УстановитьЗначение(Ном,3,Жрн.Результат);
                    ТаблН.УстановитьЗначение(Ном,5,0);
                    ТаблН.УстановитьЗначение(Ном,6,0);
                    ВсегоК = ВсегоК + Жрн.Результат;
                КонецЕсли;
            КонецЕсли;    
            Если (Жрн.ВидРасч.ВходитВГруппу(ГруппаРасчетов.ВсеОплаты) = 1) И (Жрн.Результат <> 0) Тогда
                Док = Жрн.Документ;
                Если (Док.Вид() ="ПлатКвит") ИЛИ (Док.Вид()="ОплПлатКвит") Тогда
                    Если Док.ИсточникОплат = Перечисление.ИсточникОплат.Субсидия Тогда
                        ВсегоС = ВсегоС + Жрн.Результат;
                    Иначе    
                        ВсегоО = ВсегоО + Жрн.Результат;
                    КонецЕсли;    
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
        НаимЛьгота = "";_КолЛг = 0;
        _Льготники.ИспользоватьВладельца(_Клиент);
        _Льготники.ВыбратьЭлементы();
        Пока _Льготники.ПолучитьЭлемент()>0 Цикл
            _ЛЛ = _Льготники.ТекущийЭлемент();
            Если _Льготники.ФлагРасчета.Получить(ДатаАктуальности) = Да тогда
                НаимЛьгота = НаимЛьгота+СокрЛП(_Льготники.Льгота)+",";
                _КолЛг = _КолЛг+ _Льготники.Количество;
                _Льготник = _Льготники.ТекущийЭлемент();
            КонецЕсли;    
        КонецЦикла;
        НаимЛьгота=Сред(НаимЛьгота,1,СтрДлина(НаимЛьгота)-1);
        ТаблН.Свернуть("1","2,3,4,5,6");
        СуммаН = ТаблН.Итог(2);
        СуммаК = ТаблН.Итог(3);
        СуммаЛ = ТаблН.Итог(4);
        Ном  = 0;_Ном = 0;ПерВ = 0;
        Если (НСальдо <> 0) ИЛИ (СуммаН <> 0) ИЛИ (ВсегоО <> 0) Тогда
            НомерКвит = НомерКвит + 1;
            ТаблН.ВыбратьСтроки();
            Пока ТаблН.ПолучитьСтроку()=1 Цикл
                Ном = Ном + 1;
                _Ном = _Ном + 1;
                _ВР = ТаблН.ПолучитьЗначение(Ном,1);
                _Тариф = ТаблН.ПолучитьЗначение(Ном,5)/?(ТаблН.ПолучитьЗначение(Ном,6)=0,1,ТаблН.ПолучитьЗначение(Ном,6));
                Нач = ТаблН.ПолучитьЗначение(Ном,2);
                Перер = ТаблН.ПолучитьЗначение(Ном,3);
                Лг = ТаблН.ПолучитьЗначение(Ном,4);
//*******************************************
//Начало изменений "АРБИС:Прикладные решения"
//*******************************************
//                ИтК = ТаблН.ПолучитьЗначение(Ном,2)+ТаблН.ПолучитьЗначение(Ном,3)-ТаблН.ПолучитьЗначение(Ном,4);
                ИтК = ТаблН.ПолучитьЗначение(Ном,2)+ТаблН.ПолучитьЗначение(Ном,3);
//*******************************************
//Конец изменений "АРБИС:Прикладные решения"
//*******************************************
                ТаблП.НоваяСтрока(_Ном);
                ТаблП.УстановитьЗначение(_Ном,1,_ВР);
                ТаблП.УстановитьЗначение(_Ном,2,_Тариф);
                ТаблП.УстановитьЗначение(_Ном,3,Нач);
                ТаблП.УстановитьЗначение(_Ном,4,Перер);
//*******************************************
//Начало изменений "АРБИС:Прикладные решения"
//*******************************************
//                ТаблП.УстановитьЗначение(_Ном,5,-1*Лг);
                ТаблП.УстановитьЗначение(_Ном,5,Лг);
//*******************************************
//Конец изменений "АРБИС:Прикладные решения"
//*******************************************
                ТаблП.УстановитьЗначение(_Ном,6,ИтК);
                ПерВ = ПерВ + Перер;  
            КонецЦикла;
            ННом = _Ном + 1;
            Для НН=ННом по 10 Цикл
                _Ном = _Ном + 1;
                ТаблП.НоваяСтрока(_Ном);
                ТаблП.УстановитьЗначение(_Ном,1,"");
                ТаблП.УстановитьЗначение(_Ном,2,"");
                ТаблП.УстановитьЗначение(_Ном,3,"");
                ТаблП.УстановитьЗначение(_Ном,4,"");
                ТаблП.УстановитьЗначение(_Ном,5,"");
                ТаблП.УстановитьЗначение(_Ном,6,"");
            КонецЦикла;
            Если НСальдо < 0 Тогда
                СтрОплДД ="Переплата на 1 " + ОплД;
            ИначеЕсли НСальдо > 0 Тогда
                СтрОплДД ="Долг на 1 "+ОплД;
            Иначе
                СтрОплДД = "";
            КонецЕсли;
            КОпл=(НСальдо+СуммаН+ВсегоК-ВсегоО-ВсегоС);
            Если КОпл < 0 Тогда
                СтрОплД ="Переплата на 1 " + ОплДат;
            ИначеЕсли КОпл > 0 Тогда
                СтрОплД ="Долг на 1 "+ОплДат;
            Иначе
                СтрОплД = "";
            КонецЕсли;
            Ит = КОпл;
            //Ит=?(КОпл+ВсегоН<>0,КОпл+ВсегоН,"0,00");
            НомСтроки = НомСтроки + 1;
            Если НомСтроки%2 = 1 Тогда
                Таб.ВывестиСекцию("Шапка|Шапка1");
                Таб.ПрисоединитьСекцию("Шапка|Пусто");
            Иначе    
                Таб.ПрисоединитьСекцию("Шапка|Шапка1");
            КонецЕсли;
            Если (НомСтроки%2=0) И (НомСтроки % 4 <> 0) Тогда
                Таб.ВывестиСекцию("Подвал|Подвал1");
                Таб.ПрисоединитьСекцию("Подвал|Пусто");
                Таб.ПрисоединитьСекцию("Подвал|Подвал1");
                //Таб.ПрисоединитьСекцию("Шапка|Пусто");
            КонецЕсли;        
            Если НомСтроки%4 = 0 Тогда
                Таб.НоваяСтраница();
                Страница=Страница+1;
            КонецЕсли;        
        КонецЕсли;
        Если (Страница%КолСтраниц=0) и (НомСтроки%4 = 0) Тогда
            Таб.Опции(0,0,0,0, "Таблица");
            Таб.ПараметрыСтраницы(2,,,0,0,0,0,0,0,,,);
            Таб.ТолькоПросмотр(1);
            Таб.Показать("Печать квитанций");
            Таб = СоздатьОбъект("Таблица");
            Таб.ИсходнаяТаблица("Квитанции");
            глСтатусСтрока(, "Страница - "+Страница);
        КонецЕсли;
        глСтатусСтрока(, "Страница - "+Страница);
    КонецЦикла;    
    Таб.Опции(0,0,0,0, "Таблица");
    Таб.ПараметрыСтраницы(2,,,0,0,0,0,0,0,,,);
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Печать квитанций");
КонецПроцедуры
//******************************************************************************
Клиент=СоздатьОбъект("Справочник.Клиенты");
Жрн=СоздатьОбъект("ЖурналРасчетов.Квартплата");
ЖрнЛг=СоздатьОбъект("ЖурналРасчетов.Льготники");
_Льготники=СоздатьОбъект("Справочник.Льготники");
ДатаАктуальности = Жрн.НачалоТекущегоПериода();
ТекстПериода = глСменитьПериод(ДатаАктуальности);
КолСтраниц = 100;
Ош = 0;
1 Allasstor
 
04.10.13
10:01
программа расчет квартплаты
2 пипец
 
04.10.13
10:40
Сортировать(<?>,);
Синтаксис:
Сортировать(<Колонки>,<ДокумПоДате>)
Назначение:
Сортировать таблицу значений по колонкам.
Параметры:
<Колонки> - строковое выражение, которое определяет колонки, порядок и направление сортировки. Формат передаваемой строки - это разделенные запятыми номера или идентификаторы колонок со знаком направления сортировки ( ''+''    - сортировать по  возрастанию; ''- ''  - сортировать по убыванию; ''*'' - сортировать по внутреннему значению). Знак направления сортировки можно указывать до или после обозначения колонки через пробел или без пробела. По умолчанию направление сортировки принимается по возрастанию.
<ДокумПоДате> - необязательный параметр. Имеет смысл только в том случае, если значениями таблицы значений являются документы. В этом случае можно задавать сортировку документов по их хронологии. Число: 1 - сортировка по хронологии документов; 0 - нет. Значение по умолчанию - 0.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.