Имя: Пароль:
1C
 
Как программно из 1С (v8.0) удалить документ (проведя его по всем регистрам
0 kolyakiev
 
27.09.07
18:05
Требуется удалить програмно в 1С документ, допустим из списка Приходных документов, который сейчас выделен в этом списке. При удалении нужно учесть изменение ригистров, по которым этот документ проведен.
1 zbv
 
27.09.07
18:06
и в чем проблема?
2 Kerk
 
27.09.07
18:08
УстановитьПометкуУдаления() Вроде должно все ОК быть...
3 sapphire
 
27.09.07
18:13
Непонятно, что за список - на форме, или форма списка, ДокументСписок...
Короче, надо получить объект документа, у него вызвать Записать(РежимЗаписиДокумента.ОтменаПроведения); // если стоит галка автоматически удалять движения то движения удаляться.
Проверить, имеет ли документ движения, т.е. Элементы фиксированной коллекции "Движения" данного документа надо очистить.
Вызвать метод Удалить();
4 kolyakiev
 
27.09.07
18:18
Список - ДокументСписок.
Удалить нужно текущий (отмеченный мышью) документ в этом списке.
Если возможно - предложите кусок кода.
5 Михей
 
27.09.07
18:21
Вообще, при установке пометки на удаления движения чистятся автоматом (если это конечно в конфигуратеоре предусмотрено)
6 a_alenkin
 
27.09.07
18:22
тебе уже предложили
7 sapphire
 
27.09.07
18:22
(5) уже писали
8 sapphire
 
27.09.07
18:25
(4)
Про код... вопрос в стиле дсшнл. Увольте. Пишите сами.
Посмотрите что находится в ТекущиеДанные...
9 zbv
 
27.09.07
18:28
можно разрешить удаление дока
10 kolyakiev
 
28.09.07
10:57
Пример кода:

Процедура УдалитьТекущий(Кнопка)
   ТС=ЭлементыФормы.Список.ТекущиеДанные;
   ТД=Документы.РеализацияТоваровУслуг.НайтиПоНомеру(ТС.Номер).ПолучитьОбъект();
   ТД.УстановитьПометкуУдаление(Истина);
   
   Сообщить(ТС.Номер);
   
КонецПроцедуры

Выводит такую ошибку:
ТоваровУслуг.Форма.ФормаСписка(41)}: Ошибка при вызове метода контекста (ПолучитьОбъект): Элемент не выбран!
   ТД=Документы.РеализацияТоваровУслуг.НайтиПоНомеру(ТС.Номер).ПолучитьОбъект();

Номер документа выводится правильный.
11 Salvador Limones
 
28.09.07
10:59
Отладчик и СП спёрли?
12 Salvador Limones
 
28.09.07
11:00
+(11) Зачем вообще искать по номеру, когда через ТекущиеДанные можно сделать?
13 kolyakiev
 
28.09.07
11:08
Как?
14 zbv
 
28.09.07
11:15
(10) а почему просто [Del] не нажать?
15 zbv
 
28.09.07
11:16
+(14) а сорри... забыл что свой список.
16 zbv
 
28.09.07
11:17
(13) в списке есть ссылка на объект?
17 kolyakiev
 
28.09.07
11:23
Этот список представляет Список документов.
Как получить ссылку на объект из этого списка?
18 zbv
 
28.09.07
11:25
(17)

ТС=ЭлементыФормы.Список.ТекущиеДанные;
ТекСсылка = ТС.<Колонка содержащая ссылку на объект>

Если конечно колонка такая имеется...
19 kolyakiev
 
28.09.07
11:29
(18)
Нет колонки такой нет :(
20 zbv
 
28.09.07
11:35
(19) а что есть? перечисли колонки
21 kolyakiev
 
28.09.07
11:42
Присутствуют колонки:
ДАТА
НОМЕР
ВИДОПЕРАЦИИ
ВИДПЕРЕДАЧИ
СУММАДОКУМЕНТА
КОНТРАГЕНТ
22 kolyakiev
 
28.09.07
11:43
Я просто думаю на основе НОМЕРа (выбранного документа в списке) пометить это документ на удаление.
23 zbv
 
28.09.07
11:46
(21) Тады так:

   ТС=ЭлементыФормы.Список.ТекущиеДанные;

   ТД=Документы.РеализацияТоваровУслуг.НайтиПоНомеру(ТС.Номер, ТС.Дата);
   Если ТД.Пустая() Тогда
      Сообщить("Документ по номеру <такому то> не найден");
      возврат;
   КонецЕсли;
   ТД.ПолучитьОбъект();
   ТД.УстановитьПометкуУдаление(Истина);
24 kolyakiev
 
28.09.07
11:56
Заработало!!!
Спасибо Огромное.
Только пришлось последнюю строчку переделать, ибо ошибка возникала.

   ТС=ЭлементыФормы.Список.ТекущиеДанные;
   ТД=Документы.РеализацияТоваровУслуг.НайтиПоНомеру(ТС.Номер, ТС.Дата);
   Если ТД.Пустая() Тогда
      Сообщить("Документ по номеру <такому то> не найден");
      возврат;
   КонецЕсли;
   ТД.ПолучитьОбъект().УстановитьПометкуУдаления(Истина);
   //ТД.УстановитьПометкуУдаления(Истина);
25 zbv
 
28.09.07
11:58
(24) а, ну да... )

ТДОбъект = ТД.ПолучитьОбъект();
ТДОбъект.УстановитьПометкуУдаление(Истина);
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший