|
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
|
> нет, у дока Аренда реквизит Организация тип Строка
Вот это кто придумал? Небось еще и не влезает в строку все наименование :) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |