Полноценное использование галочек для типа Булево в табличной части

Предлагаю более удобный способ использования галочек в табличном поле, чем тот, до которого можно докопаться по умолчанию.
Часто нахожу интересные решения, которых в нете найти невозможно или сложно. Но есть нестерпимое желание поделиться ими с народом)

Пока, так сказать, первая попытка, посему прошу не судить строго. Надеюсь, кому-то пригодится…

Штатная работа с булевым значением в табличном поле крайне неудобна, приходится выбирать либо информативное и понятное отображение, либо удобство управления с контролем изменения значения. А очень хочется и то и другое.

Но если ставим все красиво, исчезает возможность контролировать изменение этой ячейки… Исчезает возможность задать процедуру «ПриИзменении».

Но есть возможность всё-же реализовать такую возможность.
Описываю процедуру по шагам (есть ньюансы, поэтому прошу строго придерживаться порядка, а после получения результата уже можно «поэкспериментировать»):

1. Создаем в нужном табличном поле реквизит типа Булево, назовем его, к примеру, Имя_реквизита. Можно реквизит не создавать, а использовать переменную, если галочку не нужно хранить в документе (С) webester
2. Создаем колонку на форме в табличном поле
3. Указываем Имя=Имя_реквизита
4. Пропускаем поле Данные (поле должно оставаться пустым, это важно!)
5. Указываем ЭлементУправления=Флажок, появится поле «ДанныеФлажка»
6. Указываем ДанныеФлажка=Имя_реквизита
7. Указываем РежимРедактирования=Непосредственно

Как мы видим, возможность перехватить событие «ПриИзменении» исчезает из свойств… что же делать? Смотрим дальше…

8. Заходим в свойства табличного поля
9. Создаем процедуру на событие ПриОкончанииРедактирования с таким текстом:

Если Элемент.ТекущаяКолонка.Имя="Имя_реквизита" Тогда
   Имя_реквизита_ПриИзменении();
КонецЕсли;

9а. Как вариант (С) Yashazz, можно использовать процедуру ПриИзмененииФлажка, тогда Элемент.ТекущаяКолонка.Имя при желании можно сократить до Колонка.Имя,
но в таком случае мы не сможем использовать флаг ОтменаРедактирования (например, если нужно динамически задать условия изменения, например, доступность).

Если Колонка.Имя="Имя_реквизита" Тогда
   Имя_реквизита_ПриИзменении();
КонецЕсли;

Вот мой пример использования для сравнения обеих процедур:

Процедура УслугиПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если НачисленияСотрудникам.Найти(Элемент.ТекущаяСтрока.НомерСтроки, "НомерУслуги")=Неопределено Тогда
НачислитьЗаРаботу(Элемент.ТекущаяСтрока);
КонецЕсли;
Если Элемент.ТекущаяКолонка.Имя="РаботаВкл" или Элемент.ТекущаяКолонка.Имя="МатериалВкл" Тогда
УслугиСуммаПриИзменении();
КонецЕсли;
КонецПроцедуры

Процедура УслугиПриИзмененииФлажка(Элемент, Колонка)
Если НачисленияСотрудникам.Найти(Элемент.ТекущаяСтрока.НомерСтроки, "НомерУслуги")=Неопределено Тогда
НачислитьЗаРаботу(Элемент.ТекущаяСтрока);
КонецЕсли;
Если Колонка.Имя="РаботаВкл" или Колонка.Имя="МатериалВкл" Тогда
УслугиСуммаПриИзменении();
КонецЕсли;
КонецПроцедуры

10. Создаем процедуру Имя_реквизита_ПриИзменении(), где, например, производим пересчет текущей строки в зависимости от значения реквизита Имя_реквизита.

*к примеру, лично у меня в зависимости от показания меняется сумма услуги в текущей строке:

Стр=ЭлементыФормы.Услуги.ТекущаяСтрока;
Стр.СуммаМатериала= ?(Стр.МатериалВкл,Стр.ЦенаМатериала* Стр.Количество, 0);
Стр.СуммаРаботы= ?(Стр.РаботаВкл,Стр.ЦенаРаботы* Стр.Количество, 0);

П.С. если кто нибудь из старожилов может уделить мне пару минут внимания и объяснить, как правильно и грамотно публиковать свои наработки, буду очень благодарен. Мой скайп — valhalla_resa.

49 Comments

  1. Yashazz

    Как бы вам так помягче… Словом, это азы общеизвестные… А ещё у табличного поля такое событие есть, как «ПриИзмененииФлажка», очень рекомендую)

    Reply
  2. AlexInqMetal

    ну если бы еще хотя бы для УФ вы публиковали свои «интересные решения», это еще куда ни шло… но для обычных форм, где уже все перепахано вдоль и поперек… нет, такой футбол нам не нужен

    Reply
  3. chmv

    неудобно

    Reply
  4. mt111

    (2) я с Вами Александр не совсем согласен, на форуме присутствуют не только профи как Вы но и новички как я, для меня как начинающего это вполне полезная информация

    Reply
  5. SemenovaMarinaV

    Неудобно сделаны галки и переключатели

    Reply
  6. golunov

    Хоть все перепахано, но при создании своих решений одной и той же задачи можно найти решения для других задач. Поэтому каждое решение имеет право на жизнь

    Reply
  7. getnight

    (4) chmv, что именно неудобно? что вам было нужно и что у вас получилось?

    Reply
  8. getnight

    (1) Yashazz, спасибо за комментарий, но, столкнувшись в первый раз с этими «азами общеизвестными», не думаю, что человек разберется с лёту. Думаю, если вы ранее такое не реализовывали на практике (в теории я тоже был уверен, что все проще пареной репы), у вас бы тоже возникла заминка. Попробуйте-ка. Имея перед глазами готовое решение, обсуждать гораздо проще. Почему я решил написать его? В интернете полным полно вопросов по этой теме, но ответов почему-то или нет или они долгие и нудные (при чем когда я последовал им, то получил совсем не то удобство, которого хотел). Я же предложил простое и рабочее решение. Для тех, перед кем стоит такая задача — всё-же экономия времени.

    Reply
  9. getnight

    (2) AlexInqMetal, мне кажется, что в паханом-перепаханом поле тоже можно найти необычные и красивые решения. Вопреки общепринятым стандартам и шаблонному подходу. Могу задать пару вопросов, как специалисту высокого класса? Каким образом можно получить ID текущей активной формы? Как задать произвольный цвет фона выделенному элементу в неактивной табличной части? Если все пахано-перепахано, почему тогда возникают вопросы и их решения?.. Заранее спасибо за ответ. У меня есть варианты решения, которые мне не совсем нравятся. Вот, хотел бы ознакомиться с вашими…

    Reply
  10. getnight

    (7) SemenovaMarinaV, подробнее, пожалуйста, что вы хотели получить и что у вас получилось? опишите, как, на ваш взгляд, должны работать галочки в табличной части? лично я не могу даже представить более удобной формы взаимодействия с ними. спасибо.

    Reply
  11. AlexInqMetal

    (8) getnight, вы-первых где я позиционировал себя как «специалист высокого класса»? 1с занимаюсь на уровне хобби и очень редко, и даже с точки зрения новичка в 1с 8 знаю что у табличной части есть глобальные события, через которые можно перехватить любое изменение реквизитов будь то флажок, строка или другое значение. во-вторых лично мое мнение что нет такой проблемы в которой нельзя разобраться самостоятельно используя мануалы и интернет, но если решение нужно найти быстро или вы сомневаетесь что оно вообще существует то лучший вариант это создать тему на форуме, а тем более если вы говорите что такие темы уже видели, но они оставались без решения то логично опубликовать свой вариант там, чем городить статью. Все таки формулировка вопрос-ответ, а также оптимизация каких то решений это больше для форума, а расписывать целую статью как флажки рисовать мало смысла, скорее всего она просто затеряется в итоге.

    А с точки зрения красоты решений — это уже вопрос философский, иногда быстрее получается пойти длинным и некрасивым путем но тем который вам известен и решить задачу за час, чем курить несколько дней мануалы и форумы, чтобы решить задачу двумя строками.

    Reply
  12. getnight

    (11) AlexInqMetal, ладно, закрываем дискуссию, моя задача была помочь тем, кто не знает, а не спорить с теми, кто знает.

    По общению с вами я понял, что описываемую мной задачу вы лично не решали, ответ дали чисто с теоретической точки зрения. Если бы попробовали практически, заметили бы подводные камни. Не спорю, что вы бы с ними разобрались, но имею смелость утверждать, что заминка всё же была бы. Если очень хочется, поковыряйтесь лично. Надеюсь, вы оцените другие мои идеи, которые я буду выкладывать на этот форум (просто не хочу решения выкладывать абы где, где оно вообще может быть удалено).

    Reply
  13. getnight

    (13) kiros, забавно. Вы даете комментарий, который объясняет, что масло — масленое. После чего понижаете рейтинг человеку за то, что он сообщил, что он новичёк и информация для него оказалась полезной. Возможно, вы считаете, что быть новичком — паскудное дело, и этим он заслуживает порицания? Судя по вашей реакции, он «учится неправильно работать с программой»? Вы считаете мой вариант — «неправильным»? Или он не использует «заложенный функционал»? Как понимать ваш выход? У вас есть лучше вариант решения? С нетерпением ждём вменяемого ответа. Очччень интересно. П.С. Я думал, что люди здесь для того, чтобы кому-то жизнь сделать хоть капельку легче… А им, оказывается, негде спустить пар… Человек, ограниченный «заложенным функционалом», жалок. Всегда нужно уметь выходить за рамки «заложенного функционала». Особенно, если ты Программист. И если решение «не заложено в функционал», ты должен его найти другим способом.

    Reply
  14. SemenovaMarinaV

    А почебы и не использвать… Когда-нибудь пригодится

    Reply
  15. МимохожийОднако

    (14) getnight, зря обижаешься. Вспомни Козьму Пруткова: «Специалист подобен флюсу, его умение однобоко». Через некоторое время в своих решениях часто находятся и ошибки и приходится что-то улучшать. Повторять как мантру, что ты новичок, любитель или просто не спец, совсем не обязательно. Это важно только для тебя и совсем не важно другим. Даже в самой оголтелой критике возможно рациональное зерно, если отмести эмоции и перестать восхищаться своим творением. Пиши дальше. Пусть народ потренирует мозг и сравнит со своими подходами. На этом сеанс психотерпии закончен )) Успехов.

    Reply
  16. maldinitaly

    А я скажу автору огромное спасибо. Мне всегда интересно посмотреть как что-то, что делал сам, реализуется у других. И конечно плюс.

    Reply
  17. gaglo

    Почитав столь бурное обсуждение, понял, что я чего-то не понял… В первом же комментарии названо событие ПриИзмененииФлажка, и способ его использования в данном случае совершенно таков же, что и пошагово расписанный в статье; только лишь в шаге 9 имя события заменяем, остальное ВСЁ совпадает.

    Reply
  18. agulaev

    Пиши дальше и ни «кого» не слушай. Успехов!!!

    Reply
  19. rus128

    Странно, что не указан ни номер релиза, ни просто номер версии платформы (8.2 или 8.3) — в другом релизе свойства реквизитов могут быть расширены/сужены.

    Reply
  20. mikhailovaew

    Простите, не могу удержаться. Слово «нюанс» пишется без мягкого знака.

    И таки да, следует прислушаться к (1) и (18), там путь решения предложен более правильный.

    Reply
  21. DenisZavtra

    Лайк в поддержку. Статья супер! (1) и (18) — даже Москва не сразу строилась.

    будем ожидать продолжения.

    Reply
  22. Prometeus2011

    Нормально, нормально. УФ — УФом, а много чего серьезного еще работает на толстом клиенте. Даже скажу больше: нормальный руководитель будет терроризировать свою учетную систему только тогда, когда уже нельзя дальше (например, ограничения по мощности самой ИБ 7.7 — 8.х). А все остальное — игрушки для больших детей. Впрочем, на ком-то обкатывать технологии надо… Как у Живанецкого «ПисАть, простите, как пИсать нужно только тогда, когда уже не можешь.». Это первое. Второе. Знать все прям незя. Обязательно что-то да пропустишь. В общем плюс ставлю.

    Reply
  23. Robert51

    Спасибо. Мне как новичку, это очень полезно будет в скором времени. Да, статей полно, но иногда надо сказать просто по-другому и сразу становится понятно. «Тремпель» мало кому понятно, а это обыкновенная вешалка.

    Reply
  24. DAnry

    А чего вы набросились на автора. Человек «раскопал» для себя в 1С-ке что-то новое и не «заныкал» это, а решил поделиться с другими (даже с возможными конкурентами)… Это же прекрасно. Спасибо.

    Reply
  25. alyaev.a.v

    Написал статью, получил комментарии, за то теперь знает как правильно делать.

    Reply
  26. gaglo

    (25)(26) По «доброте» же и набросились. Зато статья на главной — в центре внимания. Видать, автор уже знал, «как правильно делать»… Столько народу решило заступиться, так рейтинг подняло!

    Reply
  27. V_V_V

    (8) getnight, «Как задать произвольный цвет фона выделенному элементу в неактивной табличной части?» — речь о УФ или о толстом клиенте? А произвольный цвет фона выделенного элемента у АКТИВНОЙ табличной части УФ — есть решение?

    Reply
  28. dour-dead

    Лучше описать флажки в динамическом списке.

    Reply
  29. trand

    Флажок пишется через «О».

    В яндексе наберите «1с флажок в табличном поле» и увидите 100500 ответов на эту тему. Например тут: http://www.itland.ru/forum/index.php?showtopic=6393 Заметьте, вопрос аж 2005 года.

    P.$. Нет такого элемента управления «Табличная часть». Поэтому фраза: «..Создаем колонку на форме в табличной части..» звучит как-то не айс.

    Не стал бы писать этот комментарий, да вот только напрягает перспектива увидеть завтра ещё 1000 статей от желающих поделиться своими находками.

    Reply
  30. getnight

    (30) trand, спасибо за поправку в орфографии и за «табличное поле». Волновался, первый раз писал, непонятно что/куда/как оформлять и т.п. Последовал вашему совету, сделал поиск по «1с флажок в табличном поле» — в яндексе 247 тысяч ответов, в гугле «примерно 18000».

    Вот что интересно, если вопрос такой уж «простой», то с какого перепугу четверть миллионов ссылок на его обсуждение?

    Прикольно еще и то, что по каждой ссылке нужно перечитать несколько страниц печатного текста, чтобы вообще понять о чём речь. Но решение все-равно остается каким-то «расплывчатым».

    Так как я, попробовав несколько вариантов, и, убедившись в том, что они неудобные в реализации и работе с ними, решил просто выдать «простое решение», понятное не для высококлассных программистов (кои уже чисто благодаря многолетней практике нашли сносное для себя решение), а для начинающих, у которых на этот вопрос может уйти уйма времени.

    П.С. Думаю, увидев заголовок, вы могли бы смело не заходить в тему. Но кому-то, я уверен, это несомненно поможет.

    А если действительно хотите помочь, и способны на это, а не просто зашли постебаться, предложите решение для задачи «получение текущего элемента активной формы». Этим вы действительно очень поможете. В интернете тоже есть масса «решений», но почему-то ни одно у меня не получилось. Спасибо.

    Reply
  31. getnight

    (27) V_V_V, Я работаю в толстом клиенте. Не профессионал, поэтому внятно сформулировать, что такое управляемая форма и чем она отличается от обычной вряд ли смогу. Задать произвольный цвет фона и текста выделенного элемента в активном табличном поле — просто — использовать ЦветФонаВыделения и ЦветТестаВыделения. Но вот незадача, если убрать фокус на другой элемент формы, то текущий элемент неактивного табличного поля получает ужасный синий цвет фона. Причем задать нужный цвет фона невозможно. Например, когда у вас совпадает синий или зеленый текст с синим фоном — это становится нечитабельным и жутко отвратительно выглядит. Я нашел способ, которым можно этот вопрос «замаскировать». Если интересно, оформлю и выложу.

    Reply
  32. gaglo

    (32) Версия 1С 8.2.19.68, обработка с двумя табличными полями на форме. Задал свой ЦветФонаВыделения. При уводе фокуса на другое поле текущий элемент неактивного поля остается с тем цветом фона, который и был задан. Никакого «ужасного синего цвета» не появляется. Ваши проблемы мне непонятны. Да! Пробовал в толстом клиенте и на обычной форме.

    Reply
  33. chmv

    (32) Очень интересно Выложите

    Reply
  34. getnight

    (33) chmv, Марина, выложу чуть позже, сейчас много работы просто… А хочется понятно и просто все расписать.

    Reply
  35. getnight

    (34) gaglo, у меня Версия 1С 8.2.19.83, может вы не совсем точно меня поняли?..

    Вот простой пример: у меня Документ ПоступлениеТоваровУслуг на вкладке Товары. Выделенный элемент из списка товаров имеет темно-синий цвет фона. Если я уйду на другое поле (например, Контрагент), выделенный элемент из списка товаров получит немного светлее цвет фона — тоже синий, но с другим оттенком. Так что фраза «При уводе фокуса на другое поле текущий элемент неактивного поля остается с тем цветом фона, который и был задан» не соответствует действительности. Так вот. Задать этот цвет фона невозможно, т.к. нужного реквизита у элемента не существует. Т.е. если я установлю цвет фона выделенного элемента, допустим, оранжевый, то при уходе с него там останется все тот же светлый синеватый цвет… что очень сильно режет по глазам. Мне хотелось, чтобы курсор имел отображение, как будто он из стекла. Т.е. немного затемнять цвет фона текущего элемента. Независимо от того, какой там цвет фона. «Заложенным функционалом © kiros» вопрос нерешаем.

    Reply
  36. Abadonna

    (0)

    как правильно и грамотно

    Для начала грамотно по-русски писать.

    ЭлементУправления=Флажек

    «Флажек» — это что?

    Как лезвием по глазам…

    Reply
  37. getnight

    (37) Abadonna, спасибо, конечно, что вы так бдите использование великого и могучего. Но в [30] и [31] этот момент уже обсуждался, думаю, дальнейшее обсасывание этой темы нецелесообразно. Всё-таки не форум по русскому языку. Поэтому предпочёл бы более конструктивную критику, по существу.

    П.С. Простите, а что означает

    Для начала грамотно по-русски писать.

    Вроде как что-то хотели сказать мне, но не смогли.

    Чувствую, очень грамотно написано.

    Reply
  38. AlexInqMetal

    (38) getnight, а что смущает в этой фразе?

    Reply
  39. getnight

    (39) AlexInqMetal, Если честно, смущает не сама фраза, а то, каким образом она подана.

    Я бы предпочел тратить своё время на помощь тому, кому она нужна, а не на пустые разговоры с теми, кому просто охота поговорить о своей недосягаемой светлости.

    Reply
  40. Abadonna

    (38) getnight,

    Всё-таки не форум по русскому языку.

    Знакомая отмазка. Если обсуждалось, то что за проблемы в статье подправить?

    Reply
  41. gaglo

    (35) Да, я совсем точно вас не понял.

    курсор имел отображение, как будто он из стекла

    Настаиваю, что что фраза «При уводе фокуса на другое поле текущий элемент неактивного поля остается с тем цветом фона, который и был задан» из (34) соответствует действительности. Прилагаю скриншот.

    Reply
  42. getnight

    (41) Abadonna, при чём тут «отмазка»? Я же сказал, что на ошибку мне уже указали, я её признал, постараюсь впредь не спешить и не допускать. Что я еще должен сделать, чтобы удовлетворить всех в этом досадном недоразумении? Посыпать голову пеплом?

    Так может, давайте, каждый с периодичностью 2-3 часа мне будет на нее указывать ближайшие 5-8 лет…

    Я ничего не имею против вас лично и не понимаю, что против меня лично имеете вы? Вот если вы мне подскажете, как изменить первый пост [статью], чтобы её [ошибку] исправить — я буду вам нижайше благодарен. Это будет конструктивно. Спасибо за понимание.

    Reply
  43. DoctorRoza

    Ну вот чего на мальчонку напали? Ну он же написал, мол, первый раз пишу, новичок! Он даже название статьи обозвал неграмотно .. галочки типа булево .. полноценное .. Ну так учится ведь! Плюс за смелость и ступай с миром!

    Reply
  44. getnight

    (42) gaglo, предполагаю, что есть какой-то ньюанс в использовании.

    Опять не успел проверить, но помню, что серый указатель при уходе фокуса на другой элемент формы становился зеленовато-синим,

    и этот цвет нигде изменить было нельзя. Буду искать, в чем могла быть причина.

    Reply
  45. AlexInqMetal

    (43) getnight,

    как изменить первый пост [статью], чтобы её [ошибку] исправить

    заходим в свой профиль-публикации, находим нужную публикацию жмем кнопку редактировать, исправляем ошибки, обязательно указываем причину редактирования (напр. исправил орфографию) отправляем на повторную модерацию, из минусов — до одобрения статья будет неактивна

    Reply
  46. webester

    (0)

    Часто нахожу интересные решения, которых в нете найти невозможно или сложно.

    Это вы про галочки в табличной части? Подозреваю вы как то неправильно ищете.

    Наличие реквизитов в табличной части, необязательное условие для размещения галочек. Если галки нужны к примеру для обработки табличной части(распечатать только выделенные позиции например) то можно обойтись одной переменной в модуле формы.

    Reply
  47. webester
    нет, это я не про галочки в табличном поле.

    Тогда непонятно, зачем вы это упоминаете в статье про галочки?

    Цитату в студию, где я сказал, что наличие реквизитов — обязательное условие для размещение галочек.

    Цитату в студию где я сказал, что вы так сказали ;). Я просто уточнил, что момент на который опирается ваша статья — необязательный.

    Reply
  48. getnight

    (47) webester,

    Это вы про галочки в табличной части?

    нет, это я не про галочки в табличном поле.

    Есть несколько вещей, которые, я уверен, понравятся очень многим. Но там нужно много времени для оформления… Я пока осматриваюсь, опыта набираюсь)

    Наличие реквизитов в табличной части, необязательное условие для размещения галочек.

    Цитату в студию, где я сказал, что наличие реквизитов — обязательное условие для размещение галочек.

    На скриншоте видно, что галочки используются для отметки, выполняется ли полная работа по прайсу (с использованием материала), либо её часть (только материал или только работа). Эти данные должны храниться в документе, т.к. влияют на особенности расчёта клиента.

    Т.е. я привел пример решения для задачи, в которой наличие реквизитов — одно из необходимый условий.

    Если у меня будет другое ТЗ, или кто-нибудь попросит, как это сделать без реквизитов — расскажу.

    С другой стороны, разобравшись на примере, многие до решения могут дойти и сами.

    Reply
  49. Merkalov

    Подумал, что таким образом получится привязать реквизит к флажку, но нет, при изменении флажка — реквизит не меняется и в обратную сторону тоже не работает, при изменении реквизита — флажок не меняется. Тогда в чём смысл этого — не понятно.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *