|
Задвоение движений документа (да-да, снова) | ☑ | ||
---|---|---|---|---|
0
IKSparrow
08.02.12
✎
12:54
|
Платформа 8.2.15.289
SQL: 2000 У документа установлено: Удаление движений автоматически Режим блокировки: Автоматический В модуле документа, в процедуре ОбработкаПроведения перед записью движений следующий код: // получение списка регистров, по которым существуют движения ТаблицаДвижений = ОпределитьНаличиеДвиженийПоРегистратору(ДокументОбъект.Ссылка); ТаблицаДвижений.Колонки.Добавить("НаборЗаписей"); Для Каждого СтрокаДвижения ИЗ ТаблицаДвижений Цикл // имя регистра передается как значение, полученное с помощью // функции ПолноеИмя() метаданных регистра ПозицияТочки = Найти(СтрокаДвижения.Имя, "."); ТипРегистра = Лев(СтрокаДвижения.Имя, ПозицияТочки - 1); ИмяРегистра = СокрП(Сред(СтрокаДвижения.Имя, ПозицияТочки + 1)); Если РучнаяКорректировка Тогда Набор = ДокументОбъект.Движения[ИмяРегистра]; Набор.Прочитать(); Набор.УстановитьАктивность(Ложь); Иначе ЕСли ТипРегистра = "РегистрНакопления" Тогда МетаданныеНабора = Метаданные.РегистрыНакопления[ИмяРегистра]; Набор = РегистрыНакопления[ИмяРегистра].СоздатьНаборЗаписей(); ИначеЕсли ТипРегистра = "РегистрБухгалтерии" Тогда МетаданныеНабора = Метаданные.РегистрыБухгалтерии[ИмяРегистра]; Набор = РегистрыБухгалтерии[ИмяРегистра].СоздатьНаборЗаписей(); ИначеЕсли ТипРегистра = "РегистрСведений" Тогда МетаданныеНабора = Метаданные.РегистрыСведений[ИмяРегистра]; Набор = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей(); ИначеЕсли ТипРегистра = "РегистрРасчета" Тогда МетаданныеНабора = Метаданные.РегистрыРасчета[ИмяРегистра]; Набор = РегистрыРасчета[ИмяРегистра].СоздатьНаборЗаписей(); КонецЕсли; Если НЕ ПравоДоступа("Изменение", МетаданныеНабора) Тогда // отсутствуют права на всю таблицу регистра СообщитьОбОшибке("Нарушение прав доступа", Отказ, СтрокаДвижения.Имя); Возврат; КонецЕсли; Набор.Отбор.Регистратор.Установить(ДокументОбъект.Ссылка); // набор не записывается сразу, чтобы не откатывать транзакцию, если впоследствии // выяснится, что на один из регистров не хватает прав. КонецЕсли; СтрокаДвижения.НаборЗаписей = Набор; КонецЦикла; Для Каждого СтрокаДвижения ИЗ ТаблицаДвижений Цикл Попытка СтрокаДвижения.НаборЗаписей.Записать(); Исключение // возможно «сработал» RLS или механизм даты запрета изменения СообщитьОбОшибке(ОписаниеОшибки(), Отказ, СтрокаДвижения.Имя); ВызватьИсключение "Операция не выполнена"; КонецПопытки; КонецЦикла; Если (НЕ Отказ) И (НЕ РучнаяКорректировка) Тогда Для Каждого Движение ИЗ ДокументОбъект.Движения Цикл Если Движение.Количество() > 0 Тогда Движение.Очистить(); КонецЕсли; КонецЦикла; Если НЕ ДокументОбъект.ПометкаУдаления Тогда ДокументОбъект.Записать(РежимЗаписиДокумента.Запись); КонецЕсли; КонецЕсли; И всё равно, эта сволочь дублирует движения по регистру. Вообще не понимаю. Что не так делаю? Погуглил на эту тему. Попробовал код вроде Движения.Записывать = ИСТИНА Движения.Очистить() Системе монопенисуально. Движения двоит. Снимаешь с проведения, ставишь обратно - двоит. |
|||
1
qeos
08.02.12
✎
12:58
|
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
убейся |
|||
2
IKSparrow
08.02.12
✎
13:10
|
(1) Не понял.
|
|||
3
korefana
08.02.12
✎
13:16
|
(0) занятная обработка проведения )))
еще и с рекурсивным вызовом самой себя... |
|||
4
IKSparrow
08.02.12
✎
13:19
|
(3) С какого перепугу там рекурсия?
Код взят, между прочим, из типовой. В УТ так делается, например. |
|||
5
DmitryPavlik
08.02.12
✎
13:24
|
Не любим мы все эти заморочки )
|
|||
6
IKSparrow
08.02.12
✎
13:26
|
Всё, не актуально. Решил проблему.
(5) :) Да я так и понял |
|||
7
Defender aka LINN
08.02.12
✎
13:26
|
(4) Пруф или гтфо
|
|||
8
korefana
08.02.12
✎
13:29
|
(4) ну ка расскажи куда в типовой глянуть?
где это такие безобразия? мож я чего не знаю... |
|||
9
IKSparrow
08.02.12
✎
13:32
|
Я ж написал - Управление Торговлей. Вот смотрю в версию 10.3.3.3
|
|||
10
korefana
08.02.12
✎
13:36
|
(9) нету там вызова записи документа из обработки проведения
или потычь пальцем в модуль и номер строки |
|||
11
IKSparrow
08.02.12
✎
13:40
|
Ну вот к примеру модуль документа поступление товаров услуг. Такой код аж в двух местах. В ОбработкеПровдения (прям с пятой строки) и ОбработкеУдаленияПроведения - с первой строки. И по всей конфе он раскидан.
|
|||
12
Defender aka LINN
08.02.12
✎
13:43
|
(11) Не наблюдаю там записи документа.
|
|||
13
korefana
08.02.12
✎
13:44
|
(11) там запись набора движений есть
а вот записи документа нету тс чтото попутал |
|||
14
korefana
08.02.12
✎
13:47
|
и если не секрет, как проблема то решилась?
интересно очень |
|||
15
hhhh
08.02.12
✎
14:20
|
(14) понятно как: ТС пробежался по движениям и поудалял лишнее.
|
|||
16
IKSparrow
08.02.12
✎
14:22
|
(15) Ну это, батенька, совсем изврат.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |