Кому нужны стандарты?
Как хорошо, что все мы разные, и код пишем тоже по-разному. Разношерстные модули делают конфу не скучной, разбираясь в чужом коде, учишься разным техникам оформления текстов. А поиск багов становится действительно увлекательным и творческим занятием!
#код #разработка
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+← можно расположить любое окно ровно на половине экрана с одной из сторон. Удобно, когда нужно быстро раскидать окна, чтобы видеть сразу несколько приложений. Команда циклична.
А если схватить окно мышкой за заголовок и "притащить" к одной из боковых границ экрана, то для другой стороны можно выбрать парное окно для размещения на экране. Эти два окна "сцепляются" друг с другом, границу их соединения можно перетаскивать, меняя площади, занимаемые каждым из них.
#лайфхак
Управление видимостью кнопок стандартных команд табличного поля
По умолчанию эти кнопки располагаются в командной панели, но доступа к ним из кода нет, поскольку их нет среди элементов формы.
Решается вопрос вытаскиванием на форму стандартных команд. При этом элемент кнопки автоматически подменяет кнопку по умолчанию (первая исчезает), а к новой кнопке появляется доступ из кода и в панели свойств.
#интерфейсы #формы #разработка
По умолчанию эти кнопки располагаются в командной панели, но доступа к ним из кода нет, поскольку их нет среди элементов формы.
Решается вопрос вытаскиванием на форму стандартных команд. При этом элемент кнопки автоматически подменяет кнопку по умолчанию (первая исчезает), а к новой кнопке появляется доступ из кода и в панели свойств.
#интерфейсы #формы #разработка
Как заблокировать стандартные команды табличного поля?
Всё просто. Снимите необходимые флажки в перечне команд, который открывается по ссылке свойства Состав команд.
Всё просто, да не совсем )). Кнопка и команда исчезнут, а вот действие горячих клавиш останется. Так что если, например, убираешь команду Скопировать, то не поленись установить Отказ = Истина; в обработчике ПриНачалеДобавления() для копируемой строки.
#разработка #формы #управляемыеформы
Всё просто. Снимите необходимые флажки в перечне команд, который открывается по ссылке свойства Состав команд.
Всё просто, да не совсем )). Кнопка и команда исчезнут, а вот действие горячих клавиш останется. Так что если, например, убираешь команду Скопировать, то не поленись установить Отказ = Истина; в обработчике ПриНачалеДобавления() для копируемой строки.
#разработка #формы #управляемыеформы
Быстрое прикрепление окон
В управляемом интерфейсе есть возможность прикрепить окно к одной из сторон приложения. Но не все знают, что это можно сделать одним щелчком мыши, просто перетаскивая закладку окна из панели открытых.
#формы #управляемыеформы #интерфейсы
Автор: @reborn85
В управляемом интерфейсе есть возможность прикрепить окно к одной из сторон приложения. Но не все знают, что это можно сделать одним щелчком мыши, просто перетаскивая закладку окна из панели открытых.
#формы #управляемыеформы #интерфейсы
Автор: @reborn85
Переключатель из кнопок
Если кнопки на командной панели объединить компактной группой и указать полукруглую форму, то получится весьма приятная на вид и удобная в использовании группа кнопок.
А добавив немного кода, такую группу кнопок можно использовать как альтернативный переключатель. Или выключатель :)
Нюанс в том, что сделать это можно только для группы кнопок командной панели.
#формы #управляемыеформы #интерфейсы
Если кнопки на командной панели объединить компактной группой и указать полукруглую форму, то получится весьма приятная на вид и удобная в использовании группа кнопок.
А добавив немного кода, такую группу кнопок можно использовать как альтернативный переключатель. Или выключатель :)
Нюанс в том, что сделать это можно только для группы кнопок командной панели.
#формы #управляемыеформы #интерфейсы
Расчленённый текст запроса
Хорошо, когда текст запроса всегда открывается в конструкторе, и при этом не ломается результат после его использования. Ещё лучше, если конструктор работает для всех ваших запросов. Даже сложных, которые собираются программно.
Один из случаев - это когда в двух частях текста описываются разные временные таблицы. Тогда встаёт вопрос наличия символа ";" между ними. Если добавлять точку с запятой в конец первой части, то после использования конструктора она слетает. А каждый раз помнить о ней не всегда получается.
Выход - добавлять ";" как отдельную часть текста. Тогда и конструктор, и результат остаются рабочими! 😎
#разработка #код #запросы
Хорошо, когда текст запроса всегда открывается в конструкторе, и при этом не ломается результат после его использования. Ещё лучше, если конструктор работает для всех ваших запросов. Даже сложных, которые собираются программно.
Один из случаев - это когда в двух частях текста описываются разные временные таблицы. Тогда встаёт вопрос наличия символа ";" между ними. Если добавлять точку с запятой в конец первой части, то после использования конструктора она слетает. А каждый раз помнить о ней не всегда получается.
Выход - добавлять ";" как отдельную часть текста. Тогда и конструктор, и результат остаются рабочими! 😎
#разработка #код #запросы
Защита кода от себя
Чтобы использовать контекстную подсказку к объекту, объявление которого находится за пределами модуля, мы пишем временное объявление, которое потом забываем удалить.
Если использовать инструкцию препроцессора со значением Ложь (как на картинке 👇), платформа сама об этом напомнит 🙃
А если хочется оставить строку-помощник, чтобы платформа не выдавала ошибки, напишите:
#Если Сервер и Не Сервер Тогда
#разработка #код #лайфхак
Чтобы использовать контекстную подсказку к объекту, объявление которого находится за пределами модуля, мы пишем временное объявление, которое потом забываем удалить.
Если использовать инструкцию препроцессора со значением Ложь (как на картинке 👇), платформа сама об этом напомнит 🙃
А если хочется оставить строку-помощник, чтобы платформа не выдавала ошибки, напишите:
#Если Сервер и Не Сервер Тогда
#разработка #код #лайфхак
Выделение идентификаторов
Сёрфинг по локальным переменным модуля будет комфортнее, если в параметрах системы установить расцветку для "Текущего идентификатора" и "Выбранного идентификатора".
В платформе до версии 8.3.16 эта настройка по умолчанию отключена.
#администрирование #код #лайфхак
Сёрфинг по локальным переменным модуля будет комфортнее, если в параметрах системы установить расцветку для "Текущего идентификатора" и "Выбранного идентификатора".
В платформе до версии 8.3.16 эта настройка по умолчанию отключена.
#администрирование #код #лайфхак
На что обратить внимание, если тормозят запросы?
✅ Выбирай только нужные данные. Каждое выбранное поле - это новая колонка полученной таблицы, а значит увеличение объема памяти и времени на обработку. И никогда не используй выборку с помощью звёздочку ("*" = все поля таблицы) - можно нарваться на сильно составные поля или поля с недопустимым типом. Либо на них нарвется тот, кто будет дорабатывать конфу после тебя
✅ Избегай лишних обращений через точку. Так ты неявно обращаешься к другой таблице БД, и при переводе запроса на язык SQL 1С-ка делает из такой конструкции дополнительное левое соединение
✅ Лучше временная таблица, чем вложенный запрос или виртуальная таблица. Так ты помогаешь транслятору SQL "перевести" текст запроса наиболее оптимальным образом
✅ Уничтожай ненужные временные таблицы в пакете запросов. Освобождая память, которую занимает результат запроса, можно значительно уменьшить время на его обработку
✅ Используй индексы. Поля ВТ, по которым в следующих запросах пакета таблица будет фильтроваться или присоединяться, принято индексировать. Но это не панацея, каждый случай нужно тестировать. Бывает, что после добавления индекса скорость падает
✅ Накладывай условия в параметрах виртуальной таблицы регистра, а не в секции ГДЕ. Просто прими за аксиому и делай так всегда. Но только условия должны накладываться на измерения и их реквизиты.
(продолжение следует...)
#запросы #оптимизация
✅ Выбирай только нужные данные. Каждое выбранное поле - это новая колонка полученной таблицы, а значит увеличение объема памяти и времени на обработку. И никогда не используй выборку с помощью звёздочку ("*" = все поля таблицы) - можно нарваться на сильно составные поля или поля с недопустимым типом. Либо на них нарвется тот, кто будет дорабатывать конфу после тебя
✅ Избегай лишних обращений через точку. Так ты неявно обращаешься к другой таблице БД, и при переводе запроса на язык SQL 1С-ка делает из такой конструкции дополнительное левое соединение
✅ Лучше временная таблица, чем вложенный запрос или виртуальная таблица. Так ты помогаешь транслятору SQL "перевести" текст запроса наиболее оптимальным образом
✅ Уничтожай ненужные временные таблицы в пакете запросов. Освобождая память, которую занимает результат запроса, можно значительно уменьшить время на его обработку
✅ Используй индексы. Поля ВТ, по которым в следующих запросах пакета таблица будет фильтроваться или присоединяться, принято индексировать. Но это не панацея, каждый случай нужно тестировать. Бывает, что после добавления индекса скорость падает
✅ Накладывай условия в параметрах виртуальной таблицы регистра, а не в секции ГДЕ. Просто прими за аксиому и делай так всегда. Но только условия должны накладываться на измерения и их реквизиты.
(продолжение следует...)
#запросы #оптимизация
Ты можешь сам сменить пароль!
Если ты работаешь с хранилищем конфигурации и хочешь сменить свой пароль, не нужно бежать к админу или архитектору. Сделай это сам!
Да-да, независимо от того, какие у тебя права! Заходишь в Администрирование хранилища, открываешь свою учётку и меняешь пароль. Вуаля! 😃
При минимальных правах на действия с хранилищем, это единственное, что остаётся доступным всегда.
#администрирование #лайфхак
Если ты работаешь с хранилищем конфигурации и хочешь сменить свой пароль, не нужно бежать к админу или архитектору. Сделай это сам!
Да-да, независимо от того, какие у тебя права! Заходишь в Администрирование хранилища, открываешь свою учётку и меняешь пароль. Вуаля! 😃
При минимальных правах на действия с хранилищем, это единственное, что остаётся доступным всегда.
#администрирование #лайфхак
На что обратить внимание, если тормозят запросы? (продолжение)
✅ Для вывода используй Представление. Если результат запроса будет использован для вывода (например, для заполнения макета отчета), то выводимое поле лучше представить строкой. Ссылка конечно выведется корректно, но времени на это будет затрачено до 40% больше. Используй Наименование или Представление
✅ Осторожно с составными типами! При проектировании объектов БД никогда не допускай реквизитов составного типа, состоящих одновременно из ссылок и примитивных типов. Устройство таких таблиц станет крайне сложной для обработки, и никакие индексы не помогут их оптимизировать. Лучше два отдельных реквизита и последующее объединение запросов
✅ Используй функцию ВЫРАЗИТЬ. На сцене снова реквизиты составного типа. Если достаточно одной таблицы, входящей в состав, используй ВЫРАЗИТЬ, чтобы избежать неявного соединения со всеми таблицами, составляющими тип. Нередко производительность из-за этого улучшается на порядки!
✅ Используй конструкцию ПЕРВЫЕ. Если нужны не все записи результата, не заставляй сервер пыхтеть над обработкой миллионов строк
✅ Не используй поле Ссылка от реквизитов ссылочного типа. Конструкция вида:
ВЫБРАТЬ
Клиенты.Договор.Ссылка КАК Договор
Приведёт к чтению всей таблицы договоров вместо получения одной ссылки. Тот же результат, но с меньшими затратами:
ВЫБРАТЬ
Клиенты.Договор КАК Договор
✅ Не применяй избыточное агрегирование. Иногда для сворачивания результата, на верочку делают группировку вместе с конструкцией РАЗЛИЧНЫЕ:
ВЫБРАТЬ РАЗЛИЧНЫЕ
Остатки.Товар КАК Товар
ИЗ
РегистрНакопления.ОстаткиТоваров КАК Остатки
Сгруппировать по
Остатки.Товар
Оставь что-то одно, и при том же результате получишь группировку вдвое быстрее.
#запросы #оптимизация #чеклисты
✅ Для вывода используй Представление. Если результат запроса будет использован для вывода (например, для заполнения макета отчета), то выводимое поле лучше представить строкой. Ссылка конечно выведется корректно, но времени на это будет затрачено до 40% больше. Используй Наименование или Представление
✅ Осторожно с составными типами! При проектировании объектов БД никогда не допускай реквизитов составного типа, состоящих одновременно из ссылок и примитивных типов. Устройство таких таблиц станет крайне сложной для обработки, и никакие индексы не помогут их оптимизировать. Лучше два отдельных реквизита и последующее объединение запросов
✅ Используй функцию ВЫРАЗИТЬ. На сцене снова реквизиты составного типа. Если достаточно одной таблицы, входящей в состав, используй ВЫРАЗИТЬ, чтобы избежать неявного соединения со всеми таблицами, составляющими тип. Нередко производительность из-за этого улучшается на порядки!
✅ Используй конструкцию ПЕРВЫЕ. Если нужны не все записи результата, не заставляй сервер пыхтеть над обработкой миллионов строк
✅ Не используй поле Ссылка от реквизитов ссылочного типа. Конструкция вида:
ВЫБРАТЬ
Клиенты.Договор.Ссылка КАК Договор
Приведёт к чтению всей таблицы договоров вместо получения одной ссылки. Тот же результат, но с меньшими затратами:
ВЫБРАТЬ
Клиенты.Договор КАК Договор
✅ Не применяй избыточное агрегирование. Иногда для сворачивания результата, на верочку делают группировку вместе с конструкцией РАЗЛИЧНЫЕ:
ВЫБРАТЬ РАЗЛИЧНЫЕ
Остатки.Товар КАК Товар
ИЗ
РегистрНакопления.ОстаткиТоваров КАК Остатки
Сгруппировать по
Остатки.Товар
Оставь что-то одно, и при том же результате получишь группировку вдвое быстрее.
#запросы #оптимизация #чеклисты
👍1
Чек-лист видимости элемента формы
Если не знаешь, куда пропал элемент с формы и как его вернуть на место:
Читать статью
#управляемыеформы #чеклисты
Если не знаешь, куда пропал элемент с формы и как его вернуть на место:
Читать статью
#управляемыеформы #чеклисты
the Gig - блог программиста 1C web
Чек-лист видимости элемента - the Gig - блог программиста 1C web
Иногда при разработке встречается такая проблема: размещённый на форме элемент не отображается в режиме 1С:Предприятия. Хотя, по задумке и всем представлениям его должно быть видно. Что же делать с «чудесным исчезновением?». Причин подобного поведения множество.…
Быстрый поиск объектов
В последнее время часто слышу вопрос типа: "А как узнать, как в конфигураторе называется отчёт, который в меню называется так-то?". Видимо, народ активно осваивает управляемые формы 🙂
Вверху окна с деревом метаданных есть строка быстрого поиска. Забиваем в неё то, что интересует, и дерево фильтруется по вхождению части слова.
Прикол в том, что поиск происходит не только по имени, но и по синониму. И если у объекта эти два свойства отличаются, это легко отлавливается 😎
#конфигурирование #администрирование
В последнее время часто слышу вопрос типа: "А как узнать, как в конфигураторе называется отчёт, который в меню называется так-то?". Видимо, народ активно осваивает управляемые формы 🙂
Вверху окна с деревом метаданных есть строка быстрого поиска. Забиваем в неё то, что интересует, и дерево фильтруется по вхождению части слова.
Прикол в том, что поиск происходит не только по имени, но и по синониму. И если у объекта эти два свойства отличаются, это легко отлавливается 😎
#конфигурирование #администрирование
Дополнение от @ArtanoMayarov к последнему посту про быстрый поиск:
Небольшое уточнение: искать можно по нескольким поисковым выражениям. В данном случае введя строку "вари отче" получим тот же результат (или что еще по этой маске отработает). Пробел в поисковой строке выступает разделителем для поисковых выражений
Небольшое уточнение: искать можно по нескольким поисковым выражениям. В данном случае введя строку "вари отче" получим тот же результат (или что еще по этой маске отработает). Пробел в поисковой строке выступает разделителем для поисковых выражений