Розраховуємо значення прямо в табличному документі, vr-online - безкоштовний електронний журнал для

Розраховуємо значення прямо в табличному документі, vr-online - безкоштовний електронний журнал для
95% свого робочого часу мені доводиться витрачати на програмування під платформу 1С: Підприємство 8.2. Моя робота нерозривно пов'язане з розробкою під 1С: Підприємство вже кілька років і за цей час мені вдалося накопичити достатньо непоганий багаж знань. Здавалося б, структурується в голові думки і пиши на сайті суто про програмування під улюблену платформу. І адже таке бажання приходить постійно, але часу вічно не вистачає. На роботі займаєшся суто роботою, а оскільки ЗП не вистачає, то вдома доводиться запускати 1С / PHP Storm і працювати над різними додатковими проектами. Ось виходить, що часу залишається зовсім трохи і це трохи хочеться повністю присвятити родині (насправді сім'ї хочеться присвячувати весь вільний час, але поки від додаткової роботи відмовитися неможливо). Вибити час для написання декількох кілобайт тексту для VR часто буває вкрай проблематично. Цим сумним вступом я хочу відразу відповісти на листи з питанням: "Spider_NET, ти куди пропав?".

Ок, тепер перейдемо до справи. Минулого тижня мені треба було швиденько зварганити простенький звіт для нашої бухгалтерії. Роботи було вкрай небагато - написав запит, вивів дані і готово. Якби не одне маленьке "але". У звіті була графа "Інші", дані для якої неможливо отримати під час формування звіту. Для конкретної рядки дані можуть бути, а можуть і не бути. В голову відразу прийшло рішення: "потрібно реалізувати можливість редагування відповідних осередків табличного документа і організувати перерахунок підсумкових полів". Начебто нічого складного, але до цього моменту з подібними завданнями я не стикався, і перший раз довелося трошки поламати голову.

Намалювавши на клаптику паперу приблизний план дій, я приступив до реалізації. В результаті у мене вийшов наступний алгоритм дій:

1. Визначаємо в макеті табличного документа осередки, значення яких будуть редагуватися. В об'єктному інспектора (до сих пір не знаю, як ця штука називається на мові 1С'ніков, тому за звичкою використовую Delph'ячью інтерпретацію) для таких осередків виставляємо властивість: "Містить значення" і вибираємо відповідний тип даних (в моєму випадку "Число "). Для зручності редагування і відображення введених даних рекомендується також виставити значення для властивостей "Формат" і "Формат редагування". Для свого звіту я виставив "ЧЦ = 15; ЧДЦ = 2; ЧГ = 3,0 ".

2. Для табличного документа, в який відбуватиметься висновок даних (у мене він був розташований на формі) створюємо обробник події "ПріІзмененііСодержімогоОбласті". Дана подія завжди виникає в момент редагування будь-якої області табличного документа. У тілі обробника пишемо приблизно наступний код:

Процедура ТаблічнийДокументПріІзмененііСодержімогоОбласті (Елемент, Область) ТабДок = ЕлементиФорми.ТаблічнийДокумент; // Функція "ПолучітьНомераОбластейДанних" повертає структуру, яка містить // дані про становище колонок, які повинні редагуватися. Повний код функції // доступний нижче. НомераОбластей = ПолучітьНомераОбластейДанних (); НомераОбластей.ОбластьДаннихНіз = ТабДок.ВисотаТабліци - 3; // Якщо координати поточний області потрапляють в список редагованих, то можна // приступати до редагування Якщо Область.Лево> = НомераОбластей.КолонкаНачіслено І Область.Лево <= НомераОбластей.КолонкаСуммаКВыплате И Область.Верх>= НомераОбластей.ОбластьДаннихВерх І Область.Верх <= НомераОбластей.ОбластьДанныхНиз Тогда //Получаем введенные пользователем значения СуммаНачислено = ТабДок.Область(Область.Верх, НомераОбластей.КолонкаНачислено).Значение; СуммаНалогНаДоходы = ТабДок.Область(Область.Верх, НомераОбластей.КолонкаНалогНаДоходы).Значение; СуммаПрочие = ТабДок.Область(Область.Верх, НомераОбластей.КолонкаПрочие).Значение; //Расчитываем итоги по строке СуммаУдержаноВсего = СуммаПрочие + СуммаНалогНаДоходы; СуммаКВыплате = СуммаНачислено - СуммаУдержаноВсего; //Выводим в область расчитанное значение ТабДок.Область(Область.Верх, НОмераОбластей.КолонкаВсего).Значение = СуммаУдержаноВсего; ТабДок.Область(Область.Верх, НомераОбластей.КолонкаСуммаКВыплате).Значение = СуммаКВыплате; //Приступаем к расчету итогов ИтоговоеЗначение = 0; //считаем итог по колонке Для сч = НомераОбластей.ОбластьДанныхВерх ПО НомераОбластей.ОбластьДанныхНиз-1 Цикл ИтоговоеЗначение = ИтоговоеЗначение + ТабДок.Область(сч, Область.Лево).Значение; КонецЦикла; ТабДок.Область(НомераОбластей.ОбластьДанныхНиз, Область.Лево).Значение = ИтоговоеЗначение; КонецЕсли; КонецПроцедуры

Сподіваюся, що з розумінням цієї процедури проблем виникнути не повинно, а раз так, то тобі залишається лише поглянути на код функції ПолучітьНомераОбластейДанних ():

Функція ПолучітьНомераОбластейДанних () Повернення Новий Структура ( "КолонкаНачіслено, КолонкаНалогНаДоходи, КолонкаПрочіе, КолонкаВсего, КолонкаСуммаКВиплате, ОбластьДаннихВерх, ОбластьДаннихНіз", 29, 38, 45, 52, 60, 22); КонецФункціі

Функція складається з одного рядка і все що в ній відбувається так це формування структури зі значеннями координат розташування колонок.

За всю мою практику необхідність у вирішенні такого завдання виникла всього лише один раз, і я не впевнений, що щось подібне виникне в найближчому майбутньому, проте потрібно бути готовим до всього. Цілком можливо, що з щось подібним зіткнешся і ти. Якщо це трапиться, то сподіваюся, мій пост дозволить тобі заощадити крапельку часу.

Схожі статті