Типичные ошибки, некоторые вопросы качества и эффективности работы при разработке в 1С

Публикация № 329271

Разработка - Практика программирования

ошибки советы эффективность

В этой статье мы приведем набор типичных и часто встречающихся ошибок при разработке в 1С (скорее всего особенно актуально для начинающих программистов). Предложим набор советов и рекомендаций по улучшению качества кода и работы при использовании типового инструментария. Это первая часть из 24 пунктов. Бонусом к каждому пункту мы привели разъяснения и комментарии.

На основании определенного опыта и работы с различными проектами нам удалось собрать определнный список типичных ошибок, рекомендаций и советов при работе в программе 1С. Как ни странно подобные ошибки встречаются иногда не только у начинающих разработчиков и их результатах работы, но и в типовых конфигурациях. Есть ряд советов, которые вроде широко известны, но почему-то не используются.

Ниже мы приведем список пунктов с примерным категорированием для акцентирования внимания (ошибки, запросы, код, хранилище, советы):

1. Деление на 0. (ошибки, запрос, код)

Используйте проверку деления на ноль в запросах и в коде. Классическая ошибка №1.

2. Копипаст или Ctrl+C & Ctrl+V. (ошибки, код)

Мы считаем, что это одна из самых коварных ошибок, которую допускают практически все.

3. Ошибки отсутствия проверки на ЭтоГруппа(ошибки, запрос, код)

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

4. Определение переменных. (ошибки, код)

Т.к. в 1С нет необходимости определять переменные как в Си, C# и др., то разработчики порой допускают ошибку определяя или устанавливая значения переменной в ветвях условий. Могут возникнуть точки когда переменная будет не объявлена или содержать недопустимое значение. Пример ошибки:

Функция ПолучитьЧтоТо(Вариант,Количество)
  Если Вариант=0 Тогда
        Коэффициент = 1;
  ИначеЕсли Вариант=1 Тогда
        Коэффициент = 0;
  КонецЕсли;
  Возврат Коэффициент*Количество; // получим ошибку произведение значения Неопределено на количество, если значения варианта будут отличны от 1 или 0
КонецФункции

5. Проверка в условии на истину переменной со значением "Неопределено"(ошибки, код)

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

… Если НЕ Результат=Неопределено // перенос строки
И Результат Тогда … // правильно
ИЛИ
...Если Результат=Истина Тогда ... // правильно
… Если Результат Тогда ... // не правильно

 6. Формат строки(ошибки, код)

Не забывайте про формат строки, т.к. 1С число преобразует в строку с пробелом между разрядами.

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

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

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

Иногда результат запроса может вернуть ноль значений и предположение наличия хотябы одной записи в таблице результата приводит к ошибке. Т.е. конструкция вида РезультатЗапросаТаблица[0] может привести к ошибке, используйте условия проверки РезультатЗапроса.Пустой() или Выборка.Следующий(). Пример:

...
Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
   Выборка = Результат.Выбрать();
    ...
КонецЕсли;
....

9. Неправильное использование функции языка запросов "Выразить" - несовместимые типы(ошибки, запросы)

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

10. Используйте отборы внутри виртуальных таблиц(ошибки, запросы)

Используйте это условие, кроме случаев, когда иное требуется логикой

11. Запрос в цикле(ошибки, код, запросы)

Классическая ошибка, иногда ее допускают сознательно особенно при создании какой-нибудь обработки за "5 минут", а потом прогоняя на большом массиве данных идут пить чай.

12. Роли/Доступ(ошибки, код)

1. При добавлении нового объекта метаданных - команды, отчета, документа и т.д.  не забывайте про роли. Необходимо добавить новую роль или включить доступ объекта в одну или несколько существующих ролей

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

13. Недостаточно данных в тесте при разработке или проверке алгоритма. (ошибки)

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

14. Ограниченное мышление(ошибки)

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

15. Не изобретайте велосипед/"индусский код". (ошибки)

Кроме специализированных функций самой конфигурации, 1С в своих типовых конфигурациях использует БСП, в которй достаточно широкий набором функциональности. В результате появляется множество полуфункций и полупроцедур, работающих по части условий и не всегда; разобраться в итоговом коде получается очень сложно.

16. Получение данных через точку (объектную модель). (совет, код)

Не получайте данные через точку. Получение данных через объектную модель может достаточно сильно снизить производительность системы.

17. Использование директивы БезКонтекста(совет, код)

Используйте &БезКонтекстаНаСервере и &НаСервере в зависимости от необходимости работы с контектом приложения на сервере особенно в случае вызова с клиента и при большом количестве данных на форме. Пример, была создана обработка, в которой на форме находилась большая таблица данных, в этой обработке была использована кнопка для анализа данных, которая проходила по таблице на клиенте и в случае срабатывания условий отправляла запрос на сервер с контекстом, в результате длительность работы этой процедуры оказалось безмерно завышена из-за частой передачи большого объема данных: до рефакторинга процедура выполнялась 10-15 минут, после 2-3 минуты.

18. Хранение в реквизитах справочника, документа типа данных «Хранилище Значения»(совет, код)

Старайтесь не использовать в реквизитах справочников, документов типов данных «Хранилище значения» иначе при работе с объектной моделью вы получите необоснованное снижение производительности.

19. Используйте в конструкторе запросов конструктор запросов. (совет, запросы)

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

20. Используйте расширенный синтаксис оператора языка запросов "В".  (совет, запросы)

Часто требуется определить условие вхождения по нескольким реквизитам и это довольно просто реализуется. Пример:

… (Организация,Контрагент) В (ВЫБРАТЬ Т.Организация,Т.Контрагент ИЗ ВтТ как Т) …

21. Испольуйте предопределенные значения в запросах(совет, запросы)

К примеру, вместо создания параметра передающего пустую ссылку используйте следующий код

… НЕ Контрагент=Значение(Справочник.Контрагенты.ПустаяСсылка) …

22. Оптимальность запросов. (совет, запросы)

1. Испольуйте пакетные запросы и временные таблицы вместо вложенных запросов

2. Для объединения нескольких таблиц используйте объединить, а не левое соединение

3. Для отладки сложных запросов используйте дам запроса

4. Инедксируйте реквизиты/устанавливайте индекс для реквизитов, по которым используете отбор, поиск, соединение.

5. И другие рекомендации, которые можно найти в сети если поставить цель. 

23. Передача между клиентом и сервером таблицы значений. (совет)

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

24. Не используйте повторяющийся код. (совет)

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

 

Продолжение ожидается...

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. TODD22 18 15.02.15 08:25 Сейчас в теме
п.8 Какой то не очень удачный пример.
используйте условия проверки РезультатЗапроса.Пустой() или Выборка.Следующий().

С начало вроде как проверяется результат на пустоту. И если результат не пустой тогда уже делается Выборка.
6. ivanov660 2428 15.02.15 13:34 Сейчас в теме
(1) TODD22, Можно привести совсем идеальный правильный вариант:
...
Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
  Выборка = Результат.Выбрать();
  Пока Выборка.Следующий() Цикл
  ...
  КонецЦикла;
КонецЕсли;
...
Показать
16. BigClock 16.02.15 11:14 Сейчас в теме
Хотелось бы узнать, корректно ли использовать конструкцию вида
Если НЕ Результат=Неопределено

Ведь если Результат равен Неопределено, то выражение Не Результат при вычислении дает ошибку "{(1)}: Преобразование значения к типу Булево не может быть выполнено"
Аналогичную ошибку дает код
Стр = ТабЗнч.Найти("Значение", "Колонка");
Если Не Стр = Неопределено Тогда
    ...........
КонецЕсли
17. baton_pk 409 16.02.15 11:22 Сейчас в теме
(16) BigClock,
А = Неопределено;
Если Не А = Неопределено Тогда
	
КонецЕсли;

Отрабатывает без ошибок (8.2.19.83).
В любом случае, лучше использовать скобки :)
2. baton_pk 409 15.02.15 11:59 Сейчас в теме
… Если НЕ Результат=Неопределено ИЛИ Результат=Истина Тогда … // правильно

ААА! Можно мне развидеть это?!
drmaxart; Stim213; SeiOkami; Yashazz; +4 Ответить
4. TODD22 18 15.02.15 13:06 Сейчас в теме
(2) baton_pk,
ААА! Можно мне развидеть это?!

Предложите ваш вариант проверки если одно из возможных значений Неопределено, а другие например булево.
5. ivanov660 2428 15.02.15 13:31 Сейчас в теме
(4) TODD22, мы не старались описать все возможные варианты и привести решения, на самом деле показан один из примеров реализации. Для случая когда результат не только булево решение такое но более элегантное:
...
Если НЕ Результат=Неопределено // не забыть перенос на другую строку :-)))
 И Результат Тогда
...
КонецЕсли;
...
9. baton_pk 409 15.02.15 14:06 Сейчас в теме
(4) (5)

Зачем эти ДВА условия?!

Если Результат = Истина Тогда // Этого вполне достаточно
Если Результат = ДокументОснование Тогда // Зачем тут ещё одно сравнение с неопределено?


К тому же возмутился я тем, что условие отработает неверно в случае когда Результат=Ложь.
10. ivanov660 2428 15.02.15 16:58 Сейчас в теме
(9) baton_pk,
Согласен поспешил с ответом. Поправил комментарий, теперь условие отражает суть ответа )
11. baton_pk 409 15.02.15 20:14 Сейчас в теме
(10)
Опять же, зачем
Если НЕ Результат=Неопределено // не забыть перенос на другую строку :-)))
 И Результат Тогда
...
КонецЕсли;

Если можно просто
Если Результат = Истина Тогда // ...
Gavrik; SirYozha; so-quest; Nuobu; fancy; spetzpozh; +6 1 Ответить
36. andrey3d 79 26.02.15 12:06 Сейчас в теме
(11) baton_pk,
Можно еще проще

Если Результат Тогда // ...
37. ivanov660 2428 26.02.15 12:52 Сейчас в теме
(36) andrey3d, если Вы про пункт 5, то нельзя (читайте внимательнее).
3. peterxx 21 15.02.15 12:11 Сейчас в теме
IRL не все, и не так уж очевидно.
Например:
п. 11. Сами разработчики 1С зачастую забивают на это правило. Кроме того если речь идет об обработке, которая запускается раз в месяц, не имеет значение будет ли она выполняться 30 секунд или 10 минут.
п. 15. БСП тоже не панацея. Попытка разобраться во взаимосвязях между частями БСП, чтобы вклиниться туда, может вам стоить трех-пяти дневного квеста без гарантии результата.
п. 24. Самый цимес получается, когда алгоритмы обработки данных, обращающихся к одной и той же функции/процедуре начинают "расходиться" в процессе разработки/эксплуатации. Вот тогда начинают появляться "индусские" куски кода в процедурах "обработки всего и всея".
RainyAugust22; +1 Ответить
7. ivanov660 2428 15.02.15 13:40 Сейчас в теме
(3) peterxx,
Сами разработчики 1С зачастую забивают на это правило.

Давайте стремиться к лучшему, а то получается какая-то "круговая порука".
БСП тоже не панацея. 

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

А вот тут надо стараться хотя бы разрабатывать функционал сверху вниз, а не снизу вверх, тогда избежать такой ситуации гораздо проще. Хотя не всегда подобное получается.
8. TODD22 18 15.02.15 13:53 Сейчас в теме

(7)
Никто не говорит, что она идеальна, но очень много функций уже в ней есть.

Сталкивался пару раз с тем что внезапно менялись функции и приходилось устранять возникающие при этом ошибки. Это было в БСП.
Так что теперь стараюсь всё выносить максимально в свои модули.
12. viramen 273 15.02.15 20:38 Сейчас в теме
6. Формат строки. (ошибки, код)

Не забывайте про формат строки, т.к. 1С число преобразует в строку с пробелом между разрядами.

Вид получаемой строки зависит от локализации решения. Если лень прочитать книги по разработке и проектированию решений - такие статьи не помогут.
Fox-trot; +1 Ответить
13. bonv 1128 16.02.15 07:44 Сейчас в теме
5. В первую очередь надо избегать таких случаев. Либо метод возвращает булево, либо надо использовать объект (структуру) для возврата.

21. >
НЕ Контрагент=Значение(Справочник.Контрагенты.ПустаяСсылка)

В 1С есть знак "не равно".
Контрагент <> Значение(Справочник.Контрагенты.ПустаяСсылка)
Irwin; AlexAuto; +2 Ответить
14. baton_pk 409 16.02.15 08:07 Сейчас в теме
(13) bonv,
для "не равно" надо раскладку переключать простым смертным (у кого нет снегопатов и шаблонов). так что "не .. = .." имеет право на существование :)
kao_andi; Zord; Fox-trot; AlexAuto; +4 Ответить
15. bonv 1128 16.02.15 10:55 Сейчас в теме
(14) baton_pk, сильный аргумент :)
Но с другой стороны это же запрос, а в конструкторе мышкой "не равно" проще выбрать, чем вписать "НЕ .. = .." ;)
18. baton_pk 409 16.02.15 11:23 Сейчас в теме
(15) bonv,
а в конструкторе мышкой

Открою маленький секрет: далеко не всегда люди пользуются конструктором запросов. ;-)
22. bonv 1128 16.02.15 12:24 Сейчас в теме
(18) baton_pk,
Открою маленький секрет: далеко не всегда люди пользуются конструктором запросов. ;-)

Чорт, правда что ли :)

Ну а если серьезно, то исходить все же надо из того что код пишется для людей. И прямое условие читать все же проще.
Хотя мне тоже более привычен "!=".
19. jeyrico 16.02.15 11:23 Сейчас в теме
(14) Чтобы не переключаться хорошо помогает это специальная раскладка клавиатуры с сайта Павла Чистова http://1c.chistov.pro/2012/11/1.html

Где-то, вроде даже, на сайте ИТС или Евгения Гилева, была статья о том, что с <> нужно пользоваться осторожно, и рекомендуют использовать именно конструкцию (Не ... = ...)
20. baton_pk 409 16.02.15 11:25 Сейчас в теме
(19) jeyrico,
"<>" от лукавого. Не понимаю, почему 1С до сих пор не сделали "!=".
21. jeyrico 16.02.15 12:06 Сейчас в теме
(20) Может потому, что это будет знатный холивар насчет было \ стало.
28. ivanov660 2428 17.02.15 09:18 Сейчас в теме
(20) baton_pk, в также можно задать вопрос: почему еще нет классов, наследования, инкапсуляции и др.? Думаю, что этого не будет и в 8.4, хотя эклипс вроде обещали.
38. Denis S 28.02.15 15:29 Сейчас в теме
(14) baton_pk,
Можно еще использовать команды:
< - ALT + 60;
> - ALT + 62.
Сам только так и делаю.
Еще пример:
& - ALT + 38
39. baton_pk 409 05.03.15 20:58 Сейчас в теме
(38) Denis S,
раз уж рука дотянулась до альта, то лично мне проще дважды раскладку переключить: alt+shift [] alt+shift
цифрами я только | (alt+124) набираю и # (alt+35).

к тому же альт+... плохо работает при работе через TeamViewer, особенно под Убунту. а если ещё ноутбук без нумпада - это вообще в ад превращается :)
29. demrak 18.02.15 12:13 Сейчас в теме
(13) bonv, в какой-то момент знак <> начинает наоборот отвлекать, уже года как 3 использую в сравнениях только НЕ = и в запросах и в коде. Тренирует логическое мышление, как мне кажется.
23. friend0 16.02.15 19:00 Сейчас в теме
Начиналось все хорошо, но последние пункты весьма спорные. Использование "В" и "Объединить" в запросах лично меня напрягают. Так же как "ИЛИ". В свое время оптимизировал тормозной запрос, пробовал разные варианты и в итоге соединение оказалось самым быстродейственным вариантом замены "ИЛИ".

Индексирование тоже весьма спорный момент: ресурсы на запись и хранение жрет стопроцентно, а будет ли использоваться - вопрос со многими неизвестными. Тонкостей там много.

В общем совет для запросов - смотреть профайлер и планы исполнения. Почитать книжки по тому как там все устроено, ужаснуться как все сложно и непредсказуемо, как один вариант увеличивает количество операций чтения, а другой загрузку процессора... Попаниковать, расслабиться и начать делать по принципу "А ладно, не тромозит и фиг с ним". Шутка. :)

По поводу временых таблиц я бы тоже уточнил, что они в любом случае пишутся (тормоза зависимые от объема данных), а будет ли выигрыш по сравнению с вложенным запросом - надо смотреть.
Я бы тут порекоммендовал следующие правила (общий шаблон поведения с возможными отклонениями на конкретике):
1. Необходимое уточнение: виртуальная таблица - это неявный вложенный запрос. Кроме прочего это значит, что в некоторых ситуациях лучше использовать не ее, а исходный регистр. "ОстаткиИОбороты" насколько помню преобразуются аж в три запроса к реальным данным.
2. Не использовать соединения с вложенным запросом.
3. Не запихивать во временную таблицу слишком много данных.
4. Для группировки данных не класть исходные данные во временную таблицу (если эти данные не понадобятся в другом запросе пакета) - вложенный запрос работает на ура.
5. Не выбирать и не таскать по пакету ненужные поля. Особенно неиндексированые. Если вытаскиваются только индексированные поля (особенно если только ссылка), то велик шанс, что индексы будут использованы и не потребуется обращения к таблицам данных. В противном случае сначала будут выбираться индексы, а потом по ним искаться данные в таблицах данных. А если выбираемых записей много, то движок может решить, что резона использовать индексы нет и сразу начнет шерстить данные (и будет прав).
6. Для построителя отчетов (и возможно СКД) финальный запрос надо страться делать максимально простым. Вплоть до того, что поместить результат во временную таблицу и в финальном запросе просто оттуда читать. Но это надо смотреть по месту и опять же п.3
35. ivanov660 2428 19.02.15 14:22 Сейчас в теме
(23) friend0,
1. на самом деле подобные вещи про оптимизацию запросов собирались из разных источников: настольная книга 1с: эксперта по технологическим вопросам; в интернете - на текущем сайте, других формах; про особенности работы MS SQL оптимизацию на technet.microsoft.com; в некоторых случаях проводились практические замеры.
К примеру, индексировать временную таблицу при наличии 10 записей не эффективно.
2. Вопрос про использование временных таблиц в отличи от вложенных связан с созданием плана запросов. В случае временных таблиц и пакетного запроса выше вероятность гарантирования наличия оптимального и однотипного плана запросов, да и оптимизатор будет угадывать лучше. В случае с вложенными запросами на план будут влиять нагрузка сервера, количество данных, индексация и др.
3. Вопрос: про неиспользование виртуальных таблиц - при создании запроса по реальной таблице Вы сразу вспомнили и подумали про поле активность?
24. Yashazz 3742 16.02.15 19:06 Сейчас в теме
Особенно позабавил пункт 14. Это всё равно, что написать: "включайте мозги, когда проектируете и кодите" )))
27. ivanov660 2428 17.02.15 09:15 Сейчас в теме
(24) Yashazz, как это не удивительно звучит, но по результатам работы с франчами, начинающими и даже некоторыми опытными спецами (возможно невнимательность или еще что-то) этот пункт достаточно актуален. Все приведенные тут примеры взяты из практики.
25. jobkostya1c8 16.02.15 20:48 Сейчас в теме
Бесполезно про ошибки писать. Все равно только практика подскажет.
26. ivanov660 2428 17.02.15 09:13 Сейчас в теме
(25) kostyaomsk, лучше учиться на чужих ошибках чем на своих.
30. pro1c@inbox.ru 180 18.02.15 15:31 Сейчас в теме
Стараюсь придерживаться правильному подходу, принятому, но:
1. Видел правильный хорошо выверенный код, но не решающий задачу.
2. Видел "спагетти" кода, но работает как часы. Разобраться сложно но можно.
Так что все относительно.
Тут недавно показывали код некоторых модулей исходников Windows, так там используют даже GOTO!!!!
и ничего! спор шел по-поводу целесообразности выхода из цикла 'Break' или 'GoTo Метка'?
Так вот сошлись на том, что Break, что GoTo сути не меняет, но для некоторых понятнее куда переходим из цикла при прерывании, а не просто прерываем цикл (break) и следуем далее по ходу выполнения после тела цикла!
Как-то так...
Светлый ум; SeiOkami; 1coder; SirYozha; +4 Ответить
31. Painted 40 18.02.15 22:02 Сейчас в теме
15. Не изобретайте велосипед
Где бы еще найти описание функций общих модулей. Бывает и нередко, что действительно изобретаю велосипед.
34. ivanov660 2428 19.02.15 08:54 Сейчас в теме
(31) Painted, на ИТС есть документация библиотеки стандартных подсистем от фирмы 1С - описание использования набора универсальных функциональных подсистем, предназначенных для использования в прикладных решениях на платформе "1С:Предприятие" Стандартные библиотеки. Документация..
32. SirYozha 206 19.02.15 08:33 Сейчас в теме
21. Испольуйте предопределенные значения в запросах. (совет, запросы)


С пунктом 21 не согласен.

Так как использование функций (ЗНАЧЕНИЕ() и т.п.) в запросе ведет к дополнительным преобразованиям на стороне СУБД. Соответственно, может увеличиться время исполнения запроса.
Сам экспериментировал с использованием предопределенных значений в запросе на больших объемах данных. Выигрыш в скорости выполнения дает использование параметров для передачи предопределенных значений в запрос.


p.s. кстати, буква "з" пропущена в слове ИспольЗуйте
33. ivanov660 2428 19.02.15 08:45 Сейчас в теме
(32) SirYozha,
1. Плюс от такого использования в запросах - более простая читаемость кода и уменьшение количества кода
2. Быстродействие зависит от платформы к платформе и оптимизатора 1С
40. Prisian 17.07.19 13:22 Сейчас в теме
По поводу пункта 22.1. На больших объемах данных + MS SQL очень быстро увеличиваются логи. Так как временная таблица создает физическую таблицу в базе, потом удаляет и все это пишется в логи. В случае использования вложенных таблиц будет использоватся только оперативная память. Тут уж лучше исходить из задачи.
Оставьте свое сообщение

См. также

Звуковое управление в 1С 8.3 Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

В данной статье описано создание библиотеки для звукового управления (выполнение команд голосом) для платформы 1С 8.3. Задача была поставлена так, чтобы модуль функционировал непосредственно на клиенте 1С, осуществляя управление формами, и взаимодействовал с интерфейсом.

16.03.2021    2767    velemir    30    

Как контролировать качество внешних обработок, отчетов, правил обмена, расширений 1С и поставить это на поток

Рефакторинг и качество кода Бесплатно (free)

Если код написан качественно, его легче развивать и дешевле поддерживать. О том, как организовать контроль качества кода в ручном и автоматическом режиме, и какие инструменты могут в этом помочь, на INFOSTART MEETUP Новосибирск.Online рассказал Олег Тымко.

09.04.2021    2687    olegtymko    25    

Полезные примеры СКД, ч.1

Практика программирования v8::СКД Бесплатно (free)

Подборка видео по решению различных задач в отчетах на СКД.

30.03.2021    5087    Neti    18    

Обзор полезных методов БСП 3.1.4

Практика программирования БСП (Библиотека стандартных подсистем) v8 1cv8.cf Бесплатно (free)

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

25.03.2021    12139    rayastar    45    

Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions Промо

Универсальные функции Практика программирования v8 Бесплатно (free)

"Я не могу просто взять и скопировать код с гитхаба", "у нас 1С микросервисами окружена", "возможностей мало" - частые фразы 1С разработчиков. которым не хватает возможностей платформы в современном мире. Faas, конечно, история не новая, но нас сдерживало 152ФЗ и задержки по пингам. Для того, чтобы действительно использовать в 1С код, к примеру, на Python, надо было приложить усилия. Теперь всё намного проще - берём и используем.

28.12.2020    5163    comol    31    

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

Практика программирования Методология управления разработкой Бесплатно (free)

Учебный курс по теории и практике программирования. Бесплатно. В виде структурированного текста. Статья 4. Эта статья посвящена причинам возникновения проблем с качеством кода и методикам их преодоления.

22.03.2021    864    Артано    5    

Telegram бот на PHP

Практика программирования Бесплатно (free)

Сделаем простого Telegram бота на PHP.

01.03.2021    2514    John_d    8    

«Варп-двигатель» для «среза последних»

Практика программирования Бесплатно (free)

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

10.08.2020    3378    hobi    47    

Использование программных перечислений, ч.1: строковые константы Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

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

10.12.2016    38884    unichkin    74    

Не спеша, эффективно и правильно – путь разработки. Часть 3. Практика

Практика программирования Бесплатно (free)

Черновой вариант книги Никиты Зайцева, a.k.a.WildHare. Разработкой на платформе 1С автор занимается с 1996-го года, специализация — большие и по-хорошему страшные системы. Квалификация “Эксперт”, несколько успешных проектов класса “сверхтяжелая”. Успешные проекты ЦКТП. Четыре года работал в самой “1С”, из них два с половиной архитектором и ведущим разработчиком облачной Технологии 1cFresh. Ну — и так далее. Не хвастовства ради, а понимания для. Текст написан не фантазером-теоретиком, а экспертом, у которого за плечами почти двадцать три года инженерной практики на больших проектах.

29.06.2020    11336    WildHare    33    

Не спеша, эффективно и правильно – путь разработки. Часть 2. Теория

Практика программирования Бесплатно (free)

Черновой вариант книги Никиты Зайцева, a.k.a.WildHare. Разработкой на платформе 1С автор занимается с 1996-го года, специализация — большие и по-хорошему страшные системы. Квалификация “Эксперт”, несколько успешных проектов класса “сверхтяжелая”. Успешные проекты ЦКТП. Четыре года работал в самой “1С”, из них два с половиной архитектором и ведущим разработчиком облачной Технологии 1cFresh. Ну — и так далее. Не хвастовства ради, а понимания для. Текст написан не фантазером-теоретиком, а экспертом, у которого за плечами почти двадцать три года инженерной практики на больших проектах.

22.06.2020    11672    WildHare    23    

Не спеша, эффективно и правильно – путь разработки. Часть 1. Парадигма

Практика программирования Бесплатно (free)

Черновой вариант книги Никиты Зайцева, a.k.a.WildHare. Разработкой на платформе 1С автор занимается с 1996-го года, специализация — большие и по-хорошему страшные системы. Квалификация “Эксперт”, несколько успешных проектов класса “сверхтяжелая”. Успешные проекты ЦКТП. Четыре года работал в самой “1С”, из них два с половиной архитектором и ведущим разработчиком облачной Технологии 1cFresh. Ну — и так далее. Не хвастовства ради, а понимания для. Текст написан не фантазером-теоретиком, а экспертом, у которого за плечами почти двадцать три года инженерной практики на больших проектах.

15.06.2020    17633    WildHare    34    

Вспомогательные инструкции в коде 1С Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    32660    tormozit    105    

JSON в запросах DaJet QL

Практика программирования Бесплатно (free)

Практические примеры работы с JSON непосредственно в языке запросов. Перенос курсов валют между УТ и БП. Требуется SQL Server 2016 и выше.

24.04.2020    4185    zhichkin    6    

Визионное программирование

Практика программирования Бесплатно (free)

Новый способ программирования и его практическая демонстрация.

22.04.2020    4871    mkalimulin    111    

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

Практика программирования Бесплатно (free)

Продолжаю (и заканчиваю) тему с автоматическим решением инцидентов. Перейдем от теории к практике.

25.02.2020    4603    Repich    9    

Оформление и рефакторинг сложных логических выражений Промо

Практика программирования v8 Россия Бесплатно (free)

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

20.09.2012    79765    tormozit    131    

Использование машинного обучения для решения инцидентов

Практика программирования Бесплатно (free)

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

18.02.2020    7397    Repich    17    

Качество кода: слабое связывание и высокая сопряженность (Low coupling and High Cohesion)

Рефакторинг и качество кода Бесплатно (free)

Поговорим о некоторых общепринятых подходах и принципах разработки кода.

10.02.2020    9311    ivanov660    90    

Программная работа с настройками СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

27.01.2020    43578    ids79    26    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.

11.07.2007    50692    tormozit    49    

[СКД] Программное создание схемы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Сделаем отчет на СКД полностью программно, без использования макета "схема компоновки данных".

15.01.2020    32705    John_d    22    

Часовой на страже логов

Практика программирования Инструментарий разработчика Бесплатно (free)

При поддержке решений, которые установлены у большого количества пользователей на различных системах, очень важно вовремя получать подробную информацию о возникших проблемах. О том, как собирать логи и анализировать полученные данные в трекере ошибок Sentry на конференции Infostart Event 2019 Inception рассказал Андрей Крапивин.

13.01.2020    8160    Scorpion4eg    8    

Последовательности событий при проведении документа 1С. Шпаргалка + про формы + про расширения

Практика программирования v8 Россия Бесплатно (free)

Собрал информацию о событиях/подписках/расширениях в одном месте.

30.12.2019    25181    kuzyara    38    

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017    47548    tormozit    74    

Как управлять качеством кода 1С, используя платформу SonarQube

Рефакторинг и качество кода Инструментарий разработчика Бесплатно (free)

При быстром росте функциональности проводить визуальный Code-Review для обнаружения некачественного кода проблематично. О том, как автоматизировать проверку качества кода 1С с помощью платформы SonarQube на конференции Infostart Event 2019 Inception рассказал ведущий разработчик компании «Командор» Олег Тымко.

30.12.2019    9858    olegtymko    10    

Полезные процедуры и функции для программиста

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

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

07.10.2019    34320    HostHost    41    

Таблица значений. Нюансы

Практика программирования v8 Бесплатно (free)

Обзор некоторых аспектов использования общеизвестного инструмента 1С.

01.10.2019    42807    Yashazz    50    

Развитие 1С программиста Промо

Практика программирования Личная эффективность Бесплатно (free)

Делюсь своим опытом и видением развития 1С программиста.

17.10.2018    23110    pashamak    64    

СКД. Отчеты с картинками

Практика программирования Работа с интерфейсом v8::СКД 1cv8.cf Бесплатно (free)

Решение популярных кейсов с картинками в отчетах на СКД.

25.09.2019    26323    YPermitin    41    

СКД не только для отчетов

Практика программирования v8::СКД 1cv8.cf Бесплатно (free)

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

18.09.2019    20593    YPermitin    36    

Оповещения боту из 1С за 31 минуту

Практика программирования Интеграция v8::УФ 1cv8.cf Бесплатно (free)

Поделюсь опытом, как быстро сделать бота с оповещениями в Телеграмм из 1С без лишних затрат.

18.09.2019    18559    feva    42    

Выгрузка документа по условию Промо

Практика программирования Разработка v8 Бесплатно (free)

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    16622    m-rv    2    

[Шпаргалка] Программное создание элементов формы

Практика программирования Работа с интерфейсом v8 1cv8.cf Бесплатно (free)

Программное создание практически всех популярных элементов формы.

06.09.2019    73116    rpgshnik    70    

Агрегатные функции СКД, о которых мало кто знает

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    61421    ids79    55    

Регистры бухгалтерии. Общая информация

Практика программирования Математика и алгоритмы v8 v8::БУ БУ Бесплатно (free)

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019    34974    YPermitin    25    

Как прикрутить ГУИД к регистру сведений Промо

Практика программирования Перенос данных из 1C8 в 1C8 Разработка v8 Бесплатно (free)

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

16.04.2019    21234    m-rv    17    

Три костыля. Сказ про фокусы в коде

Практика программирования v8 Бесплатно (free)

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

03.09.2019    27595    YPermitin    81    

Приватный блокчейн и 1С популярно

Практика программирования Блокчейн Бесплатно (free)

Две предыдущие публикации на эту тему были сфокусированы преимущественно на технической стороне вопроса. Кроме того, их содержание оказалось понятным не каждому специалисту. В этой статье я постараюсь обяснить для всех и, что говорится, «на пальцах»: что такое приватный блокчейн, когда и зачем его следует применять и на что обратить внимание при использовании этой технологии в 1С.

02.09.2019    6535    mkalimulin    140    

Кодогенерация и метагенерация в 1С

Практика программирования Инструментарий разработчика Бесплатно (free)

В своем докладе на конференции INFOSTART EVENT 2018 EDUCATION Дмитрий Белозеров рассказал о разработке инструмента, позволяющего программно работать с метаданными 1С и писать скрипты для выполнения тех же действий, которые выполняет разработчик в конфигураторе –  с какими сложностями и нюансами пришлось столкнуться, и что получилось в итоге.

26.08.2019    9331    kirovsbis    28    

Как сделать запрос на изменение данных Промо

Практика программирования v8 v8::Запросы 1cv8.cf Бесплатно (free)

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    33036    m-rv    22    

Отслеживание выполнения фонового задания

Практика программирования Универсальные функции Разработка v8 1cv8.cf Бесплатно (free)

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019    37987    ids79    16    

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    115260    ids79    69    

Фоновое выполнение кода в 1С - это просто

Практика программирования v8 1cv8.cf Бесплатно (free)

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

02.08.2019    47027    avalakh    26    

Метод формирования движений в типовых регистрах нетиповыми регистраторами Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

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

05.12.2017    29028    itriot11    34    

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    81721    ids79    14    

Как проводятся документы в типовых конфигурациях от 1С

Математика и алгоритмы Практика программирования Разработка v8::ОУ ERP2 УТ11 Россия УУ Бесплатно (free)

В свое время, когда только начинал шаги в 1С и изучал, как проводятся документы в конфигурациях на платформе 1С по книге "Разработка управляемого интерфейса" (Хрусталева Е.Ю.), и там были представлены примеры совсем далекие от того, как сейчас проводятся документы в современных конфигурациях от 1С.

24.07.2019    31452    skv_79    35    

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Инструментарий разработчика Практика программирования v8 v8::СКД Бесплатно (free)

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    41429    ids79    27    

Использование классов .Net в 1С для новичков Промо

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    79113    Serginio    113    

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

Рефакторинг и качество кода Бесплатно (free)

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

17.07.2019    10850    ivanov660    30    

По следам код-ревью

Рефакторинг и качество кода v8 Бесплатно (free)

Приведу примеры с картинками и небольшим пояснением по вопросам, связанным с код-ревью (обзором кода).

09.07.2019    13411    ivanov660    110