OneSCast | 1С Предприятие – Telegram
OneSCast | 1С Предприятие
4.62K subscribers
79 photos
4 videos
1 file
146 links
Работа в 1С и EDT. Авторский канал нетипичного 1С-ника: живу в Сербии, пишу код на английском.

О канале:
Лайфхаки, советы, рецепты, полезности. Для разработчика, пользователя и всех причастных к 1С.

По всем вопросам: @stas_ganiev
Download Telegram
Программное добавление строки в табличное поле

Задача:
Симитировать программное добавление строки в Дерево значений, которое лежит на форме и не привязано к ТЧ. Задача в том, чтобы у пользователя была полная иллюзия добавления строки в ТЧ: активизация редактирования новой строки с позиционированием в редактируемой ячейке колонки.

Решение:
Весь секрет - в последних двух строках представленной процедуры. При создании новой строки мы сразу имеем доступ к ее ID (который привязан к ней уже навсегда), и позиционируемся с помощью этого самого ID.

Для Таблицы значений всё то же самое, только строка добавляется проще:

ТабТовары.Добавить();

#код #разработка #интерфейсы #юзабилити
РольДоступна() vs ПравоДоступа()

Есть такой полезный метод РольДоступна(), его любят все, кто с ним знаком. Мне он тоже нравится - выручает всегда, когда невозможно настроить доступ на уровне конфигуратора, а зависимость от роли установить надо.

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

Пример: Есть справочники Контрагенты и Договоры, с разных набором прав для разных пользователей. На форме Договора доступ к одному из элементов нужно дать только пользователям, у которых есть право редактирования Контрагентов. Вот тут лучше применить метод ПравоДоступа() вместо перечисления всех возможных ролей через РольДоступна().

Если теперь изменится состав ролей, которым доступно редактирование Контрагентов, то в модуле формы Договора менять ничего не придётся, и модуль останется независимым от таких изменений.

#разработка #управлениедоступом
На Инфостарте объявили конкурс лайфхаков. Вспомнил открытие прошлого года, которое сделал для себя. Не могу не продублировать здесь 🙂. Не относится напрямую к 1С, но очень помогает в работе.

С помощью Win+→ и Win+← можно расположить любое окно ровно на половине экрана с одной из сторон. Удобно, когда нужно быстро раскидать окна, чтобы видеть сразу несколько приложений. Команда циклична.
А если схватить окно мышкой за заголовок и "притащить" к одной из боковых границ экрана, то для другой стороны можно выбрать парное окно для размещения на экране. Эти два окна "сцепляются" друг с другом, границу их соединения можно перетаскивать, меняя площади, занимаемые каждым из них.

#лайфхак
Управление видимостью кнопок стандартных команд табличного поля

По умолчанию эти кнопки располагаются в командной панели, но доступа к ним из кода нет, поскольку их нет среди элементов формы.
Решается вопрос вытаскиванием на форму стандартных команд. При этом элемент кнопки автоматически подменяет кнопку по умолчанию (первая исчезает), а к новой кнопке появляется доступ из кода и в панели свойств.

#интерфейсы #формы #разработка
Как заблокировать стандартные команды табличного поля?

Всё просто. Снимите необходимые флажки в перечне команд, который открывается по ссылке свойства Состав команд.

Всё просто, да не совсем )). Кнопка и команда исчезнут, а вот действие горячих клавиш останется. Так что если, например, убираешь команду Скопировать, то не поленись установить Отказ = Истина; в обработчике ПриНачалеДобавления() для копируемой строки.

#разработка #формы #управляемыеформы
Быстрое прикрепление окон

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

#формы #управляемыеформы #интерфейсы

Автор: @reborn85
Переключатель из кнопок

Если кнопки на командной панели объединить компактной группой и указать полукруглую форму, то получится весьма приятная на вид и удобная в использовании группа кнопок.

А добавив немного кода, такую группу кнопок можно использовать как альтернативный переключатель. Или выключатель :)

Нюанс в том, что сделать это можно только для группы кнопок командной панели.

#формы #управляемыеформы #интерфейсы
Расчленённый текст запроса

Хорошо, когда текст запроса всегда открывается в конструкторе, и при этом не ломается результат после его использования. Ещё лучше, если конструктор работает для всех ваших запросов. Даже сложных, которые собираются программно.

Один из случаев - это когда в двух частях текста описываются разные временные таблицы. Тогда встаёт вопрос наличия символа ";" между ними. Если добавлять точку с запятой в конец первой части, то после использования конструктора она слетает. А каждый раз помнить о ней не всегда получается.

Выход - добавлять ";" как отдельную часть текста. Тогда и конструктор, и результат остаются рабочими! 😎

#разработка #код #запросы
Защита кода от себя

Чтобы использовать контекстную подсказку к объекту, объявление которого находится за пределами модуля, мы пишем временное объявление, которое потом забываем удалить.

Если использовать инструкцию препроцессора со значением Ложь (как на картинке 👇), платформа сама об этом напомнит 🙃

А если хочется оставить строку-помощник, чтобы платформа не выдавала ошибки, напишите:

#Если Сервер и Не Сервер Тогда

#разработка #код #лайфхак
Выделение идентификаторов

Сёрфинг по локальным переменным модуля будет комфортнее, если в параметрах системы установить расцветку для "Текущего идентификатора" и "Выбранного идентификатора".
В платформе до версии 8.3.16 эта настройка по умолчанию отключена.

#администрирование #код #лайфхак
На что обратить внимание, если тормозят запросы?

Выбирай только нужные данные. Каждое выбранное поле - это новая колонка полученной таблицы, а значит увеличение объема памяти и времени на обработку. И никогда не используй выборку с помощью звёздочку ("*" = все поля таблицы) - можно нарваться на сильно составные поля или поля с недопустимым типом. Либо на них нарвется тот, кто будет дорабатывать конфу после тебя

Избегай лишних обращений через точку. Так ты неявно обращаешься к другой таблице БД, и при переводе запроса на язык SQL 1С-ка делает из такой конструкции дополнительное левое соединение

Лучше временная таблица, чем вложенный запрос или виртуальная таблица. Так ты помогаешь транслятору SQL "перевести" текст запроса наиболее оптимальным образом

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

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

Накладывай условия в параметрах виртуальной таблицы регистра, а не в секции ГДЕ. Просто прими за аксиому и делай так всегда. Но только условия должны накладываться на измерения и их реквизиты.

(продолжение следует...)

#запросы #оптимизация
Ты можешь сам сменить пароль!

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

Да-да, независимо от того, какие у тебя права! Заходишь в Администрирование хранилища, открываешь свою учётку и меняешь пароль. Вуаля! 😃

При минимальных правах на действия с хранилищем, это единственное, что остаётся доступным всегда.

#администрирование #лайфхак
На что обратить внимание, если тормозят запросы? (продолжение)

Для вывода используй Представление. Если результат запроса будет использован для вывода (например, для заполнения макета отчета), то выводимое поле лучше представить строкой. Ссылка конечно выведется корректно, но времени на это будет затрачено до 40% больше. Используй Наименование или Представление

Осторожно с составными типами! При проектировании объектов БД никогда не допускай реквизитов составного типа, состоящих одновременно из ссылок и примитивных типов. Устройство таких таблиц станет крайне сложной для обработки, и никакие индексы не помогут их оптимизировать. Лучше два отдельных реквизита и последующее объединение запросов

Используй функцию ВЫРАЗИТЬ. На сцене снова реквизиты составного типа. Если достаточно одной таблицы, входящей в состав, используй ВЫРАЗИТЬ, чтобы избежать неявного соединения со всеми таблицами, составляющими тип. Нередко производительность из-за этого улучшается на порядки!

Используй конструкцию ПЕРВЫЕ. Если нужны не все записи результата, не заставляй сервер пыхтеть над обработкой миллионов строк

Не используй поле Ссылка от реквизитов ссылочного типа. Конструкция вида:

ВЫБРАТЬ
Клиенты.Договор.Ссылка КАК Договор

Приведёт к чтению всей таблицы договоров вместо получения одной ссылки. Тот же результат, но с меньшими затратами:

ВЫБРАТЬ
Клиенты.Договор КАК Договор

Не применяй избыточное агрегирование. Иногда для сворачивания результата, на верочку делают группировку вместе с конструкцией РАЗЛИЧНЫЕ:

ВЫБРАТЬ РАЗЛИЧНЫЕ
Остатки.Товар КАК Товар
ИЗ
РегистрНакопления.ОстаткиТоваров КАК Остатки
Сгруппировать по
Остатки.Товар

Оставь что-то одно, и при том же результате получишь группировку вдвое быстрее.

#запросы #оптимизация #чеклисты
👍1
Быстрый поиск объектов

В последнее время часто слышу вопрос типа: "А как узнать, как в конфигураторе называется отчёт, который в меню называется так-то?". Видимо, народ активно осваивает управляемые формы 🙂

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

Прикол в том, что поиск происходит не только по имени, но и по синониму. И если у объекта эти два свойства отличаются, это легко отлавливается 😎

#конфигурирование #администрирование
Дополнение от @ArtanoMayarov к последнему посту про быстрый поиск:

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

☑️ Запрет помещать курсор после конца строк и отображение непечатаемых символов

Помогает избежать лишних изменений при сравнении/объединении и лишних коммитов при работе с Git. Просто договорились в команде, как отделяем строки, какой синтаксический отступ используем, и никаких пробелов в конце строк.
Знак табуляции меняю на маленькую стрелочку (код 26), т.к. дефолтный кружок сильно отвлекает.

☑️ Расцветка кода

Когда ушел от типовой расцветки в пользу международной от VSCode, глаза стали меньше напрягаться и болеть. По настроению чередую светлую и темную темы (но чаще пользуюсь темной), благо разница только в цвете фона.

☑️ Автозамены, проверки и группировки

Контекстную подсказку и автоформатирование сразу включаю по максимуму, чтобы уже не париться во время работы. Сюда же - все клиенты отладчика и кнопки редактирования модуля на панелях инструментов.

☑️ Запуск от имени пользователя без имени

Настройку ставлю один раз, но при каждом запуске отладчика сам выбираю, под кем запускаться. Очень ускоряет ролевое тестирование. Единственное, по началу придется смириться с окном авторизации при каждом запуске, но к этому быстро привыкаешь 🙂

☑️ Шаблоны текстов

Стандартные сразу отключаю 👿, ставлю шаблоны от Чистова и пишу свои. Свои храню в отдельном репозитории на Github.

Все настройки вынес в отдельный гугло-док. Когда надо настроить новую или слетевшую среду, просто открываю его и за 5 минут повторяю в конфе.
Даю ссылку на свой документ. Можете пользоваться им или по аналогии сделать свой под себя 😀

Очень удобно, рекомендую!

https://docs.google.com/document/d/1hSdgJ-Hz9GWs9o1IdtOl7U841o--BxiwZ-xFyM29bho/edit?usp=sharing

#конфигурирование #разработка