|   |   | 
| 
 | Задвоение движений документа (да-да, снова) | ☑ | ||
|---|---|---|---|---|
| 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) Ну это, батенька, совсем изврат.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |