Программист 1с
twitter email rss
  • Home
  • Полезности
    • Мобильное приложение курьера
    • MailChimp + УТ 11.
    • 1с-sms
    • Pharma-MPD
    • Зуботехническая лаборатория
  • Блог
  • Партнеры
  • Команда
    • Услуги
    • Опыт
    • Отзывы
    • Контакты
  • Поддержка
    • Инструкция
    • Redmine






В затишье между проектами Александр Кунташов подсказал идею создания настраиваемых стопок дел для отображения их пользователю. Идея подсмотрена в Microsoft Dynamics AX 2009.

Была выбрана следующая схема реализации. Разработчик в режиме толстый клиент (управляемое приложение) настраивает стопки дел. Стопки дел представляют собой СКД с минимум двумя элементами на закладке «Настройки». Первый элемент настройки не должен содержать группировок, он используется для вычисления количества попавших элементов в стопку дел. Отсутствие группировок объясняется тем, что для подсчета количества результат СКД выгружается в таблицу значений, поэтому первым элементом должны быть только «детальные записи». Второй и все последующие элементы настройки СКД отображаются пользователю при расшифровке стопки дел (нажатии на стопку) в сформированном табличном документе.

Генерация стопок дел происходил с помощью программного добавления элементов в управляемую форму. Отображение картинки в управляемом приложении заключается в следующем: реквизиту строке соотносится ПолеФормы вида ПолеКартинки. В реквизит строку записывается адрес во временном хранилище, по которому размещена нужная картинка для отображения. Для реализации программного добавления картинки сначала добавляется реквизит строка на форму с помощью метода ИзменитьРеквизиты(). Затем на форму добавляется элемент ПолеВода вида ПолеКартинки.

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

    ЭтаФорма["СписокКартинка" + Строка(ИндексСписка)] = РаботаСИзображением.ПоместитьВодянойЗнакНаКартинку(ПолучитьИмяКартинки(КоличествоЭлементовВСписке),Строка(КоличествоЭлементовВСписке), УникальныйИдентификатор);
    НоваяКартинка = Элементы.Добавить("СписокКартинка"+ Строка(ИндексСписка),Тип("ПолеФормы"));
    НоваяКартинка.Вид = ВидПоляФормы.ПолеКартинки;
    НоваяКартинка.ПутьКДанным = "СписокКартинка"+ Строка(ИндексСписка);
    НоваяКартинка.Заголовок = НастройкаСсылка.Наименование;
    НоваяКартинка.Гиперссылка = Истина;
    НоваяКартинка.УстановитьДействие("Нажатие","ОткрытьСписок");
КонецПроцедуры

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

Есть правда одно ограничение: не работает ImageMagick с файлом, в пути которого есть символы кириллицы. Из-за этого пришлось отказаться от использования каталога временных файлов и создавать папку «SlideShowTemp» в корне системного диска.

Функция ПоместитьВодянойЗнакНаКартинку(ИмяКартинки, Надпись, УникальныйИдентификатор) Экспорт
    КВФ = Лев(КаталогВременныхФайлов(), 3)  + "SlideShowTemp\";
    СоздатьКаталог(КВФ);
    КаталогКонвертатора = КаталогВременныхФайлов() + "SlideShow\ImageMagick\";
    WScript = Новый COMОбъект("WScript.Shell");

    ИмяФайлаТекста = КВФ + "txt.txt";
    Текст = Новый ТекстовыйДокумент;
    Текст.УстановитьТекст(Надпись);
    Текст.Записать(ИмяФайлаТекста, "windows-1251", Символы.ВК);

    Темп_ИмяФайлаШрифта = КаталогВременныхФайлов() + "SlideShow\Fonts\AGCROWO.TTF";
    ИмяФайлаШрифта = КВФ + "font.TTF";
    КопироватьФайл(Темп_ИмяФайлаШрифта, ИмяФайлаШрифта);

    ИмяФайлаСлайда =КВФ +  "text." + Строка(БиблиотекаКартинок[ИмяКартинки].Формат());
    ИмяФайлаКартинки = КВФ +  "img.bmp";
    ИмяФайлаНовойКартинки = КВФ +  "img." + Строка(БиблиотекаКартинок[ИмяКартинки].Формат());
    БиблиотекаКартинок[ИмяКартинки].Записать(ИмяФайлаКартинки);

    КомандаКонвертацииКартинки = """" + КаталогКонвертатора + "convert.exe"" -background transparent -font """ + ИмяФайлаШрифта + """ -pointsize 18 -page A2 -fill #000000ff text:""" + ИмяФайлаТекста + """ -trim -bordercolor transparent -border 24 """ + ИмяФайлаСлайда + """";
    WScript.Run(КомандаКонвертацииКартинки, 0, Истина);

    ИмяФайлаПодложки = КВФ +  "source.png";
    КопироватьФайл(ИмяФайлаКартинки, ИмяФайлаПодложки);

    КомандаКонвертацииКартинки = """" + КаталогКонвертатора + "convert.exe"" """ + ИмяФайлаПодложки + """ -compose over -gravity South """ + ИмяФайлаСлайда + """ -composite -alpha off """ + ИмяФайлаКартинки + """";
    WScript.Run(КомандаКонвертацииКартинки, 0, Истина);

    Возврат ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяФайлаКартинки), УникальныйИдентификатор);
КонецФункции

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

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

  Стопки дел (8,0 MiB, 763 скачиваний)

Настройка стопки
Отображение стопок

Если у вас возникли какие-то вопросы или предложения по дальнейшему усовершенствованию — пишите, с радостью почитаю.

Похожие записи:

  1. Стопки дел v 1.0
  • Max Khrul’ov

    А как насчет наложения на картинку просто текстового поля с прозрачным фоном? Что не взлетело?

    • Андрей Данилюк

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

  • Max Khrul’ov

    Я думаю, что имеет право на жизнь и другой подход: добавить в конфигурацию несколько картинок с номерами 1-10, 10+, 20+, 30+, 40+, 50+, 75+, 100+ и просто отображать нужную.

    • Андрей Данилюк

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

  • Александр Кунташов

    Отлично! 

    Ну что, осталось картинки посимпатичнее найти (может, вот из этой 
    http://www.iconfinder.com/icondetails/7074/128/documents_papers_icon перерисовать?) и сделать набор предустановленных «стопок» для типовых конфигураций 🙂

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

  • Головаченко Діма

    Це можливо стьоб :), але можу запропонувати інший варіант:
    Додати в базу, або в макет малюнки з цифрами від 0 до 9, на кнопку кидати фоновий малюнок, а потім, в залежності від цифри, інтерфейсними об’єктами Малюнок формувати потрібну цифру зверху кнопки.
    Правда прийдеться погратись із координатами, привязками, навішуванням дій на малюнки з цифрами — щоб вони теж реагували на їхній клік — проте буде менший об’єм. 

    • Андрей Данилюк

      Да, Дима, это стёб 🙂  В новой версии нанесение цифры будет опциональным в настройке самой стопки. Это под управляемое приложение разрабатывалось. Помня как элементы пляшут в веб-клиенте на форме, лучше чтобы все было в одной картинке сгенерированной 🙂

  • Pingback: Блог программиста 1с » Blog Archive » Стопки дел v 1.0()

  • Артур Аюханов

    Можно как-то развернуть назначение разработки? пока что-то не совсем понимаю смысл решения 🙂

    • Александр Кунташов

      Артур, вот тут подобный вопрос я комментировал: https://plus.google.com/u/0/113448979633509670448/posts/JwghUaUCADA
      И, если вдруг не видел, Андрей опубликовал «причесанный» релиз: http://danila.org.ua/stopki-del-v-1-0/ 

← Долгоиграющие запросы. Ускорение.
Стопки дел v 1.0 →

Новости

  • Работаем с Opendatabot из 1с
  • Сокращаем ссылки в 1с
  • Загрузка данных из Google spreadsheet в 1с
  • Формирование скриншотов сайтов в 1с
  • Удаление старой номенклатуры

Подписка

Copyright © 2022 danila.org.ua
Умные решения для вашего бизнеса