Маленькие хитрости большой платформы (часть 1)

29.12.22

Разработка - Механизмы платформы 1С

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

Простые хитрости

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

 

Подсветка идентификаторов

Если используете платформу 8.3.+, то этот совет для вас. Какую бы цветовую схемы не использовали - обязательно включайте подсветку идентификаторов: текущий и выбранный (см. скриншоты). 

 

 

 

Свои шаблоны

 
 Кому может не подойти этот совет

Шаблоны, как мне видится, у каждого программиста свои. Они подбираются под специфику работы, стиль программирования, требования конкретной организации к оформлению кода и т.д. Исходя из своего опыта, хочу дать 2 рекомендации:

1. Сразу отключить стандартные шаблоны, наиболее удобные из них перенести себе в файл

 

 

2. Включить для своих шаблонов настройку автозаполнение

 

 

Хитрости со звёздочкой

Далее идут практики, которые могут спасти от ошибок объединения конфигураций или помогут обнаружиться неочевидные ошибки в коде или в доставшемся legacy.

 

Проверка конфигурации

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

В меню "Конфигурации" есть такой полезный метод: "Проверка конфигурации". Там множество настроек, на которых я сильно останавливаться не буду, покажу общий принцип: сделали обновление, поставили нужные настройки и проверяете релиз. Это убережёт от банальных ошибок объединения, когда не перенеслась или перенеслась с ошибкой какая-нибудь функция.

 

 

Расширенная проверка синтаксиса модуля

Цитата из документации: "Расширенная проверка. Выполняется проверка обращений к методам и свойствам объектов "через точку" (для ограниченного набора типов)."

Это совет применим ограниченно, т.к. если у вас очень тяжёлое legacy или очень большая конфигурация (н-р ERP и выше) - то эта проверка будет скорее мешать, чем помогать. Остальным советую сразу эту проверку включать. Делается это в следующем разделе:

 

 

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

 

Продвинутые хитрости

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

 

Вложенные таблицы на управляемой форме

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

Часто встречаемый путь реализации - это 2 независимые таблицы на форме и работа с событиями "При активации строки" / "Выбор". Но есть и более интересный и просто приём для реализации этой связи. Тут проще 1 раз показать, чем много расписывать.

 

 

Управление 1С из командной строки

Преимуществ от освоение работы с 1С из командной строки масса:

1. Самое простое: авторизация в конфигуратор и хранилище без необходимости вводить всё при каждом запуске руками

rem  пример авторизации в базу и в хранилище
"C:\Program Files\1cv8\8.3.18.1334\bin\1cv8.exe" DESIGNER  /f"D:\Work\1c_bases\" /N"Пользователь" /P"Пароль" /ConfigurationRepositoryF"D:\Work\1c_hran" /ConfigurationRepositoryN "Администратор" /ConfigurationRepositoryP "123"

2. И до самого сложного: скрипты, автоматизирующие обновление конфигураций, резервное копирование и т.д. Сразу оговорюсь: да, есть инструменты-надстройки над командной строкой 1С, такие как vrunner, но иметь базовое понимание о командах самой 1С нужно, ибо не у каждого клиента и не на каждом ПК можно будет поставить oScript или другое любое другое ПО.

 

Заключение

На этом, пожалуй, на сегодня закончу. Была мысль в декабре что-то более глубокое посмотреть (н-р: асинхронность в 8.3.21), но, к сожалению, злобный вирус подкосил, поэтому ограничусь данным материалом. Надеюсь, он был чем-то да полезен. Спасибо всем за внимание и с наступающим 2023 годом!

См. также

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    7511    bayselonarrend    20    

154

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    5967    dsdred    16    

80

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Бесплатно (free)

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

24.01.2024    17799    YA_418728146    26    

71

Механизмы платформы 1С Программист Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    23786    SeiOkami    48    

135

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

28.08.2023    14779    YA_418728146    7    

166
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. glek 120 29.12.22 12:29 Сейчас в теме
Вот за вложенные таблицы - прикольно. Даже не знал, что можно так делать.
frkbvfnjh; Xershi; Aleksandr_prof; Teplotrassamen; jif; Jeka44; PrinzOfMunchen; mrChOP93; cleaner_it; Созинов; NikeeNik; kalyaka; DrAku1a; i_lo; bilex; Lem0n; +16 Ответить
2. milkers 2920 29.12.22 13:10 Сейчас в теме
Вложенные таблицы - интересно. А если нужно сохранить содержимое как документ, а потом восстановить при открытии?
3. glek 120 29.12.22 14:19 Сейчас в теме
(2) Как вариант - хранилище значений?
4. milkers 2920 29.12.22 14:24 Сейчас в теме
(3) Так себе вариант. При таком хранении не будет работать проверка ссылочной целосности при удалении объектов.
5. glek 120 29.12.22 14:26 Сейчас в теме
(4) Согласен. Тут 2 варианта: либо как я сказал, либо в документе соответствующее количество табличных частей и при создании/перед записью обрабатывать.
6. milkers 2920 29.12.22 14:31 Сейчас в теме
(5) То есть перед открытием документа надо подождать время t, пропорционально количеству записей в этом своеобразном дереве? Схема с обработчиками событий мне начинает гораздо больше нравиться.
9. zeltyr 607 30.12.22 07:02 Сейчас в теме
(6) Первое, оно же главное - "в нашей жизни не всё, не везде и не всегда". Как и любой приём программирования - приём с двумя таблицами имеет свою область применения.

Какие области применения сходу назову я? Ну как минимум две:

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

2. В случае документов схема ограничено применима, но вспомните различные специфические документы. типа "Установка цен". Он один чёрт при открытии преобразует табличную часть документа в таблицу на форму, а при записи происходит обратное преобразование. Для таких документов приём тоже вполне применим.
7. kser87 2470 29.12.22 15:05 Сейчас в теме
Непонятно совсем, что вы хотели сказать в разделе "Вложенные таблицы". Как это можно вывести на форму с минимальными затратами?
kpotoyalo; bulpi; +2 Ответить
10. zeltyr 607 30.12.22 07:04 Сейчас в теме
(7) Не надо тратит силы на написание кода для обработчиков событий "При активации строки" - чем не меньшие трудозатраты?

Про области применения ответил чуть выше.
8. bulpi 217 29.12.22 17:49 Сейчас в теме
Вообще не понял про вложенные таблицы. Где связь прописывать ?
11. zeltyr 607 30.12.22 07:05 Сейчас в теме
(8) Связь прописывать не надо. Создаёте "(Таблицу значений)" на форме и к ней вложенную таблицу (как на скриншоте) и всё работает дальше само.
cleaner_it; +1 Ответить
12. kser87 2470 30.12.22 10:43 Сейчас в теме
(10) и как редактируется вложенная таблица? связь по типу или прямо в строке?
13. kalyaka 1105 30.12.22 11:15 Сейчас в теме
(12) связь через текущие данные элемента формы таблица
например вложенная таблица имееть путь к данным: Элементы.Реквизит1.ТекущиеДанные.Реквизит2,
где Элементы.Реквизит1 - это таблица верхнего уровня, у которой путь к данным: Реквизит1
а ТекущиеДанные.Реквизит2 - это вложенная таблица в таблице Реквизит1.Реквизит2

При этом уровни вложенности неограничены, а вложенную таблицу без таблицы верхнего уровня на форму поместить нельзя. Т.е. таблицы верхнего уровня обязательно должны быть на форме и тогда для вложенных таблиц любого уровня путь к данным будет всегда такого вида: Элементы.Реквизит1Реквизит2.ТекущиеДанные.Реквизит2
15. zeltyr 607 31.12.22 16:21 Сейчас в теме
(12) Думаю, лучше 1 раз увидеть - чем 100 раз рассказывать, поэтому прикладываю простенькую обработку с примером. И вот код заполнения для тех - кому не хочется скачивать обработку.


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	НовСтрГлавная = ГланаяТаблица.Добавить();
	НовСтрГлавная.Реквизит1 = "Главная таблица (строка 1)";
	
	НовСтрВложенная = НовСтрГлавная.ДетализацияТаблицы.Добавить();
	НовСтрВложенная.Реквизит2 = "Вложенная таблица (строка 1-1)";
	
	НовСтрВложенная1 = НовСтрГлавная.ДетализацияТаблицы.Добавить();
	НовСтрВложенная1.Реквизит2 = "Вложенная таблица (строка 1-2)";
	
	НовСтрГлавная = ГланаяТаблица.Добавить();
	НовСтрГлавная.Реквизит1 = "Главная таблица (строка 2)";
	
	НовСтрВложенная = НовСтрГлавная.ДетализацияТаблицы.Добавить();
	НовСтрВложенная.Реквизит2 = "Вложенная таблица (строка 2-1)";
	
КонецПроцедуры

Показать
Прикрепленные файлы:
ПримерГлавнойИВложеннойТаблицы.epf
BigB; kser87; +2 Ответить
14. coollerinc 196 30.12.22 15:01 Сейчас в теме
Реально вложенные таблицы я как то пропустил, список значений использовал. А так не использовал. В типовых даже ни разу не видел, где бы это применялось. Да и на ИТС не видел описание, что это будет так работать.

Откуда вы узнали?)
16. zeltyr 607 31.12.22 16:28 Сейчас в теме
(14) Положа руку на сердце - где я это увидел первый раз, уже и не помню. То ли показал кто-то из коллег, то ли где-то ли в одном из роликов по 1С. Точно знаю, что потом этот же приём видел в одном из роликов жёлтого клуба: https://www.youtube.com/watch?v=rb3vnGMRCvA&t=2994s - вот тут.
SuhoffGV; Kolunya; +2 Ответить
17. bugagashenka 203 01.01.23 15:19 Сейчас в теме
Не хочу быть занудой, но, как по мне автор вывалил несколько несвязных между собой инструкций из доки 1С.
Причём интересное может быть только про вложенную таблицу.
Статья могла получиться шикарной, если бы автор не поленился раскрыть хотя бы каждый из пунктов более детально.
Например. Вложенная таблица, как в статье, как с обработчики, и все ещё завернуть на большие данные с десяткой тысяч строке и проверить что и как работает.
С командной строкой развить до разных сценариев использования.
Проверку конфигурации перед раскатыванием делать, как по мне, пустая трата времени. Если хочется качества, то сонар, если дым, то банальный запуск покажет ошибки при разыменовании.
Минус не ставлю, но, повторюсь, статья больше похожа на статью ради статьи.
Надеюсь, автор сделает выводы и в следующей сделает очень интересный текст
kpotoyalo; +1 Ответить
18. zeltyr 607 01.01.23 19:33 Сейчас в теме
(17) Первое, оно же главное - автор всегда старается выдать лучший материал за месяц, исходя из темы, состояния здоровья и наличия свободного времени. О причинах, почему данная статья получилась не такой глубокой, как хотелось - вполне достаточно информации в заключении. Если её (информации) недостаточно - могу только отослать к следующей цитате - " других авторов у меня для вас нет".

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

В заключении поста - огромное спасибо всем, кто поставил плюс и нашёл для себя что-то полезное. Ваши вопросы и плюсы мотивируют меня работать и дальше
kMidas; zaic; +2 Ответить
19. bugagashenka 203 02.01.23 07:08 Сейчас в теме
(18) что ж, в таком случае, хочу обратить ваше внимание на статьи Юры Пермитина. Всегда полные, интересные, с элементом новизны и с полностью раскрытой темой.
Ни в коем случае не хочу демотивировать, но здоровая критика ещё ни одному автору не помешала и, надеюсь, часть 2 выйдет конфеткой, которую приятно будет утащить себе в закладки. А если не получается подготовить качественный материал в срок, то уж, имхо, лучше дописать, выдать одну статью за два месяца, нежели «лишь бы было».
По поводу мотивации могу лишь отметить, что цели может быть только две, и ни одна не является альтруистической. Первая- за хорошие статьи (50 и более плюсов) инфостарт платит. Вторая, м менее очевидная - развитие собственного бренда, чтобы в будущем эти труды принесли хорошие дивиденды.
20. zeltyr 607 02.01.23 09:15 Сейчас в теме
(19)
Ни в коем случае не хочу демотивировать, но здоровая критика ещё ни одному автору не помешала...


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

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


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

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


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

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

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

В-третьих, навыки и умения планировать и выдавать работу в поставленные тобой сроки (про это уже писал выше).

И это только навскидку.

Первая- за хорошие статьи (50 и более плюсов) инфостарт платит.


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

Вторая, м менее очевидная - развитие собственного бренда, чтобы в будущем эти труды принесли хорошие дивиденды.


Да, не скрою, это одна из целей, но пока далеко не главная. О том какие личные плюшки я с этого наживаю - описал выше.

P.S. что-то понесло меня на лирику и рассуждения, уж простите. Возможно новый год навевает )
22. bugagashenka 203 02.01.23 11:10 Сейчас в теме
(20) вот так и скатываются хорошие ресурсы с сильными авторами, когда на передний план выползают писаки, которым лишь бы написать, а то, что постят текст качеством ниже плинтуса, ну главное ведь в себе качества выработать.
П. С. Минусы от меня
23. zeltyr 607 02.01.23 11:31 Сейчас в теме
(22) Начнём с того, что я просмотры себе не накручиваю. Этот пост, попал в тренды инфостарта, потому что материал был кому-то полезен, даже в том виде, в котором я его описал. И своим сообщением вы не только меня в "слабые авторы" записали, вы ещё и оскорбили всех, кто ставил этому материалу плюсы. Не надо так.

В дальнейшей дискуссии с вами не вижу смысла, т.к. вести дискуссию с человеком, который при первых же возражениях переходит не личности считаю ниже своего достоинства.
21. user595194_bendery_sh 02.01.23 10:39 Сейчас в теме
связанные таблицы только для Уф?
24. zeltyr 607 02.01.23 12:01 Сейчас в теме
(21) На обычной форме всё не так просто, по крайней мере на первый взгляд. Смотрите - программно мы можем сделать колонку таблицы с типом "Таблица значений":

	ГлавнаяТаблица = Новый ТаблицаЗначений;
	Колонка1 = ГлавнаяТаблица.Колонки.Добавить("Строка", Новый ОписаниеТипов("Строка"));
	Колонка2 = ГлавнаяТаблица.Колонки.Добавить("ВложеннаяТаблица", Новый ОписаниеТипов("ТаблицаЗначений"));


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

	НовСтр = ГлавнаяТаблица.Добавить();
	НовСтр.Строка = "Строка1";
	
	Колонка21 = НовСтр.ВложеннаяТаблица.Колонки.Добавить("ВложеннаяСтрока", Новый ОписаниеТипов("Строка"));

	НовСтрВложенная = НовСтр.ВложеннаяТаблица.Добавить();
	НовСтрВложенная.ВложеннаяСтрока = "Подстрока1";

	НовСтрВложенная = НовСтр.ВложеннаяТаблица.Добавить();
	НовСтрВложенная.ВложеннаяСтрока = "Подстрока2";

	НовСтр = ГлавнаяТаблица.Добавить();
	НовСтр.Строка = "Строка2";

	Колонка21 = НовСтр.ВложеннаяТаблица.Колонки.Добавить("ВложеннаяСтрока", Новый ОписаниеТипов("Строка"));

	НовСтрВложенная = НовСтр.ВложеннаяТаблица.Добавить();
	НовСтрВложенная.ВложеннаяСтрока = "Подстрока3";

	НовСтрВложенная = НовСтр.ВложеннаяТаблица.Добавить();
	НовСтрВложенная.ВложеннаяСтрока = "Подстрока4";
	
Показать


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

Кстати, есть такой метод:
ПолучитьСтруктуруХраненияБазыДанных()
Вот он получает таблицу значений с вложенными таблицами значений:
Прикрепленные файлы:
25. user958974 06.01.23 17:08 Сейчас в теме
Вложенные таблицы на управляемой форме - ЭТО ПУШКА!!!!
Как я до этого жил?!)))
Спасибо! Мир не будет прежним!!!))))))))))))
26. isn 15 18.04.24 21:32 Сейчас в теме
В статье, по мимо указания, как использовать шаблоны нет продвинутого шаблона. Делюсь шаблоном от Чистова, надеюсь пригодится.
Прикрепленные файлы:
chistov.pro.st
Оставьте свое сообщение