Последнее обновление: 17 Май 2012 в 11:03
Подпишись на RSS
rss Подпишитесь на RSS, чтобы всегда быть в курсе событий.
7 июня 2011 · Вопросы и ответы

Многие друзья и клиенты обращаются не только по вопросам 1С, но и по обычным «админским» вопросам. Так что Windows переустанавливать приходится часто. Более того, часто сталкиваюсь с «горе-админами», которые при переустановке форматируют диски, копируют файлы на другие диски, теряют базы 1С превращая обычную переустановку системы в ужас для пользователя. Давайте рассмотрим на примере офисного компьютера [...]


29 ноября 2011 · Железки

Занимаюсь проектом, в котором задействовано много легендарных гаджетов Билайн М2, которые надо готовить к работе с Android — приложением. Эту статью пишу в первую очередь для себя, чтобы иметь в ней доступ «из любой точки интернета». Достоинства и недостатки Билайн М2 Билайн М2 — недорогой планшетный компьютер, который фирма ZTE производит специально для нашего сотового [...]


Метки

Метки записей
Интересные места Автомобили Windows XP Взлом 1 Оборудование Oracle пакетный запуск 1С автозапуск вирус эмулирует нажатие Win расчет ПЗД Подключить 1С к MySQL Обзоры Структура 1С Финансы СМС Вирусы Drivers Альпинизм Видео восстановить нумерацию Отношения Ошибки 1С Командная строка Юмор jaws Анализ ПДЗ office 2003 1с реестр свертка торговли Спутниковое ТВ просроченная дебиторская задолженность Бухгалтерия партии Свертка базы 1С Работа заблокирован Свертка 1С Установка Windows День жестянщика удаление документов дравер MySQL скачать XPE office 2007 Лирика программы для слепых сверка базы 1С сайт перенумарация Zver DVD взломать пароль мошенничество Скачать 1С Загрузка с компакт - диска Вопросы Система Проблемы Оптимизация Жизнь Свертка по партиям Экономика новости 1с и MySQL Сайты печать от поставщика Отчет удаляем пароли HP Pavilion dv6000 свертка Кино связь скачать конвертер office 2003-2007 Драйвера Программы для 1С вирус homachi локальная сеть через интернет Вся антивирус узнать пароль Программы сбились номера документов Добавить новую метку бесплатно Взлом 1С Методика свертки 1С Печатные формы открыть xlsx docx Пошаговая свертка вирус SMS переустановка windows Делаем LiveCD Экстремальные игры Интренет антивирусы Файлы 1С Обработки контент-провайдер Интернет свертка в картинках Отзывы редактирование DBF Новая форма счет-Фактуры ZverCD Мужчина и женщина Asus Eee Армия Деньги Игры Взлом Спорт автоматизация Драйвер ODBC скачать Фото СМС оплата уменьшить размер базы LiveCD Dr.Web перенос документов Интерент Удаление партий
24 февраля 2010

Что такое транзакция и для чего она нужна.

Автор статьи: , 24 февраля 2010 в рубрике . Метки: , . Просмотров: 5 396

Транзакции в 1С

На днях ковырялся в базе, пользователи которой жаловались на проблему «Ожидание захвата таблицы Журналы для начала транзакции«. Конечно такая проблема возникает, когда документ долго проводится. Но в моем случае в обработку проведения была дописана

logo Что такое транзакция и для чего она нужна.

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

Если глПользователь.Полномочия.ПроведениеБезПроверок = 0 Тогда
КолДнейОтсрочки = Контрагент.ОсновнойДоговор.ГлубинаКредита;
ДатаПросрочки = ДатаДок — КолДнейОтсрочки;
Просрочка = ПросроченныйДолгКлиента(Контрагент,ДатаПросрочки);
Если Просрочка > 0 Тогда
Если Вопрос(«Просроченный долг клиента «+ Просрочка + » Продолжить проведение?»,4,0) = 7 Тогда
глНеПроводить(Контекст,»Документ «»"+ глНазваниеДокументаВЖурнале(Контекст)+»"» Просрочка»);
Возврат;
КонецЕсли;
КонецЕсли;
КонецЕсли;

Авторские права на предоставленный материал принадлежат автору сайта http://extremallife.ru

Ключевой строкой здесь является:

Если Вопрос(«Просроченный долг клиента «+ Просрочка + » Продолжить проведение?»,4,0) = 7 Тогда

То есть при проведении документа на экран выскакивает вопрос и требует ответа оператора.

Дело в том, что при проведении документа блокируется доступ к записи в регистры. Делается это например для того, чтобы дважды не продать один и тот же товар (это как пример на пальцах). И пока у одного оператора висит этот вопрос никто не может провести документы, в строке состояния выводится Ожидание захвата таблицы Журналы для начала транзакции. Так вот, если оператор поставил документ на проведение и ушел курить, то в это время никто не может провести документы.

Что такое транзакция.

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

Чтоб было понятно отвлечемся от 1С и рассмотрим более понятный пример. Денежный банковский перевод. Сам перевод часто называют транзакцией. Сам я не знаю как работают банковские переводы, но подозреваю, что примерно состоят они из нескольких операций:

1. Первый сервер отправляет перевод.

2. Второй сервер получает перевод.

3. Второй сервер отправляет первому сообщение о получении перевода

4. Первый сервер получает сообщение о том. что второй принял перевод.

Все эти 4 пункта и составляют транзакцию. Если все прошло успешно, что транзакций проведена, если какой-то из пунктов, по любым причинам не выполнен, то транзакция не выполнена. То есть деньги либо переведены, либо нет.

В 1С примерно так же. Для реализации транзакций в 1С есть несколько процедур, а именно:

НачатьТранзакцию() - начало списка операций.

ЗафиксироватьТранзакцию() — Завершение списка операций. Все что содержится в теле НачатьТранзакцию() и ЗафиксироватьТранзакцию() будет сохранено.

Отменить Транзакцию() — Не сохранит то, что написано в НачатьТранзакцию(); …. ЗафиксироватьТранзакцию();

Для чего нужна транзакция.

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

НачатьТранзакцию();
Если НЕ((ВыбКасса.РежимККМ = Перечисление.РежимыККМ.ФР) и (СписокЧеков.РазмерСписка() = 0)) Тогда
// Теперь создадим новый документ ОтчетККМ
ДокОКС = СоздатьОбъект(«Документ.ОтчетККМ»);
ДокОКС.Новый();
глЗаполнитьШапку(ДокОКС, 0);
ОткрыватьФорму = 1;
ДокОКС.ДатаДок = ВыбДата;
ДокОКС.Фирма   = ВыбФирма;
ДокОКС.Склад   = ВыбСклад;
ДокОКС.Валюта  = глРубли;

Бла — бла — бла

Попытка
ДокЧеки.СделатьНеПроведенным();
Исключение
ОтменитьТранзакцию();
Предупреждение(ОписаниеОшибки());
Возврат;
КонецПопытки;
КонецЕсли;
КонецЦикла;
КонецЕсли;

Ббла — бла — бла

ЗафиксироватьТранзакцию();
Бла-бла-бла

Ну вот как-то так )))

ЗЫ. Крайне не рекомендуется внетри тела транзакции применять операторы типа Вопрос(), Предупреждение(), которые ожидают решения оператора.




К записи "Что такое транзакция и для чего она нужна." оставлено 6 коммент.

как ужасно все-такм читать код 1С — наверное буржуям также жутко читать код на «английских» языках программирования.

зы, насчет примера. а если сбой произошел на 4ом этапе или позже, то как второй сервер откатит транзакцию? он же средства уже принял и (например) зачислил на счет клиента.

Ответить

Ничего, когда привыкнешь к коду 1С — все вполне понятно, тем более все ра русском))) Кстати есть и латинский вариант встроенного языка 1С, например Если Тогда Иначе КонецЕсли — If Then Else EndIf.
Как то видел как на 1с пишет программист Delphi. именно по английски — ему так понятнее.

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

Ответить

Здравствуйте!у нас заблокировался контакт,и для того чтоб его разблокировать нужно было положить 100 рублей на определённый номер и ввести код транзакции.Подскажите пожалуйста где он находится,и не обман ли это! Заранее огромное спасибо!

Ответить

for: батон2й сервер ожидает ответа от 1го о том что тот ответ принял и только тогда закрывает операцию успешно.А насчет УЖАСНОГО кода. «БУРЖУИ» всегда читали код на английском и они видимо УЖАСНО горды за то что весь мир читает код на их языке.  Ну и ты видимо вместе с ними.

Ответить

Евгений, давайте разберемся поподробнее. «2й сервер ожидает ответа от 1го о том что тот ответ принял и только тогда закрывает операцию успешно» — т.е. это оповещение об успешно принятом оповещении. а если 1й отправил ответ успешно, закрыл транзакцию, а 2й сервер не получил этого второго оповещения — получится что 1й сервер закроет транзакцию, а второй нет. нарушаются как минимум 2 требования ACID. Сколько бы оповещений не было один сервер может отправить ответ успешно, а другой может его не получить. Насчет буржуев. мне действительно неудобно читать код на русском, код на англ представляется мне намного читабельнее. общался со многими буржуями, не заметил никакой гордости у них. да и не понимаю чем тут гордиться можно.

Ответить

Да что вы привязались к этому переводу. Написали же что это пример. Так сказать объяснение на пальцах. »Сам я не знаю как работают банковские переводы, но подозреваю, что примерно состоят они из нескольких операций:»

Ответить


Оставить комментарий

*

Блог программиста 1С. Программирование 1С
Приветствую на моем блоге. Надеюсь вы найдете здесь много интересного и полезного

Сохраните меня в социальных сервисах

Видео

Избранное видео

Комментарии

Присоединяйтесь к обсуждению
  • OPS: Можно смотреть как SD, так и HD каналы. Его полное название Dr.HD F-15. Цены везде разные. Заказать можно по...
  • сергей: а вообще где F-15 продают ,заказывать нужно? сколько бабосов стоит? можно ли hd каналы смотреть?
  • Серж: Это та, которая орёт в рупор: «на посадку, автобус следует по маршруту и т.д.»? ))
  • Леха: Пардон! Прошивка отстой сплошные глюки, придется переходить на старую!!!
  • Леха: Прошивка отстой сплошные глюки, придется перодить на старую!!!

Статистика

Ссылки

Twitter

Наш микроблог на Twitter