Подпишитесь на RSS, чтобы всегда быть в курсе событий.
Рубрики
Популярные статьи
- Не открываются сайты антивирусов drweb.com, kaspersky.ru и esetnod32.ru. Что делать? - 220 676 просмотров
- Обзор спутникового ресивера GS 8300 - 176 484 просмотров
- Что делать если закрыли доступ на одноклассники, вконтакте, маил, аську - 171 684 просмотров
- Монтаж потолка из пластиковых панелей на металлический каркас. - 153 479 просмотров
- Взлом пароля пользователя 1С 8 версии - 138 550 просмотров
- Вирус просит пополнить счет абонента билайн - 121 808 просмотров
- Как самому собрать душевую кабину - 75 878 просмотров
- Как сделать Live CD Dr Web и просканировать компьютер если не загружается Windows из-за вируса - 75 149 просмотров
- Megafon модем HUAWEI Mobile Connect 3G - 73 346 просмотров
- Описание китайского iPhone 3G - 67 646 просмотров
Как грамотно переустановить Windows, сохранить все программы и настройки
Многие друзья и клиенты обращаются не только по вопросам 1С, но и по обычным «админским» вопросам. Так что Windows переустанавливать приходится часто. Более того, часто сталкиваюсь с «горе-админами», которые при переустановке форматируют диски, копируют файлы на другие диски, теряют базы 1С превращая обычную переустановку системы в ужас для пользователя. Давайте рассмотрим на примере офисного компьютера [...]
Подготовка к работе Билайн М2
Занимаюсь проектом, в котором задействовано много легендарных гаджетов Билайн М2, которые надо готовить к работе с Android — приложением. Эту статью пишу в первую очередь для себя, чтобы иметь в ней доступ «из любой точки интернета». Достоинства и недостатки Билайн М2 Билайн М2 — недорогой планшетный компьютер, который фирма ZTE производит специально для нашего сотового [...]
Метки
Что такое транзакция и для чего она нужна.
Транзакции в 1С
На днях ковырялся в базе, пользователи которой жаловались на проблему «Ожидание захвата таблицы Журналы для начала транзакции«. Конечно такая проблема возникает, когда документ долго проводится. Но в моем случае в обработку проведения была дописана
Некоторые начинающие программисты не понимают что такое транзакции и как ими пользоваться. Недавно ковырялся в чужом коде и увидел, что в обработке проведения добавлен код:
Если глПользователь.Полномочия.ПроведениеБезПроверок = 0 Тогда
КолДнейОтсрочки = Контрагент.ОсновнойДоговор.ГлубинаКредита;
ДатаПросрочки = ДатаДок — КолДнейОтсрочки;
Просрочка = ПросроченныйДолгКлиента(Контрагент,ДатаПросрочки);
Если Просрочка > 0 Тогда
Если Вопрос(«Просроченный долг клиента «+ Просрочка + » Продолжить проведение?»,4,0) = 7 Тогда
глНеПроводить(Контекст,»Документ «»"+ глНазваниеДокументаВЖурнале(Контекст)+»"» Просрочка»);
Возврат;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Ключевой строкой здесь является:
Если Вопрос(«Просроченный долг клиента «+ Просрочка + » Продолжить проведение?»,4,0) = 7 Тогда
То есть при проведении документа на экран выскакивает вопрос и требует ответа оператора.
Дело в том, что при проведении документа блокируется доступ к записи в регистры. Делается это например для того, чтобы дважды не продать один и тот же товар (это как пример на пальцах). И пока у одного оператора висит этот вопрос никто не может провести документы, в строке состояния выводится Ожидание захвата таблицы Журналы для начала транзакции. Так вот, если оператор поставил документ на проведение и ушел курить, то в это время никто не может провести документы.
Что такое транзакция.
Вообще транзакция - это набор операций или действий, которые представляют собой, одну, неделимую операцию. Транзакция может быть либо выполнена в полном объеме, либо не выполнена вообще. Сделано это для сохранения логической целостности базы. Поясню на примере.
Чтоб было понятно отвлечемся от 1С и рассмотрим более понятный пример. Денежный банковский перевод. Сам перевод часто называют транзакцией. Сам я не знаю как работают банковские переводы, но подозреваю, что примерно состоят они из нескольких операций:
1. Первый сервер отправляет перевод.
2. Второй сервер получает перевод.
3. Второй сервер отправляет первому сообщение о получении перевода
4. Первый сервер получает сообщение о том. что второй принял перевод.
Все эти 4 пункта и составляют транзакцию. Если все прошло успешно, что транзакций проведена, если какой-то из пунктов, по любым причинам не выполнен, то транзакция не выполнена. То есть деньги либо переведены, либо нет.
В 1С примерно так же. Для реализации транзакций в 1С есть несколько процедур, а именно:
НачатьТранзакцию() - начало списка операций.
ЗафиксироватьТранзакцию() — Завершение списка операций. Все что содержится в теле НачатьТранзакцию() и ЗафиксироватьТранзакцию() будет сохранено.
Отменить Транзакцию() — Не сохранит то, что написано в НачатьТранзакцию(); …. ЗафиксироватьТранзакцию();
Для чего нужна транзакция.
Применяются эти процедуры, когда надо сделать несколько действий, но при каких-то исключительных случаях необходимо «откатить» выполняемые действия. Для примера не долго думая взял код из обработки ЗакрытиеКассовойСмены:
НачатьТранзакцию();
Если НЕ((ВыбКасса.РежимККМ = Перечисление.РежимыККМ.ФР) и (СписокЧеков.РазмерСписка() = 0)) Тогда
// Теперь создадим новый документ ОтчетККМ
ДокОКС = СоздатьОбъект(«Документ.ОтчетККМ»);
ДокОКС.Новый();
глЗаполнитьШапку(ДокОКС, 0);
ОткрыватьФорму = 1;
ДокОКС.ДатаДок = ВыбДата;
ДокОКС.Фирма = ВыбФирма;
ДокОКС.Склад = ВыбСклад;
ДокОКС.Валюта = глРубли;
Бла — бла — бла
Попытка
ДокЧеки.СделатьНеПроведенным();
Исключение
ОтменитьТранзакцию();
Предупреждение(ОписаниеОшибки());
Возврат;
КонецПопытки;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Ббла — бла — бла
ЗафиксироватьТранзакцию();
Бла-бла-бла
Ну вот как-то так )))
ЗЫ. Крайне не рекомендуется внетри тела транзакции применять операторы типа Вопрос(), Предупреждение(), которые ожидают решения оператора.
К записи "Что такое транзакция и для чего она нужна." оставлено 6 коммент.
Оставить комментарий
Приветствую на моем блоге. Надеюсь вы найдете здесь много интересного и полезногоСохраните меня в социальных сервисах
Видео
Комментарии
- OPS: Можно смотреть как SD, так и HD каналы. Его полное название Dr.HD F-15. Цены везде разные. Заказать можно по...
- сергей: а вообще где F-15 продают ,заказывать нужно? сколько бабосов стоит? можно ли hd каналы смотреть?
- Серж: Это та, которая орёт в рупор: «на посадку, автобус следует по маршруту и т.д.»? ))
- Леха: Пардон! Прошивка отстой сплошные глюки, придется переходить на старую!!!
- Леха: Прошивка отстой сплошные глюки, придется перодить на старую!!!
Страницы блога
Статистика
Ссылки
- Блог java программиста
- Здесь можно скачать софт
- Справочник програмиста 1С Выписываю основные приемы программирования

как ужасно все-такм читать код 1С — наверное буржуям также жутко читать код на «английских» языках программирования.
зы, насчет примера. а если сбой произошел на 4ом этапе или позже, то как второй сервер откатит транзакцию? он же средства уже принял и (например) зачислил на счет клиента.
Ответить
Ничего, когда привыкнешь к коду 1С — все вполне понятно, тем более все ра русском))) Кстати есть и латинский вариант встроенного языка 1С, например Если Тогда Иначе КонецЕсли — If Then Else EndIf.
Как то видел как на 1с пишет программист Delphi. именно по английски — ему так понятнее.
Насчет примера — я не знаю как точно работает банковская система — я прост опредположил. Наверняка там не 4 пункта, а больше и все возможные варианты отрабатываются…
Ответить
Здравствуйте!у нас заблокировался контакт,и для того чтоб его разблокировать нужно было положить 100 рублей на определённый номер и ввести код транзакции.Подскажите пожалуйста где он находится,и не обман ли это! Заранее огромное спасибо!
Ответить
for: батон2й сервер ожидает ответа от 1го о том что тот ответ принял и только тогда закрывает операцию успешно.А насчет УЖАСНОГО кода. «БУРЖУИ» всегда читали код на английском и они видимо УЖАСНО горды за то что весь мир читает код на их языке. Ну и ты видимо вместе с ними.
Ответить
Евгений, давайте разберемся поподробнее. «2й сервер ожидает ответа от 1го о том что тот ответ принял и только тогда закрывает операцию успешно» — т.е. это оповещение об успешно принятом оповещении. а если 1й отправил ответ успешно, закрыл транзакцию, а 2й сервер не получил этого второго оповещения — получится что 1й сервер закроет транзакцию, а второй нет. нарушаются как минимум 2 требования ACID. Сколько бы оповещений не было один сервер может отправить ответ успешно, а другой может его не получить. Насчет буржуев. мне действительно неудобно читать код на русском, код на англ представляется мне намного читабельнее. общался со многими буржуями, не заметил никакой гордости у них. да и не понимаю чем тут гордиться можно.
Ответить
Да что вы привязались к этому переводу. Написали же что это пример. Так сказать объяснение на пальцах. »Сам я не знаю как работают банковские переводы, но подозреваю, что примерно состоят они из нескольких операций:»
Ответить