Прусаков Никита про 1С
347 subscribers
37 photos
4 videos
6 files
24 links
Всё самое интересное из вселенной 1с.
Связаться напрямую — @prusakovnn
Download Telegram
Чтение и запись наборов записей.

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

Для начала начнем немного издалека, и поговорим про управляемые блокировки. Кстати, хороший вопрос для собеседования кандидатам: зачем вообще придумали управляемые блокировки ведь раньше (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
This media is not supported in your browser
VIEW IN TELEGRAM
Неочевидное использование нейросетей в 1С.

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

А вы используете нейросети в своей работе?🧐
👍2🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Эксперименты с нейросетями продолжаются. На этот раз, как бы я выглядел, если бы пошел работать по профессии, маталлургом!
🔥8😁4👍3
Я создал ютуб канал 🔥Всех приглашаю посмотреть мое первое видео посвященное подготовке к 1С:Эксперту, а именно созданию виртуальной машины, установке Linux, Postgres и 1с для дальнейшей подготовки.

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

Поддержите видео лайком на Ютубе, Rutube буду признателен.

Видео доступно на площадках:

📱 - Установка 1С на Linux (Ubuntu) для подготовки к сертификации 1С:Эксперт

🌐 - Установка 1С на Linux (Ubuntu) для подготовки к сертификации 1С:Эксперт
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥34👍10❤‍🔥1
Радует, что у фирмы 1с начинают появляться курсы про паттерны программирования, и подходы к грамотной разработке на 1с. Конечно эти курсы рассчитаны на начинающих специалистов, но возможно в будущем появится курс а-ля архитектор для продвинутых. Когда я только начинал свой путь таких курсов не было, и никто не мог сказать, а как же все таки писать код, чтобы он не только работал, а был еще и легкий в поддержке и оптимальный с точки зрения производительности.

На данный момент у фирмы 1с есть курс Пиши код грамотно, и сейчас выходит курс ПАТТЕРНЫ (ШАБЛОННЫЕ ПОДХОДЫ) РАЗРАБОТКИ 1С (я уже записался, расскажу свое впечатление после прохождения). Правда в последнем курсе не планируется освещать темы классических паттернов таких как: фабрика, синглтон, адаптер, декоратор и очень жаль конечно.

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

Самодокументируемый код это 🔥
4🔥4👍2
image_2025-04-13_14-13-59.png
57.7 KB
Новости с полей.

Не так давно пишет системный администратор, что на одном из серверов наблюдается множественное формирование дампов, причем именно ночью.

Анализ регламентных заданий не дал результатов. Ночью настроено достаточно много регламентов и понять, какое регламентное задание приводит к проблемам не удалось. Пошел настраивать тех. журнал для проведения посмертного анализа процессов. Решил начать с минимального журнала со следующими событиями: EXCP, EXCPCNTX, CONN, PROC, ADMIN, SESN, CLSTR, ATTN.

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

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

В планах отравить дампы в фирму 1С. Я грешу на ошибку в платформе, но дело это не быстрое.
👍15🔥8
На прошлой неделе закончился курс паттерны (шаблонные подходы) разработки 1С от Александра Митрофанова от учебного центра №1.

Это был первый, пробный поток как я понял. Если отзывы будут положительными курс планируют провести еще раз.

У меня не было возможности присутствовать на онлайн занятии, поэтому я смотрел видео в записи. Что могу сказать, курс с одной стороны интересной потому, что описывает шаблоны подходы которые используется при разработке ERP (и не только, но преимущественно там). Знаешь как работают типовые - меньше изобретаешь велосипедов. Конечно рассмотрена очень маленькая часть этих шаблонов, и даже несмотря на то, что большинство шаблонов были мне известны, я открыл для себя кое-что новое. Как говориться повторенье - мать учения!

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

Кто не знает, рекомендую открыть типовую ERPшку и посмотреть как, например организована проверка заполнения документа заказ клиента.
👍11
Skype приказал долго жить )))
😁2🫡2👍1
This media is not supported in your browser
VIEW IN TELEGRAM
🕰 Задумывались, куда уходит время в рабочем дне? Не на задачи. Не на звонки. А банально — на набор текста.

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

При наборе методом слепой печати, экономия времени (зависит от уровня навыка, конечно) составляет 200-300%. Если в программировании метод работает не на 100% (всё же часто используешь мышь), то при работе с 📩, техническими заданиями, отчетами — счет экономии может идти на часы.

❗️Около года назад, начал оттачивать этот навык на тренажере. Тренажеров много, в том числе и бесплатных, но я выбрал платный 💸 — стоил недорого, но с чёткой системой и прогрессией. Всего 💯 заданий. Обещают, если пройду все 100 заданий, то смогу с легкостью печатать и не смотреть на клавиатуру. На текущий момент прошел чуть больше половины. Пока тяжеловато идет, руки все время норовят вернуться к набору двумя пальцами.

Очень важно постоянно практиковаться. У меня был довольно большой перерыв в обучении — целых 4 месяца. Когда вернулся, понял: моторика забывается быстро. Но с регулярной практикой — она возвращается.

Полезный навык или нет? Как считаете ?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18
Сегодня провёл для ребят консультацию по подготовке к сертификации "1С:Эксперт".

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

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

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

Полагаю, мне удалось немного рассеять туман неопределённости вокруг экзамена и сделать этот путь к сертификации чуть более понятным. Надеюсь, что для ребят это было полезно.
👍11🔥9
Паузы в 1С

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

Рассмотрим основные варианты реализации таких пауз:

1️⃣Самый банальный написать код примерно такого вида. Тут ждем 10 секунд и продолжаем выполнение кода.

ЖдатьДо = ТекущаяДатаСеанса() + 10;
Пока ЖдатьДо >= ТекущаяДатаСеанса() Цикл
// Пустой цикл
КонецЦикла;


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

2️⃣Использовать com-объект и вызывать паузу через скрипт PowerShell. Можно использовать разные подходы timeout, ping или другие команды. Очевидный минус - такой код не будет работать в linux.

WshShell = Новый COMОбъект("WScript.Shell");
СтрокаКоманды = "timeout /t "+Секунд+" /nobreak";
СтрокаКоманды = "cmd /c "+СтрокаКоманды;
WshShell.Run(СтрокаКоманды,0,ОжидатьЗавершения);


3️⃣Использовать фоновое задание, ожидая его завершения в течении определенного времени.

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

Пример такого кода:

Процедура Пауза(Секунд) Экспорт

ТекущийСеансИнформационнойБазы = ПолучитьТекущийСеансИнформационнойБазы();

ФоновоеЗадание = ТекущийСеансИнформационнойБазы.ПолучитьФоновоеЗадание();

Если ФоновоеЗадание = Неопределено Тогда
Параметры = Новый Массив;
Параметры.Добавить(Секунд);
ФоновоеЗадание = ФоновыеЗадания.Выполнить("Интеграция1СШтампСлужебный.Пауза", Параметры);
КонецЕсли;
ФоновоеЗадание.ОжидатьЗавершенияВыполнения(Секунд);
КонецПроцедуры


4️⃣ Начиная с версии 8.3.25 в платформу завезли метод "ВызватьПаузу". Ждем рефакторинга в типовых конфигурациях!

Всем классно провести предстоящие праздники!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍123
История данных и версионирование объектов БСП что использовать?

В этом видео рассмотрим два механизма, которые фирма 1с использует для версионирования (истории изменения) данных. Выясним плюсы и минусы каждого подхода. Настроим, и покажем работу механизмов на практике.

Видео доступно на площадках:

🌐 - Rutube

📱 - VK Видео

📱 - YouTube

Ставьте 🔥 если интересен такой формат!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👍3
Медленное открытие формы: причины и способы решения

Один из любимых вопросов на сертификационном экзамене 1С:Эксперт:

Как вы будете устранять проблему медленного открытия формы? С чего начнёте? Какие шаги предпримете?

На практике причин может быть несколько, и пути решения — разные. Разберёмся по порядку:

1️⃣Разница в скорости у пользователей и администратора

Если у пользователей с ограниченными правами форма открывается медленно, а у администратора — быстро, велика вероятность, что дело в RLS (role level security). В этом случае пути решения лежат в области оптимизации RLS. Это может быть как отказ от RLS через разделение системы, например вести учет по каждой организации в отдельной базе. Также выходном может быть использование производительного РЛС.

2️⃣Форма тормозит в рабочее время, но летает ночью

Вне рабочего времени всё работает быстро — значит, стоит обратить внимание на ресурсы оборудования:

- Перегруженность дисков
- Нехватка оперативной памяти на сервере СУБД
- Сетевые задержки

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

3️⃣Проблема не в RLS и не в железе
Если вышеуказанные причины исключены, пора включать отладчик и исследовать код. Важно выяснить, на каком этапе уходит основное время. Применяем принцип Парето: ищем те 20% операций, которые дают 80% задержек. Оптимизация именно этих участков кода даст наибольший эффект.

4️⃣Долгое клиент-серверное взаимодействие
Иногда отладчик показывает, что основная задержка — это обмен между клиентом и сервером. В таких случаях:

- Собираем технический журнал (ТЖ)
- Анализируем временной промежуток между событиями VRSREQUEST и VRSRESPONSE

При этом должно соблюдаться следующее неравенство:

Время замера кода < Время по тех. журналу < Время по секундомеру или по APDEX

Частой проблемой является перегрузка формы большим количеством элементов и реквизитов. Чрезмерное усложнение формы не совсем правильный подход в разработке (но мы то живем в реальной жизни) и такое может произойти сплошь и рядом.

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

Если избежать загрузки таблицы нельзя, но её формирование на сервере занимает много времени — есть способ ускорить эту операцию используя помещение таблицы во временное хранилище.

- В процедуре ПриСозданииНаСервере формируем таблицу.
- Посещаем её во временное хранилище.
- В реквизите формы сохраняем адрес временного хранилища.
- При необходимости работы с таблицей в момент серверного вызова — извлекаем таблицу из временного хранилища по адресу и работаем с ней.

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

На ИТС есть отличная статья, подробно описывающая методику расследования медленного открытия форм. Очень рекомендую к прочтению — системный подход помогает не тратить время на догадки, а сразу действовать эффективно.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31🔥4👏1
Несколько дней моего отпуска решили провести необычно, а именно спонтанно посетить Нижний Новгород. Дорога не составила больших хлопот: порадовала новая трасса М-12 до Владимира, а дальше шли по М-7. Весь путь от Москвы до точки назначения занял около 5 часов.

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

За пару дней успели побывать в самых интересных местах и составить первое впечатление. Но обо всем по порядку.

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

Второе место — это «Стрелка», место слияния двух ввшеперечисленных русских рек. С этого места открывается прекрасный вид на нижегородский Кремль, так как находится оно на противоположной стороне реки.

Прогулялись по Большой Покровской улице, это что-то вроде Старого Арбата в Москве: здесь много сувенирных магазинов, лавок и ресторанов. Большое количество уличных артистов: кто поет, кто танцует, а кто читает монологи.

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

Из гастрономических приключений могу отметить места в которых были:

1. Red Wall. Оценка 10/10. Место с шикарным расположением ниже Кремля с видом на Волгу. Запомнилась мне Уха с углем в прямом смысле. Подают значит основу, заливают в нее при тебе бульон, и….окунают раскаленный уголь. Да да, прям уголь который шипит и оставляет в супе интересное послевкусие.

2. Ресторан Парк Культуры. Тут запомнился эффектный десерт, который подается в виде старой книжки со свечей и бумагой.

3. Министерство завтраков. Название говорит само за себя, но так получилось, что попали мы туда не на завтрак…а на ужин.

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

Нижний Новгород точно стоит визита — особенно для тех, кто ценит вкусную кухню, виды и историю.
🔥113👍2💯1
Недавно на Инфостарте вышла интересная статья от Владислава Журавского. Мы с Владом несколько лет работали вместе до пандемии, а потом наши пути, к сожалению, разошлись. В разгар ковида Влад решил сделать серьёзный шаг — перейти с 1С на Java.

Пять лет спустя Влад оглядывается на свой путь в Java и откровенно говорит о том, что не всё оказалось так, как он ожидал.
👍11
Немного о кэше в 1С

На ИТС представлено не так много материалов о работе кэша в контексте сервера приложений. Описываются обычный
и транзакционный кэши.

Известно, что обращение к объектам через "." нежелательно.

Что же происходит в этот момент?

При обращении через "." система считывает весь объект целиком — со всеми реквизитами и табличными частями — и помещает его в кэш сервера 1с. Данные в кэше сохраняются до наступления одного из следующих событий:

✏️происходит переполнение кэша (память сервера ограничена, поэтому ранее загруженные данные могут быть вытеснены новыми);

✏️при следующем обращении через ".", если объект был изменён, он считывается заново и обновляется в кэше. Факт изменения проверяется SQL запросом к реквизиту "Версия" объекта;

✏️по истечении 20 минут данные автоматически удаляются из кэша.

Внутри «обычного» кэша может существовать и «кэш представлений». Он используется, например, в следующей ситуации:
ПредставлениеНоменклатуры = Строка(Выборка.Номенклатура);

Здесь Номенклатура — это ссылка на справочник. Система проверяет, есть ли в кэше данные по этой ссылке. Если ранее к реквизитам объекта через "." обращения не было, то из базы загружается только представление.

* Для справочника это основное представление,
* Для документа — дата и номер.

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

Строка(Выборка.Номенклатура)

будет возвращено старое кэшированное значение.

Если же реквизиты уже были получены через ".", то представление будет извлекаться из кэша.

Через 20 секунд после помещения в кэш, любое обращение к ссылке (как за представлением, так и через ".") вызывает SQL-запрос для проверки актуальности данных. Если версия объекта изменилась, система загружает новые данные из СУБД. Если нет, опять идет отсчет 20 секунд валидности данных.

Практический вывод

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

В картинке к посту пример такой ситуации.
👍11🔥9