Имя: Пароль:
1C
 
Удаление записи из регистра сведений
0 ДобрыйПутник
 
21.11.24
16:48
Здравствуйте, не пойму почему не удаляются запись из регистра сведений
https://imgur.com/a/PSKyYhb

Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    СостоянияОригиналовПервичныхДокументов.Владелец КАК Владелец,
    |    СостоянияОригиналовПервичныхДокументов.ПервичныйДокумент КАК ПервичныйДокумент,
    |    СостоянияОригиналовПервичныхДокументов.ОбщееСостояние КАК ОбщееСостояние,
    |    СостоянияОригиналовПервичныхДокументов.ФормаИзвне КАК ФормаИзвне,
    |    СостоянияОригиналовПервичныхДокументов.Сотрудник КАК Сотрудник
    |ИЗ
    |    РегистрСведений.СостоянияОригиналовПервичныхДокументов КАК СостоянияОригиналовПервичныхДокументов
    |ГДЕ
    |    СостоянияОригиналовПервичныхДокументов.Владелец = &Ссылка";
    
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    Если Выборка.Следующий() Тогда    
        Запись = РегистрыСведений.СостоянияОригиналовПервичныхДокументов.СоздатьМенеджерЗаписи();
        Запись.Владелец = Выборка.Владелец;
        Запись.ПервичныйДокумент = Выборка.ПервичныйДокумент;
        Запись.ОбщееСостояние = Выборка.ОбщееСостояние;
        Запись.ФормаИзвне = Выборка.ФормаИзвне;
        Запись.Сотрудник = Выборка.Сотрудник;
        Запись.Прочитать();
        Запись.Удалить();    
    Конецесли
1 Волшебник
 
21.11.24
17:00
а может удаляется?
2 ДобрыйПутник
 
21.11.24
17:02
(1) Неа(
3 Волшебник
 
21.11.24
17:03
(2) Покажите регистр
4 Волшебник
 
21.11.24
17:04
Это замените на цикл
Если Пока Выборка.Следующий() Цикл Тогда  
5 ДобрыйПутник
 
21.11.24
17:05
(4) ну в выборке все равно одно значение, потому что строго по ссылке задается
6 Волшебник
 
21.11.24
17:06
(5) Там может быть несколько записей, потому что Владелец - только одно из измерений.
7 ДобрыйПутник
 
21.11.24
17:08
8 ДобрыйПутник
 
21.11.24
17:08
(6) https://imgur.com/a/KxoBr1Q
С таким владельцем только 1 запись
9 PLUT
 
21.11.24
17:17
(5) после Прочитать() еще магическое заклинание нужно

Если Запись.Выбран() Тады

ну и после Удалить() контрольный в голову

Запись.Записать()
- это лишнее

вот пример рабочего кода
Пока Выборка.Следующий() Цикл
    МЗ = РегистрыСведений.Какой-тотамРегистр.СоздатьМенеджерЗаписи();
    МЗ.Документ = Выборка.Документ;
    МЗ.Прочитать();
    Если МЗ.Выбран() Тогда
        МЗ.Удалить();
    КонецЕсли;    
    
КонецЦикла;
10 ДобрыйПутник
 
21.11.24
17:16
(9) https://imgur.com/a/GIkHpl4
Стало хоть ругаться на что то, но поле владелец не пустое в (7) видно
11 formista2000
 
21.11.24
17:19
(10) Чё там с периодом?
12 ДобрыйПутник
 
21.11.24
17:20
(11) не совсем понял
13 ДобрыйПутник
 
21.11.24
17:20
(9) &НаСервере
Процедура УдалитьЗаписьНаСервере(Ссылка)
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    СостоянияОригиналовПервичныхДокументов.Владелец КАК Владелец,
    |    СостоянияОригиналовПервичныхДокументов.ПервичныйДокумент КАК ПервичныйДокумент,
    |    СостоянияОригиналовПервичныхДокументов.ОбщееСостояние КАК ОбщееСостояние,
    |    СостоянияОригиналовПервичныхДокументов.ФормаИзвне КАК ФормаИзвне,
    |    СостоянияОригиналовПервичныхДокументов.Сотрудник КАК Сотрудник
    |ИЗ
    |    РегистрСведений.СостоянияОригиналовПервичныхДокументов КАК СостоянияОригиналовПервичныхДокументов
    |ГДЕ
    |    СостоянияОригиналовПервичныхДокументов.Владелец = &Ссылка";
    
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    Пока Выборка.Следующий() Цикл    
        Запись = РегистрыСведений.СостоянияОригиналовПервичныхДокументов.СоздатьМенеджерЗаписи();
        Запись.Владелец = Выборка.Владелец;
        Запись.ПервичныйДокумент = Выборка.ПервичныйДокумент;
        Запись.ОбщееСостояние = Выборка.ОбщееСостояние;
        Запись.ФормаИзвне = Выборка.ФормаИзвне;
        Запись.Сотрудник = Выборка.Сотрудник;
        Запись.Прочитать();
        Если Запись.Выбран() Тогда
            Запись.Удалить();
        КонецЕсли;
        //Запись.Записать();    
    КонецЦикла;
КонецПроцедуры;

Щас код выглядит так, но по прежнему что то делает, но запись не удаляет
14 PLUT
 
21.11.24
17:24
(13) дабавь после Запись.Удалить() магическое заклинание

Сообщить("Hello, World!");

может до удаления дела не доходит?
15 ДобрыйПутник
 
21.11.24
17:27
(14) Да я по отладке смотрел, до всего он доходит, https://imgur.com/a/TEG7WYM
16 ilya_i
 
21.11.24
17:32
А в модуль регистра не заходит потом, где написано Отказ = Истина
17 Eiffil123
 
21.11.24
17:34
(15) может существовать подписка или модуль менеджера, который дает отлуп на удаление записи.

Попробуй как вариант перед удалением добавить:

Запись.ОбменДанными.Загрузка = Истина;
18 formista2000
 
21.11.24
17:37
(13) Регистр периодический жеж? Разберись с периодом.
19 ДобрыйПутник
 
21.11.24
17:39
(18) https://imgur.com/a/JEjxAVt
Непереодический
20 ДобрыйПутник
 
21.11.24
17:40
21 ДобрыйПутник
 
21.11.24
17:40
(16) Не совсем понял про что
22 Волшебник
 
21.11.24
17:41
(17)(20) Это только у НаборЗаписей
23 maxab72
 
21.11.24
19:12
а не делается ли все это внутри транзакции, которая потом откатывается?
24 Волшебник
 
21.11.24
22:04
(23) или в другой базе...
25 lEvGl
 
21.11.24
23:13
(0) делайте через набор, для чего вся эта песня с запросом
набор = новый
набор.отбор.владелец.установить(ссылка)
Прочитать()
Очистить()
Записать()
26 lEvGl
 
21.11.24
23:17
(5) может же быть и не одно
27 ДобрыйПутник
 
22.11.24
10:20
(23) Неа
Если Выборка.Следующий() Тогда    
        НачатьТранзакцию();
        Попытка
            Запись = РегистрыСведений.СостоянияОригиналовПервичныхДокументов.СоздатьМенеджерЗаписи();
            Запись.Владелец = Выборка.Владелец;
            Запись.ПервичныйДокумент = Выборка.ПервичныйДокумент;
            Запись.ОбщееСостояние = Выборка.ОбщееСостояние;
            Запись.ФормаИзвне = Выборка.ФормаИзвне;
            Запись.Сотрудник = Выборка.Сотрудник;
            Запись.Прочитать();
            Если Запись.Выбран() Тогда
                Запись.Удалить();
            КонецЕсли;
            ЗафиксироватьТранзакцию();
        Исключение
            ОтменитьТранзакцию();
        КонецПопытки;
    КонецЕсли;
28 ДобрыйПутник
 
22.11.24
10:25
(25) https://imgur.com/a/nFiDc0M
Тоже не работает
29 Волшебник
 
22.11.24
10:30
(28) На скриншоте другой программный код. Причём у НаборЗаписей метод Удалить() отвечает совсем за другое.
Нужно убрать Прочитать() и вызывать Записать()
30 ДобрыйПутник
 
22.11.24
10:36
(29) https://imgur.com/a/LtlZa64
Попробовал так, тоже не работает
31 Волшебник
 
22.11.24
10:37
(30) Уберите Прочитать() и Очистить() как бесполезные строки

А вообще должно уже работать. Убедитесь, что программный код выполняется.
32 ДобрыйПутник
 
22.11.24
10:39
(31) Отладкой туда попадает, но ничего не происходит
И не понимаю как он чистить будет?
33 Волшебник
 
22.11.24
10:40
(32) Пустой набор переписывает, т.е. удаляет.
34 Волшебник
 
22.11.24
10:41
Значит удаляете одно, а смотрите другое. Или запись восстанавливается.
Короче, разбирайтесь.
Пригласите программиста.
35 lEvGl
 
22.11.24
11:06
тут чудес не бывает
(23) + транзакции бывают неявными ПередЗаписью, При, ОбработкаПроведения и тд - это все транзакция
где этот код выполняется?
потом, в модуле набора регистра, в менеджере регистра, в подписках или еще где то может быть отказ
а так да, поймите что где и как происходит, разбирайтесь, дело не в коде