Лайфхаки для разработчиков 1С. Часть 1

03.04.21

Разработка - Универсальные функции

Собрали 20 лайфхаков, которые используют наши программисты при работе с 1С. Формы, контрагенты, СКД, процедуры, глюки платформы и многое другое. В этой статье публикуем первую часть.

Обычные формы. Как организовать подбор в табличную часть

Рассмотрим решение задачи на примере формы документа, у которого имеется табличная часть «Заказ-наряды».

1. На форме документа на командную панель табличной части «Заказ-наряды» добавляем кнопку подбора и прописываем её код:

Процедура ПодборНарядов(Кнопка)
    Форма = Документы.ЗаказНаряд.ПолучитьФормуВыбора(, ЭлементыФормы.ЗаказНаряды, ЭтотОбъект);
    Форма.ЗакрыватьПриВыборе = Ложь;
    Форма.Открыть();
КонецПроцедуры

2. Далее у табличной части находим событие "ОбработкаВыбора" и прописываем для него код:

Процедура ЗаказНарядыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;
    
    Если ТипЗнч(ВыбранноеЗначение) = Тип("ДокументСсылка.ЗаказНаряд") Тогда
        Если ЗаказНаряды.НайтиСтроки(Новый Структура("ЗаказНаряд", ВыбранноеЗначение)).Количество() = 0 Тогда
            НоваяСтрока = ЗаказНаряды.Добавить();
            НоваяСтрока.ЗаказНаряд = ВыбранноеЗначение;

            // также здесь можно выполнить дополнительные обработки
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
Q95;

 

Есть список контрагентов, нужно быстро узнать их коды в базе

Делаем такой запрос где в кавычках прописываем список наименований контрагентов (должен 100% совпадать с названиями контрагентов в базе):

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

 

СКД. Параметр с указанным именем не найден

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

 

СКД. Как вывести документ в виде:
Г00001 от 01.01.2019, чтобы по двойному клику его можно было открыть

По умолчанию документы в СКД выводятся в следующем виде:

Мы сделаем его красивым и сокращенным:

Для этого нужно прописать следующее выражение в колонку «Выражение представления» по этому полю:

 

Быстрый поиск по фразе в коде (CTRL+F3)

Если в коде нужно быстро найти какую-то фразу, можно выделить её и нажать CTRL + F3, тогда она автоматически подставится в поле поиска сверху и нажатием F3 можно будет переходить по всем местам этой фразы в коде.

Таким образом мы экономим время на копирование фразы (кстати, фразу можно быстро выделить, зажав CTRL и щелкнув внутри фразы), а также на перемещение мышью и вставку этого текста в поле поиска.

 

Как быстро поменять название процедуры, назначенной на событие

Бывает так что имя процедуры слишком длинное или оно устарело. А чтобы его поменять – нужно изменить и название процедуры в коде и исправить её название в обработчике события.

Для быстрого изменения же следует делать это в поле с именем процедуры в событии. При изменении 1С предложит поменять имя процедуры:

И при нажатии «Да» имя процедуры изменится и в коде. Таким образом можно быстро выполнять рефакторинг.

 

Как разрешить выбирать в поле на форме номенклатуру только типа «Комплект» (или другое условие)

Рассмотрим на примере документа «Изменение состава комплекта» из сертификационного экзамена 1С: Специалист по платформе. У него есть реквизит «Комплект» с типом «Номенклатура». Нужно сделать так чтобы в этом поле пользователь мог выбирать номенклатуру только с видом номенклатуры «Комплект».

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

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

 

Глюки платформы. Почему нельзя добавить команду «Перейти» к нужному регистру

Если на форме документа нельзя добавить команду "Перейти" - "Остатки номенклатуры" или любого другого регистра, то нужно открыть свойства нужного регистра и снять-поставить галку "Использовать стандартные команды". Это глюк платформы.

Отладка COM соединения

Отлаживать COM соединение можно ставя в ключевые места в коде во внешней базе примерно такие блоки:

ТекстовыйФайл = Новый ТекстовыйДокумент;
ТекстовыйФайл.ДобавитьСтроку("Тип параметра распознан верно, это наряд на отгрузку");
ТекстовыйФайл.Записать("\\UserPC\shared_folder\Задачи\Log_1.txt");

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

 

Отладка под определенным пользователем

Чтобы запускать 1С в режиме отладки из конфигуратора от имени другого пользователя, можно задать нужного пользователя в параметрах конфигуратора (меню Сервис – Параметры) на вкладке "Запуск 1С: Предприятия":

См. также

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

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

23.06.2024    7510    bayselonarrend    20    

154

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

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

21.05.2024    20244    dimanich70    81    

145

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

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

06.10.2023    23786    SeiOkami    48    

135

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

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

28.08.2023    14777    YA_418728146    7    

166

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    3594    57    progmaster    8    

4

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

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    25602    SeiOkami    31    

113
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. bulpi 217 01.10.20 07:42 Сейчас в теме
Бояны
Йожкин Кот; Summer_13; ovasiliev; wowik; Yashazz; Bassgood; danjer74; nomad_irk; Артано; Dr.LektoR; shkipa91; +11 Ответить
2. MaxS 2945 01.10.20 11:21 Сейчас в теме
То же самое другими словами:
Думал, что здесь про TDD и BDD. )
3. a_a_burlakov 288 01.10.20 11:26 Сейчас в теме
Вот про CTRL+F3 понятия не имел, так что спасибо.
Pavel_Vladivostok; TerveRus; Olenevod; vihrov_av; warit; zqzq; D_e_X_T_e_R; fancy; Neti; Fril; AliceLight; +11 Ответить
9. VKislitsin 1013 01.10.20 13:50 Сейчас в теме
(3) А если еще Ctrl-Shift-F3 попробовать и убедиться что это позволяет возвращаться обратно (вверх)...
А еще всякие Ctrl-[, Ctrl-], Ctrl--(контрол-минус) , которые описаны в справке, попробовать...
Это я к тому, что на самом деле есть еще целая куча удобных шорткатов.
TerveRus; +1 Ответить
39. ivnik 596 04.10.20 14:09 Сейчас в теме
(9) Вот про CTRL+F3 и прочие возможности поиска я тоже понятия не имел. Я по древне-крестьянскому методу тычу две кнопочки "вперед-назад", которые с правой стороны от поля введенного текста для поиска. Результат не хуже и комбинации запоминать не надо.
4. user1464234 01.10.20 11:28 Сейчас в теме
Вызубривая ГОСТы по созданию конструкторско-технологической документации, мы понимали что Лев Толстой этого не читал...
TerveRus; +1 Ответить
8. sapervodichka 6915 01.10.20 13:25 Сейчас в теме
в контакте у вас полный список лайфхаков, он интересный, я бы его честно не делил, так им удобнее пользоваться
10. salexdv 2357 01.10.20 15:11 Сейчас в теме
Отлаживать COM соединение можно ставя в ключевые места в коде во внешней базе примерно такие блоки:

Почему для этого просто не воспользоваться отладчиком конфигуратора?
11. ltfriend 01.10.20 21:05 Сейчас в теме
Теперь очевидные и документированные вещи (за минусом пары исключений) называют "лайф-хаками".
EliasShy; Dem1urg; zhuravlev_as; KpecT; Bassgood; Артано; +6 Ответить
12. AlexandrSmith 69 01.10.20 22:13 Сейчас в теме
1) За перечень контрагентов плюс поставил, знал что в SQL есть, но за 1С спс.
"Есть список контрагентов, нужно быстро узнать их коды в базе"
2) Так же нужная штука, но тоже знал.
"Глюки платформы. Почему нельзя добавить команду «Перейти» к нужному регистру".

Остальное можно узнать из любой программы, разбирая коды 1С.
13. FatPanzer 01.10.20 22:32 Сейчас в теме
(12) А что за проблема с контрагентами? Обычный запрос в консоли... в чем ноу-хау?
rudnitskij; +1 Ответить
14. Артано 795 02.10.20 03:43 Сейчас в теме
Лайфхаки? Тогда вы забыли еще один. Допишу и можете копировать в публикацию.

Вывод элементов массива на печать. Если у вас есть большой массив данных, то будет затруднительно выводить их на печать
привычным нам методом


В ответ на этот вызов, наши специалисты разработали

инновационный лайфхак по упрощению данной процедуры
TerveRus; EliasShy; nordcomp; Stylo; BomjBandit; Bassgood; PLAstic; Lyns_owner; MiniMuk; +9 Ответить
15. FatPanzer 02.10.20 08:10 Сейчас в теме
(14) Лошары! Вот так короче:
Для Каждого Печать Из Массив Цикл
   Печать(Печать);
КонецЦикла; 

А если бы в массиве гарантировано только строки, то и вообще
Печать(СтрСоединить(Массив, Символы.ВК));
ice-net; TerveRus; awk; Артано; +4 Ответить
16. nomad_irk 76 02.10.20 08:12 Сейчас в теме
(15)ага, лошары в квадрате!
Для Каждого Печать Из Массив Цикл Печать(Печать); КонецЦикла;

Так быстрее.
Артано; +1 Ответить
32. awk 744 02.10.20 15:09 Сейчас в теме
(16) Так быстрее только в режиме отладки :)
33. awk 744 02.10.20 15:11 Сейчас в теме
(15)
в массиве гарантировано только строки

А неявное приведение к строке уже отменили?
34. FatPanzer 02.10.20 15:50 Сейчас в теме
(33) Нет, но не факт, что в мифической процедуре Печать() из данного примера печатается именно строковое представление переданных параметров.
То есть, я предполагаю, что если в процедуру передать строку - на печать выведется строка. Если передать ссылку - выведется некая печатная форма объекта, если передать дату - печатается дата в определенном формате и т.д. И только строка всегда останется строкой. Что много строчек подряд, что один многострочный текст...
Бывают, конечно, и извращения, но я не о них ))
36. awk 744 02.10.20 17:06 Сейчас в теме
(34) То есть если процедуре печати плевать на тип объекта имелось ввиду. Я не так вас понял.
47. starik-2005 3088 20.10.20 11:32 Сейчас в теме
(14)
В ответ на этот вызов, наши специалисты разработали

инновационный лайфхак по упрощению данной процедуры
ВГраница = Массив.ВГраница();
Для Сч= 0 По ВГраница Цикл
   Печать(Массив[Сч]);
КонецЦикла;
А че так сложно-то?
Для Каждого Сч ИЗ Массив Цикл
  Печать(Сч)
КонецЦикла;
49. Артано 795 21.10.20 01:43 Сейчас в теме
(47) Это следующая итерация и вы испортили отличную статью своим спойлером!
50. starik-2005 3088 21.10.20 11:46 Сейчас в теме
17. Cyberhawk 135 02.10.20 08:34 Сейчас в теме
А зачем в тексте запроса СКД применена конструкция "ВЫРАЗИТЬ" (к первому полю выборки)?
18. nomad_irk 76 02.10.20 08:39 Сейчас в теме
(17)Потому что типов документов может быть много, а нужен один конкретный, например в отборе, не?
19. Cyberhawk 135 02.10.20 08:41 Сейчас в теме
(18) Полоса прокрутки в поле с текстом запроса говорит о том, что запрос не пакетный.
А в отборе оно кому и как поможет?
20. FatPanzer 02.10.20 08:44 Сейчас в теме
(19) И? В НЕпакетном запросе нельзя устанавливать отбор по составному типу?
23. Cyberhawk 135 02.10.20 09:11 Сейчас в теме
(20) Конструкция "ВЫРАЗИТЬ" в поле выборки сама по себе не накладывает отбор в том смысле, что количество получаемых из БД записей от этого никак не меняется. Просто в СКД будут выведены "пустые" строки для тех строк БД, в которых тип регистратора не подходит под указанный тип, что кажется сомнительной затеей.
На наложение отбора в секции "ГДЕ" наличие или отсутствие этого выражения в поле выборки также не влияет.
В пакетном запросе такая конструкция может быть удобна в запросе создания временной таблицы - для ограничения реквизитов, показываемых через плюсик (в следующих запросах пакета, использующих эту временную таблицу). На картинке из статьи запрос явно не пакетный, поэтому польза от этого видится пока только в (21).
26. FatPanzer 02.10.20 10:05 Сейчас в теме
(23) Конструкция ВЫРАЗИТЬ служит еще и для построения плана запроса, например. Чтобы SQL не организовывал соединения со всеми таблицами, входящими в составной тип. ПРи использовании ВЫРАЗИТЬ соединение будет установлено только с этой таблицей.
Или это тоже нельзя использовать в СКД, да еще и в НЕпакетном запросе?
zqzq; user1464234; +2 Ответить
28. Cyberhawk 135 02.10.20 10:29 Сейчас в теме
(26) С этой точки зрения избыточно применять "ВЫРАЗИТЬ", поскольку
соединения со всеми таблицами, входящими в составной тип
не будет происходить, если мы в запросе не получаем реквизиты от значения, хранящегося в поле составного типа, через точку, а получаем только само значение из такого поля.
В картинке из публикации выбирается только сам регистратор, от отсутствия там ВЫРАЗИТЬ никаких соединений нигде не появится.
FatPanzer; +1 Ответить
29. FatPanzer 02.10.20 10:55 Сейчас в теме
(28) Да, вы правы. Не обратил внимания, сорян )))
31. zqzq 25 02.10.20 14:53 Сейчас в теме
(28)
от отсутствия там ВЫРАЗИТЬ никаких соединений нигде не появится

Не факт, если поле выводится в отчет, то СКД добавит поле ПРЕДСТАВЛЕНИЕССЫЛКИ(...), а для него как-то получаются дата и номер.
Fox-trot; Cyberhawk; +2 Ответить
35. Cyberhawk 135 02.10.20 16:56 Сейчас в теме
(31) Дельное замечание, благодарю.

Проверил - действительно, если не ограничить поле выборки в СКД через ВЫРАЗИТЬ, то ПРЕДСТАВЛЕНИЕССЫЛКИ для такого поля приводит к множественным соединениям в СУБД (по числу типов регистратора).
Аналогичное поведение и для виртуального поля ".Представление".
Если же ограничить через ВЫРАЗИТЬ, то соединение будет только одно.

Множественные соединения происходят хоть и с использованием кластерного (по ссылке) индекса, но все равно какой-то оверхед имеют, поэтому для СКД можно сделать справедливый вывод, что использовать ВЫРАЗИТЬ даже для "голых" значений (после которых не идет получение реквизитов через точку) не будет лишним.
zqzq; FatPanzer; +2 Ответить
21. nomad_irk 76 02.10.20 08:46 Сейчас в теме
(19)Пользователю, при интерактивной установке отбора по документу
22. Cyberhawk 135 02.10.20 09:04 Сейчас в теме
(21) Если речь о полях СКД, дочерние реквизиты которых могут быть доступны пользователю через плюсик (в настройках полей отбора, в частности), то ответ понятен.
Также вместо этого можно использовать колонку "Тип значения" в настройке полей СКД (на первой вкладке конструктора СКД).
Преимещуство этой колонки (по сравнению с типизацией поля выборки в запросе) в том, что она легко позволяет задавать составной тип (т.е. наложить ограничение на состав реквизитов, которые будут отображаться через плюсик). В тексте запроса конструкция, дающая аналогичный эффект, для более чем одного типа будет уже весьма громоздкой.
24. Lyns_owner 356 02.10.20 09:46 Сейчас в теме
Серьезно? Во вторую часть лайфхаков надо включить такие хитрости как:
"Добавляем строку в таблицу"
"Добавляем строку в таблицу (по условию)"
"Удаляем строку из таблицы"
"Отладка через ВызватьИсключение"
"Поиск контрагентов перебором элементов справочника"
"Глюк платформы или почему я отлаживаю код текстовыми файлами"
и т.п.
Yashazz; Артано; +2 Ответить
27. FatPanzer 02.10.20 10:09 Сейчас в теме
(24)
"Поиск контрагентов перебором элементов справочника"
Отличный лайфхак, особенно при используемой RLS )))
25. mikl79 119 02.10.20 09:54 Сейчас в теме
Воспользовался "Выражение представления", спасибо
30. Yashazz 4791 02.10.20 11:35 Сейчас в теме
...а пацаны-то и не знали!)

Вот это, пардон, теперь называется "лайфхаками"? Мдя. Вообще это азы, основы работы, не то что даже баяны. Жесть.
Делюсь супер-лайфхаком: чтобы рассчитать сумму двух чисел, чьи значения присвоены переменным "а" и "б", и поместить эту сумму в переменную "ц" следует написать "ц = а + б". Нужная вещь, советую попробовать - реально работает.
Stylo; M0narch; Артано; lefthander; sapervodichka; +5 Ответить
37. lefthander 04.10.20 13:28 Сейчас в теме
Народ, ну прикольно же! Зато теперь стало понятнее что такое "лайфхак"... ;)
user1464234; +1 Ответить
38. Fox-trot 163 04.10.20 13:38 Сейчас в теме
40. serega_sun 05.10.20 05:18 Сейчас в теме
Подскажите, что за консоль запросов на первой картинке?
41. Stylo 07.10.20 09:17 Сейчас в теме
Хорошая статья. Не все, конечно, можно назвать лайфхаком, но несколько вещей для себя отметил.
42. jmw 61 07.10.20 09:26 Сейчас в теме
(40) Обработка такая, в которой можно запрос прямо в рабочей программе написать и запустить не используя пофигуратор…
Можно поискать здесь на инфостарте.
Но лучше сразу брать, к примеру, что-то типа Инструментов разработчика.
К примеру, в ИР не только консоль запросов, но и консоль кода, редактирование констант, удаление объектов, консоль заданий и редактор объектов БД… Это только вершина айсберга!
43. serega_sun 07.10.20 18:28 Сейчас в теме
(42) Что это "такая обработка" я знаю. Перебрал несколько. На картинке мне понравился интерфейс. Хотел попробовать, думал, что ТС скажет конкретно, что это за вариант обработки. Поэтому и спросил. Про то, что можно искать и найти я знаю. Ещё можно искать и не найти - тоже бывает.
44. ICeZm 23 12.10.20 15:29 Сейчас в теме
45. user905340 20.10.20 10:17 Сейчас в теме
Спасибо от чайника, очень благодарна всем, кто не гнушается делиться прописными истинами. Вот только не понимаю зачем подобные статьи читают "крутые", наверное, чтобы в комментариях покрасоваться и обхаять :(.
46. FatPanzer 20.10.20 10:21 Сейчас в теме
(45) Да нет ни у кого претензий к этим прописным истинам. Претензии есть только к тому, что практически повседневно используемые документированные возможности вдруг называют "лайфхаками".
48. starik-2005 3088 20.10.20 11:33 Сейчас в теме
По плюсам можно примерно посмотреть, кто работает в НЕТИ )))
Оставьте свое сообщение