Зміст:
1. Створення зовнішньої обробки
3. Перенесення змін в документ
На практиці часто виникає потреба реалізувати інструмент, за допомогою якого можна було б коригувати табличну частину документа з допоміжної форми, користуючись функціоналом додаткових зовнішніх обробок. Наприклад, для програми «Управління торгівлею» розробити аналог обробки табличної частини, що використовується в конфігурації «Управління торгівлею» (див. Рис.). При цьому конфігурація повинна знаходитися на підтримці без можливості зміни.
В інтернеті можна знайти багато прикладів розробки зовнішніх друкованих форм, обробок, звітів. Але опис реалізації схожою завдання знайти не так просто. По суті, необхідно виконати відкриття додаткової форми, встановити в ній показники, виконати розрахунки і результат перенести в документ. Всі зміни потрібно виконати тільки в формі без збереження в інформаційну базу, що дозволило б користувачеві відмовитися від запису.
У цій статті я опишу спрощений приклад розробки подібного функціоналу, що дозволяє змінити ціну товару на певний відсоток в документі реалізація товарів і послуг.
1. Створення зовнішньої обробки
Створюємо форму обробки з необхідними елементами управління. У нашому випадку це - поле для введення відсотка і таблиця, в якій будуть відображені рядки табличній частини документа. Створюємо дві команди «Розрахувати» і «Перенести в документ». За кнопці «Розрахувати» ми будемо обчислювати в таблиці форми обробки нове значення ціни з урахуванням відсотка, а по кнопці «Перенести в документ» - заповнювати табличну частину документа новими значеннями.
2. Опис модуля форми
Перейдемо до опису модуля форми. Перш за все при відкритті форми нам необхідно заповнити таблицю даними табличній частині. Для цього ми використовуємо серверну процедуру «ПриСозданииНаСервере» в якій отримаємо посилання на документ і заповнимо реквізит «Товары» результатом запиту до табличній частині документа.
Посилання на документ можна отримати з параметра форми «ОбъектыНазначения». Цей параметр доступний зовнішнім обробкам в режимі «ОткритиеФормы». Параметр «ОбъектыНазначения» являє собою масив посилань обраних документів. У нашому випадку ми будемо запускати обробку тільки з форми документа, отже, масив об'єктів призначення буде містити тільки один елемент з індексом 0.
Ми описали заповнення форми вихідними даними і переходимо до опису функціоналу зміни значень табличній частині. На даному етапі ми реалізуємо завдання нашої обробки. Тут можна змінити кількість, ціну, ставку податку і т.д. Не забуваємо, що склад колонок реквізиту форми Товари теж повинен відповідати поставленому завданню. Я вибрав найпростіший варіант - зміна ціни.
3. Перенесення змін в документ
З огляду на цю можливість, опрацюємо в циклі рядки документа і встановимо нові значення. Для пошуку відповідного рядка використовуємо реквізит «НомерСтроки».
Якщо ми змінюємо якесь числове значення, то частіше за все необхідно виконати перерахунок пов'язаних значень в рядку. Наприклад, змінюючи ціну необхідно перерахувати суму, суму ПДВ і щось ще. Для цього краще використовувати типові процедури перерахунку табличній частині. Перенесемо з документа в нашу форму типової обробник події зміни ціни - «ТоварыЦенаПриИзменении».
В даному прикладі ми використовували метод пошуку рядка з реквізиту «НомерСтроки». Але може виникнути ситуація, коли в процесі виконання обробки користувач випадково змінить порядок рядків у документі, тим самим порушивши відповідність рядків табличної частини документа номеру рядків таблиці форми нашої обробки. Для забезпечення гарантованого відповідності заблокуємо вікно документа на час проведення змін. Для цього в формі обробки встановимо для властивості «РежимОткрытияОкна» значення «Блокировать окно владельца».
Спеціаліст компанії ТОВ «Кодерлайн»
Ігор Торба.