Редактируемая ячейка СКД #760357


#0 by ETurdymuratov
Есть отчет сделанный в СКД. Такого вида: Все работает нормально. Поле "Оплачено" заполняется при проведении соответствующего документа, поле "Остаток" отражает разницу между полями "К оплате" и "Оплачено" поле "Остаток" переходящий с предыдущего периода. Вопрос такой, как можно сделать "Оплачено" редактируемым и при изменении данного поля чтобы автоматически пересчитывался остаток на каждую дату(поле "Остаток") и затем в итогах?
#1 by Nuobu
Нет.
#2 by zippygrill
можно но не в СКД а на макет обычный
#3 by ETurdymuratov
в смысле не реально?
#4 by kittystark
это можно сделать для отчета СКД свою форму, на форме свой таб.док. Результат 1. в модуле объекта в ПриКомпоновкеРезультата смотришь что за поле выводится и если это поле "Оплачено" снимаешь защиту для ячейки 2. в модуле формы Результату цепляешь обработчик ПриИзмененииСодержимогоОбласти - в нем смотришь что где было поменяно, и дальше алгоритм расчета
#5 by ETurdymuratov
Благодарю за инф. Нашел примерно то что я хотел тут:
#6 by ETurdymuratov
Почти интегрировал механизм у себя в отчет, 1. в модуле объекта в ПриКомпоновкеРезультата смотришь что за поле выводится и если это поле "Оплачено" снимаешь защиту для ячейки - Алилуя теперь редактируется!!! 2. в модуле формы Результату цепляешь обработчик ПриИзмененииСодержимогоОбласти - в нем смотришь что где было поменяно, и дальше алгоритм расчета выдает ошибку: {Отчет.ВзаиморасчетыСПоставщиками.Форма.ФормаОтчета.Форма}: Ошибка при вызове метода контекста (ПолучитьИзВременногоХранилища)     Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки); по причине: Недопустимое значение параметра (параметр номер '1') проверил через отладчик функцию ПолучитьИзВременногоХранилища параметр ДанныеРасшифровки оказалось пустая строка. В самом примере все ок, туда передается адрес Это как то связано с тем что пример сделан на упр формах а мой отчет на толстом клиенте?
#7 by aleks_default
"и дальше алгоритм расчета" вот здесь самое интересное и начнется...
#8 by cw014
А что у тебя в данных расшифровки? У тебя же вроде бы значение цеплять надо, не?
#9 by ETurdymuratov
Д Да, там есть поле(редактируемое пользователем) от которого должны перерасчитываться остатки на дату и по итогам.
#10 by ETurdymuratov
...уже началось))
#11 by kittystark
трюк с  Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки); думаю нафиг не нужен возьми в модуле объекта объяви экспортную переменную ДанныеРасшифровкиГлоб, в ПриКомпоновкеРезультата после того, как у тебя ПроцессорВывода выведет весь отчет запомни ДанныеРасшифровкиГлоб = ДанныеРасшифровки а дальше с помощью этого определяешь что за поле соответствует ячейке табдока
#12 by aleks_default
А еще интереснее будет когда ползователь залезет в настройки и поменяет группировки.
#13 by kittystark
на первых порах можно отрубить стандартную форму настроек, подсунуть свою - чтоб не повадно было чего-то менять а так да - на написание почти универсального алгоритма, учитывающего различные комбинации вложенности группировок как по строкам, так и по столбцам, с использованием массивов-структур-массивов-структур, заданием расчетных формул, влияющих и зависимых полей - у меня ушло НЕ МЕНЕЕ ПОЛУГОДА пусть ТС решает что нужнее
#14 by aleks_default
И... Твое резюме. Стоит ли желание буха увидеть в отчете "чтобы автоматически пересчитывался остаток"  полугода рабочего времени?
#15 by kittystark
в моем случае это была целая подсистема планирования продаж, я и не жалею - куча народа реально пользуется а если жестко зафиксировать структуру настроек, отрубив стандартную форму, то в его случае можно наваять гораздо быстрее
#16 by ETurdymuratov
Да скорее всего отрублю возможность пользователям менять структуру отчета. В принципе это и не нужно пользователям.
#17 by ETurdymuratov
Объявил в модуле отчета переменную, тут же вставил функцию ПолучитьПолеПоРасшифровкеОбластиСКД. Параметр областьТабличногоПоля  у меня называется СуммаРасход(я так понимаю это наименование той самой редактируемой ячейки в макете?), затем из модуля формы обращаюсь к этой функции. Но при проверке ругается: Переменная не определена (СуммаРасход)         ЗначенияРасшифровки = ПолучитьПолеПоРасшифровкеОбластиСКД(<<?>>СуммаРасход);
#18 by kittystark
не-е-е...  так не пойдет, макеты тут ни причем у тебя есть табличный документ, в СКД он обычно носит имя Результат, так вот ОбластьСКД в данном случае подразумевает под собой область этого табдока Результат, т.е. по-сути одну ячейку, ячейку и передавай в моих отчетах редактируемых "видов" ячеек было несколько, поэтому для начала приходилось определять чего отредактировал пользователь (количество,себестоимость,цену и т.д), а потом уже брать само значение примеры вызовов 1) из модуля объекта в ПриКомпоновкеРезультата(ДокументРезультат, ...) ... Поле = ПолучитьПолеПоРасшифровкеОбластиСКД(ДокументРезультат.Область(индСтр, индКол)); ... вернет тебе только название самого поля но не его значение 2) из модуля формы ... ... чтобы написать код функции ПолучитьЗначениеПоРасшифровкеОбластиСКД - в поменяй возврат ЭлементРасшифровкиДанныхПоля[0].Поле; на возврат ЭлементРасшифровкиДанныхПоля[0].Значение; и будет тебе счастье в качестве параметра вызова этих функций можно использовать конструкцию ЭлементыФормы.Результат.ТекущаяОбласть
#19 by ETurdymuratov
Спасибо за подробные ответы! Получилось достать содержимое ячейки. Но у автора той статьи в функция ПолучитьВсеЗначенияРасшифровки возвращает структуру Название ячейки и содержимое ячейки, затем в функция ЗаписатьПланСервер и дальше пересчет итогов...
#20 by ETurdymuratov
Может тогда возвратить структуру из ПолучитьПолеПоРасшифровкеОбластиСКД?
#21 by kittystark
да без разницы, главное чтобы сам помнил и ориентировался что у тебя в коде возвращается лично мне проще написать две почти похожие функции, а спустя пол года, мельком взглянув, по названию понять что же возвращается функцией
#22 by ETurdymuratov
А если у меня нет группировок, как правильно переделать процедуру ПересчетИтоговВТаблице(...)? А то ругается {Отчет.ВзаиморасчетыСПоставщиками.Форма.ФормаОтчета.Форма}: Значение не является значением объектного типа (Родитель)         если ЗначенияГруппировок[массивГруппировок[номерГруппировки]] = ЗначенияГруппировок[массивГруппировок[номерГруппировки]].Родитель Тогда Возврат; КонецЕсли;
#23 by ETurdymuratov
...при изменении данного поля чтобы автоматически пересчитывался остаток на каждую дату(поле "Остаток") и затем в итогах?
#24 by kittystark
что там за код в я не смотрел, и честно говоря нет ни времени ни желания у тебя есть значение до редактирования - можно запоминать то что в ТекущейОбласти в обработчике ПриАктивизации для табдока у тебя есть новое значение после ввода пользователем в ПриИзмененииСодержимогоОбласти, считаешь разность между ними, а дальше в цикле все ячейки остатка на последующие даты увеличиваешь на эту дельту, в т.ч. и итог вот как-то так
#25 by ETurdymuratov
Ок спасибо за внимание.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С