Сообщения, оторванные от реальности
Частенько в сообщениях пользователю фигурируют названия элементов формы, благодаря которым легче ориентироваться в интерфейсе.
Но при доработке формы разработчик, как правило, забывает внести изменения в текст сообщения, из-за чего последний становится оторванным от реальности.
Чтобы этого избежать, используйте обращение непосредственно к заголовкам элементов, вместо того, чтобы прописывать их текстом.
#разработка #код #юзабилити
Частенько в сообщениях пользователю фигурируют названия элементов формы, благодаря которым легче ориентироваться в интерфейсе.
Но при доработке формы разработчик, как правило, забывает внести изменения в текст сообщения, из-за чего последний становится оторванным от реальности.
Чтобы этого избежать, используйте обращение непосредственно к заголовкам элементов, вместо того, чтобы прописывать их текстом.
#разработка #код #юзабилити
Отбор данных по узлу обмена в ПВД
Не раз уже встречал правила обмена, в которых данные отбираются запросом в ПВД. И везде, в каждом ПВД (!), почему-то прописан поиск по коду для получения узла. Интересно, что они будут делать при тиражировании конфы или использовании этих правил в тестовом контуре? 🤔 А там коды узлов могут быть другие 🙂
Ловите двойной лайфхак 😃
1️⃣ Используйте недокументированный параметр УзелДляОбмена, в нём всегда хранится ссылка на узел, по которому идёт обмен в данном контексте (виден глобально в рамках правил);
2️⃣ Храните ссылку на узел в параметре конвертации. Даже если что-то изменится, правку достаточно будет внести в одном месте!
PS. Использование параметра УзелДляОбмена может затруднить запуск обмена в режиме отладки, может поэтому он не документирован 😉
#интеграция #ковертация #разработка
Не раз уже встречал правила обмена, в которых данные отбираются запросом в ПВД. И везде, в каждом ПВД (!), почему-то прописан поиск по коду для получения узла. Интересно, что они будут делать при тиражировании конфы или использовании этих правил в тестовом контуре? 🤔 А там коды узлов могут быть другие 🙂
Ловите двойной лайфхак 😃
1️⃣ Используйте недокументированный параметр УзелДляОбмена, в нём всегда хранится ссылка на узел, по которому идёт обмен в данном контексте (виден глобально в рамках правил);
2️⃣ Храните ссылку на узел в параметре конвертации. Даже если что-то изменится, правку достаточно будет внести в одном месте!
PS. Использование параметра УзелДляОбмена может затруднить запуск обмена в режиме отладки, может поэтому он не документирован 😉
#интеграция #ковертация #разработка
Снижаем нагрузку на БД уменьшением числа читаемых таблиц
Когда в запросе необходимо получить две порции данных из одной таблицы, в зависимости от какого-то условия, часто делают обьединение двух запросов к одной физической таблице 🤦🏻♂️.
Но гораздо эффективнее прочитать таблицу один раз, а проверку условия и выбор реквизитов вынести в секцию выборки 👆
#запросы #оптимизация #разработка
Когда в запросе необходимо получить две порции данных из одной таблицы, в зависимости от какого-то условия, часто делают обьединение двух запросов к одной физической таблице 🤦🏻♂️.
Но гораздо эффективнее прочитать таблицу один раз, а проверку условия и выбор реквизитов вынести в секцию выборки 👆
#запросы #оптимизация #разработка
Forwarded from Александр Кунташов — про 1С и не только
🔨 git diff и cp1251 (настройка пейджера)
Перевожу один древний веб-проект с CVS на GIT, а он в кодировке cp1251, т.к. создавался во времена, когда UTF-8 только-только входила в обиход. Сконвертировать проект в UTF-8 пока нельзя, т.к. продуктовый сервер тоже из тех времен и тоже не поддерживает правильной кодировки.
Чтобы diff в консоли выводился в UTF-8, в GIT можно задать свою команду вызова пейджера вот таким образом:
Но вот незадача: комментарии к коммитам у нас в проекте в UTF-8, чтобы в веб-интерфейсе сервера управления репозиториями (у нас GOGS) они отображались правильно. А указанная выше настройка пейджера действует глобально на все команды, в результате
Оказывается, для каждой команды GIT'а пейджер можно настроить отдельно, в частности, для решения моей проблемы в дополнение к указанной выше настройке нужно сделать:
Пейджер можно вообще отключить, указав вместо команды пейджера значение
Перевожу один древний веб-проект с CVS на GIT, а он в кодировке cp1251, т.к. создавался во времена, когда UTF-8 только-только входила в обиход. Сконвертировать проект в UTF-8 пока нельзя, т.к. продуктовый сервер тоже из тех времен и тоже не поддерживает правильной кодировки.
Чтобы diff в консоли выводился в UTF-8, в GIT можно задать свою команду вызова пейджера вот таким образом:
git config --local core.pager "iconv -f cp1251 -t utf-8 | less"т.е. перед вызовом пейджера less я вызываю iconv для перекодировки вывода и ее результат уже через пайп отдаю пейджеру.
Но вот незадача: комментарии к коммитам у нас в проекте в UTF-8, чтобы в веб-интерфейсе сервера управления репозиториями (у нас GOGS) они отображались правильно. А указанная выше настройка пейджера действует глобально на все команды, в результате
git diff у нас показывает русский текст правильно, а git log — кракозябры.Оказывается, для каждой команды GIT'а пейджер можно настроить отдельно, в частности, для решения моей проблемы в дополнение к указанной выше настройке нужно сделать:
git config --local pager.diff lessТ.е. для всех команд (diff, blame etc) выполняется конвертация из cp1251 в UTF-8, а для команды log конвертация не выполняется.
Пейджер можно вообще отключить, указав вместо команды пейджера значение
false. Например, у нас список тэгов небольшой и удобнее, когда он сразу весь в консоль выводится, поэтому я пейджер для команды git tag отключил:git config --local pager.tag falseВсе настройки можно указать и вручную прямо в
.git/config репозитория. Например, после выполнения указанных выше команд в этом файле настройки будут такие (все, что не относится к пейджингу, я пропускаю):[core]#Инструменты #Лайфхак
...
pager = iconv -f cp1251 -t utf-8 | less
...
[pager]
log = less
tag = false
"Конвертация" позволяет достаточно гибко определять данные для выгрузки и применять алгоритмы для конвертации практически чего угодно во что угодно.
⠀
Однако, функция ВыгрузитьПоПравилу() не так универсальна, как себя позиционирует. 🙄 Если вы скармливаете ей объект ссылочного типа, упакованный в собственную структуру данных, то такой источник должен быть типа "Структура", и никакой другой. 😬 При попытке передать в ПКО, скажем, строку ТЗ, будет ошибка, либо не удовлетворительный результат 😥
⠀
Дьявол кроется в функции ВыгрузитьПоПравилу(), часть которой представлен на рисунке 👆
⠀
#интеграция #ковертация #разработка
⠀
Однако, функция ВыгрузитьПоПравилу() не так универсальна, как себя позиционирует. 🙄 Если вы скармливаете ей объект ссылочного типа, упакованный в собственную структуру данных, то такой источник должен быть типа "Структура", и никакой другой. 😬 При попытке передать в ПКО, скажем, строку ТЗ, будет ошибка, либо не удовлетворительный результат 😥
⠀
Дьявол кроется в функции ВыгрузитьПоПравилу(), часть которой представлен на рисунке 👆
⠀
#интеграция #ковертация #разработка
Открытие формы записи регистра сведений
Часто ли вам приходится программно открывать форму существующей записи регистра? Думаю, нет. А рецепт этот не тривиальный, оттого и забывается быстрее. 👆
Вот вам в копилку 2️⃣ варианта реализации: первый с "ручным" формированием ключа записи, второй более нативный, но там лишний серверный вызов. Выбирайте сами 😊
‼️Ключевой момент - при формировании структуры-ключа должны быть перечислены все измерения и период, если РС периодический. 😎
#код #разработка
Часто ли вам приходится программно открывать форму существующей записи регистра? Думаю, нет. А рецепт этот не тривиальный, оттого и забывается быстрее. 👆
Вот вам в копилку 2️⃣ варианта реализации: первый с "ручным" формированием ключа записи, второй более нативный, но там лишний серверный вызов. Выбирайте сами 😊
‼️Ключевой момент - при формировании структуры-ключа должны быть перечислены все измерения и период, если РС периодический. 😎
#код #разработка
🔥1
Картинка в колонке динамического списка
Картинка в колонке таблицы - удобный и красивый приём визуально проинформировать пользователя о факте согласования или наличии файла.
Если в обычных формах мы это делали в обработчике "При получении данных", то в управляемой форме всё делается намного проще:
📌 Данные в колонке (ПутьКДанным) - это по-прежнему индекс картинки в коллекции
📌 Вид элемента меняем на "Поле картинки"
📌 А вот сама коллекция теперь указывается в свойствах элемента колонки, а не всей таблицы 😃👍
#разработка #формы #юзабилити
Картинка в колонке таблицы - удобный и красивый приём визуально проинформировать пользователя о факте согласования или наличии файла.
Если в обычных формах мы это делали в обработчике "При получении данных", то в управляемой форме всё делается намного проще:
📌 Данные в колонке (ПутьКДанным) - это по-прежнему индекс картинки в коллекции
📌 Вид элемента меняем на "Поле картинки"
📌 А вот сама коллекция теперь указывается в свойствах элемента колонки, а не всей таблицы 😃👍
#разработка #формы #юзабилити
🔥1
Неочевидный момент оптимизации
❓Кейс:
На форме документа нужно раскрасить строки товаров в зависимости от их текущей активности, которая хранится в регистре сведений. Сделать, чтобы не тормозило
❗️Реализация:
1. При получении данных для каждой строки выполняется запрос и кешируется в соответствии, чтобы при следующем обращении не тратить время;
2. При открытии формы выполняем один запрос по всем товарам и кешируем весь результат
☹️Грабля:
На днях замерил открытие формы, оказалось, что при открытии много раз выполняется запрос к каждой строке, хотя не должен был. Всё должен взять на себя общий запрос
👆Баг:
Оказалось, что в регистре были данные не по всем товарам, и те из них, что не попали в отбор, не кешировались в соответствие (не оптимальный вариант)
😃Фикса:
Добавляем соединение данных документа и регистра, обрабатываем дополнительно отсутствующие индикаторы и выводим для них значение по умолчанию (оптимальный вариант)
👍
#разработка #оптимизация #запросы
❓Кейс:
На форме документа нужно раскрасить строки товаров в зависимости от их текущей активности, которая хранится в регистре сведений. Сделать, чтобы не тормозило
❗️Реализация:
1. При получении данных для каждой строки выполняется запрос и кешируется в соответствии, чтобы при следующем обращении не тратить время;
2. При открытии формы выполняем один запрос по всем товарам и кешируем весь результат
☹️Грабля:
На днях замерил открытие формы, оказалось, что при открытии много раз выполняется запрос к каждой строке, хотя не должен был. Всё должен взять на себя общий запрос
👆Баг:
Оказалось, что в регистре были данные не по всем товарам, и те из них, что не попали в отбор, не кешировались в соответствие (не оптимальный вариант)
😃Фикса:
Добавляем соединение данных документа и регистра, обрабатываем дополнительно отсутствующие индикаторы и выводим для них значение по умолчанию (оптимальный вариант)
👍
#разработка #оптимизация #запросы
🔥1
Пожалей СУБД
Сегодня очень простой совет, даже картинки не будет 🙂
Когда пишешь запрос, очень удобно покрутить его на рабочей базе. Ведь тогда видно реальную картину результата.
Но! 👆 Если выборка данных большая, а база очень многопользовательская, то высока вероятность конфликта в борьбе за ресурсы.
Дабы не грузить и без того нагруженную БД, ограничьте тестовую выборку ключевым словом ПЕРВЫЕ n.
#разработка #запросы
Сегодня очень простой совет, даже картинки не будет 🙂
Когда пишешь запрос, очень удобно покрутить его на рабочей базе. Ведь тогда видно реальную картину результата.
Но! 👆 Если выборка данных большая, а база очень многопользовательская, то высока вероятность конфликта в борьбе за ресурсы.
Дабы не грузить и без того нагруженную БД, ограничьте тестовую выборку ключевым словом ПЕРВЫЕ n.
#разработка #запросы
Чек-лист для нового объекта конфигурации
Добавил новый объект?
Отправлять в продакт не спеши!
Не подставляй своих коллег,
Чек-лист на этот случай держи!
1️⃣ Добавить в подсистемы. Они могут быть интерфейсные (управляемый интерфейс) и прикладные, не забываем про оба вида.
2️⃣ Разместить в интерфейсах (обычный интерфейс).
3️⃣ Раздать права необходимым ролям, убрать право интерактивного удаления у полных прав. При необходимости настроить RLS.
4️⃣ Прописать в планах обмена и правилах обмена.
Автор: @Benony0
#разработка #конфигурирование #чеклисты
Добавил новый объект?
Отправлять в продакт не спеши!
Не подставляй своих коллег,
Чек-лист на этот случай держи!
1️⃣ Добавить в подсистемы. Они могут быть интерфейсные (управляемый интерфейс) и прикладные, не забываем про оба вида.
2️⃣ Разместить в интерфейсах (обычный интерфейс).
3️⃣ Раздать права необходимым ролям, убрать право интерактивного удаления у полных прав. При необходимости настроить RLS.
4️⃣ Прописать в планах обмена и правилах обмена.
Автор: @Benony0
#разработка #конфигурирование #чеклисты
👍5
Полезные ресурсы для 1С-специалиста
Если ваша деятельность связана с 1С: Предприятием и вы задумываетесь о расширении профессионального кругозора или повышении своей квалификации, то в этой подборке ресурсов обязательно найдёте то, что вам надо.
#полезныересурсы
https://telegra.ph/Poleznye-resursy-dlya-1S-specialista-04-21-2
Если ваша деятельность связана с 1С: Предприятием и вы задумываетесь о расширении профессионального кругозора или повышении своей квалификации, то в этой подборке ресурсов обязательно найдёте то, что вам надо.
#полезныересурсы
https://telegra.ph/Poleznye-resursy-dlya-1S-specialista-04-21-2
Telegraph
Полезные ресурсы для 1С-специалиста
Если ваша деятельность связана с 1С: Предприятием и вы задумываетесь о расширении профессионального кругозора или повышении своей квалификации, то в этой подборке ресурсов обязательно найдёте то, что вам надо. ПОДЗАРАБОТАТЬ Фриланс.ру - пожалуй крупнейшая…
Кому нужны стандарты?
Как хорошо, что все мы разные, и код пишем тоже по-разному. Разношерстные модули делают конфу не скучной, разбираясь в чужом коде, учишься разным техникам оформления текстов. А поиск багов становится действительно увлекательным и творческим занятием!
#код #разработка
https://telegra.ph/Komu-nuzhny-standarty-07-01
Как хорошо, что все мы разные, и код пишем тоже по-разному. Разношерстные модули делают конфу не скучной, разбираясь в чужом коде, учишься разным техникам оформления текстов. А поиск багов становится действительно увлекательным и творческим занятием!
#код #разработка
https://telegra.ph/Komu-nuzhny-standarty-07-01
Telegraph
Кому нужны стандарты?
Зачем писать код в одном стиле всей команде? ✅ Во-первых, это повысит его а) сопровождемость, б) лёгкость освоения новыми сотрудниками, в) скорость проведения codereview и рефакторинг. Всё это напрямую влияет на снижение стоимости конечного продукта для бизнеса.…
Программное добавление строки в табличное поле
Задача:
Симитировать программное добавление строки в Дерево значений, которое лежит на форме и не привязано к ТЧ. Задача в том, чтобы у пользователя была полная иллюзия добавления строки в ТЧ: активизация редактирования новой строки с позиционированием в редактируемой ячейке колонки.
Решение:
Весь секрет - в последних двух строках представленной процедуры. При создании новой строки мы сразу имеем доступ к ее ID (который привязан к ней уже навсегда), и позиционируемся с помощью этого самого ID.
Для Таблицы значений всё то же самое, только строка добавляется проще:
ТабТовары.Добавить();
#код #разработка #интерфейсы #юзабилити
Задача:
Симитировать программное добавление строки в Дерево значений, которое лежит на форме и не привязано к ТЧ. Задача в том, чтобы у пользователя была полная иллюзия добавления строки в ТЧ: активизация редактирования новой строки с позиционированием в редактируемой ячейке колонки.
Решение:
Весь секрет - в последних двух строках представленной процедуры. При создании новой строки мы сразу имеем доступ к ее ID (который привязан к ней уже навсегда), и позиционируемся с помощью этого самого ID.
Для Таблицы значений всё то же самое, только строка добавляется проще:
ТабТовары.Добавить();
#код #разработка #интерфейсы #юзабилити
РольДоступна() vs ПравоДоступа()
Есть такой полезный метод РольДоступна(), его любят все, кто с ним знаком. Мне он тоже нравится - выручает всегда, когда невозможно настроить доступ на уровне конфигуратора, а зависимость от роли установить надо.
Но есть ряд ситуаций, когда из соображений чистоты архитектуры использовать этот метод не очень хорошо.
Пример: Есть справочники Контрагенты и Договоры, с разных набором прав для разных пользователей. На форме Договора доступ к одному из элементов нужно дать только пользователям, у которых есть право редактирования Контрагентов. Вот тут лучше применить метод ПравоДоступа() вместо перечисления всех возможных ролей через РольДоступна().
Если теперь изменится состав ролей, которым доступно редактирование Контрагентов, то в модуле формы Договора менять ничего не придётся, и модуль останется независимым от таких изменений.
#разработка #управлениедоступом
Есть такой полезный метод РольДоступна(), его любят все, кто с ним знаком. Мне он тоже нравится - выручает всегда, когда невозможно настроить доступ на уровне конфигуратора, а зависимость от роли установить надо.
Но есть ряд ситуаций, когда из соображений чистоты архитектуры использовать этот метод не очень хорошо.
Пример: Есть справочники Контрагенты и Договоры, с разных набором прав для разных пользователей. На форме Договора доступ к одному из элементов нужно дать только пользователям, у которых есть право редактирования Контрагентов. Вот тут лучше применить метод ПравоДоступа() вместо перечисления всех возможных ролей через РольДоступна().
Если теперь изменится состав ролей, которым доступно редактирование Контрагентов, то в модуле формы Договора менять ничего не придётся, и модуль останется независимым от таких изменений.
#разработка #управлениедоступом
На Инфостарте объявили конкурс лайфхаков. Вспомнил открытие прошлого года, которое сделал для себя. Не могу не продублировать здесь 🙂. Не относится напрямую к 1С, но очень помогает в работе.
С помощью Win+→ и Win+← можно расположить любое окно ровно на половине экрана с одной из сторон. Удобно, когда нужно быстро раскидать окна, чтобы видеть сразу несколько приложений. Команда циклична.
А если схватить окно мышкой за заголовок и "притащить" к одной из боковых границ экрана, то для другой стороны можно выбрать парное окно для размещения на экране. Эти два окна "сцепляются" друг с другом, границу их соединения можно перетаскивать, меняя площади, занимаемые каждым из них.
#лайфхак
С помощью Win+→ и Win+← можно расположить любое окно ровно на половине экрана с одной из сторон. Удобно, когда нужно быстро раскидать окна, чтобы видеть сразу несколько приложений. Команда циклична.
А если схватить окно мышкой за заголовок и "притащить" к одной из боковых границ экрана, то для другой стороны можно выбрать парное окно для размещения на экране. Эти два окна "сцепляются" друг с другом, границу их соединения можно перетаскивать, меняя площади, занимаемые каждым из них.
#лайфхак
Управление видимостью кнопок стандартных команд табличного поля
По умолчанию эти кнопки располагаются в командной панели, но доступа к ним из кода нет, поскольку их нет среди элементов формы.
Решается вопрос вытаскиванием на форму стандартных команд. При этом элемент кнопки автоматически подменяет кнопку по умолчанию (первая исчезает), а к новой кнопке появляется доступ из кода и в панели свойств.
#интерфейсы #формы #разработка
По умолчанию эти кнопки располагаются в командной панели, но доступа к ним из кода нет, поскольку их нет среди элементов формы.
Решается вопрос вытаскиванием на форму стандартных команд. При этом элемент кнопки автоматически подменяет кнопку по умолчанию (первая исчезает), а к новой кнопке появляется доступ из кода и в панели свойств.
#интерфейсы #формы #разработка
Как заблокировать стандартные команды табличного поля?
Всё просто. Снимите необходимые флажки в перечне команд, который открывается по ссылке свойства Состав команд.
Всё просто, да не совсем )). Кнопка и команда исчезнут, а вот действие горячих клавиш останется. Так что если, например, убираешь команду Скопировать, то не поленись установить Отказ = Истина; в обработчике ПриНачалеДобавления() для копируемой строки.
#разработка #формы #управляемыеформы
Всё просто. Снимите необходимые флажки в перечне команд, который открывается по ссылке свойства Состав команд.
Всё просто, да не совсем )). Кнопка и команда исчезнут, а вот действие горячих клавиш останется. Так что если, например, убираешь команду Скопировать, то не поленись установить Отказ = Истина; в обработчике ПриНачалеДобавления() для копируемой строки.
#разработка #формы #управляемыеформы