|
v7: Упростить внешний отчет | ☑ | ||
---|---|---|---|---|
0
julia_rostov
28.08.12
✎
09:48
|
Народ помогите упростить внешний отчет, понимаю что сделала неправильно и иррационально с точки зрения программирования.
Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |ОбрабатыватьДокументы НеПроведенные; |Обрабатывать НеПомеченныеНаУдаление; |Без итогов; |АктТранспортный = Документ.АктТранспортный.ТекущийДокумент; |Фирма = Документ.АктТранспортный.Фирма; |Группировка АктТранспортный; |Условие (Фирма в ВыбФирма); |"; Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Док = СоздатьОбъект("Документ.АктТранспортный"); СпрК = СоздатьОбъект("Справочник.Клиенты"); Клиент=СпрК; Док.ВыбратьДокументы(ВыбНачПериода, ВыбКонПериода); Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Печать_Акта"); Таб.ПараметрыСтраницы(2); Пока Запрос.Группировка() = 1 Цикл Док.НайтиДокумент(Запрос.АктТранспортный); Если СпрК.НайтиПоКоду(65481) = 1 Тогда Клиент = СпрК.ТекущийЭлемент(); КонецЕсли; Итого=Док.Сумма; БезНалога="00,00"; Всего=Док.Сумма; ЕДИЗМ="Км"; Ном="1"; Таб.ВывестиСекцию("Заголовок"); Таб.ВывестиСекцию("Заказчик"); Таб.ВывестиСекцию("Вод"); Таб.ВывестиСекцию("Шапка"); Таб.ВывестиСекцию("Строка"); Таб.ВывестиСекцию("Итого"); Таб.ВывестиСекцию("ИтогоБезНалога"); Таб.ВывестиСекцию("Всего"); Таб.ВывестиСекцию("СуммаПР"); Таб.ВывестиСекцию("Подвал") ; Таб.ВывестиСекцию("Пустая"); Таб.НоваяСтраница(); КонеЦЦикла; Таб.ПараметрыСтраницы(2,,, 10, 0, 0, 0,,,,,); Таб.ТолькоПросмотр(1); Таб.Показать("Печать_Акта", ""); КонецПроцедуры Процедура Реестр() Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |ОбрабатыватьДокументы НеПроведенные; |Обрабатывать НеПомеченныеНаУдаление; |Без итогов; |АктТранспортный = Документ.АктТранспортный.ТекущийДокумент; |Сумма = Документ.АктТранспортный.Сумма; |Фирма = Документ.АктТранспортный.Фирма; |Условие (Фирма в ВыбФирма); |Группировка АктТранспортный; |"; Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Ном=0; Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Реестр"); Таб.ВывестиСекцию("Шапка"); Состояние("Заполнение выходной таблицы..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); СуммаИтог = 0; Пока Запрос.Группировка() = 1 Цикл Ном = Ном + 1; СуммаИтог = СуммаИтог + Запрос.Сумма; Таб.ВывестиСекцию("Строка"); КонеЦЦикла; Таб.ВывестиСекцию("Итоги"); Таб.ТолькоПросмотр(1); Таб.Показать("Реестр", ""); КонецПроцедуры; |
|||
1
akaBrr
28.08.12
✎
09:52
|
(0) в запросе сумму получить и убрать все упоминания о Док, это про Сформировать
|
|||
2
akaBrr
28.08.12
✎
09:54
|
+(1) что в Реестр() и было сделано собственно
|
|||
3
julia_rostov
28.08.12
✎
09:56
|
на форме две кнопочки Формирование Реестра и просто формирование документа, я имею ввиду может как упростить и избавиться от повторения запроса
|
|||
4
akaBrr
28.08.12
✎
09:57
|
(3) в Сформировать в таблицу данные из Док берутся?
|
|||
5
julia_rostov
28.08.12
✎
09:58
|
Да все береться из одного документа
|
|||
6
akaBrr
28.08.12
✎
10:00
|
+(4) в смысле в таблице "Печать_Акта" в формулах ячеек встречаются ссылки на атрибуты Док?
|
|||
7
miki
28.08.12
✎
10:03
|
(3)Разные кнопки, разные процедуры. Что упрощать?
Желание сэкономить строчки кода? |
|||
8
julia_rostov
28.08.12
✎
10:04
|
Да в таблице Печать_Акта у меня Док.Контрагент...... вот примерно так.
|
|||
9
julia_rostov
28.08.12
✎
10:06
|
Я имела ввиду может, можно запрос один раз, а потом просто к нему обращаться, сейчас это принципиальной роли не играет, будет играть роль когда внешний отчет будет выполняться за большой промежуток времени....ВыбНачПериода по ВыбКонПериода;
|
|||
10
Ork
28.08.12
✎
10:06
|
(0) Все не так и все не там.
Вот это вот : Док = СоздатьОбъект("Документ.АктТранспортный"); ... Док.ВыбратьДокументы(ВыбНачПериода, ВыбКонПериода); ... Пока Запрос.Группировка() = 1 Цикл ... Док.НайтиДокумент(Запрос.АктТранспортный); все для того, чтобы иметь текущий документ? Вот это вот : Если СпрК.НайтиПоКоду(65481) = 1 Тогда Клиент = СпрК.ТекущийЭлемент(); КонецЕсли; Означает, что всегда работаем с одним клиентом, если его код есть в базе? ДляНафигаТогда все остальные? Вот это вот очем |
|||
11
miki
28.08.12
✎
10:07
|
Навскидку:
Вот это: Если СпрК.НайтиПоКоду(65481) = 1 Тогда Клиент = СпрК.ТекущийЭлемент(); КонецЕсли; вынести из цикла. Это: Док.НайтиДокумент(Запрос.АктТранспортный); никчему. А выбор макета и вывод секций в нужную таблицу, в зависимости от какая кнопа нажата решается Если/Иначе/КонецЕсли; |
|||
12
akaBrr
28.08.12
✎
10:07
|
(8) тогда либо убираем запрос, делаем выборку за период с фильтром по фирме, либо убираем выборку и ссылки на атрибуты Док в таблице заменяем на ссылки на данные запроса.
ПС Док.ВыбратьДокументы(ВыбНачПериода, ВыбКонПериода); - это лишнее в текущем коде |
|||
13
julia_rostov
28.08.12
✎
10:10
|
Смысл в чем Если клиент выбран то выборка идет строго по периоду и по тому клиенту который выбран, если клиент не выбран то по умолчанию выборка идет по всем клиентам за выбранный период
|
|||
14
akaBrr
28.08.12
✎
10:12
|
(13) в коде нет фильтра по клиенту
|
|||
15
julia_rostov
28.08.12
✎
10:12
|
MIKI Спасибо более менее стало понятно, что лишнее, Вы тоже из Ростова?
|
|||
16
julia_rostov
28.08.12
✎
10:14
|
И еще последний вопрос каким методом проверить какая кнопка нажата?
|
|||
17
Ork
28.08.12
✎
10:20
|
(13) Вот это вот "Если клиент выбран то выборка идет строго по периоду и по тому клиенту который выбран" - из вашего кода никак не следует.
Само условие нужно унести в запрос. Примерно так: ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |ОбрабатыватьДокументы НеПроведенные; |Обрабатывать НеПомеченныеНаУдаление; |Без итогов; |АктТранспортный = Документ.АктТранспортный.ТекущийДокумент; |Фирма = Документ.АктТранспортный.Фирма; |//Примерно так |Клиент = Документ.АктТранспортный.Клиент; |Группировка АктТранспортный; |Условие (Фирма в ВыбФирма); |"; Если выбКлиент.Выбран() = 1 Тогда ТекстЗапроса = ТекстЗапроса + "Условие(Клиент = выбКлиент);"; КонецЕсли; ЗЫ. Выбклиент - поле на форме с типом "Справочник.Клиенты" |
|||
18
Ork
28.08.12
✎
10:22
|
(16) В свойствах кнопки прописывается процедура, которая выполняется при нажатии.
|
|||
19
miki
28.08.12
✎
10:37
|
(18)+ задай для процедуры параметр, например так:
Процедура Реестр(ИмяМакета="Реестр") У кнопки [Сформировать] В свойствах будет Реестр("Акт"), у кнопки [Реестр] можно или Реестр("Реестр") или просто Реестр(). А в процедуре проверять: Если ИмяМакета="Реестр" Тогда <...> Иначе <...> (15)ну, да. |
|||
20
julia_rostov
28.08.12
✎
10:39
|
Всем Спасибо большое))))
|
|||
21
vladko
28.08.12
✎
10:57
|
(20) не хватает функции в запросе по сумме. С ней надёжнее работать
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |