Прусаков Никита про 1С
354 subscribers
43 photos
4 videos
6 files
26 links
Всё самое интересное из вселенной 1с.
Связаться напрямую — @prusakovnn
Download Telegram
Выпущена бета-версия платформы "1С:Предприятие 8.5" с новым интерфейсом!

Информационное письмо 1С от 25.12.2024

Тут можно пощупать новый дизайн в веб-клиенте на базе демо-конфигурации.

Фишка которую лично я оценил: Поддержка светлой/темной темы 🔥🔥🔥

Мне вот интересно, а куда делась платформа 8.4? Почему после 8.3 сразу 8.5?

Есть идеи?
👍3🔥2
Новогодние поздравления в формате предсказаний для вас, мои дорогие коллеги 🎉

Выбирайте цифру от 1 до 6 и делитесь в комментариях, что выпало вам ☺️
🔥5👏1😁1
Ну вот и закончились очередные новогодние праздники, и впереди нас ждет адаптация к рабочим дням после праздников 💪

Этот январь оказался для меня по настоящему особенным, и стал для меня втройне праздничным. Теперь в январе я отмечаю не только Новый год, а целых два дня рождения, свой и дочурки 🎀
🔥166👍1
Цветовая схема конфигуратора.

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

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

А какой цветовой схемой пользуетесь Вы?
🔥5🤔2👍1
Совсем недавно пришлось столкнуться сразу с двумя задачами, где применялись таблицы значений.

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

Пару вводных:

1️⃣ Две таблицы значений, в одной 66 тыс. строк, в другой 13 тыс. строк.
2️⃣ Селективность примерно 95%, то есть все строки почти уникальны.
3️⃣ Поиск ведется по двум колонкам через метод встроенного языка «НайтиСтроки».

Разница в скорости по индексированным колонкам таблицы значений и не проиндексированным почти в 48 раз. В первом случае, когда колонки проиндексированы общее время ~ около 1 секунды. Во втором случае почти 48 секунд. Взял среднее время нескольких итераций. Совершенно понятно, что на разном оборудовании это время может варьироваться, но главное тут порядок цифр.

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

Несколько напоминаний про индексы таблицы значений:

❗️При добавлении индекса, индекс создается составной. Например, если создать индекс по двум колонкам:
«ТаблицаЗначений.Индексы.Добавить(«Колонка1, Колонка2»)

а искать например только по одной колонке:
ТаблицаЗначений.Найти(Значение, «Колонка1»),

или так:
ТаблицаЗначений.НайтиСтроки(Новый Структура(«Колонка1", Значение1))

то такой индекс использоваться не будет.

❗️Поиск по одной колонке таблицы значений одинаково эффективен при поиске методами «Найти» и «НайтиСтроки», а вот если требуется поиск по нескольким колонкам сразу, то следует использовать только метод «НайтиСтроки».

Более подробно можно почитать в наших любимых стандартах тут.
👍16🔥9
«Интересный вопрос: как обстоят дела с многопоточностью в 1С? Давайте попробуем в этом разобраться.

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

Допустим у меня есть сервер с одним процессором у которого 6 ядер. В кластере работает одна база, и все настройки стоят по умолчанию, я имею ввиду параметры рабочих процессов (кол-во ИБ на процесс: 8, кол-во соединений на процесс: 256). Как вы думаете, если я запущу 6 фоновых заданий в которых будет выполняться цикл эмулирующий загрузку процессора, будут ли все 6 ядер загружены или будет загружено только одно ядро? Примем допущение, что на этом сервере больше никто и ничего не работает.

Правильно, будут загружены все ядра процессора. Но такая ситуация будет происходить, если все эти процессоры находятся в одном NUMA узле. NUMA - это архитектура , при которой некоторое количество логических процессоров объединены в группу, и общаются между собой через общую память. Такое взаимодействие между ядрами внутри numa-узла самое быстрое. Отсюда и название Non-Uniform Memory Access (неравномерный доступ к памяти).

Таким образом, если один rphost стартовал в одном numa-узле, то использовать ли ядра другого numa-узла будет решать сама ОС. ОС при обработке поступающего запроса, может отказаться выбирать свободные процессоры, из-за того что используют другой сегмент выделенной памяти. Почем так? Потому, что полноценная поддержка NUMA в 1с пока не реализована.

Выдержка из технологических вопросов крупных внедрений:

На многопроцессорных системах на одном сервере должно работать больше одного процесса rphost.

Следует иметь в виду, что поддержка NUMA в кластере серверов "1С:Предприятия" полноценно пока не реализована.

Сервер 1С не управляет распределением ресурсов по NUMA узлам, полностью полагаясь в этом на операционную систему, что не всегда даёт оптимальный результат.


И тут можно наблюдать картину, когда часть ядер на сервере 1С загружена под 100%, а часть простаивает. В этой ситуации как раз помогут параметры рабочих процессов: количество ИБ на процесс, и количество соединений на процесс, которые позволяют регулировать количество rphost-оф.

При этом нельзя забывать про ограничение платформы уровня ПРОФ, все эти возможности по настройке, такие как: количество ИБ на процесс, режим распределения нагрузки, безопасный расход памяти за один вызов, а также использование более 12 ядер на сервере 1С доступны только в платформе уровня КОРП.
👍17🔥1
Сотрудники фирмы 1с рассказали как тестируют такую огромную конфигурацию как ERP, какие подходы, и ресурсы для этого используются. Как применяют сценарные, дымовые тесты, докер. А также сколько занимает протестировать всю ERP в машино-часах. Занятное чтиво на ночь.
👍8
Ни разу не олимпиадник, но зарегистрировался на олимпиаду по программированию 1С. Интересно, какие там будут задачки🤔

Если есть желающие, оставляю ссылочку.
👍12
В общем проспал я олимпиаду после бессонной ночи. Успел решить только одну задачу из пяти. К слову записался чтобы посмотреть какие вопросы могут быть на олимпиаде по 1с разработке. Кстати вопросы на этой олимпиаде как-то ближе к бизнес проблемам которые можно решить с помощью 1с. Например одной из задач была задача, где нужно выявить посетителей фитнес клуба, которые пропускают по своему пропуску других посетителей (привет СКУД). Пилить отчеты на СКД, формочки и регистры не пришлось. Конечно четвертная и пятая задачи на мой взгляд требуют более глубоких знаний математики, но за них и дают больше всего баллов. Нашел в открытом доступе вопросы с прошлых олимпиад. К слову пара ребят которые выиграли предыдущие олимпиады, угадайте где трудятся...🥁🥁🥁 в Рарусе.

2015:
https://docs.google.com/document/d/12UgodYw1xCd8YDn5JT2PEIWkCvzd7RpjCUC1PkXxzWQ/edit?tab=t.0

2017:
https://docs.google.com/document/d/12UgodYw1xCd8YDn5JT2PEIWkCvzd7RpjCUC1PkXxzWQ/edit?tab=t.0

2019:
https://docs.google.com/document/d/1kFwcE27bwA8BnWa22WYBZP_KCTjR1MV1OBTreNrSgrQ/edit?tab=t.0
👍2🔥1😴1
Чтение и запись наборов записей.

В самом начале своей работы как разработчика, неизбежно приходилось сталкиваться с задачами записи регистров сведений. У наборов записей есть методы "Прочитать()", "Записать()". Ну казалось бы все просто. Один метод читает, другой записывает. Да и кому придет в головку читать данные регистра сведений объектной техникой, когда можно прочитать запросом? Но поработав какое-то время, понял, что есть нюансы. Про них и поговорим.

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

Также важно понимать, что управляемые блокировки могут быть установлены только в рамках транзакции, и держаться всегда до конца транзакции (в отличии от блокировок СУБД в определенных режимах изоляции).

Вернемся же к регистрам. Когда мы читаем данные методом набора записей "Прочитать()", сервер 1С неявно накладывает управляемую разделяемую блокировку на прочитанные данные. Поясню на примере:

Если регистр сведений "ОсновнойДоговорКонтрагента", с измерением "Контрагент", и ресурсом "Договор". В момент чтения, будет наложена управляемая разделяемая блокировка.

НаборЗаписей = РегистрыСведений.ОсновнойДоговорКонтрагента.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Контрагент.Установить(Контрагент);
НаборЗаписей.Прочитать();

В каких же случаях нам может потребоваться накладывать разделяемую управляемую блокировку? Тут необходимо познакомиться еще с одним термином, который называется "Ответственное чтение". Что это такое?

Ответственное чтение
- это чтение, при котором мы на 100% должны быть уверены, что после прочтения данные не изменятся. В нашем примере если у меня есть алгоритм, который производит действия с основным договором (например получает основной договор контрагента, получает его сумму и отправляет на почту ответственному сотруднику информацию по остатку лимита основного договора), то в процессе выполнения рассылки, другой сотрудник может зайти и поменять основной договор в регистре. В таком случае будут отправлены некорректные данные.

Значит перед рассылкой нам нужно позаботится о том, чтобы данные которые мы прочитали не были изменены. Это можно сделать либо через чтение в объектной технике, либо через установку явной управляемой блокировки через метод "БлокировкаДанных".

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

НаборЗаписей = РегистрыСведений.ОсновнойДоговорКонтрагента.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Контрагент.Установить(Контрагент);
НаборЗаписей.Прочитать();
НаборЗаписей.Очистить();

// код по добавлению строк в набор записей

НаборЗаписей.Записать();

Как вы думаете какая проблема в коде выше 👆? А проблема в том, что данный код может вызвать взаимоблокировку по причине недостаточного уровня блокировки ресурса. Мы сначала читаем, а затем пишем. И если в двух параллельных сеансах попытаться поменять основной договор, то можем словить взаимоблокировку. Эти строчки абсолютно не нужны в данном примере:

НаборЗаписей.Прочитать();
НаборЗаписей.Очистить();


Набор и так будет перезаписан, читать и очищать его не нужно. Поэтому более правильно тут будет сразу записать набор:

НаборЗаписей = РегистрыСведений.ОсновнойДоговорКонтрагента.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Контрагент.Установить(Контрагент);

// код по добавлению строк в набор записей

НаборЗаписей.Записать();

Если было интересно ставьте 🔥 буду делать больше технических постов.
🔥41👍5
‼️В стандартах разработки в феврале 2025 года опубликован новый стандарт по многократной записи регистров сведений и накоплений. Этот стандарт рассчитан на использование платформы 8.3.26 и выше, с учетом новых возможностей по записи в регистры ведений в режиме замещения.

Кстати про эту возможность в платформе 8.3.26 уже писал.

#Новости1С
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍2
Платформенное версионирование данных. Было интересно разобраться в этой теме. Пока готовлю видео скажите, пользуетесь этой возможностью платформы ?
👍20
В платформе 8.5.3 планируется реализовать поддержку показа документов MS Word (и ряда других форматов) в клиентском приложении. Для этого будет разработан новый сервис кластера серверов «Сервис преобразования документов». Жаль, что такую функциональность обещают только в 8.5.3…хотелось бы конечно и в 8.3.* иметь такой функционал. Эх…сколько печатных форм было сделано под “word”, через com, чтобы кадровикам и бухгалтерам было «привычнее» печатать документы…
👍3