Зареждане на списък със стойности в стандартни отчети (обикновено приложение)
Формулиране на проблема
Често има нужда да зададете филтри в отчетите под формата на списък със стойности, но въвеждането на този списък е доста трудоемко. Всъщност се предлага всеки елемент да се избира отделно, което със сигурност е неудобно. Освен това често се налага резултатът от един отчет да се използва като селекция за друг, а декодиране от този вид не се предоставя. Например, задачата е поставена, като се знае списъкът със стоки, закупени от доставчика през месеца, да се получат продажбите на всички стоки от списъка, да речем, за последните шест месеца. Ако списъкът е малък, тогава проблемите са изравнени. Ако списъкът съдържа стотици продукти, тогава е изключително трудно да изберете всеки от тях ръчно в списъка със стойности за избор (в допълнение към трудоемкостта са възможни и грешки при избора).
Решението на проблема
За щастие много стандартни отчети използват общи формуляри, което ви позволява да замените формуляра за избор със списъка със стойности за селекции. А съществуващата външна обработка от ITS диска „Зареждане на данни от табличен документ“ ви позволява лесно да попълните списък от таблично поле. По този начин действията на потребителя ще бъдат сведени до копиране на списъка от отчета и поставяне на този списък в селекцията.
Докладите, базирани на Report Builder, използват отчет, наречен "Universal Report" като шаблон, докато отчетите, базирани на системата за съставяне на данни, се основават на така наречения общ шаблон за отчет, от който модулът "TypicalReports" е неразделна част. Именно тези обекти могат да бъдат модифицирани в конфигурацията, за да извикат собствена обработка на избора на списък със стойности.
За по-лесно модифициране и поддръжка по време на актуализации е по-добреизползвайте общ модул и извиквайте процедурите за модификация, разположени в него. Нека назовем такъв модул, да кажем „Module_ValueListFit“. Съдържанието на модула е приблизително следното (пълният текст на модула е достъпен в приложената конфигурация):
Целта на този код е една - да стартира външна обработка (която също е прикачена), като му предава списък със стойности, с които ще се извършват действия. Освен това е посочен масив от възможни типове.
Промяна на поведението на отчета въз основа на Report Builder
Остава само да се обадите на тази процедура. Например така:
Това е всичко - сега всички отчети, изградени въз основа на отчета "UniversalReport" (например "Продажби", "Покупки" и т.н.), ще извикат нашата обработка, когато се опитваме да изберем списък със стойности във филтрите. Вярно е, че отчетът трябва да използва стандартния формуляр за настройки на отчета.
Счетоводните отчети имат различни форми на персонализиране, но използват процедурите на общия модул "Счетоводни отчети". Което също ви позволява да направите следната модификация:
Забележка: Няма абсолютно нищо, което да пречи да използвате процедурата "AdditionalProcessValueSelectProcessing" за промяна на поведението на всяко поле за въвеждане с тип "Списък със стойности" - достатъчно е да поставите извикването в манипулатора "SelectStart".
Модифициране на поведението на отчета на базата на Generic Report Template Engine (система за съставяне на данни)
Малко по-трудно е да се излъже отчет, който използва типичен шаблон за отчет (описанието е на ITS диска) - малко хора ще използват настройките на филтъра във формата за настройки на структурата на отчета (въпреки че поведението му в общия случай трябва да се промени). Най-вероятно потребителят ще използва бързия филтър от потребителския панел или филтърната страница на същияпанели. И тъй като в общия случай всеки отчет има свои собствени форми, няма форма за промяна като такава. А самият панел се рисува динамично. Но! Цялата логика на работа, по един или друг начин, е вградена в модула "Типични отчети". Съответно си струва да го промените.
Друга особеност е, че имаме нужда от манипулатор във формата за отчет и тъй като нямаме достъп до формуляра, трябва да използваме метода на формуляра с два параметъра вместо манипулатора (тъй като манипулаторът "StartSelection" трябва да има точно толкова) и ЗАДЪЛЖИТЕЛНО! извикване на всяка процедура или функция от модула "StandardReports". Използвах процедурата "ChoiceProcessing" (тя трябва да присъства в модула за формуляр за отчет, за да функционира логиката на генериране на типичен шаблон за отчет), която извиква процедурата "ReportFormChoiceProcessing" от модула "StandardReports". Естествено, трябва да предоставите възможност за нормално изпълнение и отделно да обработите случая на използване като манипулатор:
Извикването на процедурата от модула "Стандартни отчети" се случва в процедурата "Обработка на избора на формуляр за отчет":
И накрая, присвояването на манипулатор става по следния начин:
Връзката се извиква в модула "StandardReports" в процедурата "UserPanelDisplay Control":
Готово - сега, когато изберете в потребителския панел (на страницата Филтър, не в бързите филтри - за да промените поведението на бързите филтри, вижте приложената конфигурация) в избора на списък със стойности, ще бъде извикана външна обработка, чиято работа ще бъде обсъдена по-късно.
Външна обработка "Избор на списък със стойности"
Тази обработка приема като вход оригиналния списък със стойности и ви позволява да го редактирате в полето на таблицата по обичайния начин. Единствената функцияе бутон "От таблица", при натискане на който се показва поле от табличен документ, в което можете да поставите копирания списък (или да го заредите от файл, включително от Excel). Когато щракнете върху бутона „Получаване на списък“, данните от полето на документа в електронната таблица се добавят към редактируемия списък. Стойностите се преобразуват по същия алгоритъм, който се използва при обработката на "Зареждане на данни от електронна таблица" (от ITS диска). Типовете стойности са ограничени до типа стойност на списък.
За удобство е добавена и възможност за получаване на данни от произволна заявка към базата данни:
Заключение
Като заключение трябва да се отбележи, че описаният алгоритъм стана възможен само благодарение на стандартизирания подход на 1C към разработването на стандартни отчети за конфигурации. Тъжното е, че технологичната платформа не предоставя възможност за задаване на произволна форма за редактиране на списъци със стойности. Това означава, че ако трябва да промените поведението на формата за избор на списък със стойности на произволно място, тогава по един или друг начин ще трябва да извикате и / или да зададете манипулатор за събитието SelectStart. Но какво да правим, когато не е така? Просто сменете модула на формуляра. и ако няма достъп до него, тогава нищо не може да се направи.
Приложената външна обработка е необходима част от алгоритъма, но може да бъде модифицирана за различни нужди. За разработчика може да представляват интерес някои от механизмите, използвани при обработката:
- Конвертиране на данни от табличен документ (по алгоритъма от обработката "Зареждане на данни от табличен документ" (ITS диск));
- Зареждане на данни в полето на табличен документ от Excel файл;
- Скриване/показване на панела с разделител (обърнете внимание нареда на задаване на свързвания за елементи).
Разтоварването на информационната база (.dt) дава възможност да се запознаете с работата на разглеждания алгоритъм, без да го въвеждате в съществуващата конфигурация.