Бывают ситуации когда 1С с строке состояния пишет Ожидание захвата таблицы «Журналы» для начала транзакции.

Такое происходит в следствии того, что 1С не может проводить одновременно 2 документа. Сделано это специально, для того, чтобы исключить некоторые неприятные ситуации, например, чтобы 2 менеджера не продали один и тот же товар (последний) одновременно. Когда 1ый менеджер проводит документ( продает товар) второй ожидает, пока документ проведется и у него высвечивается в строке состояния сообщение «Ожидание захвата таблицы Журналы для начала транзакции«. Если интервал ожидания превышен, то выскакивает ошибка:

При выполнении транзакции произошла ошибка!Таблица: 1SJOURN
Ошибка обращения к данным при транзакции, выполняемой другим пользователем.
Повторить попытку выполнить транзакцию?

Если это происходит не часто, то в принципе ничего страшного можно работать, а вот если такое состояние возникает часто, то с этим надо что-то делать.

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

Почему возникает такая ошибка и что можно сделать.

1. База слишком большая и время проведения документа велико.

2. Сервер, на котором лежит база 1С медленный (тормозной), соответсвенно документы проводятся долго.

3. В базе проводится очень много документов (например начиная от нескольких сотен в день).

4. В базе 1С работает много пользователей, которые проводят много документов.
Как с этим бороться?

Я для себя нашел такой способ, который успешно внедрил в нескольких организациях.

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

Так вот, при проведении Реализации 1С рассчитывает достаточно много различных данных, чтобы разрешить или запретить проводить документ и тому подобное.

А потом из Обработки проведения вызывается процедура ПроведениеПоРегистрам, внутри которой происходит формирование необходимых данных для проведения по регистрам остатков, продаж, партий.

transaction1 Оптимизация проведения (Ожидание захвата таблицы Журналы для начала транзакции)

На самом деле для быстрого проведения и учета нам совсем не обязательно проводить документ по ВСЕМ регистрам. Вполне достаточно списать остатки со склада и увеличить долг контрагента.

Для Этого я написал в модуле документа еще одну процедуру, которая является копией процедуры проведениеПоРегистрам, но с вырезанным проведением по партиям.

Процедура ПроведениеПоРегистрам2()
Для Номер = 1 По Метаданные.Регистр() Цикл
ОчиститьДвижения(«Регистр.»+Метаданные.Регистр(Номер).Идентификатор);
КонецЦикла;
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
Регистр.ОстаткиТМЦ.Фирма = Фирма;
Регистр.ОстаткиТМЦ.Номенклатура = Номенклатура;
Регистр.ОстаткиТМЦ.Склад = Склад;
Регистр.ОстаткиТМЦ.ЦенаПрод = Цена;
Регистр.ОстаткиТМЦ.Количество = Количество*Коэффициент;
Регистр.ОстаткиТМЦ.ДвижениеРасходВыполнить();
Регистр.Продажи.Номенклатура = Номенклатура;
Регистр.Продажи.Покупатель = Контрагент;
Регистр.Продажи.Фирма = Фирма;
Регистр.Продажи.ПродСтоимость = Сумма;
Регистр.Продажи.Количество = Количество*Коэффициент;
Регистр.Продажи.ДвижениеВыполнить();
КонецЦикла;
Регистр.Покупатели.Фирма = Фирма;
Регистр.Покупатели.Договор = Договор;
Регистр.Покупатели.СтавкаНП = СтавкаНП;
Регистр.Покупатели.СуммаВал = СуммаВзаиморасчетов;
Регистр.Покупатели.СуммаУпр = СуммаВзаиморасчетов;
Регистр.Покупатели.СуммаРуб = СуммаВзаиморасчетов;
Регистр.Покупатели.КодОперации = КодОперации;
Регистр.Покупатели.ДвижениеПриходВыполнить();
КонецПроцедуры

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

Документы стали проводиться очень быстро. Операторы-менеджеры очень довольны.

Но у нас встает вопрос по расчету себестоимости, в котором непосредственное участие принимают партии, те самые, по которым мы не проводим документ.

Решение очень простое. На самом деле себестоимость(прибыль) нам не надо знать постоянно и оперативно. Точно так же как и без восстановленной Главной Последовательности 1С правильно его не рассчитает. Идля получения этих данных в любов случае надо перепроводить базу 1С. Например ночью.

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

Для этого в модуле документа дописываем проверку на имя пользователя

Если глПользователь.Наименование = «Админ» Тогда

ПроведениеПоРегистрам();

Иначе

ПроведениеПоРегистрам2();

КонецЕсли;

В итоге получаем очень быстрое проведение для операторов и правильное проведение при восстановлении ГП.

Тэги.

Рубрики: , Вопросы и ответы


Комментарии

4 комментариев в “Оптимизация проведения (Ожидание захвата таблицы Журналы для начала транзакции)”

  1. 4
    admin пишет:

    Поправил

  2. 3
    Владимир пишет:

    Не открывается 2 – я страница

  3. 2
    admin пишет:

    Ну а что, делать, если в 7ке этого нет, пользователей много. Постоянно висит «Ожидание захвата транзакции». Скорость проведения увеличивается в разы (десятки раз).
    Более того, можно пойти дальще и не производить расчет регистров при каждом проведении документа. Зачем? Регистры расчитаны и остатки хранятся на ТА.

  4. 1
    Анатоль пишет:

    Интересное решение, которое с успехом применено в 1С 8.х версиях – а именно разделение на Оперативное и Неоперативное проведение

Выскажи свое мнение