|
Следим за ИзмененияОбъектов | ☑ | ||
---|---|---|---|---|
0
Прохожий
02.10.12
✎
10:24
|
Есть такой регистр сведений - ИзмененияОбъектов. И он, по моему, хуже чес 1Sjornal в семерке.
Извиняюсь за код, но это надо видеть: ... Процедура РегистрацияИзмененийСделанныхВДокументеПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт ТекущийПользователь = ОпределитьТекущегоПользователя(); Если РольДоступна("ПросмотрОтчетов") Тогда Возврат; КонецЕсли; Если Отказ Тогда Возврат; КонецЕсли; НаборЗаписей = РегистрыСведений.ИзмененияОбъектов.СоздатьНаборЗаписей(); Если Документы[Источник.Метаданные().Имя].ПустаяСсылка() = Источник.Ссылка Тогда НовСсылка = Документы[Источник.Метаданные().Имя].ПолучитьСсылку(); Источник.УстановитьСсылкуНового(НовСсылка); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.СсылкаНаОбъект = НовСсылка; НоваяЗапись.Период = ТекущаяДата(); НоваяЗапись.Ответственный = ТекущийПользователь; НоваяЗапись.Компьютер = ИмяКомпьютера(); НоваяЗапись.СостояниеОбъекта = "Добавление"; ИначеЕсли Источник.ПометкаУдаления <> Источник.Ссылка.ПометкаУдаления Тогда Если Источник.ПометкаУдаления Тогда НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.СсылкаНаОбъект = Источник.Ссылка; НоваяЗапись.Период = ТекущаяДата(); НоваяЗапись.Ответственный = ТекущийПользователь; НоваяЗапись.Компьютер = ИмяКомпьютера(); НоваяЗапись.СостояниеОбъекта = "Пометка на удаление"; Иначе НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.СсылкаНаОбъект = Источник.Ссылка; НоваяЗапись.Период = ТекущаяДата(); НоваяЗапись.Ответственный = ТекущийПользователь; НоваяЗапись.Компьютер = ИмяКомпьютера(); НоваяЗапись.СостояниеОбъекта = "Снятие пометки на удаление"; КонецЕсли; Иначе Если Источник.Номер <> Источник.Ссылка.Номер Тогда НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.СсылкаНаОбъект = Источник.Ссылка; НоваяЗапись.Период = ТекущаяДата(); НоваяЗапись.Компьютер = ИмяКомпьютера(); НоваяЗапись.Ответственный = ТекущийПользователь; НоваяЗапись.Реквизит = "Номер"; НоваяЗапись.БывшЗначение = Источник.Ссылка.Номер; НоваяЗапись.СтавшЗначение = Источник.Номер; НоваяЗапись.СостояниеОбъекта = РежимЗаписи; КонецЕсли; Если Источник.Дата <> Источник.Ссылка.Дата Тогда НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.СсылкаНаОбъект = Источник.Ссылка; НоваяЗапись.Период = ТекущаяДата(); НоваяЗапись.Компьютер = ИмяКомпьютера(); НоваяЗапись.Ответственный = ТекущийПользователь; НоваяЗапись.Реквизит = "Дата"; НоваяЗапись.БывшЗначение = Источник.Ссылка.Дата; НоваяЗапись.СтавшЗначение = Источник.Дата; НоваяЗапись.СостояниеОбъекта = РежимЗаписи; КонецЕсли; Для каждого Реквизит Из Источник.Метаданные().Реквизиты Цикл Если Источник[Реквизит.Имя] <> Источник.Ссылка[Реквизит.Имя] Тогда НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.СсылкаНаОбъект = Источник.Ссылка; НоваяЗапись.Период = ТекущаяДата(); НоваяЗапись.Компьютер = ИмяКомпьютера(); НоваяЗапись.Ответственный = ТекущийПользователь; НоваяЗапись.Реквизит = Реквизит.Имя; НоваяЗапись.БывшЗначение = Источник.Ссылка[Реквизит.Имя]; НоваяЗапись.СтавшЗначение = Источник[Реквизит.Имя]; НоваяЗапись.СостояниеОбъекта = РежимЗаписи; КонецЕсли; КонецЦикла; Если НоваяЗапись = Неопределено И РежимЗаписи <> РежимЗаписиДокумента.Запись Тогда НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.СсылкаНаОбъект = Источник.Ссылка; НоваяЗапись.Период = ТекущаяДата(); НоваяЗапись.Компьютер = ИмяКомпьютера(); НоваяЗапись.Ответственный = ТекущийПользователь; НоваяЗапись.СостояниеОбъекта = РежимЗаписи; КонецЕсли; Для каждого Таблица Из Источник.Метаданные().ТабличныеЧасти Цикл Индекс = 0; Пока Истина Цикл Если Источник[Таблица.Имя].Количество() >= Индекс + 1 Или Источник.Ссылка[Таблица.Имя].Количество() >= Индекс + 1 Тогда Для каждого Реквизит Из Таблица.Реквизиты Цикл Если Источник.Ссылка[Таблица.Имя].Количество() >= Индекс + 1 И Источник[Таблица.Имя].Количество() >= Индекс + 1 Тогда Если Источник[Таблица.Имя][Индекс][Реквизит.Имя] <> Источник.Ссылка[Таблица.Имя][Индекс][Реквизит.Имя] Тогда НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.СсылкаНаОбъект = Источник.Ссылка; НоваяЗапись.Период = ТекущаяДата(); НоваяЗапись.Компьютер = ИмяКомпьютера(); НоваяЗапись.Ответственный = ТекущийПользователь; НоваяЗапись.Таблица = Таблица.Имя; НоваяЗапись.НомераСтрок = "Строка " + (Индекс + 1); НоваяЗапись.Реквизит = Реквизит.Имя; НоваяЗапись.БывшЗначение = Источник.Ссылка[Таблица.Имя][Индекс][Реквизит.Имя]; НоваяЗапись.СтавшЗначение = Источник[Таблица.Имя][Индекс][Реквизит.Имя]; НоваяЗапись.СостояниеОбъекта = "Изменение строки"; КонецЕсли; ИначеЕсли Источник.Ссылка[Таблица.Имя].Количество() >= Индекс + 1 Тогда Если ЗначениеЗаполнено(Источник.Ссылка[Таблица.Имя][Индекс][Реквизит.Имя]) Тогда НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.СсылкаНаОбъект = Источник.Ссылка; НоваяЗапись.Период = ТекущаяДата(); НоваяЗапись.Компьютер = ИмяКомпьютера(); НоваяЗапись.Ответственный = ТекущийПользователь; НоваяЗапись.Таблица = Таблица.Имя; НоваяЗапись.НомераСтрок = "Строка " + (Индекс + 1); НоваяЗапись.Реквизит = Реквизит.Имя; НоваяЗапись.БывшЗначение = Источник.Ссылка[Таблица.Имя][Индекс][Реквизит.Имя]; НоваяЗапись.СостояниеОбъекта = "Удаление строки"; КонецЕсли; Иначе Если ЗначениеЗаполнено(Источник[Таблица.Имя][Индекс][Реквизит.Имя]) Тогда НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.СсылкаНаОбъект = Источник.Ссылка; НоваяЗапись.Период = ТекущаяДата(); НоваяЗапись.Компьютер = ИмяКомпьютера(); НоваяЗапись.Ответственный = ТекущийПользователь; НоваяЗапись.Таблица = Таблица.Имя; НоваяЗапись.НомераСтрок = "Строка " + (Индекс + 1); НоваяЗапись.Реквизит = Реквизит.Имя; НоваяЗапись.СтавшЗначение = Источник[Таблица.Имя][Индекс][Реквизит.Имя]; НоваяЗапись.СостояниеОбъекта = "Добавление строки"; КонецЕсли; КонецЕсли; КонецЦикла; Иначе Прервать; КонецЕсли; Индекс = Индекс + 1; КонецЦикла; КонецЦикла; КонецЕсли; НаборЗаписей.Записать(Ложь); КонецПроцедуры Процедура РегистрацияИзмененийСделанныхВСправочникеПередЗаписью(Источник, Отказ) Экспорт ТекущийПользователь = ОпределитьТекущегоПользователя(); Если РольДоступна("ПросмотрОтчетов") Тогда Возврат; КонецЕсли; Если Отказ Тогда Возврат; КонецЕсли; НаборЗаписей = РегистрыСведений.ИзмененияОбъектов.СоздатьНаборЗаписей(); Если Справочники[Источник.Метаданные().Имя].ПустаяСсылка() = Источник.Ссылка Тогда НовСсылка = Справочники[Источник.Метаданные().Имя].ПолучитьСсылку(); Источник.УстановитьСсылкуНового(НовСсылка); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.СсылкаНаОбъект = НовСсылка; НоваяЗапись.Период = ТекущаяДата(); НоваяЗапись.Ответственный = ТекущийПользователь; НоваяЗапись.Компьютер = ИмяКомпьютера(); НоваяЗапись.СостояниеОбъекта = "Добавление"; ИначеЕсли Источник.ПометкаУдаления <> Источник.Ссылка.ПометкаУдаления Тогда Если Источник.ПометкаУдаления Тогда НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.СсылкаНаОбъект = Источник.Ссылка; НоваяЗапись.Период = ТекущаяДата(); НоваяЗапись.Ответственный = ТекущийПользователь; НоваяЗапись.Компьютер = ИмяКомпьютера(); НоваяЗапись.СостояниеОбъекта = "Пометка на удаление"; Иначе НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.СсылкаНаОбъект = Источник.Ссылка; НоваяЗапись.Период = ТекущаяДата(); НоваяЗапись.Ответственный = ТекущийПользователь; НоваяЗапись.Компьютер = ИмяКомпьютера(); НоваяЗапись.СостояниеОбъекта = "Снятие пометки на удаление"; КонецЕсли; Иначе Если Источник.Код <> Источник.Ссылка.Код Тогда НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.СсылкаНаОбъект = Источник.Ссылка; НоваяЗапись.Период = ТекущаяДата(); НоваяЗапись.Компьютер = ИмяКомпьютера(); НоваяЗапись.Ответственный = ТекущийПользователь; НоваяЗапись.Реквизит = "Код"; НоваяЗапись.БывшЗначение = Источник.Ссылка.Код; НоваяЗапись.СтавшЗначение = Источник.Код; НоваяЗапись.СостояниеОбъекта = "Изменение"; КонецЕсли; Если Источник.Наименование <> Источник.Ссылка.Наименование Тогда НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.СсылкаНаОбъект = Источник.Ссылка; НоваяЗапись.Период = ТекущаяДата(); НоваяЗапись.Компьютер = ИмяКомпьютера(); НоваяЗапись.Ответственный = ТекущийПользователь; НоваяЗапись.Реквизит = "Наименование"; НоваяЗапись.БывшЗначение = Источник.Ссылка.Наименование; НоваяЗапись.СтавшЗначение = Источник.Наименование; НоваяЗапись.СостояниеОбъекта = "Изменение"; КонецЕсли; Для каждого Реквизит Из Источник.Метаданные().Реквизиты Цикл Если Источник[Реквизит.Имя] <> Источник.Ссылка[Реквизит.Имя] Тогда НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.СсылкаНаОбъект = Источник.Ссылка; НоваяЗапись.Период = ТекущаяДата(); НоваяЗапись.Компьютер = ИмяКомпьютера(); НоваяЗапись.Ответственный = ТекущийПользователь; НоваяЗапись.Реквизит = Реквизит.Имя; НоваяЗапись.БывшЗначение = Источник.Ссылка[Реквизит.Имя]; НоваяЗапись.СтавшЗначение = Источник[Реквизит.Имя]; НоваяЗапись.СостояниеОбъекта = "Изменение"; КонецЕсли; КонецЦикла; Для каждого Таблица Из Источник.Метаданные().ТабличныеЧасти Цикл Индекс = 0; Пока Истина Цикл Если Источник[Таблица.Имя].Количество() >= Индекс + 1 Или Источник.Ссылка[Таблица.Имя].Количество() >= Индекс + 1 Тогда Для каждого Реквизит Из Таблица.Реквизиты Цикл Если Источник.Ссылка[Таблица.Имя].Количество() >= Индекс + 1 И Источник[Таблица.Имя].Количество() >= Индекс + 1 Тогда Если Источник[Таблица.Имя][Индекс][Реквизит.Имя] <> Источник.Ссылка[Таблица.Имя][Индекс][Реквизит.Имя] Тогда НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.СсылкаНаОбъект = Источник.Ссылка; НоваяЗапись.Период = ТекущаяДата(); НоваяЗапись.Компьютер = ИмяКомпьютера(); НоваяЗапись.Ответственный = ТекущийПользователь; НоваяЗапись.Таблица = Таблица.Имя; НоваяЗапись.НомераСтрок = "Строка " + (Индекс + 1); НоваяЗапись.Реквизит = Реквизит.Имя; НоваяЗапись.БывшЗначение = Источник.Ссылка[Таблица.Имя][Индекс][Реквизит.Имя]; НоваяЗапись.СтавшЗначение = Источник[Таблица.Имя][Индекс][Реквизит.Имя]; НоваяЗапись.СостояниеОбъекта = "Изменение строки"; КонецЕсли; ИначеЕсли Источник.Ссылка[Таблица.Имя].Количество() >= Индекс + 1 Тогда Если ЗначениеЗаполнено(Источник.Ссылка[Таблица.Имя][Индекс][Реквизит.Имя]) Тогда НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.СсылкаНаОбъект = Источник.Ссылка; НоваяЗапись.Период = ТекущаяДата(); НоваяЗапись.Компьютер = ИмяКомпьютера(); НоваяЗапись.Ответственный = ТекущийПользователь; НоваяЗапись.Таблица = Таблица.Имя; НоваяЗапись.НомераСтрок = "Строка " + (Индекс + 1); НоваяЗапись.Реквизит = Реквизит.Имя; НоваяЗапись.БывшЗначение = Источник.Ссылка[Таблица.Имя][Индекс][Реквизит.Имя]; НоваяЗапись.СостояниеОбъекта = "Удаление строки"; КонецЕсли; Иначе Если ЗначениеЗаполнено(Источник[Таблица.Имя][Индекс][Реквизит.Имя]) Тогда НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.СсылкаНаОбъект = Источник.Ссылка; НоваяЗапись.Период = ТекущаяДата(); НоваяЗапись.Компьютер = ИмяКомпьютера(); НоваяЗапись.Ответственный = ТекущийПользователь; НоваяЗапись.Таблица = Таблица.Имя; НоваяЗапись.НомераСтрок = "Строка " + (Индекс + 1); НоваяЗапись.Реквизит = Реквизит.Имя; НоваяЗапись.СтавшЗначение = Источник[Таблица.Имя][Индекс][Реквизит.Имя]; НоваяЗапись.СостояниеОбъекта = "Добавление строки"; КонецЕсли; КонецЕсли; КонецЦикла; Иначе Прервать; КонецЕсли; Индекс = Индекс + 1; КонецЦикла; КонецЦикла; КонецЕсли; НаборЗаписей.Записать(Ложь); КонецПроцедуры |
|||
1
Прохожий
02.10.12
✎
10:25
|
И имеем
.. Тилепбергенова Мария Усеновна (12:03:20) Ошибка при выполнении обработчика - 'ПередЗаписью' по причине: {ОбщийМодуль.РегистрацияИзмененийВОбъектах.Модуль(136)}: Ошибка при вызове метода контекста (Записать) по причине: по причине: Конфликт блокировок при выполнении транзакции: Microsoft OLE DB Provider for SQL Server: Lock request time out period exceeded. HRESULT=80040E31, SQLSrvr: SQLSTATE=HYT00, state=30, Severity=10, native=1222, line=1 |
|||
2
DrShad
02.10.12
✎
10:26
|
гонишь ты все - нет такого РС
|
|||
3
Прохожий
02.10.12
✎
10:26
|
пока только заметил, мыслей своих нет.
У РС период регистрации -секунда, режим записи - независимый. Виснет намертво ибо около 50 человек... |
|||
4
Defender aka LINN
02.10.12
✎
10:27
|
И?
|
|||
5
pavelul73
02.10.12
✎
10:28
|
а отбор для записи в регистр?
|
|||
6
Прохожий
02.10.12
✎
10:28
|
(2) Такую добрую доработку кто-то сделал.
|
|||
7
Прохожий
02.10.12
✎
10:29
|
(5) Набору записей отбор установить? Быстрее будет писать?
|
|||
8
Прохожий
02.10.12
✎
10:30
|
Причем СсылкаНаОбъект даже не Ведущее...
|
|||
9
Прохожий
02.10.12
✎
10:35
|
(4) Как запись ускорить - это вопрос. Но это конкретно узкое место и оно, по моему, всё равно будет виснуть. Всё на одном регистре завязано. И документы все, и справочники все.
|
|||
10
DrShad
02.10.12
✎
10:35
|
убей его на юх и юзай версионирование
|
|||
11
Прохожий
02.10.12
✎
10:41
|
сейчас буду думать...
|
|||
12
pavelul73
02.10.12
✎
10:42
|
(7) а разве в твоем случае, сейчас этот регистр не полностью перезаписывается без отбора?
|
|||
13
Прохожий
02.10.12
✎
10:43
|
Сейчас посмотрим
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |