Всем привет!
Сегодняшний репортаж выстрадан часом поиска решения того, как засунуть в динамический список картинки из конфигурации, ибо сдалось мне сделать загрузку этой конфигурации для каких-то там своих нужд из проекта ЕДТ.
ПРЕДЫСТОРИЯ
Поспрашивав сначала неопытных коллег, я не добился ответа. Видимо, спрашивал без пристрастия. Казалось, что их на курсах "войтивайти" всему научили, но оказалось, что научили только "правильно" указывать области модулей для размещения функций. Уже кое-что, но этого, конечно, мало для реальной разработки.
Дальше перешел к опытным коллегам. Опытные коллеги сказали, чтобы я засунул коллекцию картинок в параметры таблицы и не выёживался. Я с ними отчасти согласился, но парировал тем, что нет у меня такой коллекции. Более того, поглядев на просторах интырнету, я даже нашел пару ссылок на какие-то коллекции на мисте, но ссылки там сто лет назад протухли.
Дальше я обратился ну прям вот к самым опытным коллегам, которые тотчас порекомендовали попросить DeepSeek написать программу на питоне для склейки картинок в коллекцию. И нивапрос, все сработало - бот написал программу с первого раза. Не буду тут ее приводить - сами попросите, если надо. Но это полумера, т.к. завтра появится что-то еще в дереве конфигураций, а у меня для него не будет картинки.
ТЕОРИЯ
Ну ладно, DeepSeek силен в питоне, да и в математике, полагаю, но поговорим об 1С. Если спросить тот же ИИ про картинку в динамическом списке, то он предложит загрузить ее в колонку с типом "Картинка". Но это касается таблицы или дерева значений. Для динамического списка он предложит выгрузить картинку запросом, но тогда нам нужно поле с этой картинкой в каждом элементе. Ну и не знаю, как сейчас, но раньше не было типа базы данных "ДвоичныеДанные", хотя был тип "ХранилищеЗначения".
ПУТЬ САМУРАЯ
В итоге я пошел по иному пути - помещать картинку из базы при выводе. Буду использовать "СписокПриПолученииДанныхНаСервере".
Вообще, картинку на форму можно вывести двумя способами. Присвоить саму картинку соответствующему реквизиту или в строковой реквизит поместить адрес временного хранилища. Беда с динамическим список в том, что я не могу засунуть в его колонку двоичные данные, хотя хранилище значений могу, конечно. И я решил, что буду использовать временное хранилище, чтобы засовывать в строку адрес картинки. И тут меня поджидали другие трудности.
Событие "СписокПриПолученииДанныхНаСервере" динамического списка имеет одну неприятную особенность - выполняется на сервере без контекста, соответственно так просто в него не передать нужные данные, поэтому первый заход с засовыванием адреса картинки в строку столкнулся с 20-секунднам временем жизни. Вот код:
Стало понятно, что нужно как-то передать уникальный идентификатор формы, чтобы хранилище не протухло.
Да, в коде для хранения адреса картинки я использую первое попавшееся строковое поле динамического списка, которое имеет достаточно символов в своем составе, чтобы полностью вместить этот адрес. Ну и показывать его не нужно - достаточно указать это поле в "ПутьКДаннымКартинкиСтроки" как-то так:
САМУРАЙСТВО
Итак, задача - передать уникальный идентификатор формы. Как же это сделать? Оказывается, все просто - достаточно покласть его в дополнительные свойства настроек компоновки данных. Вас же на курсах учат про то, что почти у всего в 1С есть дополнительные свойства? Ну и славненько.
В итоговом итоге код модуля формы превратился в такой:
Ну и результат не заставил себя ждать:
ЗАКЛЮЧЕНИЕ
Да, очередной велосипед велосипедю. Но если не велосипедить, то и меня тоже заменит ИИ.
Всем всех благ, счастья, здоровья.
Подписывайтесь на каналы, ставьте лайки, пишите комменты, палите ленты...
ЗЫ: картинку бородатого админа предоставил гигачат.