Первая замена переноса строки на собаку выполнена без ключа g. Обратную замену вы уже делаете с ключом g. Вообще тема склеивания строк самая "скользкая" и хотелось бы отдельного видео на эту тему.
В первом случае я не ожидаю увидеть несколько переносов строки в одной строке:) В обратной же замене искомых символов может быть несколько, если "склеены" были несколько строк. В целом мы совсем не ставили себе цель продемонстрировать инструменты и методы обработки строк, это действительно отдельная обширная тема, по которой, кажется, довольно много материалов. Способ, который я использую в видео - всего лишь один из многих. Можно использовать пример с awk в очень полезной кстати статье, посвященной как раз анализу логов инструментами bash: its.1c.ru/db/metod8dev#content:5927:hdoc Можно написать и свой собственный.
@@elenaskvortsova4478 статью я видел. она плоха. что бы это понять - попробуйте объяснить как работает склеивание в этой статье perl -n -e 'if (/^\d\d:\d\d\.\d+/) {$event =~ s/ //g; print $event." "; $event = "";} $event .= $_; END{print $event." "};'
@@АлексейНеизвестный-ь6р так чат жпт отетил Этот Perl-скрипт выполняет следующие действия: 1. Считывает входные данные построчно (-n) и выполняет код для каждой строки (-e). 2. Если строка начинается с временного штампа в формате "mm:ss.sss" (/^\d\d:\d\d\.\d+/), то: - Заменяет все символы переноса строк на "" в предыдущем событии ($event =~ s/ //g). - Выводит предыдущее событие на экран с символом переноса строки ($event." "). - Обнуляет переменную $event. 3. Добавляет текущую строку в переменную $event. 4. По окончании входных данных, выводит последнее событие на экран с символом переноса строки (END{print $event." "};). Таким образом, скрипт читает входные данные, разбивает их на события, заменяет символы переноса строк на "" и выводит каждое событие на экран. А так один опытный эксперт: $event = ""; Для Каждого $_ По НаборСтрок Цикл Если $_ соотвествует шаблону "^d\d:\d\d\.\d+" Тогда $event = СтрЗаменить($event, " ", ""); Вывести $event + " "; $event = ""; КонецЕсли; $event = $event + $_; КонецЦикла; Вывести $event + " ";
Здравствуйте, поясните, пожалуйста, почему добавление нового поля в пространство блокировки решит проблему? Ведь виновник заблокирует все ссылку. То есть пространства как были пересекающимися так и останутся.
Виновник заблокирует не все ссылки, а кортеж: все ссылки и определенное значение поля "Распоряжение". Жертва ставит блокировку по по полю "Ссылка" и другому значению поля "Распоряжение" после исправления, поэтому блокировки больше не пересекаются. Точнее, пересекаются только тогда, когда распоряжения совпадают. До исправления значение поля "Распоряжение" пропускалось, при таком подходе оно могло быть каким угодно, в том числе аналогичным тому, которое блокирует Виновник. Было Блокировка 1: Ссылка1 + Любое Распоряжение Блокировка 2: Любая Ссылка + Распоряжение2 Блокировки пересекаются Стало Блокировка 1: Ссылка1 + Распоряжение1 Блокировка 2: Любая Ссылка + Распоряжение2 Блокировки не пересекаются
@@elenaskvortsova4478 >>Было >>Блокировка 2: Любая Ссылка + Распоряжение2 Тут я бы уточнил, "Блокировка 2: Любая Ссылка ()" - здесь будут ссылки на Этапы производства, в шапке которых указано Распоряжение2, т.е не любая ссылка а ограниченный реквизитом "Распоряжение" список этапов. Елена поясните пожалуйста ещё раз, что даст добавление ещё одного поля (Распоряжение) в пространство блокировки, если учесть, что архитектурно в этапе производства реквизит "Распоряжение" находится в шапке документа и связь многие ко многим невозможна.
@@БорисКарпунин-г1ь Я специально обращаю внимание в теоретической части на то, что менеджер блокировок не знает ничего о данных в таблицах и не делает к ним запросов. Если устанавливается блокировка только по значению поля Ссылка, менеджер блокировок не имеет ни малейшего представления о том, какое значение имеет Распоряжение в шапке объекта, на который эта ссылка указывает. Даже если в шапке на самом деле Распоряжение 1, а в блокировке 2 устанавливается блокировка по Распоряжение 2, блокировки будут пересекаться. Они перестанут пересекаться только тогда, когда менеджеру блокировок явно укажут значение распоряжения при блокировке по полю Ссылка. Что я и делаю. Что и делает платформа при записи объекта - перечисляет все поля пространства. Возможно, вам будет понятнее, если вы смоделируете тестовый пример с похожими блокировками в длинной транзакции и соберете журнал.
@@elenaskvortsova4478 Если я вас правильно понял, то вы описываете ситуацию когда Блокировка 1: ЭтапПроизводства №1 - Распоряжение любое (наложена объектная управляемая блокировка по конкретному документу) Блокировка 2: ЭтапПроизводства №2,№3,№4 - Распоряжение2 (количество записей в таблице блокировок равно количеству этапов по Распоряжение2) При этом возникает тайм-аут из-за пересечения пространств блокировок?
Добрый день, спасибо за видео - очень понравилась подача материала.
Обязательно для просмотра и повторения.
Ну вот, все просто элементарно!
спасибо, грамотное видео. Как раз такая проблема есть на практической части экзамена.
Первая замена переноса строки на собаку выполнена без ключа g. Обратную замену вы уже делаете с ключом g. Вообще тема склеивания строк самая "скользкая" и хотелось бы отдельного видео на эту тему.
В первом случае я не ожидаю увидеть несколько переносов строки в одной строке:)
В обратной же замене искомых символов может быть несколько, если "склеены" были несколько строк.
В целом мы совсем не ставили себе цель продемонстрировать инструменты и методы обработки строк, это действительно отдельная обширная тема, по которой, кажется, довольно много материалов. Способ, который я использую в видео - всего лишь один из многих. Можно использовать пример с awk в очень полезной кстати статье, посвященной как раз анализу логов инструментами bash:
its.1c.ru/db/metod8dev#content:5927:hdoc
Можно написать и свой собственный.
@@elenaskvortsova4478 статью я видел. она плоха. что бы это понять - попробуйте объяснить как работает склеивание в этой статье perl -n -e 'if (/^\d\d:\d\d\.\d+/) {$event =~ s/
//g; print $event."
"; $event = "";} $event .= $_; END{print $event."
"};'
@@АлексейНеизвестный-ь6р так чат жпт отетил
Этот Perl-скрипт выполняет следующие действия:
1. Считывает входные данные построчно (-n) и выполняет код для каждой строки (-e).
2. Если строка начинается с временного штампа в формате "mm:ss.sss" (/^\d\d:\d\d\.\d+/), то:
- Заменяет все символы переноса строк на "" в предыдущем событии ($event =~ s/
//g).
- Выводит предыдущее событие на экран с символом переноса строки ($event."
").
- Обнуляет переменную $event.
3. Добавляет текущую строку в переменную $event.
4. По окончании входных данных, выводит последнее событие на экран с символом переноса строки (END{print $event."
"};).
Таким образом, скрипт читает входные данные, разбивает их на события, заменяет символы переноса строк на "" и выводит каждое событие на экран.
А так один опытный эксперт:
$event = "";
Для Каждого $_ По НаборСтрок Цикл
Если $_ соотвествует шаблону "^d\d:\d\d\.\d+" Тогда
$event = СтрЗаменить($event, "
", "");
Вывести $event + "
";
$event = "";
КонецЕсли;
$event = $event + $_;
КонецЦикла;
Вывести $event + "
";
Коллеги, а где же 4 и 5 видео?!
Всё по делу, спасибо большое
Сложно то как =)
Но очень интересно.
тут понятней))
"В чем подвох с управляемыми блокировками 1С? Как правильно их применять?" Вбей в youtube поиске=)
спасибо, за видео
Ну это лайк
Класс!
Спасибо!
Добрый день. Подскажите пожалуйста, а если в ТЖ нет события tlock с номером сеанса виновника, что это может означать?
Разобрался сам, закралась ошибка в logcfg, событие tlock собиралось с фильтром по waitconnections, в итоге упустил виновника:
5 баллов!
Здравствуйте, поясните, пожалуйста, почему добавление нового поля в пространство блокировки решит проблему? Ведь виновник заблокирует все ссылку. То есть пространства как были пересекающимися так и останутся.
Виновник заблокирует не все ссылки, а кортеж: все ссылки и определенное значение поля "Распоряжение". Жертва ставит блокировку по по полю "Ссылка" и другому значению поля "Распоряжение" после исправления, поэтому блокировки больше не пересекаются. Точнее, пересекаются только тогда, когда распоряжения совпадают.
До исправления значение поля "Распоряжение" пропускалось, при таком подходе оно могло быть каким угодно, в том числе аналогичным тому, которое блокирует Виновник.
Было
Блокировка 1: Ссылка1 + Любое Распоряжение
Блокировка 2: Любая Ссылка + Распоряжение2
Блокировки пересекаются
Стало
Блокировка 1: Ссылка1 + Распоряжение1
Блокировка 2: Любая Ссылка + Распоряжение2
Блокировки не пересекаются
@@elenaskvortsova4478 теперь понятно, спасибо
@@elenaskvortsova4478
>>Было
>>Блокировка 2: Любая Ссылка + Распоряжение2
Тут я бы уточнил, "Блокировка 2: Любая Ссылка ()" - здесь будут ссылки на Этапы производства, в шапке которых указано Распоряжение2, т.е не любая ссылка а ограниченный реквизитом "Распоряжение" список этапов.
Елена поясните пожалуйста ещё раз, что даст добавление ещё одного поля (Распоряжение) в пространство блокировки, если учесть, что архитектурно в этапе производства реквизит "Распоряжение" находится в шапке документа и связь многие ко многим невозможна.
@@БорисКарпунин-г1ь Я специально обращаю внимание в теоретической части на то, что менеджер блокировок не знает ничего о данных в таблицах и не делает к ним запросов.
Если устанавливается блокировка только по значению поля Ссылка, менеджер блокировок не имеет ни малейшего представления о том, какое значение имеет Распоряжение в шапке объекта, на который эта ссылка указывает.
Даже если в шапке на самом деле Распоряжение 1, а в блокировке 2 устанавливается блокировка по Распоряжение 2, блокировки будут пересекаться. Они перестанут пересекаться только тогда, когда менеджеру блокировок явно укажут значение распоряжения при блокировке по полю Ссылка. Что я и делаю. Что и делает платформа при записи объекта - перечисляет все поля пространства.
Возможно, вам будет понятнее, если вы смоделируете тестовый пример с похожими блокировками в длинной транзакции и соберете журнал.
@@elenaskvortsova4478
Если я вас правильно понял, то вы описываете ситуацию когда
Блокировка 1: ЭтапПроизводства №1 - Распоряжение любое (наложена объектная управляемая блокировка по конкретному документу)
Блокировка 2: ЭтапПроизводства №2,№3,№4 - Распоряжение2 (количество записей в таблице блокировок равно количеству этапов по Распоряжение2)
При этом возникает тайм-аут из-за пересечения пространств блокировок?
И немного о плагиате 😁 Через полгода после этого видео, аналогичное но похуже вышло у курсов-по-рф🤣 ссылку не буду постить
Непонятно в чем беда, но вот так не работает: "perl -pe 's/
/@/...", а вот так работает: "perl -pe 's/.
/@/..." (с точкой перед
)