|
Редактируемая ячейка СКД | ☑ | ||
---|---|---|---|---|
0
ETurdymuratov
09.12.15
✎
12:59
|
Есть отчет сделанный в СКД. Такого вида:
http://www.picshare.ru/view/6942691/ Все работает нормально. Поле "Оплачено" заполняется при проведении соответствующего документа, поле "Остаток" отражает разницу между полями "К оплате" и "Оплачено" http://www.picshare.ru/view/6942692/ поле "Остаток" переходящий с предыдущего периода. Вопрос такой, как можно сделать "Оплачено" редактируемым и при изменении данного поля чтобы автоматически пересчитывался остаток на каждую дату(поле "Остаток") и затем в итогах? |
|||
1
Nuobu
09.12.15
✎
13:02
|
Нет.
|
|||
2
zippygrill
09.12.15
✎
13:03
|
(1) можно но не в СКД а на макет обычный
|
|||
3
ETurdymuratov
09.12.15
✎
13:05
|
(1) в смысле не реально?
|
|||
4
kittystark
09.12.15
✎
14:31
|
это можно сделать
для отчета СКД свою форму, на форме свой таб.док. Результат 1. в модуле объекта в ПриКомпоновкеРезультата смотришь что за поле выводится и если это поле "Оплачено" снимаешь защиту для ячейки 2. в модуле формы Результату цепляешь обработчик ПриИзмененииСодержимогоОбласти - в нем смотришь что где было поменяно, и дальше алгоритм расчета |
|||
5
ETurdymuratov
11.12.15
✎
08:03
|
(4) Благодарю за инф. Нашел примерно то что я хотел тут: http://catalog.mista.ru/public/158630/
|
|||
6
ETurdymuratov
11.12.15
✎
08:40
|
(4) Почти интегрировал механизм у себя в отчет,
1. в модуле объекта в ПриКомпоновкеРезультата смотришь что за поле выводится и если это поле "Оплачено" снимаешь защиту для ячейки - Алилуя теперь редактируется!!! 2. в модуле формы Результату цепляешь обработчик ПриИзмененииСодержимогоОбласти - в нем смотришь что где было поменяно, и дальше алгоритм расчета выдает ошибку: {Отчет.ВзаиморасчетыСПоставщиками.Форма.ФормаОтчета.Форма(96)}: Ошибка при вызове метода контекста (ПолучитьИзВременногоХранилища) Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки); по причине: Недопустимое значение параметра (параметр номер '1') проверил через отладчик функцию ПолучитьИзВременногоХранилища() параметр ДанныеРасшифровки оказалось пустая строка. В самом примере все ок, туда передается адрес Это как то связано с тем что пример сделан на упр формах а мой отчет на толстом клиенте? |
|||
7
aleks_default
11.12.15
✎
09:18
|
"и дальше алгоритм расчета"
вот здесь самое интересное и начнется... |
|||
8
cw014
11.12.15
✎
09:24
|
(6) А что у тебя в данных расшифровки? У тебя же вроде бы значение цеплять надо, не?
|
|||
9
ETurdymuratov
11.12.15
✎
09:40
|
Д (8) Да, там есть поле(редактируемое пользователем) от которого должны перерасчитываться остатки на дату и по итогам.
|
|||
10
ETurdymuratov
11.12.15
✎
09:41
|
(7) ...уже началось))
|
|||
11
kittystark
11.12.15
✎
10:10
|
(6) трюк с Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
думаю нафиг не нужен возьми в модуле объекта объяви экспортную переменную ДанныеРасшифровкиГлоб, в ПриКомпоновкеРезультата после того, как у тебя ПроцессорВывода выведет весь отчет запомни ДанныеРасшифровкиГлоб = ДанныеРасшифровки а дальше с помощью этого Функция ПолучитьПолеПоРасшифровкеОбластиСКД( областьТабличногоПоля ) Экспорт Попытка ИндексРасшифровки = Число(областьТабличногоПоля.Расшифровка); ЭлементРасшифровкиДанных = ДанныеРасшифровкиГлоб.Элементы[ИндексРасшифровки]; ЭлементРасшифровкиДанныхПоля = ЭлементРасшифровкиДанных.ПолучитьПоля(); возврат ЭлементРасшифровкиДанныхПоля[0].Поле; Исключение возврат Неопределено; КонецПопытки; КонецФункции определяешь что за поле соответствует ячейке табдока |
|||
12
aleks_default
11.12.15
✎
10:12
|
(10) А еще интереснее будет когда ползователь залезет в настройки и поменяет группировки.
|
|||
13
kittystark
11.12.15
✎
10:31
|
(12) на первых порах можно отрубить стандартную форму настроек, подсунуть свою - чтоб не повадно было чего-то менять
а так да - на написание почти универсального алгоритма, учитывающего различные комбинации вложенности группировок как по строкам, так и по столбцам, с использованием массивов-структур-массивов-структур, заданием расчетных формул, влияющих и зависимых полей - у меня ушло НЕ МЕНЕЕ ПОЛУГОДА пусть ТС решает что нужнее |
|||
14
aleks_default
11.12.15
✎
10:47
|
(13) И... Твое резюме. Стоит ли желание буха увидеть в отчете "чтобы автоматически пересчитывался остаток" полугода рабочего времени?
|
|||
15
kittystark
11.12.15
✎
12:12
|
в моем случае это была целая подсистема планирования продаж, я и не жалею - куча народа реально пользуется
а если жестко зафиксировать структуру настроек, отрубив стандартную форму, то в его случае можно наваять гораздо быстрее |
|||
16
ETurdymuratov
11.12.15
✎
15:01
|
(15) Да скорее всего отрублю возможность пользователям менять структуру отчета. В принципе это и не нужно пользователям.
|
|||
17
ETurdymuratov
13.12.15
✎
19:09
|
(11) Объявил в модуле отчета переменную, тут же вставил функцию ПолучитьПолеПоРасшифровкеОбластиСКД. Параметр областьТабличногоПоля у меня называется СуммаРасход(я так понимаю это наименование той самой редактируемой ячейки в макете?), затем из модуля формы обращаюсь к этой функции. Но при проверке ругается: Переменная не определена (СуммаРасход)
ЗначенияРасшифровки = ПолучитьПолеПоРасшифровкеОбластиСКД(<<?>>СуммаРасход); |
|||
18
kittystark
14.12.15
✎
11:43
|
(17) не-е-е... так не пойдет, макеты тут ни причем
у тебя есть табличный документ, в СКД он обычно носит имя Результат, так вот ОбластьСКД в данном случае подразумевает под собой область этого табдока Результат, т.е. по-сути одну ячейку, ячейку и передавай в моих отчетах редактируемых "видов" ячеек было несколько, поэтому для начала приходилось определять чего отредактировал пользователь (количество,себестоимость,цену и т.д), а потом уже брать само значение примеры вызовов 1) из модуля объекта в ПриКомпоновкеРезультата(ДокументРезультат, ...) ... Поле = ПолучитьПолеПоРасшифровкеОбластиСКД(ДокументРезультат.Область(индСтр, индКол)); ... вернет тебе только название самого поля но не его значение 2) из модуля формы ... Если ПолучитьПолеПоРасшифровкеОбластиСКД(ЭлементыФормы.Результат.Область(НомерСтроки,номерКолонки))="Количество" тогда Колво = ПолучитьЗначениеПоРасшифровкеОбластиСКД(ЭлементыФормы.Результат.Область(НомерСтроки,номерКолонки)); ... чтобы написать код функции ПолучитьЗначениеПоРасшифровкеОбластиСКД - в (6) поменяй возврат ЭлементРасшифровкиДанныхПоля[0].Поле; на возврат ЭлементРасшифровкиДанныхПоля[0].Значение; и будет тебе счастье в качестве параметра вызова этих функций можно использовать конструкцию ЭлементыФормы.Результат.ТекущаяОбласть |
|||
19
ETurdymuratov
14.12.15
✎
13:09
|
(18) Спасибо за подробные ответы! Получилось достать содержимое ячейки. Но у автора той статьи в функция ПолучитьВсеЗначенияРасшифровки() возвращает структуру Название ячейки и содержимое ячейки, затем в функция ЗаписатьПланСервер() и дальше пересчет итогов...
|
|||
20
ETurdymuratov
14.12.15
✎
13:42
|
Может тогда возвратить структуру из ПолучитьПолеПоРасшифровкеОбластиСКД?
|
|||
21
kittystark
14.12.15
✎
17:33
|
(20) да без разницы, главное чтобы сам помнил и ориентировался что у тебя в коде возвращается
лично мне проще написать две почти похожие функции, а спустя пол года, мельком взглянув, по названию понять что же возвращается функцией |
|||
22
ETurdymuratov
15.12.15
✎
14:28
|
(21) А если у меня нет группировок, как правильно переделать процедуру ПересчетИтоговВТаблице(...)? А то ругается {Отчет.ВзаиморасчетыСПоставщиками.Форма.ФормаОтчета.Форма(122)}: Значение не является значением объектного типа (Родитель)
если ЗначенияГруппировок[массивГруппировок[номерГруппировки]] = ЗначенияГруппировок[массивГруппировок[номерГруппировки]].Родитель Тогда Возврат; КонецЕсли; |
|||
23
ETurdymuratov
15.12.15
✎
14:45
|
(21) ...при изменении данного поля чтобы автоматически пересчитывался остаток на каждую дату(поле "Остаток") и затем в итогах?
|
|||
24
kittystark
15.12.15
✎
15:25
|
(22) что там за код в (4) я не смотрел, и честно говоря нет ни времени ни желания
у тебя есть значение до редактирования - можно запоминать то что в ТекущейОбласти в обработчике ПриАктивизации для табдока у тебя есть новое значение после ввода пользователем в ПриИзмененииСодержимогоОбласти, считаешь разность между ними, а дальше в цикле все ячейки остатка на последующие даты увеличиваешь на эту дельту, в т.ч. и итог вот как-то так |
|||
25
ETurdymuratov
16.12.15
✎
14:54
|
(24) Ок спасибо за внимание.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |