За 20 лет Вы так и не поняли разницу между 1с-никами. Автор писал про одного, Вы пишите совсем про другого. Есть тот, кто поддерживает и дорабатывает конфигурацию на месте — это одна профессия (статья про нее). А есть тот, кто разработал платформу/конфигурацию и продал ее Вашему предприятию — это вообще другая профессия, ему пофиг на Ваш бизнес, у него реальная цель — осеменить все вокруг с помощью 1с — это его хлеб, но это ДРУГОЙ человек, статья вообще не про него
«Вот тут забавно получается. В мире обычных (не 1С) программистов считается, что 1Сники – убогие, потому что работают с ограниченной платформой.»
Почему 1с-ников не любят другие программисты — тема для отдельной статьи.
Если коротко, по большей части — это миф, а точнее комплекс неполноценности, которыми страдают сами 1с-ники, а пользуются этим всякие тролли.
Первым ограничением платформы в истории стал переход от машинного кода к ассемблеру, и далее таких ограничений было такое количество, что между программистами разных платформ давно должна была начаться межгалактическая война. Но этой войны нет, потому что никому это не надо, ИТ развился в кучу самостоятельных веток. История пошла по такому пути, человеческие потребности пошли по такому пути, ибо никто не хочет каждое утро разбирать-собирать двигатель автомобиля, чтобы доехать до работы (иначе ты не тру-автомобилист). Единственная вещь, которая осталась неизменной — это человеческая глупость, а еще зависть в придачу.
Так что, если вам где-то встретится тру-программист, заявляющий об ограниченности чьей-то платформы, смело заставляйте его кодить на машинном языке, иначе он не поймет.
1С-ники спасут мир в том числе благодаря своему терпению.
Да, соглашусь этот вариант правильный, и он мне нравится:
Попытка
НачатьТранзакцию();
ДелаемЧтоТо();
ЗафиксироватьТранзакцию();
Исключение
Если ТранзакцияАктивна() Тогда
ОтменитьТранзакцию();
КонецЕсли;
ВызватьИсключение;
КонецПопытки;
1С. Ошибка «В данной транзакции уже происходили ошибки».
Причина появления данной ошибки — вызов исключительной ситуации во вложенной транзакции. Попытка создает неявную транзакцию, тем самым исключение откатывает транзакцию полностью.
Внутри вложенной транзакции вызывается исключительная ситуация, что откатывает всю транзакцию и некорректно отрабатывает. Например:
НачатьТранзакцию();
…
…
Попытка
…
Исключение // если тут будет вызвано исключение — то вы увидите ошибку «В данной транзакции уже происходили ошибки»
…
КонецПопытки;
…
КонецТранзакцию();
Во избежания таких ситуаций, нужно избегать использования попытки внутри транзакции.
Попытка
НачатьТранзакцию();
Действия();
ЗафиксироватьТранзакцию();
Исключение
Если ТранзакцияАктивна() Тогда
ОтменитьТранзакцию();
Конецесли;
КонецПопытки;
Ошибся в первом сообщении, вот полная конструкция:
Попытка
НачатьТранзакцию();
Действия();
ЗафиксироватьТранзакцию();
Исключение
КонецПопытки;
Почему именно так: все, что находится внутри Попытки, убивается в случае ошибок в Исключении, т.е. нет нужды отменять транзакцию, она отменится автоматически. Фиксация транзакции расположена последней в очереди внутри попытки. По-моему, вопрос закрыт. Как вы считаете?
Почему 1с-ников не любят другие программисты — тема для отдельной статьи.
Если коротко, по большей части — это миф, а точнее комплекс неполноценности, которыми страдают сами 1с-ники, а пользуются этим всякие тролли.
Первым ограничением платформы в истории стал переход от машинного кода к ассемблеру, и далее таких ограничений было такое количество, что между программистами разных платформ давно должна была начаться межгалактическая война. Но этой войны нет, потому что никому это не надо, ИТ развился в кучу самостоятельных веток. История пошла по такому пути, человеческие потребности пошли по такому пути, ибо никто не хочет каждое утро разбирать-собирать двигатель автомобиля, чтобы доехать до работы (иначе ты не тру-автомобилист). Единственная вещь, которая осталась неизменной — это человеческая глупость, а еще зависть в придачу.
Так что, если вам где-то встретится тру-программист, заявляющий об ограниченности чьей-то платформы, смело заставляйте его кодить на машинном языке, иначе он не поймет.
1С-ники спасут мир в том числе благодаря своему терпению.
Бывает полезно
Иногда практикую создание сайта в блокноте. Чисто как испытание для мозга. Приносит удовольствие)
Вот только не понимаю, зачем нужно
Причина появления данной ошибки — вызов исключительной ситуации во вложенной транзакции. Попытка создает неявную транзакцию, тем самым исключение откатывает транзакцию полностью.
Внутри вложенной транзакции вызывается исключительная ситуация, что откатывает всю транзакцию и некорректно отрабатывает. Например:
НачатьТранзакцию();
…
…
Попытка
…
Исключение // если тут будет вызвано исключение — то вы увидите ошибку «В данной транзакции уже происходили ошибки»
…
КонецПопытки;
…
КонецТранзакцию();
Во избежания таких ситуаций, нужно избегать использования попытки внутри транзакции.
avditor.ru/index.php/programmirovanie-1s/102-1s-oshibka-v-dannoj-tranzaktsii-uzhe-proiskhodili-oshibki
Попытка
НачатьТранзакцию();
Действия();
ЗафиксироватьТранзакцию();
Исключение
Если ТранзакцияАктивна() Тогда
ОтменитьТранзакцию();
Конецесли;
КонецПопытки;
Попытка
НачатьТранзакцию();
Действия();
ЗафиксироватьТранзакцию();
Исключение
КонецПопытки;
Почему именно так: все, что находится внутри Попытки, убивается в случае ошибок в Исключении, т.е. нет нужды отменять транзакцию, она отменится автоматически. Фиксация транзакции расположена последней в очереди внутри попытки. По-моему, вопрос закрыт. Как вы считаете?
Попытка
НачатьТранзакцию();
Исключение
КонецПопытки;