Картинки в динамических списках

10.02.25

Разработка - Работа с интерфейсом

Всем уже, наверное, известно, как можно через индекс указать нужную картинку для строки динамического списка. Да, все предельно просто - указываем в картинке таблицы коллекцию, в поле картинки поле индекса, а в поле индекса заполняем этот самый индекс, т.е. порядковый номер. Но если лениво собирать коллекцию из кучи картинок, которые уже есть? Давайте разбираться...

Всем привет!

Сегодняшний репортаж выстрадан часом поиска решения того, как засунуть в динамический список картинки из конфигурации, ибо сдалось мне сделать загрузку этой конфигурации для каких-то там своих нужд из проекта ЕДТ.

 

ПРЕДЫСТОРИЯ

Поспрашивав сначала неопытных коллег, я не добился ответа. Видимо, спрашивал без пристрастия. Казалось, что их на курсах "войтивайти" всему научили, но оказалось, что научили только "правильно" указывать области модулей для размещения функций. Уже кое-что, но этого, конечно, мало для реальной разработки.

Дальше перешел к опытным коллегам. Опытные коллеги сказали, чтобы я засунул коллекцию картинок  в параметры таблицы и не выёживался. Я с ними отчасти согласился, но парировал тем, что нет у меня такой коллекции. Более того, поглядев на просторах интырнету, я даже нашел пару ссылок на какие-то коллекции на мисте, но ссылки там сто лет назад протухли.

Дальше я обратился ну прям вот к самым опытным коллегам, которые тотчас порекомендовали попросить DeepSeek написать программу на питоне для склейки картинок в коллекцию. И нивапрос, все сработало - бот написал программу с первого раза. Не буду тут ее приводить - сами попросите, если надо. Но это полумера, т.к. завтра появится что-то еще в дереве конфигураций, а у меня для него не будет картинки.

 

ТЕОРИЯ

Ну ладно, DeepSeek силен в питоне, да и в математике, полагаю, но поговорим об 1С. Если спросить тот же ИИ про картинку в динамическом списке, то он предложит загрузить ее в колонку с типом "Картинка". Но это касается таблицы или дерева значений. Для динамического списка он предложит выгрузить картинку запросом, но тогда нам нужно поле с этой картинкой в каждом элементе. Ну и не знаю, как сейчас, но раньше не было типа базы данных "ДвоичныеДанные", хотя был тип "ХранилищеЗначения".

 

ПУТЬ САМУРАЯ

В итоге я пошел по иному пути - помещать картинку из базы при выводе. Буду использовать "СписокПриПолученииДанныхНаСервере".

Вообще, картинку на форму можно вывести двумя способами. Присвоить саму картинку соответствующему реквизиту или в строковой реквизит поместить адрес временного хранилища. Беда с динамическим список в том, что я не могу засунуть в его колонку двоичные данные, хотя хранилище значений могу, конечно. И я решил, что буду использовать временное хранилище, чтобы засовывать в строку адрес картинки. И тут меня поджидали другие трудности.

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

Стало понятно, что нужно как-то передать уникальный идентификатор формы, чтобы хранилище не протухло.

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

 

Да, да, я делаю очередной велосипед...

 

САМУРАЙСТВО

Итак, задача - передать уникальный идентификатор формы. Как же это сделать? Оказывается, все просто - достаточно покласть его в дополнительные свойства настроек компоновки данных. Вас же на курсах учат про то, что почти у всего в 1С есть дополнительные свойства? Ну и славненько.

В итоговом итоге код модуля формы превратился в такой:

Ну и результат не заставил себя ждать:

 

 

 

ЗАКЛЮЧЕНИЕ

Да, очередной велосипед велосипедю. Но если не велосипедить, то и меня тоже заменит ИИ.

Всем всех благ, счастья, здоровья.

Подписывайтесь на каналы, ставьте лайки, пишите комменты, палите ленты...

ЗЫ: картинку бородатого админа предоставил гигачат.

УФ динамический список картинка картинки

См. также

Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

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

2400 руб.

29.06.2020    20216    29    6    

45

Работа с интерфейсом Системный администратор Программист Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Платные (руб)

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    55896    17    23    

43

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Платные (руб)

Универсальный редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью рисовать на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    64256    45    60    

83

Работа с интерфейсом Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    25615    mrXoxot    44    

130

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    13318    smielka    37    

105

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    18794    1240    elcoan    53    

128

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия Абонемент ($m)

Подходит для создания web-страниц для замены управляемых форм 1С, красивых отчетов, интерфейса мобильного приложения на платформе 1С и для простых страниц веб-сайтов.

3 стартмани

10.04.2023    13161    170    acces969    31    

126

Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    8711    kalyaka    6    

34
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. user786882 14 10.02.25 08:47 Сейчас в теме
Чего только программист не сделает от лени (взять граф редактор и склеить коллекцию)
rpgshnik; +1 Ответить
7. dhurricane 10.02.25 15:47 Сейчас в теме
8. user786882 14 10.02.25 18:26 Сейчас в теме
11. starik-2005 3166 10.02.25 18:35 Сейчас в теме
(7)
Какой посоветуете?
Чтобы склеить коллекцию что-ли? Так в идешь в любой ИИ, пишешь "напиши прогру на питоне, которая горизонтально склеит все картинки в каталоге в один файл". Все.
13. Serg2000mr 696 10.02.25 23:28 Сейчас в теме
(1) Не рекомендую клеить коллекцию, дерево начинает тормозить при интерактивном взаимодействии
Прикрепленные файлы:
Evg-Lylyk; +1 Ответить
2. starik-2005 3166 10.02.25 08:48 Сейчас в теме
О, чел, который рассказывает про многопоток, и который за мое ему пояснение засунул меня в свой блэклист, решил минуснуть. Ну на здоровье)))

ЗЫ: видимо мое пояснение прям в сердце его некомпетентности пульнуло)))
Fox-trot; +1 Ответить
9. user786882 14 10.02.25 18:31 Сейчас в теме
(2) Ты бухаешь что ли, какой блэклист? Мой блэклист девственно чистый. И минуснул тебя не я, делать мне больше нечего.
А за твоё пояснение про многопоток тебя надо было не в блэклист засунуть, а в другое место потемнее, но я вежливый))
10. starik-2005 3166 10.02.25 18:33 Сейчас в теме
(9)
И минуснул тебя не я
Не ты. И пояснял я не тебе. И я вообще не знаю, кто ты такой.
12. user786882 14 10.02.25 18:36 Сейчас в теме
17. starik-2005 3166 11.02.25 11:16 Сейчас в теме
(12) Кстати, да. Мы с тобой тоже говорили про многопоточность. Ну ты там заявил, что в 1С она "ненастоящая". Типа мьютексов нет, атомарного чтения, того-сего. Ну так его, условно, нигде нет - везде накручены свои костыли. Мьютексы останавливают процесс через менеджер процессов ОС, видимо, т.е. упираются в таймер ОС, на который завязано переключение задач. Поэтому для скорости юзают спинлоки, которые жрут производительность. Древний вариант спинлока - обычная файловая блокировка, которую в 1С легко реализовать. Мьютекс - да, сложнее, так и 1С - это предметно-ориентированный язык. Обмен данными между потоками? Да вполне. Попробуй поиграться с хранилищем значений. Предположу, что два ФЗ могут получить данные из одного адреса временного хранилища. И если это "сложный тип" (соответствие, например, или структура, массив, ...), то адрес этой переменной для обоих потоков будет один. Потокобезопасно? Нет. Ну так используй файловую блокировку - и будет тебе атомарность. Ты ж программист - придумай что-нить, а не ной, что нет там каких-то фишек. Так что сам в темную комнату сходи и в углу постой...

По поводу того пассажира, который минус влепил, то суть дискуссии была даже не в ответе на его сообщение, а в пояснении кому-то, его спросившему, в плане того, что далеко не обязательно параллелить сами расчеты - достаточно запараллелить запись регистров, которые уже рассчитаны. После чего меня этот пассажил засунул в свой блэклист. А потом он на конференции выступал как раз с докладом о том, что можно параллелить запись. Ну, как бы, интересный подход. Может он думал, что он эту тему придумал. Но мы обсуждали с одним больным пенсионером это в комментах к моей статье о выборе процессора для 1С, где пенсионер, видимо на шахте торговавший углем - один товар, никак не мог понять, что если нечего параллелить, то на параллельность можно взглянуть с другой стороны - писать параллельно сформированные в памяти движения.
18. user786882 14 11.02.25 13:50 Сейчас в теме
(17) Ты говорил, что ФЗ - это потоки. Архитектурно, в платформе 1С - да, они может и потоки, но мне, как разрабу, от этого никакого толку. Главное отличие потоков (thread) от изолированных процессов (process) - потоки оперируют в общем пространстве памяти. Я не могу заставить два ФЗ оперировать в общем пространстве памяти на уровне языка 1С. А значит функционально они для меня, как разраба, потоками не являются, а являются обычными изолированными процессами. Да еще и доступными только на сервере.
Предположу, что два ФЗ могут получить данные из одного адреса временного хранилища.

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

Когда мне будет надо - я придумаю. Но это не будет означать, что "в 1С есть многопоточность", а будет означать "в 1С нет многопоточности и мне пришлось строить велосипед с костылями".
19. starik-2005 3166 11.02.25 14:31 Сейчас в теме
(18)
Но это не будет означать, что "в 1С есть многопоточность", а будет означать "в 1С нет многопоточности и мне пришлось строить велосипед с костылями".
Так проблема-то твоя в формулировках, а не в использовании. 1С - это CRUD, писать на нем игру с 3Д-графоном - это как запускать дум на тесте беременности. ФЗ - это отдельные что-то там, для процессора совершенно никакой разницы нет, потоки это или процессы. Просто совокупность команд машинного кода, адреса которых последовательно или не сильно засовываются в регистр указателя команд. То, что у разных процессов нет общего доступа к памяти, то тоже не совсем верно, ибо есть shared memory - та самая общая память, доступная процессам.

Т.е. все очень условно, зависит от конкретной реализации в конкретной операционной системе. Поэтому ФЗ - это потоки/процессы/назовикакугодно, которые выполняются на разных ядрах или даже процессорах, или даже на одном ядре (да, внезапно). С точки зрения 1С, "память" - это вообще то, что в базе данных записано. Что не записано - того не существует.

И ФЗ помогают ускорить работу по расчету чего-либо в некоторое количество раз. Остается решить проблему взаимодействия этих ФЗ друг с другом. Но если результат - это записи в базе данных, то с базой данных эти "потоки" вполне себе могут параллельно взаимодействовать и даже защищаться от разных ситуаций блокировками, о которых много и разно говорят на всяческих курсах.
20. mrsmrv 127 16.02.25 14:15 Сейчас в теме
(17) о, я то общение помню, обработку ему для примера ещё запилил, которая параллельно себестоимость "причёсывала"
3. aximo 2185 10.02.25 11:49 Сейчас в теме
Давай, Сергей, жги - от тебя всегда что-нибудь интересненькое по коду.
4. rpgshnik 3845 10.02.25 12:04 Сейчас в теме
Ст, СС, ДС это стиль?) Я бы прошел мимо, но зная Сергея, какой он тролль, не удержался. А так конечно прикольно, история познавательная, лайк заслуженно, но проще в редактор загнать и код писать не нужно.
5. starik-2005 3166 10.02.25 14:08 Сейчас в теме
(4)
Ст, СС, ДС это стиль?)
Прототипы пишу именно так. При том эти переменные часто нагляднее, чем "СоответствиеКартинок", "ДанныеСтрокиСписка", "ДополнительныеСвойства". Ну честно, у меня глаза устают от чтения этой всей дичи, которая ровно на три строки кода нужна.

И, заметьте, я не называю процедуры и функции "ДС", "СС", "СТ" и прочими словами. А переменная - это эфемерное хранилище адреса на три строки - я называю так, чтобы мне было понятно. Не более.
6. starik-2005 3166 10.02.25 14:16 Сейчас в теме
(4)
но проще в редактор загнать и код писать не нужно
Если про картинки вместо кода, то у меня слетела в очередной раз дома комьюнити-лицуха, ибо я поменял конфигурацию файлов подкачки. 1С вообще забила мне выдавать лицухи в итоге. Таким образом я скопипастил картинки из чата, в котором с коллегами обсуждал данный казус. так что сорян за картинки вместо кода.

С другой стороны, эти картинки вряд ли заинтересуют ИИ, который в итоге так и не научится вставлять картинки в динамический список, а мешки с костями научатся. Небольшая победа над ИИ )))
14. BackinSoda 10.02.25 23:32 Сейчас в теме
Как по мне проще за 5-10 минут склеить прямо в библиотеке картинок 1с
15. Serg2000mr 696 11.02.25 00:07 Сейчас в теме
Пример торможения коллекции. В гифке два примера: с коллекцией и с отдельной картинкой. Дисклеймер: это дерева значений, а не динамические списки. Как в ДС будет себя коллекция вести - неизвестно.
Прикрепленные файлы:
Evg-Lylyk; +1 Ответить
16. starik-2005 3166 11.02.25 09:59 Сейчас в теме
(15) я вообще не понимаю, почему 1с тормозит от коллекций - даже больших. Но да, эффект есть.
Serg2000mr; +1 Ответить
21. Serg2000mr 696 19.02.25 20:22 Сейчас в теме
(16) Вношу корректировку: если коллекция размещена в Общих картинках, то торможения нет. Но если как абсолютная картинка, то тормозит.
Оставьте свое сообщение