Имя: Пароль:
1C
1C 7.7
v7: Подскажите с Циклом
0 lirt82
 
27.04.15
13:10
самописный отчет АктСверки, нужно чтоб выдавал содержимое с двух документов
1) док Аренда, в нем есть таб часть с указанием контрагента
2) док ВыпискаБанка, в нем есть таб часть с указанием контрагента
не могу правильно добавть код
    Докк = Ит.Док;
        Докк.ВыбратьСтроки();
        Пока Докк.ПолучитьСтроку()=1 Цикл
            Если  (Докк.Вид() = "Аренда") Тогда
                Если СокрЛП(Докк.Организация) = Строка(ВыбКлиент) Тогда
                    Платежка = Докк.ДокОснование;
                ИначеЕсли  (Докк.Вид() = "Выписка") Тогда
                
                Если СокрЛП(Докк.Организация) = Строка(ВыбКлиент) Тогда
                    Платежка = Докк.ДокОснование;
                    т.ВывестиСекцию("Платежки");         
                КонецЕсли;
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;    

если меняю строку на
    Если  (Докк.Вид() = "Аренда") или (Докк.Вид() = "Выписка") Тогда
то выдает что в первом случае что и во втором содержимое дока Аренда
а нужно чтоб отчет имел такой вид
--------------------------------
Выписка 60 (07.04.2015)
Плат.поручение 250 (07.04.2015)          8200 руб
Плат.поручение 251 (07.04.2015)          30600 руб
----------------------------------------------------------------
Аренда 2 (10.04.2015)
С/фактура 10 (07.04.2015)          10000 руб
С/фактура 12 (07.04.2015)          25000 руб
----------------------------------------------------------------
1 asady
 
27.04.15
13:15
Организация, ДокОснование - реквизиты табличной части и Аренды и Выписки?
2 lirt82
 
27.04.15
13:29
нет, у дока Аренда реквизит Организация тип Строка
весь код отчета
Перем т,Ит;  
Перем Обновить;
//Перем Расшифровка;

//Функция РасшифровкаОбновить(Обновить)
//    Расшифровка.Установить("Обновить", Обновить);
//    Возврат Расшифровка;
//КонецФункции //РасшифровкаОбновить

//*********************************************************************
Процедура Форм_Табл()
    Ит.Очистить();
    Ит.НоваяКолонка("Дата");
    Ит.НоваяКолонка("Приход");
    Ит.НоваяКолонка("Расход");
    Ит.НоваяКолонка("Док");
    Ит.НоваяКолонка("Наименование");
КонецПроцедуры

//Процедура ОбработкаЯчейкиТаблицы(Док)
//    Док.ВыбратьСтроки();
//    Пока Док.ПолучитьСтроку()=1 Цикл
//        Сообщить(Док.ПервичныйДокумент);
//    КонецЦикла;    
//КонецПроцедуры
//*********************************************************************


Процедура ОбработкаЯчейкиТаблицы(Док,ФлагРасш)
    ФлагРасш = 0;
    Ит.Док.ВыбратьСтроки();
    Пока Ит.ПолучитьСтроку() = 1 Цикл
        Сообщить(Ит.Док.ПервичныйДокумент);
    КонецЦикла;    
КонецПроцедуры


Процедура Сформировать()  
    //Если ПустоеЗначение(ОбщКЛН) = 0 Тогда
    //    СтрокаДействийФормы = "#Закрыть";    
    //КонецЕсли;
    //    Расшифровка = СоздатьОбъект("СписокЗначений");
    //   Расшифровка.Установить("Отчет", "КурсыВалют");
    
    Итог = СоздатьОбъект("БухгалтерскиеИтоги");
    Итог.ИспользоватьСубконто(ВидыСубконто.КОНТРАГЕНТЫ, ВыбКлиент, 2);
    
    //Если Договор.Выбран() = 1 тогда
    //    Итог.ИспользоватьСубконто(ВидыСубконто.Договора, Договор, 2);
    //КонецЕсли;
    
    Итог.ВыполнитьЗапрос(ДатаНачала, ДатаКонца,,,,,"Проводка");
    Т.ИсходнаяТаблица("Таблица");
    //    Расшифровка = СоздатьОбъект("СписокЗначений");
    Форм_Табл();
    Итог.ВыбратьПериоды();
    Ит1 = 0;
    Ит2 = 0;
    Пока Итог.ПолучитьПериод()=1 Цикл
        Опер = Итог.Операция;
        Ит.НоваяСтрока();
        Если (НЕ((Опер.Дебет.Субконто(1) = ВыбКлиент) или (Опер.Кредит.Субконто(1) = ВыбКлиент)))
        или ((Опер.Дебет.Счет.Забалансовый = 1) или (Опер.Кредит.Счет.Забалансовый = 1)) Тогда
            Продолжить;
        КонецЕсли;
        
        Если Опер.Дебет.Субконто(1) = Опер.Кредит.Субконто(1) Тогда
            Продолжить;
        КонецЕсли;
        
        Если Опер.Документ.Вид() = "Операция" тогда
            Ит.Дата        = Опер.ДатаОперации;
            Ит.Наименование= "" + СокрЛП(Опер.Содержание);
            Ит.Док         = Опер.Документ;
            Ит.Приход      = ?(Опер.Дебет.Субконто(1) = ВыбКлиент, Опер.Сумма, 0);
            Ит.Расход      = ?(Опер.Кредит.Субконто(1)= ВыбКлиент, Опер.Сумма, 0);
        Иначе
            Ит.Дата        = Опер.ДатаОперации;
            Ит.Наименование= ""+Опер.Документ;
            Ит.Док         = Опер.Документ;
            Ит.Приход      = ?(Опер.Дебет.Субконто(1) = ВыбКлиент, Опер.Сумма, 0);
            Ит.Расход      = ?(Опер.Кредит.Субконто(1)= ВыбКлиент, Опер.Сумма, 0);
        КонецЕсли;
        
    КонецЦикла;
    Ит.Свернуть("Дата, Наименование, Док","Приход, Расход");
    
    т.ВывестиСекцию("Шапка");
    Ит1 = 0;
    Ит2 = 0;
    
    Ит.ВыбратьСтроки();
    Пока Ит.ПолучитьСтроку() = 1 Цикл
        Если ПустоеЗначение(Ит.Дата) = 1 Тогда
            Продолжить;
        КонецЕсли;
        ПечДата    = Ит.Дата;
        ПечДокумент= Ит.Наименование;
        Приход     = Ит.Приход;
        Расход     = Ит.Расход;
        ДатаПлатежка   = Ит.Док.ДатаДок;
        т.ВывестиСекцию("Строка");
        Докк = Ит.Док;
        Докк.ВыбратьСтроки();
        Пока Докк.ПолучитьСтроку()=1 Цикл
            Если  (Докк.Вид() = "Аренда") Тогда
                Если СокрЛП(Докк.Организация) = Строка(ВыбКлиент) Тогда
                    Платежка = Докк.ДокОснование;
                ИначеЕсли  (Докк.Вид() = "Выписка") Тогда
                    
                    Если СокрЛП(Докк.Организация) = Строка(ВыбКлиент) Тогда
                        Платежка = Докк.ДокОснование;
                        т.ВывестиСекцию("Платежки");         
                    КонецЕсли;
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;    
        
        Ит1 = Ит1 + Приход;
        Ит2 = Ит2 + Расход;
    КонецЦикла;
    
    т.ВывестиСекцию("Итог");
    ПС = ?(Ит1>Ит2, Ит1-Ит2, 0);
    ОСл= ?(Ит2>Ит1, Ит2-Ит1, 0);
    
    т.ВывестиСекцию("Сальдо");
    
    Если Итог.СКД() > 0 Тогда
        Орг = Константа.Регион.Наименование;
        С   = Итог.СКД();
    Иначе
        Орг = ВыбКлиент.Наименование;
        С   = Итог.СКК();
    КонецЕсли;
    
    т.ВывестиСекцию("Подвал");
    Т.ТолькоПросмотр(1);
    Т.Опции(0, 0, 0, 0);
    Т.Показать();
КонецПроцедуры

//*********************************************************************
Процедура ПриОткрытии()
    ДатаНачала = НачалоПериодаБИ();
    ДатаКонца  = КонецПериодаБИ();    
    НомерДок   = ДатаМесяц(ДатаКонца);  
    //Если ПустоеЗначение(ОбщКЛН) = 1 Тогда
    //Иначе    
    //    ВыбКлиент = ОбщКлн;
    //    Сформировать();
    //    СтатусВозврата(0);
    //    Возврат;
    //КонецЕсли;
КонецПроцедуры

//*********************************************************************
т = СоздатьОбъект("Таблица");
Ит= СоздатьОбъект("ТаблицаЗначений");
3 asady
 
27.04.15
13:36
(0) у тебя логика хромает

          Если  (Докк.Вид() = "Аренда") Тогда
                Если СокрЛП(Докк.Организация) = Строка(ВыбКлиент) Тогда
                    Платежка = Докк.ДокОснование;
КонецЕсли //!!
               ИначеЕсли  (Докк.Вид() = "Выписка") Тогда
                    
                    Если СокрЛП(Докк.Организация) = Строка(ВыбКлиент) Тогда
                        Платежка = Докк.ДокОснование;
                        т.ВывестиСекцию("Платежки");        
                    КонецЕсли;
                КонецЕсли;
4 lirt82
 
28.04.15
05:34
Докк = Ит.Док;
        Докк.ВыбратьСтроки();
        Пока Докк.ПолучитьСтроку()=1 Цикл
            Если  (Докк.Вид() = "Аренда") Тогда
                Если СокрЛП(Докк.Организация) = Строка(ВыбКлиент) Тогда
                    Платежка = Докк.ДокОснование;
                КонецЕсли;
            ИначеЕсли  (Докк.Вид() = "Выписка") Тогда
                Если СокрЛП(Докк.Организация) = Строка(ВыбКлиент) Тогда
                    Платежка = Докк.ДокОснование;
                    т.ВывестиСекцию("Платежки");         
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;    
сделал так, теперь схлопывает строки
***************
Сальдо на начало 01.04.2015        8 574,60    
    Выписка 60 (07.04.2015)    38 952,39    
    Аренда 4 (30.04.2015)         30 674,51
Обороты за период        38 952,39    30 674,51
5 Cap_1977
 
28.04.15
06:08
(4) У тебя секция в таблицу выводится только тогда когда документ выписка.
И вааще, вот так будет грамотнее:

Докк = Ит.Док;
Если Найти("Аренда/Выписка/", Докк.Вид() + "/") > 0 Тогда
    Если Докк.Организация = ВыбКлиент Тогда
        Докк.ВыбратьСтроки();
        Пока Докк.ПолучитьСтроку() = 1 Цикл
            Платежка = Докк.ДокОснование;
            т.ВывестиСекцию("Платежки");
        КонецЦикла;
    КонецЕсли;
КонецЕсли;
6 lirt82
 
28.04.15
06:12
(5) копернул твой код...также схлопывает
7 Cap_1977
 
28.04.15
06:22
Если Докк.Организация = ВыбКлиент Тогда
смени на
Если СокрЛП(Строка(Докк.Организация)) = СокрЛП(Строка(ВыбКлиент)) Тогда
8 lirt82
 
28.04.15
09:45
(7) также
9 Builder
 
28.04.15
10:03
> нет, у дока Аренда реквизит Организация тип Строка
Вот это кто придумал?
Небось еще и не влезает в строку все наименование :)