Советы из Желтой тетради 📒 #1

15.03.21

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

В этой публикации я собрал в одном месте часть советов и лайфхаков, которые открыл для себя в последнее время. Регулярно я публикую их в своём телеграм-блоге "Жёлтая тетрадь 📒 Блог программиста 1С", здесь же - дайджест этих публикаций.

Узнать имя формы в режиме Предприятие

 


В новых версиях платформы появились новые команды форм для удобства анализа и разработки.

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

 

Программная доработка форм типовых конфигураций

 


В типовых конфигурациях в формах ПриСозданииНаСервере вызывается метод общего модуля СобытияФорм (см. скрин 1). Если расширить только этот модуль, то можно в одном модуле собрать все программные модификации форм (см. скрин 2).

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

 

Кеширование предопределенных значений на клиенте


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

ЮрФизЛицо = ПредопределенноеЗначение("Перечисление.ЮридическоеФизическоеЛицо.ЮридическоеЛицо");

При использовании БСП вместо ПредопределенноеЗначение можно использовать ОбщегоНазначения.ПредопределенныйЭлемент или ОбщегоНазначенияКлиент.ПредопределенныйЭлемент. Это то же самое, только не падает с ошибкой, если получать несуществующее значение.

 

Порядок вызова подписок на событие


Известно, что подписки на событие вызываются в последнюю очередь: сперва обработчик события в модуле объекта, затем или перед ним код из расширений этого метода (если есть), после - подписки на событие.
Это можно прочитать на ИТС, там же указано, что подписки вызываются в произвольном порядке.

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

Когда важна очередность выполнения, надёжнее всего реализовать очередность в коде, а количество подписок сократить.

 

Кеширование данных ИБ


Раньше, для ускорения 1С и сокращения обращений к СУБД, данные кешировали в параметрах сеанса. Затем в платформу добавили общие модули с повторным использованием возвращаемых значений (читай "кеш").

В ССиМ есть статья с рекомендациями по использованию общих модулей с повторным использованием. Из интересного:
🔸 Закешированное значение будет удалено из кэша через 20 минут после вычисления или через 6 минут после последнего использования
🔸 Нельзя менять данные, полученные из кэша
🔸 Внутренние вызовы модулей с повторным использованием не кэшируются
🔸 При кэшировании на время сеанса нельзя использовать значения типа Запрос и объекты базы данных
🔸 Метод глобального контекста ОбновитьПовторноИспользуемыеЗначения() удаляет все повторно используемые значения

 

Простая печать комплектов


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

КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "Счет,ТОРГ12,ТОРГ12";
КомандаПечати.Представление = "Комплект (счет и 2 торг12)";
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;

Конечно, вывод форм, входящих в комплект, должен быть заранее реализован (каждой отдельной формы).

v8 платформа 1cv8.cf БСП ССиМ

См. также

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

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

23.06.2024    7443    bayselonarrend    20    

154

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

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

13.03.2024    5942    dsdred    16    

80

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

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

24.01.2024    17663    YA_418728146    26    

71

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

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    11221    dsdred    44    

130

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

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

06.10.2023    23756    SeiOkami    48    

135

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

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    18828    human_new    27    

80

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

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

28.08.2023    14729    YA_418728146    7    

166
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. lavash67 15.03.21 09:15 Сейчас в теме
Отличная информация!
slavap; DrAku1a; Zixi; builin; +4 4 Ответить
3. builin 53 15.03.21 11:35 Сейчас в теме
7. Yashazz 4790 15.03.21 13:05 Сейчас в теме
(1) Это чем она отличная? Наваленные вперемешку простейшие факты.
TimofeySin; ovasiliev; bugagashenka; _OLEG; asupsam; t278; rpgshnik; AnryMc; Andreeei; amoarok; Поручик; +11 3 Ответить
24. lavash67 15.03.21 13:30 Сейчас в теме
(7) любая профильная информация повышает средний градус грамотности разработчиков. Вместо негатива можно было бы конструктивной критики добавить.
MAlexey81; DrAku1a; Torin57; Merkalov; Neuroproton; +5 Ответить
37. FatPanzer 15.03.21 14:47 Сейчас в теме
(24) Не факт! Если даже самой отличной водкой пытаться разбавлять спирт - градус понижается!!!
(Запишите себе в тетрадочку с лайфхаками, кстати)
AnryMc; e.kogan; Yashazz; +3 2 Ответить
47. adhocprog 1142 15.03.21 17:50 Сейчас в теме
(24)
можно было бы конструктивной критики добавить

а лучше статью )
2. user803412 15.03.21 09:16 Сейчас в теме
4. builin 53 15.03.21 11:36 Сейчас в теме
6. Yashazz 4790 15.03.21 13:04 Сейчас в теме
(2) А ты, мил человек, давно ли в 1С, что такому радуешься? Так ты лучше ступай почитай жёлтеньку книжечку, там тебя и не такие открытия ждут)))
bugagashenka; ovasiliev; FatPanzer; Поручик; +4 4 Ответить
5. Yashazz 4790 15.03.21 13:04 Сейчас в теме
Блин, ещё одно... Я вот не понимаю, Инфостарт это что, площадка для личных блогов всяких пионэров? Которые для себя обнаружили элементарную вещь и радостно постят?

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

Это не лайфхаки, товарищи. Это элементарщина. Если для вас это лайфхак, то сочувствую.

Вы вообще что, издеваетесь? Давайте ещё синтакс-помощник перепостим, загребём кучу плюсиков и выйдем в топ, ага?

Вконец охренели уже.
retr0; sank84; zaic; ovasiliev; bugagashenka; a.kazeko; Dach; Revachol; velemir; IrrI; headMade; dhurricane; zqzq; cleaner_it; t278; rpgshnik; FatPanzer; theshadowco; amoarok; Поручик; +20 4 Ответить
12. Alexsh_kz 15.03.21 13:13 Сейчас в теме
(5) Спокойствие, только спокойствие!
Кому не интересно, может просто пройти мимо не оставляя следов, не выплескивая желчь на желтые страницы желтой тетради :)))
AzagTot; Award; andy23; Merkalov; CheBurator; builin; tulakin_s; SeiOkami; Поручик; +9 1 Ответить
14. Yashazz 4790 15.03.21 13:19 Сейчас в теме
(12) Это не вопрос интереса. Это вопрос элементарной чистоплотности. Если автор и вы считаете такое ведение блогов в порядке вещей на таком ресурсе, то давайте я буду каждый вечер например рассказывать, чего-как делал? или перепощу ИТС с кусками Зазеркалья? Или вообще расскажу, что есть такой обалденный метод, который выводит текст на экран, "Сообщить" называется? Во все будут кипятком отливать, а)))
bugagashenka; velemir; pavlov_dv; Andreeei; +4 2 Ответить
16. Alexsh_kz 15.03.21 13:22 Сейчас в теме
(14) Так вперед, вместо того, чтобы разводить срачь в комментах, сделали бы полезное и главное - всем интересное дело. :)
Уверен, что вы найдете свою аудиторию :)
sank84; Merkalov; +2 1 Ответить
17. Yashazz 4790 15.03.21 13:23 Сейчас в теме
(16) Мимо, товарищ, мимо) Я на такие подначки не ведусь. Мы сейчас о конкретной хрени, которую выдали за публикацию и которой место в блогосфере, а не обо мне.
bugagashenka; cleaner_it; +2 2 Ответить
18. Alexsh_kz 15.03.21 13:25 Сейчас в теме
(17) Если бы не ваши комментарии, я бы прочитал, не увидел ничего интересного, закрыл бы и забыл, что здесь написано, а так уже минут 30 страница не закрывается :)))
Award; Deslime; builin; CyberCerber; Поручик; +5 1 Ответить
23. builin 53 15.03.21 13:30 Сейчас в теме
(5) Потому что большинство программистов 1С не входят в вашу элиту и такие простые вещи расширяют их кругозор.
Завидуйте молча, коллега. И никто не мешает проходить мимо или самому писать о том, что вы сами считаете интересным для людей.
sank84; AzagTot; Award; Deslime; qazaz2; andy23; Светлый ум; Merkalov; SeiOkami; adhocprog; CyberCerber; lavash67; +12 2 Ответить
27. Yashazz 4790 15.03.21 13:34 Сейчас в теме
(23) ну если те, кто умеет читать новости от 1С и описания обновлений в платформе, вам кажутся "элитой", то скорее уж вы нам завидуйте давайте.
JohnConnor; t278; Xershi; FatPanzer; +4 2 Ответить
40. Xershi 1555 15.03.21 15:06 Сейчас в теме
(27) статья рассчитана на разработчиков до 2 лет опыта. Думаю автор забыл это упомянуть.
А это ключевое правило!
Единственный нюанс это про подписки с общим типом почерпнул.
Светлый ум; asupsam; t278; rpgshnik; +4 Ответить
41. Yashazz 4790 15.03.21 15:17 Сейчас в теме
(40) Про подписки, полагаю, так: у любого объекта метаданных есть ClassId и ObjectId, так вот в их порядке оно и выполняется. Для объекта "вообще", например для "ДокументОбъект" идентификатор класса будет "v8:TypeSet.DocumentRef", а для конкретного "ДокументОбъект.АвансовыйОтчет" будет "v8:Type.DocumentRef.АвансовыйОтчет", всё логично. Типизацию можно увидеть, используя функцию XMLТип. Идентификаторы ObjectId можно увидеть, выгрузив конфигурацию в файлы. Если кому интересно, URI "http://v8.1c.ru/8.1/data/core"
44. Sashares 35 15.03.21 17:25 Сейчас в теме
(40)А толку?
Если на порядок подписок не документирован, и на него завязываться нельзя, то какая разница какая вызывается раньше, а какая позже?
45. Xershi 1555 15.03.21 17:45 Сейчас в теме
(44) в целом все верно, но нужно это для того чтобы дать по шее тому кто думал, что так делать можно)
53. rpgshnik 3795 16.03.21 01:21 Сейчас в теме
(5) вопрос не к нему, вопрос к модерации. Каждую статью проверяют. Значит на усмотрение Инфостарт - контент годный. Даже с рекламой :)
8. Поручик 4692 15.03.21 13:07 Сейчас в теме
Кроме новых версий платформы, всё остальное открытие Америки.
cleaner_it; +1 Ответить
10. Yashazz 4790 15.03.21 13:08 Сейчас в теме
(8) А это просто есть такие персонажи, которые даже updinfo не читают, им разжуй и в рот положи. Вот они и плюсят репост новости про "Открыть в Конфигураторе".
bugagashenka; +1 1 Ответить
58. RustIG 1747 16.03.21 06:50 Сейчас в теме
(10) когда вы работаете, если читаете АпдИнфо, ИТС, Зазеркалье, книги по 1с, Инфостарт, пишите комменты в течение часа?
60. Yashazz 4790 16.03.21 07:30 Сейчас в теме
(58) Грамотно организованное рабочее время - великая вещь. Запустил, например, обработки или регламентные процедуры, имеешь 30 минут времени. На ИТС и обновления очень даже хватает.
123. Сисой 88 30.05.23 17:36 Сейчас в теме
(60) Бездельник, Вы, батенька.
122. Сисой 88 30.05.23 17:36 Сейчас в теме
(10) Есть персонажи, которые работают по 12-14 часов в день в режиме хардкорного программирования. Иногда без выходных. Они документацию уже лет 5 не читали. Некогда.
11. Yashazz 4790 15.03.21 13:11 Сейчас в теме
(8) А главное, ты обрати внимание - уже 17 плюсов. При таком подходе в центр внимания и топ выходит (а точнее, всплывает) низкокачественное это самое. В итоге та сумбурная каша, которую тут нам выдали за якобы публикацию на профессиональном сайте, наберёт популярность, а её автор со своим пионерским уровнем подачи материала получит рейтинг.

Ко мне один такой приходил на собеседование. Типа он ведёт блог, у его видеокурса 1С подписчиков куча. Я пять минут с ним побеседовал и выгнал взашей, потому что человек даже простейших вещей не знал. Но зато понты)))
Поручик; +1 1 Ответить
9. Yashazz 4790 15.03.21 13:07 Сейчас в теме
А уж куда модераторы смотрят, я вообще не понимаю. Это же совершенно ниже плинтуса.
13. Поручик 4692 15.03.21 13:14 Сейчас в теме
(9) Модератор не будет разбираться в полезности. Главное, чтобы не было откровенного мата, экстремизма и #КрымНаших через слово. Он и так наш, но меру знать надо.
15. Yashazz 4790 15.03.21 13:20 Сейчас в теме
(13) Ага))) Пока Истина Цикл Крым.Принадлежность="Наш" КонецЦикла
33. ixijixi 1913 15.03.21 14:24 Сейчас в теме
(15) У Вас в коде ошибочка, коллега) КрымНаш уже давно константа)
Если Дата > '20140326' Тогда КрымНаш = Истина КонецЕсли;
Award; AzagTot; suepifanov; Petr54-ru; user925427; +5 Ответить
38. Yashazz 4790 15.03.21 14:56 Сейчас в теме
(33) Согласен. Признаю. Ваш код лучше.
cleaner_it; +1 1 Ответить
55. rpgshnik 3795 16.03.21 01:28 Сейчас в теме
(33)
Если Дата > '20140326' Тогда КрымНаш = Истина КонецЕсли;


КрымНаш = Дата > '20140326';
horsgroup; zaic; user722950; Bassgood; pavlov_dv; +5 Ответить
21. Yashazz 4790 15.03.21 13:29 Сейчас в теме
(13) Мдя? Помнится, году в 14-м мою публикацию завернули именно с формулировкой "не содержит принципиально нового материала".
cleaner_it; Поручик; +2 1 Ответить
54. rpgshnik 3795 16.03.21 01:27 Сейчас в теме
(13) экстремизма в частности в сторону 1С :)
19. Yashazz 4790 15.03.21 13:28 Сейчас в теме
Чуваки, а вы знаете, что можно значение, которое в форме, запихать во временное хранилище? Офигенная штука, называется "ПоместитьВоВременноеХранилище". Туда можно сохранить, и потом оттуда получить, правда, прикольно?))

...а то вдруг пацаны не знают)
ardn; rpgshnik; axelerleo; Поручик; +4 2 Ответить
35. FatPanzer 15.03.21 14:39 Сейчас в теме
(19) Да ладно! Прямо из формы?!?!?! Абалдеть...
56. rpgshnik 3795 16.03.21 01:31 Сейчас в теме
(19)
Прикрепленные файлы:
20. a_a_burlakov 288 15.03.21 13:28 Сейчас в теме
У меня относительно подобных статей всегда противоречивые чувства.

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

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

Поэтому реакция на такие статьи может быть: либо "прочитал и забыл" или "прочитал и выбесился, что такую тривиальщину публикуют".

В идеале бы иметь большой-большой цикл статей наподобие "нюансов" Якова из этого треда: то есть чтобы каждый небольшой кусочек 1С с лупой анализировался. Но это, во-первых, слишком большой труд, а во-вторых, он наверняка слишком быстро бы устарел, года за четыре. Его вообще, по-хорошему, сама 1С должна запилить, но среди её библиотеки таких трудов я не видел.

Поэтому такие статьи считаю необходимым злом, и буду ждать и читать части #2 и #3. :)
work.sable; e.kogan; RustIG; rpgshnik; builin; +5 Ответить
25. Yashazz 4790 15.03.21 13:32 Сейчас в теме
(20) Да этих нюансов где угодно куча. Например, элементарное сравнение значений, знак равенства, это далеко не столь очевидная вещь, как многим кажется. Или сортировка. Или работа метода "ЗначениеЗаполнено". Устаревает медленно, т.к. глубоко в платформе. Но...

Мои статьи стоят мне множества потраченного времени и сил. И когда потом приходит персонаж, который кидает ссылку на официальные ресурсы 1С, репостит новости и Зазеркалье, и сгребает на этом кучу хайпа и рейтинга, я перестаю понимать, нахрена я старался.
Torin57; axelerleo; FatPanzer; +3 1 Ответить
22. vano-ekt 124 15.03.21 13:30 Сейчас в теме
еще, в копилку, если нажать F5 в конфигураторе, то откроется предприятие в режиме отладки,(!) а там вообще чудеса чудесные, можно построчно выполнять код и переменные смотреть не через запись в текстовый документ!!1 закидывайте меня плюсами!
artkor; Yashazz; +2 Ответить
26. vano-ekt 124 15.03.21 13:33 Сейчас в теме
ps: ждем длинную серию статей после прочтения ТСом "Системы стандартов и методик разработки конфигураций для платформы 1С:Предприятие 8"
28. Yashazz 4790 15.03.21 13:35 Сейчас в теме
А ещё можно знаете что? В руководствах нету, ловите лайфхак: как сделать цикл по убывающим значениям. 1С ведь только Для й=1 По 10 умеет, например, а если надо обратно? А вот как: Для й=-10 По -1, вуаля! Ну и в цикле если надо, инвертируйте этот минус у итератора.

Прикиньте, да?)
parshin; user1309921; Leon29; Vortigaunt; Cmapnep; Поручик; +6 1 Ответить
29. Yashazz 4790 15.03.21 13:38 Сейчас в теме
А, во, ещё лайфхак держите: конструктор "Новый" можно вызывать как функцию, т.е. Новый("Структура") отлично работает! Иногда это ваще единственный вариант сгенерить какой-нить объект, например, служебную платформенную какую-нибудь штуку. Ваще зашибись! И в исполняемом коде "Выполнить" оно стабильнее работает))
Cmapnep; Поручик; +2 1 Ответить
30. a_a_burlakov 288 15.03.21 13:47 Сейчас в теме
(29) Блин, я не знал, серьёзно.

Давайте автор будет клепать дальше свои статьи, а вы в комментариях будете докидывать ещё - книжку выпустим. :)
user999015; +1 Ответить
31. vvf1973 9 15.03.21 13:49 Сейчас в теме
Ой, злобы-то сколько. Сразу понимаешь - Родина. Можно было не комментировать, можно было молча минус поставить, но аборигенам этого недостаточно.
parshin; mpeg1989; Aleksandr_Kotelnikov_mmc; lavash67; builin; SeiOkami; +6 1 Ответить
32. Yashazz 4790 15.03.21 13:50 Сейчас в теме
И самый крутой лайфхак сезона, который я открыл для себя:
Совсем необязательно писать громоздкую конструкцию вида
Если ЗапостилНаИнфостарт=Истина Тогда
КтоМолодец="Я молодец";
Иначе
КтоМолодец="";
КонецЕсли;

Можно гораздо компактнее, без излишеств:
КтоМолодец=?(ЗапостилНаИнфостарт,"Я молодец","");

Обратите внимание, в этом примере я не пишу сравнение "=Истина", т.к. это необязательно.

Такой приём называется "тернарный оператор".

Правда обалденно? Если вам понравилось, подпишитесь на мои профессиональные советы, и вы узнаете, как сделать бесконечный цикл, что такое кэш формы и почему не всегда можно очищать переменную, присваивая ей пустой литерал ""
Kolobash95; Petr54-ru; e.kogan; TerveRus; DmitryKSL; suepifanov; a_a_burlakov; Поручик; +8 1 Ответить
36. FatPanzer 15.03.21 14:42 Сейчас в теме
57. PerlAmutor 155 16.03.21 06:20 Сейчас в теме
(32)
Обратите внимание, в этом примере я не пишу сравнение "=Истина", т.к. это необязательно.


Для тех, кто не любит писать лишнее. Попробуйте до сравнения поставить в переменную "ЗапостилНаИнфостарт" значение "Неопределено".
70. dhurricane 16.03.21 10:18 Сейчас в теме
81. PerlAmutor 155 16.03.21 17:15 Сейчас в теме
(70) Чтобы понять насколько неправы те, кто рассчитывает на неявное привидение типов к Булево.
89. FatPanzer 16.03.21 21:51 Сейчас в теме
(81) Зависит от контекста же. Если это привидение Каспер - то это доброе привидение, и на него можно рассчитывать! Он классный!

А если серьезно - то тоже зависит от контекста. Вы предложили поставить "поставить переменную Неопределено", т.е. вы навязали свой контекст. На что вам автор может возразить, что в данном коде ЗапостилНаИнфостарт - это реквизит (формы или объекта) типа "Булево", который не требует никакого "привидения". Вы же не знаете контекста, да? Но пытаетесь учительствовать.

Это вот авторам уровня ТС учительствуйте. Это для них тема неявной типизации будет очередным лайфхаком.
Bassgood; user722950; +2 Ответить
94. PerlAmutor 155 17.03.21 06:07 Сейчас в теме
(89) Если всегда делать проверку на "= Ложь" или " = Истина", то код автоматически становится независимым от контекста и безопасным.

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

(89)
Это вот авторам уровня ТС учительствуйте. Это для них тема неявной типизации будет очередным лайфхаком.

Я лишь указал на не очевидный подводный камень и сомнительный вывод - "Обратите внимание, в этом примере я не пишу сравнение "=Истина", т.к. это необязательно.". Если бы я сам не натыкался на проблемы подобного рода "оптимизации" в своей практике, то не стал бы ничего писать. А так предостерегаю.
95. FatPanzer 17.03.21 07:10 Сейчас в теме
(94)
Придет новый программист и поставит на форме вместо "Булево" - тип "Произвольный", либо отключит в настройках СКД использование параметра и ожидаемые типы значений где-то далеко в коде приведут к проблемам у пользователей.

Я вот смотрю на это совсем по другому! Если какой-то программист где-то поменяет какой-то тип - то да, проблемы действительно обнаружатся явно, и их можно будет решить без потери качества работы программы с данными.
Гораздо хуже, когда программа работает совсем без ошибок (не возникает ошибки при проверке на Истина), но часть кода тупо никогда не исполняется и что происходит в таком случае с данными - непонятно, и когда это обнаружится - тоже непонятно.

Я за ошибки. Лучше видеть и ловить симптомы, чтобы понимать, что происходит и что лечить. Чем не догадываться о скрытых болезнях.
PS. Кстати, такого программиста (который просто меняет тип, не проанализировав дальнейшее использование) я бы тоже назвал недальновидным лохом.
PPS. И именно поэтому недальновидные лохи любят везде воткнуть Попытка-Исключение. И это говорит о качестве их понимания работы алгоритмов.
Bassgood; +1 Ответить
113. PerlAmutor 155 20.03.21 17:31 Сейчас в теме
(95)
PPS. И именно поэтому недальновидные лохи любят везде воткнуть Попытка-Исключение. И это говорит о качестве их понимания работы алгоритмов.


Как часто Вы натыкаетесь на код таких людей? Я вот довольно часто. Могу ли я это контролировать? Нет! Могу ли я обезопасить свой код от них? Да!
102. Cyberhawk 135 20.03.21 16:23 Сейчас в теме
(94)
Если всегда делать проверку на "= Ложь" или " = Истина", то код автоматически становится независимым от контекста и безопасным
И перестает удовлетворять концепции "fail fast" (скрывая проблему), из-за чего в большинстве случаев вреда больше, чем пользы.
103. PerlAmutor 155 20.03.21 16:29 Сейчас в теме
(102)
П1 = Неопределено;

Если П1 = Истина Тогда
    Сообщить("П1 = Истина");
ИначеЕсли П1 = Ложь Тогда
    Сообщить("П1 = Ложь");
Иначе
    ВызватьИсключение "fail fast!";
Конец;


Показать


В большинстве мест кода 1С используются только такие конструкции:

Если Флаг Тогда
    СделатьЧтоТо();
КонецЕсли;


Если секция "Иначе" и присутствует, то постольку поскольку. В большинстве ситуаций программист знаковым ставит именно результат "Истина", а все остальные значения им трактуются как "Ложь". И сюрприз будет у пользователя, когда значение не Истина и не Ложь. Т.ч. либо проверять тип переменной каждый раз, либо согласно контекста прописывать все возможные варианты использования, а не полагаться на неявное преобразование к Булево.
104. Cyberhawk 135 20.03.21 16:32 Сейчас в теме
(103)
Иначе
ВызватьИсключение "fail fast!";
Код в эту ветку никогда не попадет. К чему она?
105. PerlAmutor 155 20.03.21 16:40 Сейчас в теме
(104)
Код в эту ветку никогда не попадет. К чему она?

Проверьте:

П1 = Неопределено;

Если П1 = Истина Тогда
    Сообщить("П1 = Истина");
ИначеЕсли П1 = Ложь Тогда
    Сообщить("П1 = Ложь");
Иначе
    ВызватьИсключение "fail fast!";
Конец;

Показать
Cyberhawk; +1 Ответить
106. Cyberhawk 135 20.03.21 16:47 Сейчас в теме
(105) Проверил, действительно работает - был не прав.
Но такой код получается весьма громоздким.
Если в алгоритме не требуется ветка с анализом противоположного значения флага, то в большинстве случаев компактный код
Если Флаг Тогда
    СделатьЧтоТо();
КонецЕсли;
или
Если НЕ Флаг Тогда
    СделатьЧтоТо();
КонецЕсли;
, влекущий ошибку выполнения при значении флага неожидаемого типа (булевого), кажется более предпочтительным.
107. PerlAmutor 155 20.03.21 16:53 Сейчас в теме
(106) В БСП есть 2 процедуры: ОбщегоНазначенияКлиентСервер.Проверить() и ОбщегоНазначенияКлиентСервер.ПроверитьПараметр()

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

К сожалению их мало кто использует, судя по опыту.
108. Cyberhawk 135 20.03.21 16:55 Сейчас в теме
(107)
Можно их использовать для проверки ... Затем уже безопасно работать с неявными приведениями
А можно просто сразу писать компактный код, который не опирается на неявное приведение, а опирается на ожидаемый тип (и вызывает ошибку выполнения, если тип неожидаемый).
Усложнять просто, упрощать - сложно (с)
109. PerlAmutor 155 20.03.21 16:58 Сейчас в теме
(108) Такие проверки необходимо делать, если не хочется потом в выходной день приезжать на работу, чтобы пользователь смог закрыть месяц из-за глупой ошибки, которой могло бы и не быть, если она не критичная и допустимо трактовать "Неопределено" как "Ложь" в конкретно взятом алгоритме.
110. Cyberhawk 135 20.03.21 17:04 Сейчас в теме
(109) А как использоване предложенных выше двух методов БСП позволяет избежать ошибки?
"Проверить", насколько понял, безусловно вызовет исключение, если в условие вида "Если Флаг Тогда" во флаге прилетит значение "Неопределено".
А используя "ПроверитьПараметр" нужно заранее туда (в ожидаемые типы) передать и тип "Неопределено", правильно понял?
111. PerlAmutor 155 20.03.21 17:06 Сейчас в теме
(110) Никак не поможет, это лишь вариант проверки, поэтому я и говорю, что предпочтительней писать так:

Если П1 = Истина Тогда
    СделатьЧтоТо();
КонецЕсли;


Вместо

Если П1 Тогда
    СделатьЧтоТо();
КонецЕсли;


Если по условиям задачи допустимо считать все отличное от "Истина" - Ложью.

Вот скрин из БСП, тут не обрабатывается проверка на значение отличное от "Истина", значит этот участок кода потенциально не безопасен, если передать в него объект - коллекцию, где "Пометка" имеет какой-то другой тип.

На втором скрине такие проверки делаются (разные авторы?).
Прикрепленные файлы:
112. Cyberhawk 135 20.03.21 17:25 Сейчас в теме
(111)
предпочтительней писать так ... Если по условиям задачи допустимо считать все отличное от "Истина" - Ложью
Каждый из вариантов использует побочный эффект, полезный в одних ситуациях и вредный в других:
- либо сохраняем устойчивость кода ценою невозможности видеть / отловить ошибку с неожидаемым типом на вызывающей стороне
- либо сохраняем строгость контракта, но получаем "fail fast"
.
Нюанс в том, что склонение к одной или другой чаше весов некорректно достигать путем побочного эффекта от использования неявного приведения типов, поэтому все наши рассуждения выше сводятся по большому счету к вкусовщине. Вряд ли стоит надеяться, что кто-то сознательно вот здесь поставил знак "равно", а здесь специально его ставить не стал именно потому, чтоб оно стало (или наоборот не стало) устойчивее.

Саму же реализацию любого из обозначенных выше подходов стоит делать явным образом (через явную проверку типа значения у флага в первом случае и через контроль и недопущение возможности флагу принимать значение отличного от булевого типа во втором).
Bassgood; +1 Ответить
117. Bassgood 1449 23.03.21 11:03 Сейчас в теме
(105) Вы же не будете писать такие громоздкие конструкции на каждую переменную только потому что какой-то программист может присвоить ей значение несоответствующее ожидаемому типу?
118. PerlAmutor 155 23.03.21 17:27 Сейчас в теме
(117) В большинстве ситуаций хватает просто "Если П1 = Истина Тогда" вместо "Если П1 Тогда". Не вижу ничего громоздкого тут.
101. bugagashenka 203 20.03.21 12:00 Сейчас в теме
(57) это пример для тех, кто не умеет грамотно выстроить архитектуру. Если у Вас в булеву переменную может затесаться неопределено, например, при вызове функции, то Вы или обрабатываете результат неверно, или возвращаете хрень.
121. AnryMc 848 29.07.21 14:06 Сейчас в теме
(32)
Если ЗапостилНаИнфостарт=Истина Тогда



(32)
в этом примере я не пишу сравнение "=Истина", т.к. это необязательно.


Так и выше необязательно...

З.Ы. Жду "+" ;-)
34. FatPanzer 15.03.21 14:35 Сейчас в теме
Шо, опять лайфхакеры пожаловали к нам в гости???
39. John_d 5891 15.03.21 14:56 Сейчас в теме
Программная доработка форм типовых конфигураций
тут я более подробно об это рассказывал
https://infostart.ru/1c/articles/1152528/
builin; by_1Cnik; +2 Ответить
51. triviumfan 97 15.03.21 22:16 Сейчас в теме
(39) Не интересно. У автора сей статьи все проще и понятней
42. Aftee 15.03.21 17:07 Сейчас в теме
Реклама телеграм-блога?
43. pm74 203 15.03.21 17:09 Сейчас в теме
я вот не знал(забыл) про
Идентификатор = "Счет,ТОРГ12,ТОРГ12";

как раз пригодится
sashocq; e.kogan; denmax; +3 Ответить
46. protexprotex 139 15.03.21 17:47 Сейчас в теме
Сколько текста всех на мааааленькую статью :-) Знать, она удалась! раз всех задела!
48. adhocprog 1142 15.03.21 17:57 Сейчас в теме
61. Yashazz 4790 16.03.21 07:32 Сейчас в теме
(46) Знаете, если в зале музея, пардон, наблевать на пол, тоже будет реакция от многих посетителей. Потому как многих культурных людей заденет. Но значит ли это, что означенное - удалось (ну кроме как глупая провокация)? Имхо - нет.
Вот и тут примерно так же.
FatPanzer; +1 1 Ответить
69. protexprotex 139 16.03.21 08:37 Сейчас в теме
(61) Да ладно. Что Вас так это задело? - ну написал человек статью. Может, это у него первая проба пера, так сказать. У Вас больше опыта - просто посоветуйте ему как лучше статью оформить. Дельные мысли подкиньте ему. По Вашему статусу видно, что Вы опытный программист. Поделитесь своим опытом.
49. protexprotex 139 15.03.21 22:05 Сейчас в теме
50. triviumfan 97 15.03.21 22:15 Сейчас в теме
Странно, что столько много плюсов. Видимо уровень программистов нынче ниже плинтуса, раз они этого не знают или не умеют пользоваться поиском, ведь кем это только не было разжёвано и каким только языком.
e.kogan; FatPanzer; t278; +3 Ответить
52. rpgshnik 3795 16.03.21 01:18 Сейчас в теме
Начало статьи интересное... но потом два крутка скоролла и статья закончилась. Сумбурно и хаотично. Реклама :)
Yashazz; t278; +2 Ответить
59. RustIG 1747 16.03.21 06:59 Сейчас в теме
(0) формат статьи понравился: что-то узнал новое (потому что не сталкивался), и наверняка забуду уже завтра (потому что не сталкиваюсь), что-то знал или думал по иному, что-то зацепило, потому что были пару задач на исследовании (увидел решение)...
на телеграмм-каналы нет времени....споры под статьей утомляют ...
rpgshnik; +1 Ответить
62. Yashazz 4790 16.03.21 07:33 Сейчас в теме
(59) а где ты тут статью увидел? куски каких-то несвежих сведений набросаны...
64. RustIG 1747 16.03.21 07:39 Сейчас в теме
(62) формат публикации понравился... небольшой взброс полезной информации - легко переварить в мире шквальных новостей и изменений
72. Yashazz 4790 16.03.21 13:40 Сейчас в теме
(64) Погоди, чего в ней полезного? Это совершенно общеизвестные очевидные вещи. Плюсовать их может только совсем новичок, да ещё такой, которому лень читать мануалы, на тебя не похоже. Что тут могло быть полезно?
77. RustIG 1747 16.03.21 14:24 Сейчас в теме
(72) к сожалению для автора, я сам автор, и знаю что за 50 плюсов начисляют 3000р, но я не увидел здесь что-то выдающееся, за что можно было бы начислить 3000р. Опять-таки, без обид к автору.
Поэтому я за такого рода публикации плюсы не ставлю.
Но и минус не понимаю, за что ставить.
А что было полезно?
Да , вот вчерась думал, перед сном 30 мин есть, смотреть фильм на 2 часа поздно и некогда, смотреть ютуб с его короткими роликами - ютуб выигрывает по времени - что -то целое и законченное успею увидеть...
Читать что-то сложное - всегда откладываю...Простые статьи читаю быстро - пока процесс идет....

почему-то сейчас короткие статейки выгодно отличаются даже на Инфостарт - наверное это психология самого человека. Съел, понравилось, побежал дальше....
rpgshnik; +1 Ответить
79. пользователь 16.03.21 15:05
Сообщение было скрыто модератором.
...
76. rpgshnik 3795 16.03.21 14:24 Сейчас в теме
(59) "утомляют" это магнит для споров?))
63. Yashazz 4790 16.03.21 07:35 Сейчас в теме
Меня во всём этом радует только одно. Пока подобные публикации собирают хайповую популярность, раскручивая посредственные блоги авторов, выдающих примитив за откровение, уровень падает. А это значит, что я всегда найду работу. На фоне подобного уровня. Хотя бы чинить то, что эдакие умельцы наворочали)))
65. RustIG 1747 16.03.21 07:41 Сейчас в теме
(63) работы много, даже не анализируя статьи и публикации на ИС - надо чувствовать рынок....уходите во фриланс, рынок растет, без работы не останетесь
66. Yashazz 4790 16.03.21 07:42 Сейчас в теме
(65) Спасибо за совет, но я как-нибудь сам разберусь)
68. Алексей Воробьев 279 16.03.21 08:25 Сейчас в теме
(63) Ну вот даже и не собирался плюсовать. Хотя формат такой отрывочной, несистематезированной, но не напрягающей из-за своей непродолжительности подачи вполне себе имеет место быть.

Даже если ты это знал, то время потратил немного. А если не знал, то это как-то может зацепится в голове и даже может быть припомнено при необходимости...

Но увидев такую лавину эмоций от столь одиозного персонажа, поставлю-таки плюсик, дабы накинуть радости на вентилятор, поддержать Ваш уровень на фоне посредственности и обеспечить фронт работ на будущее! :-)
71. Yashazz 4790 16.03.21 13:32 Сейчас в теме
(68) Вы лучше мне плюсик поставьте за какую-нибудь публикацию, например вот эту: https://infostart.ru/1c/articles/1276140. Я, в отличие от некоторых, занимаюсь вопросами посложнее, чем репост очевидностей. Ну, где мои 40 с лишним плюсов, а?
87. Алексей Воробьев 279 16.03.21 21:22 Сейчас в теме
(71)Мои плюсы есть далеко не под одной Вашей публикацией. К сожалению, далеко не всё имею возможность просматривать. Но коли уж персонально предложили, то при наличии времени изучу и оценю :-)
67. RustIG 1747 16.03.21 08:09 Сейчас в теме
В новых версиях платформы появились новые команды форм для удобства анализа и разработки.

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


Коллеги, на ИТС почти в каждой публикации есть кнопочка "Оставить отзыв" рядом с кнопочкой "Мне нравится" - я в свое время написал к одной публикации, как неудобно в платформе реализован поиск объектов метаданных. Что никто из разработчиков по заголовку формы не может найти объект метаданных, потому что много причин, и в том числе ИмяОбъектаМетаданных не совпадает с синонимом и не совпадает с заголовком формы....Я написал, что на внедрениях это морока искать по их рекомендациям сначала тут, а потом может быть там....

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

Я к чему? Просто знайте, что вы можете изменить платформу в лучшую удобную для себя сторону - пишите на ИТС отзывы...
Drivingblind; Sla; TerveRus; +3 Ответить
78. Yashazz 4790 16.03.21 15:03 Сейчас в теме
(67) Не обольщайтесь. Разработчики платформы живут в своём мирке, и плевать хотели на наши проблемы. Они даже своих коллег, авторов типовых конфигураций, слушают вполуха и через два раза на третий. Мне в своё время один из авторов БП 3.0 детально рассказал, как там что - так вот, это параллельные миры.
Оставьте свое сообщение