Пока, так сказать, первая попытка, посему прошу не судить строго. Надеюсь, кому-то пригодится…
Штатная работа с булевым значением в табличном поле крайне неудобна, приходится выбирать либо информативное и понятное отображение, либо удобство управления с контролем изменения значения. А очень хочется и то и другое.
Но если ставим все красиво, исчезает возможность контролировать изменение этой ячейки… Исчезает возможность задать процедуру «ПриИзменении».
Но есть возможность всё-же реализовать такую возможность.
Описываю процедуру по шагам (есть ньюансы, поэтому прошу строго придерживаться порядка, а после получения результата уже можно «поэкспериментировать»):
1. Создаем в нужном табличном поле реквизит типа Булево, назовем его, к примеру, Имя_реквизита. Можно реквизит не создавать, а использовать переменную, если галочку не нужно хранить в документе (С) webester
2. Создаем колонку на форме в табличном поле
3. Указываем Имя=Имя_реквизита
4. Пропускаем поле Данные (поле должно оставаться пустым, это важно!)
5. Указываем ЭлементУправления=Флажок, появится поле «ДанныеФлажка»
6. Указываем ДанныеФлажка=Имя_реквизита
7. Указываем РежимРедактирования=Непосредственно
Как мы видим, возможность перехватить событие «ПриИзменении» исчезает из свойств… что же делать? Смотрим дальше…
8. Заходим в свойства табличного поля
9. Создаем процедуру на событие ПриОкончанииРедактирования с таким текстом:
Если Элемент.ТекущаяКолонка.Имя="Имя_реквизита" Тогда
Имя_реквизита_ПриИзменении();
КонецЕсли;
9а. Как вариант (С) Yashazz, можно использовать процедуру ПриИзмененииФлажка, тогда Элемент.ТекущаяКолонка.Имя при желании можно сократить до Колонка.Имя,
но в таком случае мы не сможем использовать флаг ОтменаРедактирования (например, если нужно динамически задать условия изменения, например, доступность).
Если Колонка.Имя="Имя_реквизита" ТогдаИмя_реквизита_ПриИзменении();КонецЕсли;Вот мой пример использования для сравнения обеих процедур:
Процедура УслугиПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)Если НачисленияСотрудникам.Найти(Элемент.ТекущаяСтрока.НомерСтроки, "НомерУслуги")=Неопределено ТогдаНачислитьЗаРаботу(Элемент.ТекущаяСтрока);КонецЕсли;Если Элемент.ТекущаяКолонка.Имя="РаботаВкл" или Элемент.ТекущаяКолонка.Имя="МатериалВкл" ТогдаУслугиСуммаПриИзменении();КонецЕсли;КонецПроцедурыПроцедура УслугиПриИзмененииФлажка(Элемент, Колонка)Если НачисленияСотрудникам.Найти(Элемент.ТекущаяСтрока.НомерСтроки, "НомерУслуги")=Неопределено ТогдаНачислитьЗаРаботу(Элемент.ТекущаяСтрока);КонецЕсли;Если Колонка.Имя="РаботаВкл" или Колонка.Имя="МатериалВкл" ТогдаУслугиСуммаПриИзменении();КонецЕсли;КонецПроцедуры10. Создаем процедуру Имя_реквизита_ПриИзменении(), где, например, производим пересчет текущей строки в зависимости от значения реквизита Имя_реквизита.
*к примеру, лично у меня в зависимости от показания меняется сумма услуги в текущей строке:
Стр=ЭлементыФормы.Услуги.ТекущаяСтрока;Стр.СуммаМатериала= ?(Стр.МатериалВкл,Стр.ЦенаМатериала* Стр.Количество, 0);Стр.СуммаРаботы= ?(Стр.РаботаВкл,Стр.ЦенаРаботы* Стр.Количество, 0);П.С. если кто нибудь из старожилов может уделить мне пару минут внимания и объяснить, как правильно и грамотно публиковать свои наработки, буду очень благодарен. Мой скайп — valhalla_resa.
Как бы вам так помягче… Словом, это азы общеизвестные… А ещё у табличного поля такое событие есть, как «ПриИзмененииФлажка», очень рекомендую)
ну если бы еще хотя бы для УФ вы публиковали свои «интересные решения», это еще куда ни шло… но для обычных форм, где уже все перепахано вдоль и поперек… нет, такой футбол нам не нужен
неудобно
(2) я с Вами Александр не совсем согласен, на форуме присутствуют не только профи как Вы но и новички как я, для меня как начинающего это вполне полезная информация
Неудобно сделаны галки и переключатели
Хоть все перепахано, но при создании своих решений одной и той же задачи можно найти решения для других задач. Поэтому каждое решение имеет право на жизнь
(4) chmv, что именно неудобно? что вам было нужно и что у вас получилось?
(1) Yashazz, спасибо за комментарий, но, столкнувшись в первый раз с этими «азами общеизвестными», не думаю, что человек разберется с лёту. Думаю, если вы ранее такое не реализовывали на практике (в теории я тоже был уверен, что все проще пареной репы), у вас бы тоже возникла заминка. Попробуйте-ка. Имея перед глазами готовое решение, обсуждать гораздо проще. Почему я решил написать его? В интернете полным полно вопросов по этой теме, но ответов почему-то или нет или они долгие и нудные (при чем когда я последовал им, то получил совсем не то удобство, которого хотел). Я же предложил простое и рабочее решение. Для тех, перед кем стоит такая задача — всё-же экономия времени.
(2) AlexInqMetal, мне кажется, что в паханом-перепаханом поле тоже можно найти необычные и красивые решения. Вопреки общепринятым стандартам и шаблонному подходу. Могу задать пару вопросов, как специалисту высокого класса? Каким образом можно получить ID текущей активной формы? Как задать произвольный цвет фона выделенному элементу в неактивной табличной части? Если все пахано-перепахано, почему тогда возникают вопросы и их решения?.. Заранее спасибо за ответ. У меня есть варианты решения, которые мне не совсем нравятся. Вот, хотел бы ознакомиться с вашими…
(7) SemenovaMarinaV, подробнее, пожалуйста, что вы хотели получить и что у вас получилось? опишите, как, на ваш взгляд, должны работать галочки в табличной части? лично я не могу даже представить более удобной формы взаимодействия с ними. спасибо.
(8) getnight, вы-первых где я позиционировал себя как «специалист высокого класса»? 1с занимаюсь на уровне хобби и очень редко, и даже с точки зрения новичка в 1с 8 знаю что у табличной части есть глобальные события, через которые можно перехватить любое изменение реквизитов будь то флажок, строка или другое значение. во-вторых лично мое мнение что нет такой проблемы в которой нельзя разобраться самостоятельно используя мануалы и интернет, но если решение нужно найти быстро или вы сомневаетесь что оно вообще существует то лучший вариант это создать тему на форуме, а тем более если вы говорите что такие темы уже видели, но они оставались без решения то логично опубликовать свой вариант там, чем городить статью. Все таки формулировка вопрос-ответ, а также оптимизация каких то решений это больше для форума, а расписывать целую статью как флажки рисовать мало смысла, скорее всего она просто затеряется в итоге.
А с точки зрения красоты решений — это уже вопрос философский, иногда быстрее получается пойти длинным и некрасивым путем но тем который вам известен и решить задачу за час, чем курить несколько дней мануалы и форумы, чтобы решить задачу двумя строками.
(11) AlexInqMetal, ладно, закрываем дискуссию, моя задача была помочь тем, кто не знает, а не спорить с теми, кто знает.
По общению с вами я понял, что описываемую мной задачу вы лично не решали, ответ дали чисто с теоретической точки зрения. Если бы попробовали практически, заметили бы подводные камни. Не спорю, что вы бы с ними разобрались, но имею смелость утверждать, что заминка всё же была бы. Если очень хочется, поковыряйтесь лично. Надеюсь, вы оцените другие мои идеи, которые я буду выкладывать на этот форум (просто не хочу решения выкладывать абы где, где оно вообще может быть удалено).
(13) kiros, забавно. Вы даете комментарий, который объясняет, что масло — масленое. После чего понижаете рейтинг человеку за то, что он сообщил, что он новичёк и информация для него оказалась полезной. Возможно, вы считаете, что быть новичком — паскудное дело, и этим он заслуживает порицания? Судя по вашей реакции, он «учится неправильно работать с программой»? Вы считаете мой вариант — «неправильным»? Или он не использует «заложенный функционал»? Как понимать ваш выход? У вас есть лучше вариант решения? С нетерпением ждём вменяемого ответа. Очччень интересно. П.С. Я думал, что люди здесь для того, чтобы кому-то жизнь сделать хоть капельку легче… А им, оказывается, негде спустить пар… Человек, ограниченный «заложенным функционалом», жалок. Всегда нужно уметь выходить за рамки «заложенного функционала». Особенно, если ты Программист. И если решение «не заложено в функционал», ты должен его найти другим способом.
А почебы и не использвать… Когда-нибудь пригодится
(14) getnight, зря обижаешься. Вспомни Козьму Пруткова: «Специалист подобен флюсу, его умение однобоко». Через некоторое время в своих решениях часто находятся и ошибки и приходится что-то улучшать. Повторять как мантру, что ты новичок, любитель или просто не спец, совсем не обязательно. Это важно только для тебя и совсем не важно другим. Даже в самой оголтелой критике возможно рациональное зерно, если отмести эмоции и перестать восхищаться своим творением. Пиши дальше. Пусть народ потренирует мозг и сравнит со своими подходами. На этом сеанс психотерпии закончен )) Успехов.
А я скажу автору огромное спасибо. Мне всегда интересно посмотреть как что-то, что делал сам, реализуется у других. И конечно плюс.
Почитав столь бурное обсуждение, понял, что я чего-то не понял… В первом же комментарии названо событие ПриИзмененииФлажка, и способ его использования в данном случае совершенно таков же, что и пошагово расписанный в статье; только лишь в шаге 9 имя события заменяем, остальное ВСЁ совпадает.
Пиши дальше и ни «кого» не слушай. Успехов!!!
Странно, что не указан ни номер релиза, ни просто номер версии платформы (8.2 или 8.3) — в другом релизе свойства реквизитов могут быть расширены/сужены.
Простите, не могу удержаться. Слово «нюанс» пишется без мягкого знака.
И таки да, следует прислушаться к (1) и (18), там путь решения предложен более правильный.
Лайк в поддержку. Статья супер! (1) и (18) — даже Москва не сразу строилась.
будем ожидать продолжения.
Нормально, нормально. УФ — УФом, а много чего серьезного еще работает на толстом клиенте. Даже скажу больше: нормальный руководитель будет терроризировать свою учетную систему только тогда, когда уже нельзя дальше (например, ограничения по мощности самой ИБ 7.7 — 8.х). А все остальное — игрушки для больших детей. Впрочем, на ком-то обкатывать технологии надо… Как у Живанецкого «ПисАть, простите, как пИсать нужно только тогда, когда уже не можешь.». Это первое. Второе. Знать все прям незя. Обязательно что-то да пропустишь. В общем плюс ставлю.
Спасибо. Мне как новичку, это очень полезно будет в скором времени. Да, статей полно, но иногда надо сказать просто по-другому и сразу становится понятно. «Тремпель» мало кому понятно, а это обыкновенная вешалка.
А чего вы набросились на автора. Человек «раскопал» для себя в 1С-ке что-то новое и не «заныкал» это, а решил поделиться с другими (даже с возможными конкурентами)… Это же прекрасно. Спасибо.
Написал статью, получил комментарии, за то теперь знает как правильно делать.
(25)(26) По «доброте» же и набросились. Зато статья на главной — в центре внимания. Видать, автор уже знал, «как правильно делать»… Столько народу решило заступиться, так рейтинг подняло!
(8) getnight, «Как задать произвольный цвет фона выделенному элементу в неактивной табличной части?» — речь о УФ или о толстом клиенте? А произвольный цвет фона выделенного элемента у АКТИВНОЙ табличной части УФ — есть решение?
Лучше описать флажки в динамическом списке.
Флажок пишется через «О».
В яндексе наберите «1с флажок в табличном поле» и увидите 100500 ответов на эту тему. Например тут:http://www.itland.ru/forum/index.php?showtopic=6393 Заметьте, вопрос аж 2005 года.
P.$. Нет такого элемента управления «Табличная часть». Поэтому фраза: «..Создаем колонку на форме в табличной части..» звучит как-то не айс.
Не стал бы писать этот комментарий, да вот только напрягает перспектива увидеть завтра ещё 1000 статей от желающих поделиться своими находками.
(30) trand, спасибо за поправку в орфографии и за «табличное поле». Волновался, первый раз писал, непонятно что/куда/как оформлять и т.п. Последовал вашему совету, сделал поиск по «1с флажок в табличном поле» — в яндексе 247 тысяч ответов, в гугле «примерно 18000».
Вот что интересно, если вопрос такой уж «простой», то с какого перепугу четверть миллионов ссылок на его обсуждение?
Прикольно еще и то, что по каждой ссылке нужно перечитать несколько страниц печатного текста, чтобы вообще понять о чём речь. Но решение все-равно остается каким-то «расплывчатым».
Так как я, попробовав несколько вариантов, и, убедившись в том, что они неудобные в реализации и работе с ними, решил просто выдать «простое решение», понятное не для высококлассных программистов (кои уже чисто благодаря многолетней практике нашли сносное для себя решение), а для начинающих, у которых на этот вопрос может уйти уйма времени.
П.С. Думаю, увидев заголовок, вы могли бы смело не заходить в тему. Но кому-то, я уверен, это несомненно поможет.
А если действительно хотите помочь, и способны на это, а не просто зашли постебаться, предложите решение для задачи «получение текущего элемента активной формы». Этим вы действительно очень поможете. В интернете тоже есть масса «решений», но почему-то ни одно у меня не получилось. Спасибо.
(27) V_V_V, Я работаю в толстом клиенте. Не профессионал, поэтому внятно сформулировать, что такое управляемая форма и чем она отличается от обычной вряд ли смогу. Задать произвольный цвет фона и текста выделенного элемента в активном табличном поле — просто — использовать ЦветФонаВыделения и ЦветТестаВыделения. Но вот незадача, если убрать фокус на другой элемент формы, то текущий элемент неактивного табличного поля получает ужасный синий цвет фона. Причем задать нужный цвет фона невозможно. Например, когда у вас совпадает синий или зеленый текст с синим фоном — это становится нечитабельным и жутко отвратительно выглядит. Я нашел способ, которым можно этот вопрос «замаскировать». Если интересно, оформлю и выложу.
(32) Версия 1С 8.2.19.68, обработка с двумя табличными полями на форме. Задал свой ЦветФонаВыделения. При уводе фокуса на другое поле текущий элемент неактивного поля остается с тем цветом фона, который и был задан. Никакого «ужасного синего цвета» не появляется. Ваши проблемы мне непонятны. Да! Пробовал в толстом клиенте и на обычной форме.
(32) Очень интересно Выложите
(33) chmv, Марина, выложу чуть позже, сейчас много работы просто… А хочется понятно и просто все расписать.
(34) gaglo, у меня Версия 1С 8.2.19.83, может вы не совсем точно меня поняли?..
Вот простой пример: у меня Документ ПоступлениеТоваровУслуг на вкладке Товары. Выделенный элемент из списка товаров имеет темно-синий цвет фона. Если я уйду на другое поле (например, Контрагент), выделенный элемент из списка товаров получит немного светлее цвет фона — тоже синий, но с другим оттенком. Так что фраза «При уводе фокуса на другое поле текущий элемент неактивного поля остается с тем цветом фона, который и был задан» не соответствует действительности. Так вот. Задать этот цвет фона невозможно, т.к. нужного реквизита у элемента не существует. Т.е. если я установлю цвет фона выделенного элемента, допустим, оранжевый, то при уходе с него там останется все тот же светлый синеватый цвет… что очень сильно режет по глазам. Мне хотелось, чтобы курсор имел отображение, как будто он из стекла. Т.е. немного затемнять цвет фона текущего элемента. Независимо от того, какой там цвет фона. «Заложенным функционалом © kiros» вопрос нерешаем.
(0)
Для начала грамотно по-русски писать.
«Флажек» — это что?
Как лезвием по глазам…
(37) Abadonna, спасибо, конечно, что вы так бдите использование великого и могучего. Но в [30] и [31] этот момент уже обсуждался, думаю, дальнейшее обсасывание этой темы нецелесообразно. Всё-таки не форум по русскому языку. Поэтому предпочёл бы более конструктивную критику, по существу.
П.С. Простите, а что означает
Вроде как что-то хотели сказать мне, но не смогли.
Чувствую, очень грамотно написано.
(38) getnight, а что смущает в этой фразе?
(39) AlexInqMetal, Если честно, смущает не сама фраза, а то, каким образом она подана.
Я бы предпочел тратить своё время на помощь тому, кому она нужна, а не на пустые разговоры с теми, кому просто охота поговорить о своей недосягаемой светлости.
(38) getnight,
Знакомая отмазка. Если обсуждалось, то что за проблемы в статье подправить?
(35) Да, я совсем точно вас не понял.
Настаиваю, что что фраза «При уводе фокуса на другое поле текущий элемент неактивного поля остается с тем цветом фона, который и был задан» из (34) соответствует действительности. Прилагаю скриншот.
(41) Abadonna, при чём тут «отмазка»? Я же сказал, что на ошибку мне уже указали, я её признал, постараюсь впредь не спешить и не допускать. Что я еще должен сделать, чтобы удовлетворить всех в этом досадном недоразумении? Посыпать голову пеплом?
Так может, давайте, каждый с периодичностью 2-3 часа мне будет на нее указывать ближайшие 5-8 лет…
Я ничего не имею против вас лично и не понимаю, что против меня лично имеете вы? Вот если вы мне подскажете, как изменить первый пост [статью], чтобы её [ошибку] исправить — я буду вам нижайше благодарен. Это будет конструктивно. Спасибо за понимание.
Ну вот чего на мальчонку напали? Ну он же написал, мол, первый раз пишу, новичок! Он даже название статьи обозвал неграмотно .. галочки типа булево .. полноценное .. Ну так учится ведь! Плюс за смелость и ступай с миром!
(42) gaglo, предполагаю, что есть какой-то ньюанс в использовании.
Опять не успел проверить, но помню, что серый указатель при уходе фокуса на другой элемент формы становился зеленовато-синим,
и этот цвет нигде изменить было нельзя. Буду искать, в чем могла быть причина.
(43) getnight,
заходим в свой профиль-публикации, находим нужную публикацию жмем кнопку редактировать, исправляем ошибки, обязательно указываем причину редактирования (напр. исправил орфографию) отправляем на повторную модерацию, из минусов — до одобрения статья будет неактивна
(0)
Это вы про галочки в табличной части? Подозреваю вы как то неправильно ищете.
Наличие реквизитов в табличной части, необязательное условие для размещения галочек. Если галки нужны к примеру для обработки табличной части(распечатать только выделенные позиции например) то можно обойтись одной переменной в модуле формы.
Тогда непонятно, зачем вы это упоминаете в статье про галочки?
Цитату в студию где я сказал, что вы так сказали ;). Я просто уточнил, что момент на который опирается ваша статья — необязательный.
(47) webester,
нет, это я не про галочки в табличном поле.
Есть несколько вещей, которые, я уверен, понравятся очень многим. Но там нужно много времени для оформления… Я пока осматриваюсь, опыта набираюсь)
Цитату в студию, где я сказал, что наличие реквизитов — обязательное условие для размещение галочек.
На скриншоте видно, что галочки используются для отметки, выполняется ли полная работа по прайсу (с использованием материала), либо её часть (только материал или только работа). Эти данные должны храниться в документе, т.к. влияют на особенности расчёта клиента.
Т.е. я привел пример решения для задачи, в которой наличие реквизитов — одно из необходимый условий.
Если у меня будет другое ТЗ, или кто-нибудь попросит, как это сделать без реквизитов — расскажу.
С другой стороны, разобравшись на примере, многие до решения могут дойти и сами.
Подумал, что таким образом получится привязать реквизит к флажку, но нет, при изменении флажка — реквизит не меняется и в обратную сторону тоже не работает, при изменении реквизита — флажок не меняется. Тогда в чём смысл этого — не понятно.