gifts2017

Изменение типовых отчетов ТиС

Опубликовал Poppy (poppy) в раздел Программирование - Практика программирования

Большинство отчетов типовой конфигурации ТиС (Комплексная) имеют ограничение в 5 группировок. Настоящая статья позволит начинающему программисту снять указанные ограничения.
Вопрос #1. Как снять ограничение в 5 группировок в отчетах типовой ТиС?
В типовых конфигурациях, основанных на оперативном учете имеются однотипные отчеты. Указанные отчеты, как правило, имеют вид:

Такие отчеты имеют ограничения на использование одновременно более пяти группировок. Некоторые квази-специалисты считают, что это ограничения платформы и объекта «Запрос» http://infostart.ru/blogs/589/ , но это не так. Например, в типовой конфигурации ПУБ, некоторые аналогичные отчеты имеют ограничения в 8…9 группировок.
Причина ограничения состоит в том, что для каждой группировки используется своя секция из таблицы-макета «СтрокаХ». В конфигурации ТиС во всех отчетах таких секций – пять.

Поэтому, в отчете имеется код, ограничивающий формирование отчета в случае, если пользователь выбрал более пяти группировок.
Если КоличествоГруппировок > 5 Тогда
	Предупреждение("Нельзя сделать больше 5 группировок!",60);
	Возврат;
КонецЕсли;
 

Попробуем обойти указанное ограничение.
Вариант #1.
Первый способ решения задачи – увеличить количество секций в таблице-макете. Напрмер:

После такой доработки необходимо изменить код условия-оганичителя:
Если КоличествоГруппировок > 6 Тогда
	Предупреждение("Нельзя сделать больше 6 группировок!",60);
	Возврат;
КонецЕсли;
 

Вариант #2.
Идея этого решения состоит в том, чтобы одну и ту же секцию таблицы-макета использовать для группировок различного уровня. Для этого достаточно изменить одну строку кода:
Вместо строки:
НазваниеСекции="Строка"+Ном;

написать:
НазваниеСекции="Строка"+((Ном-1)%5+1);

После такой доработки необходимо исключить код условия-ограничителя.
//Если КоличествоГруппировок > 5 Тогда
//	Предупреждение("Нельзя сделать больше 5 группировок!",60);
//	Возврат;
//КонецЕсли;

При таком решении количество одновременно используемых группировок ограничено только теми группировками, которые предложены пользователю для выбора.

Вопрос #2. Как увеличить количество группировок, из которых может выбирать пользователь?

Группировки отчета определяются в теле модуля отчета. Например, в отчете «Ведомость по партиям ТМЦ»:
Группировки.ДобавитьЗначение("Фирма",	"Фирма");
Группировки.ДобавитьЗначение("СтатусПартии",	"Статус партии");
Группировки.ДобавитьЗначение("МОЛ",		"МОЛ");
Группировки.ДобавитьЗначение("Поставщик",	"Поставщик");
Группировки.ДобавитьЗначение("Номенклатура",	"Номенклатура");
Группировки.ДобавитьЗначение("СвойствоПартии","Свойство партии");
Группировки.ДобавитьЗначение("Партия",	"Партия");
Группировки.ДобавитьЗначение("Документ",	"Документы движения");


Для расширения списка группировок необходимо добавить аналогичную строку кода, например:
Группировки.ДобавитьЗначение("ДатаПартии",		"Дата партии");

Первый параметр метода ДобавитьЗначение() должен удовлетворять требованиям, предъявляемым к идентификаторам переменных запроса. Кроме этого, необходимо добавить переменную в запрос с таким же идентификатором, если такой переменной еще нет. Например:
ТекстЗапроса = 
"//{{ЗАПРОС(Сформировать)
|Период с ДатаНачала по ДатаКонца;
|Фирма		= Регистр.ПартииНаличие.Фирма;
|УпрАналитика	= Регистр.ПартииНаличие.Фирма.УпрАналитика;
|ЮрЛицо 		= Регистр.ПартииНаличие.Фирма.ЮрЛицо;
|СтатусПартии 	= Регистр.ПартииНаличие.СтатусПартии;
|Номенклатура	= Регистр.ПартииНаличие.Номенклатура;
|МОЛ		= Регистр.ПартииНаличие.МОЛ;
|Партия		= Регистр.ПартииНаличие.Партия;
|ДатаПартии	= Регистр.ПартииНаличие.ДатаПартии; // Добавленная переменная
|СвойствоПартии	= Регистр.ПартииНаличие.Партия.Свойство;
|Поставщик	= Регистр.ПартииНаличие.Партия.Поставщик;
|Док		= Регистр.ПартииНаличие.ТекущийДокумент;
|КодОперации	= Регистр.ПартииНаличие.КодОперации;"; 

Вопрос #3. Есть ли ограничение по использованию группировок в платформе?

Ограничение есть. Для формирования запроса используется временный файл в формате DBF. По полям значений и упорядочивания строятся индексы. Следует иметь в виду, что максимальная длина ключа CDX.файла равна 240 байтам и максимальная длина индексного выражения равна 255 байтам.

Размер группировки в ключе зависит от типа данных:
Строка Размер строки + 1 (байт)
Число Размер числа + 1 (байт)
Дата 10(байт)
Перечисление 10(байт)
Справочник одноуровневый 10(байт)
Справочник многоуровневый "без групп" 19(байт)
Справочник многоуровневый 20(байт)
Справочник неопределенного вида 14(байт)
Документ 10(байт)
Документ неопределенного вида 14(байт)

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Александр Шишкин (Шёпот теней) 18.09.08 08:57
Господи!...
Как я люблю Poppy!
Воот...

П.С. извините за личное признание.... нет сил сдержать свои эмоции...
2. VasilyKushnir (vasilykushnir) 18.09.08 09:21
(1) Скажу поскромнее - ВОСХИЩЕН!.

Хочу обратить внимание начинающих постеров на то, как Poppy подала материал. Учитесь!
А то как-то сделал замечание одному товарищу, что нет не то что скринов, но даже краткого описания, ответом было " Я не волшебник, я только учусь". С таким подходом не то что волшебником - даже Мастером не станет...
3. kitt al;dskjf;ldasjkf (kitt) 19.09.08 10:56
в 7ке в запросе ограничение на 10 группировок - программное на уровне платформы. Попробуйте написать запрос с более чем 10 группировками, и вылезет ошибка.
4. Аркадий Кучер (Abadonna) 19.09.08 11:33
Хоть я уж давно подобное юзаю, но за "Некоторые квази-специалисты..." плюс безусловно ;)
5. Олег Пономаренко (O-Planet) 19.09.08 11:40
Польщен, но не впечатлило.
6. vip (vip) 19.09.08 12:47
(4) Не, большее впечаление произвело
> "Настоящая статья позволит начинающему программисту" и далее по тексту.
Начинающие программисты, кончающие программисты...
Кгрхм....
vasilykushnir; +1 Ответить 1
7. VasilyKushnir (vasilykushnir) 19.09.08 13:42
(6) Отжигаешь конкретно (:-)
8. Оракул Айметдинов (jhfrek) 19.09.08 20:53
Poppy безусловно гений!
Однозначно плюс!
9. Poppy (poppy) 20.09.08 00:02
(3)
> Попробуйте написать запрос с более чем 10 группировками, и вылезет
> ошибка.

Попробовала.
Запрос с двенадцатью группировками:
Код
   "//{{ЗАПРОС(Сформировать)
   |Период с ВыбНачПериода по ВыбКонПериода;
   |Фирма = Регистр.ПартииНаличие.Фирма;
   |ЮрЛицо = Регистр.ПартииНаличие.Фирма.ЮрЛицо;
   |УпрАналитика = Регистр.ПартииНаличие.Фирма.УпрАналитика;
   |ОсновнойСчет = Регистр.ПартииНаличие.Фирма.ОсновнойСчет;
   |СтатусПартии = Регистр.ПартииНаличие.СтатусПартии;
   |Партия = Регистр.ПартииНаличие.Партия;
   |ДатаПартии = Регистр.ПартииНаличие.ДатаПартии;
   |КодОперации = Регистр.ПартииНаличие.КодОперации;
   |ОКЕИ = Регистр.ПартииНаличие.Номенклатура.БазоваяЕдиница.ОКЕИ;
   |ВидНоменклатуры = Регистр.ПартииНаличие.Номенклатура.ВидНоменклатуры;
   |СтавкаНДС = Регистр.ПартииНаличие.Номенклатура.СтавкаНДС;
   |Количество = Регистр.ПартииНаличие.Количество;
   |СтавкаНП = Регистр.ПартииНаличие.Номенклатура.СтавкаНП;
   |Функция КоличествоНачОст = НачОст(Количество);
   |Функция КоличествоПриход = Приход(Количество);
   |Функция КоличествоРасход = Расход(Количество);
   |Функция КоличествоКонОст = КонОст(Количество);
   |Группировка Фирма без упорядочивания;
   |Группировка ЮрЛицо без упорядочивания;
   |Группировка УпрАналитика без упорядочивания;
   |Группировка ОсновнойСчет;
   |Группировка СтатусПартии;
   |Группировка Партия;
   |Группировка ДатаПартии;
   |Группировка КодОперации;
   |Группировка ОКЕИ;
   |Группировка ВидНоменклатуры;
   |Группировка СтавкаНДС;
   |Группировка СтавкаНП без упорядочивания;
   |"//}}ЗАПРОС
   ;
Показать полностью


...и с шестнадцатью:
Код
   ТекстЗапроса = 
   "//
   |ПрефиксНомеровДокументов = Справочник.СвоиЮрЛица.ПрефиксНомеровДокументов;
   |ОКВЭД = Справочник.СвоиЮрЛица.ОКВЭД;
   |ОКДП = Справочник.СвоиЮрЛица.ОКДП;
   |ОКОНХ = Справочник.СвоиЮрЛица.ОКОНХ;
   |ОКОПФ = Справочник.СвоиЮрЛица.ОКОПФ;
   |ОКФС = Справочник.СвоиЮрЛица.ОКФС;
   |КодИМНС = Справочник.СвоиЮрЛица.КодИМНС;
   |УчитыватьНДС = Справочник.СвоиЮрЛица.УчитыватьНДС;
   |УчитыватьНП = Справочник.СвоиЮрЛица.УчитыватьНП;
   |НомерЛистаКассовойКниги = Справочник.СвоиЮрЛица.НомерЛистаКассовойКниги;
   |ИндивидуальныйПредприниматель = Справочник.СвоиЮрЛица.ИндивидуальныйПредприниматель;
   |УчитыватьПоложительныеСуммовыеРазницыПриНачисленииНДС = Справочник.СвоиЮрЛица.УчитыватьПоложительныеСуммовыеРазницыПриНачисленииНДС;
   |УчитыватьОтрицательныеСуммовыеРазницыПриНачисленииНДС = Справочник.СвоиЮрЛица.УчитыватьОтрицательныеСуммовыеРазницыПриНачисленииНДС;
   |УчитыватьПоложительныеСуммовыеРазницыПриОпределенииВычетовПоНДС = Справочник.СвоиЮрЛица.УчитыватьПоложительныеСуммовыеРазницыПриОпределенииВычетовПоНДС;
   |УчитыватьОтрицательныеСуммовыеРазницыПриОпределенииВычетовПоНДС = Справочник.СвоиЮрЛица.УчитыватьОтрицательныеСуммовыеРазницыПриОпределенииВычетовПоНДС;
   |УчитыватьНДСПоквартально = Справочник.СвоиЮрЛица.УчитыватьНДСПоквартально;
   |Группировка ПрефиксНомеровДокументов;
   |Группировка ОКВЭД;
   |Группировка ОКДП;
   |Группировка ОКОНХ;
   |Группировка ОКОПФ;
   |Группировка ОКФС;
   |Группировка КодИМНС;
   |Группировка УчитыватьНДС;
   |Группировка УчитыватьНП;
   |Группировка НомерЛистаКассовойКниги;
   |Группировка ИндивидуальныйПредприниматель;
   |Группировка УчитыватьПоложительныеСуммовыеРазницыПриНачисленииНДС;
   |Группировка УчитыватьОтрицательныеСуммовыеРазницыПриНачисленииНДС;
   |Группировка УчитыватьПоложительныеСуммовыеРазницыПриОпределенииВычетовПоНДС;
   |Группировка УчитыватьОтрицательныеСуммовыеРазницыПриОпределенииВычетовПоНДС;
   |Группировка УчитыватьНДСПоквартально;
   |"//
Показать полностью


Ошибка не вылезла. :(
Чтобы это значило?
10. Poppy (poppy) 20.09.08 00:11
(1,2,8)
Спасибо мальчики за поддержку. У меня есть еще пара неначатых статей. После таких комментариев постараюсь найти силы их дописать...
11. Олег Пономаренко (O-Planet) 20.09.08 00:25
(10) Пара неначатых статей, которые нужно дописать - звучит, как ряд неполученных оргазмов, которые еще предстоит достигнуть.

ПС. Все равно, самый объективный из всех, кто любит poppy - это Йа! Хотя, "любит" - сказано слишком. Первая здесь все равно Дульс... э ... Ворона! :)
12. Аркадий Кучер (Abadonna) 20.09.08 11:47
(3)>в 7ке в запросе ограничение на 10 группировок - программное на уровне платформы
Стандартный диалог:
- У тебя какая собака?
- Немецкая овчарка
- Т.е. абсолютно ЧЁРНАЯ?
Откуда у людей бытует это заблуждение - одному богу известно ;)
Кто хочет глянуть как должна выглядеть НАСТОЯЩАЯ, плиз http://www.ovcharki.com/
13. VasilyKushnir (vasilykushnir) 22.09.08 09:14
(12) По ссылке оказалась НАСТОЯЩАЯ восточноевропейская овчарка. (:-)
А настоящая немецкая действительно черная - чуток ниже восточноевропейской, но несколько помощнее, пошире в груди - типичный танк.
14. Аркадий Кучер (Abadonna) 23.09.08 14:17
(13) Ну ты еще мне про это расскажи!
А жирными буквами там про что написано? "Немецкая овчарка
питомник продажа щенков немецкой овчарки"
Стал быть, имея родословную, я 12.5 лет заблуждался насчет породы своей собаки?
Вась, у меня даже корочки инструктора служебного собаководства имеются ;)
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа