Имя: Пароль:
1C
1С v8
Удалить()
,
0 Vasus55
 
28.12.11
10:17
привет всем!
пытаюсь программно удалить док
тема такая запросом в общую форму выгружаю данные с документа, при нажатии кнопки нахожу этот док и удаляю

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

ниче не происходит!
где косяк????
5 Фокусник
 
28.12.11
10:25
(3) Наверное потому, что спр = Документы.ОбслуживаемыеКлиенты.ПустаяСсылка()  ?
6 Vasus55
 
28.12.11
10:26
Не Печенкин
Значение не является значением объектного типа (Организация)
7 НЕА123
 
28.12.11
10:27
>строка=ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные;
>        спр=Документы.ОбслуживаемыеКлиенты.НайтиПоРеквизиту("Контрагент",строка);

это... поясните.
8 Fish
 
28.12.11
10:27
(6) А откуда Организация нарисовалась? посмотри в отладчике, сему у тебя равно ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные
9 Не Печенкин
 
28.12.11
10:28
(6) ППЦ, я должен угадать?
10 Fish
 
28.12.11
10:28
+(8) сему = чему :))
11 Фокусник
 
28.12.11
10:30
(0)
>тема такая запросом в общую форму выгружаю данные с документа, при нажатии кнопки нахожу этот док и удаляю

запросом получи и ссылку на док, чтобы сразу по ней получать объект, а не искать заново по реквизиту.
12 Vasus55
 
28.12.11
10:31
строка=ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные.Контрагент;
       спр=Документы.ОбслуживаемыеКлиенты.НайтиПоРеквизиту("Контрагент",строка);

этой строкой я хотел по выбранному контрагенту найти док и удалить его в дальнейшем
13 Fish
 
28.12.11
10:33
(12) Так что, в отладчике не посмотреть, чему у тебя твой "спр" равен?
14 Vasus55
 
28.12.11
10:38
Fish
в отладчике уже в этой строке показывает ошибка в выражении
строка=ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные.Контрагент;
15 Ненавижу 1С
 
гуру
28.12.11
10:39
(14) ты программист или где? ну наверное нет такого поля Контрагент или текущих данных нет
16 Fish
 
28.12.11
10:39
(14) Тогда (8) :)))
17 Vasus55
 
28.12.11
10:47
в том то и дело что есть, я же их вижу)))
18 Фокусник
 
28.12.11
10:54
(17) что выдает?

строка=ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные;
Сообщить(строка);
Сообщить(ТипЗнч(строка));
19 Vasus55
 
28.12.11
10:57
Фокусник неопределено
я сам не как не пойму почему не работает
до этого столько раз так делала и спокойно прокатывало
20 Vasus55
 
28.12.11
11:01
я уже код переписывал несколько раз никак не увижу ошибку
21 Vasus55
 
28.12.11
11:01
код на другую кнопку навесил поперло!!
22 Vasus55
 
28.12.11
11:05
только док все равно не удаляется
23 Eugene_life
 
28.12.11
11:08
(22) ты не останавливайся, продолжай долбить. Будь мужиком.
24 Vasus55
 
28.12.11
11:12
Eugene_life спасибо за поддержку!
25 НЕА123
 
28.12.11
11:13
(23)+1

единственный пост Eugene_life по делу.
26 Vasus55
 
28.12.11
11:14
мне вот интересно почему в отладчике пишет ошибка в выражении а через сообщение выдает контрагента??
27 Ненавижу 1С
 
гуру
28.12.11
11:15
(26) наверное потому что клюв крепкий
28 Fish
 
28.12.11
11:17
(19) "я сам не как не пойму" и "до этого столько раз так делала" - Ты гермафродит? :)))
29 hhhh
 
28.12.11
11:18
(26) потому что ТекущиеДанные - это уже контрагент, а ТекущиеДанные.Контрагент - это уже не контрагент. Ну, надеюсь, вы меня поняли.
30 Vasus55
 
28.12.11
11:27
Fish
это у меня просто пальцы на клаве так лежат, когда быстро печатаешь почему то на букву а постоянно нажимаю
31 Fish
 
28.12.11
11:27
(30) А я уж было испугался :))))
32 Vasus55
 
28.12.11
11:29
раньше буквы местами путал, терь вот этим болею
33 cViper
 
28.12.11
11:39
ДокументМенеджер.<Имя документа> (DocumentManager.<Имя документа>)
НайтиПоРеквизиту (FindByAttribute)
Синтаксис:

НайтиПоРеквизиту(<ИмяРеквизита>, <ЗначениеРеквизита>)
Параметры:

<ИмяРеквизита> (обязательный)

Тип: Строка. Имя реквизита, как он задан в конфигураторе, по значению которого осуществляется поиск. Тип значения произвольный, кроме ХранилищеЗначения и строк произвольной длины.
<ЗначениеРеквизита> (обязательный)

Тип: Произвольный. Значение реквизита, по которому должен выполняться поиск.
Возвращаемое значение:

Тип: ДокументСсылка. Ссылка на найденный документ. Если не существует ни одного документа с требуемым значением реквизита, то будет возвращена пустая ссылка.
Описание:

Осуществляет поиск документа по реквизиту.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Примечание:

Если существует несколько документов с указанным значением реквизита, то будет найдет только один из них.
Для реквизитов типа Строка поиск осуществляется по точному соответствию.
34 cViper
 
28.12.11
11:40
ДокументСсылка.<Имя документа> (DocumentRef.<Имя документа>)
ПолучитьОбъект (GetObject)
Синтаксис:

ПолучитьОбъект()
Возвращаемое значение:

Тип: ДокументОбъект.
Описание:

Получает по ссылке объект для чтения, изменения, добавления и удаления документа.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Пример:

Объект = ВыбДокумент.ПолучитьОбъект();
35 cViper
 
28.12.11
11:40
ДокументОбъект.<Имя документа> (DocumentObject.<Имя документа>)
Свойства:

<Имя реквизита> (<Attribute name>)
<Имя табличной части> (<Tabular section name>)
ВерсияДанных (DataVersion)
Дата (Date)
Движения (RegisterRecords)
ДополнительныеСвойства (AdditionalProperties)
Номер (Number)
ОбменДанными (DataExchange)
ПометкаУдаления (DeletionMark)
ПринадлежностьПоследовательностям (BelongingToSequences)
Проведен (Posted)
Ссылка (Ref)
ЭтотОбъект (ThisObject)

Методы:

Заблокирован (IsLocked)
Заблокировать (Lock)
Записать (Write)
Заполнить (Fill)
Метаданные (Metadata)
Модифицированность (Modified)
МоментВремени (PointInTime)
ПолучитьМакет (GetTemplate)
ПолучитьСсылкуНового (GetNewObjectRef)
ПолучитьФорму (GetForm)
ПроверитьЗаполнение (FillCheck)
Прочитать (Read)
Разблокировать (Unlock)
Скопировать (Copy)
Удалить (Delete)
УстановитьВремя (SetTime)
УстановитьНовыйНомер (SetNewNumber)
УстановитьПометкуУдаления (SetDeletionMark)
УстановитьСсылкуНового (SetNewObjectRef)
ЭтоНовый (IsNew)

События:

ОбработкаЗаполнения (Filling)
ОбработкаПроведения (Posting)
ОбработкаПроверкиЗаполнения (FillCheckProcessing)
ОбработкаУдаленияПроведения (UndoPosting)
ПередЗаписью (BeforeWrite)
ПередУдалением (BeforeDelete)
ПриЗаписи (OnWrite)
ПриКопировании (OnCopy)
ПриУстановкеНовогоНомера (OnSetNewNumber)

Описание:

Предназначен для чтения, изменения, добавления и удаления документов.
Важно! У всех событий этого объекта назначены предопределенные процедуры-обработчики. Имена процедур соответствуют именам событий. Процедуры должны располагаться в модуле документа.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Данный объект может быть сериализован в/из XML. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.1/data/enterprise/current-config}. Имя типа XDTO: ДокументОбъект.<Имя документа>
Пример:

НовыйДок = Документы.ПеремещениеТоваров.СоздатьДокумент();
НовыйДок.Дата = ПолеВводаДаты;
НовыйДок.УстановитьВремя();
НовыйДок.УстановитьНовыйНомер();
// Формирование табличной части
Для Н=1 По N Цикл
   НоваяСтрока = НовыйДок.Товары.Добавить();
   НоваяСтрока.Номенклатура = СтрокаДанных.Номенклатура;
   // формируются другие реквизиты табличной части
   ...
   //
КонецЦикла;
НовыйДок.Записать();
СписокДокументов.Добавить(НовыйДок.Ссылка);


См. также:

ДокументСсылка
ДокументВыборка
36 cViper
 
28.12.11
11:40
ДокументОбъект.<Имя документа> (DocumentObject.<Имя документа>)
Удалить (Delete)
Синтаксис:

Удалить()
Описание:

Удаляет документ из базы данных.
Важно! В отличие от метода УстановитьПометкуУдаления, данный производит непосредственное удаление документа без возможности восстановления и без проверки ссылочной целостности. Использовать данный метод нужно крайне осмотрительно.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Пример:

ТекстВопроса = "Удалить документ без возможности восстановления";
Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Да Тогда
   РасходнаяНакладная.Удалить();
КонецЕсли;
37 cViper
 
28.12.11
11:43
Что за спр? кто дает такие имена переменным?

ИскомыйДокумент =Документы.ОбслуживаемыеКлиенты.НайтиПоРеквизиту("Контрагент",строка);
Если ЗначениеЗаполнено(ИскомыйДокумент ) Тогда
  УдаляемыйДокумент = ИскомыйДокумент.ПолучитьОбъект();
  УдаляемыйДокумент.Удалить();
КонецЕсли;
38 cViper
 
28.12.11
11:44
(37) При условии что в переменной строка содержится нужный контрагент.
39 cViper
 
28.12.11
11:44
+ НайтиПоРеквизиту()

Если существует несколько документов с указанным значением реквизита, то будет найден только один из них.
40 Vasus55
 
28.12.11
11:45
ТекстВопроса = "Удалить документ без возможности восстановления";
Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Да Тогда
   РасходнаяНакладная.Удалить();
КонецЕсли;

я так делал, и все равно!
41 Фокусник
 
28.12.11
11:46
(37), (39) Да вообще не нужно по реквизиту искать документ, в (0) ведь указано, что "запросом в общую форму выгружаю данные с документа", т.е. ссылка на документ уже есть, ее просто нужно взять и использовать ;)
42 cViper
 
28.12.11
11:48
(41) Да, действительно. Прочитал условия))) В любом случае ему будет полезно почитать СП.
43 Vasus55
 
28.12.11
11:50
Фокусник
просто я не знаю как с сылкой дока работать(((
44 VasjaIvanov
 
28.12.11
11:53
ПолучитьОбъект (GetObject)
Синтаксис:

ПолучитьОбъект()
Возвращаемое значение:

Тип: ДокументОбъект.

Описание:

Получает по ссылке объект для чтения, изменения, добавления и удаления документа.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Пример:

Объект = ВыбДокумент.ПолучитьОбъект();
45 Fish
 
28.12.11
11:54
(43)Жесть. СП украли?
ДокОбъект = <СсылкаНаДок>.ПолучитьОбъект();
ДокОбъект.Удалить();

П.С.Хотя у меня растет подозрение, что мы все активно помогаем человеку порушить базу :)).
ТС, а ты уверен, что на твой док нигде ссылок нету?
46 VasjaIvanov
 
28.12.11
11:54
спр = ссылка.ПолучитьОбъект();
спр.Удалить();
47 VasjaIvanov
 
28.12.11
11:55
где ссылка = переменая со значением ссылки на документ твой
48 VasjaIvanov
 
28.12.11
11:57
жесть
49 Vasus55
 
28.12.11
12:00
воще совсем запутался
50 VasjaIvanov
 
28.12.11
12:02
с чем?, ссылу на докумен получил?
51 VasjaIvanov
 
28.12.11
12:02
напиши весь кл
52 Fish
 
28.12.11
12:02
(49) Может оно тебе и не надо? :)))
53 Vasus55
 
28.12.11
12:03
а тут не влияет то что я выгружаю данные при записи справочника, а потом пытаюсь удалить данные уже в общей форме, то есть тот запрос который я выполняла уже не смогу получить???
54 ЧеловекДуши
 
28.12.11
12:04
А отладчик запускать не пробовал?
55 Vasus55
 
28.12.11
12:04
Fish П.С.Хотя у меня растет подозрение, что мы все активно помогаем человеку порушить базу :)).  ты прав
56 VasjaIvanov
 
28.12.11
12:05
(53)извини как мог подсказал, или код выкладывай или обработку, но твоими словами не понятно что там у тебя
57 ЧеловекДуши
 
28.12.11
12:06
Вот эти:

спр.ПолучитьОбъект();
спр.Удалить();

замен на

ДокОбъект = спр.ПолучитьОбъект();
ДокОбъект.Удалить();
58 NcSteel
 
28.12.11
12:06
Подскажите почему пятница началась в среду ?
59 Fish
 
28.12.11
12:08
(58) Потому что НГ близко :)))
60 VasjaIvanov
 
28.12.11
12:08
(59)+100
61 Vasus55
 
28.12.11
12:10
суть следующая:
есть общая форма на ней ТП нажимаю кнопку 1 открывается справочник контрагент заполняю поля делаю записать

процедура призаписи()
форма=ПолучитьОбщуюФорму("БазаКлиентов");
   ТекМенджер=форма.ЭлементыФормы.ПолеВыбора1.Значение;
   Запрос=Новый Запрос;
   Запрос.Текст=
   "ВЫБРАТЬ
   |    ОбслуживаемыеКлиенты.Контрагент,
   |    ОбслуживаемыеКлиентыРеквизитыКонтрагента.ОсновнойТипОрганизации,
   |    ОбслуживаемыеКлиентыРеквизитыКонтрагента.Факс,
   |    ОбслуживаемыеКлиентыРеквизитыКонтрагента.Email,
   |    ОбслуживаемыеКлиентыРеквизитыКонтрагента.Телефон,
   |    ОбслуживаемыеКлиентыРеквизитыКонтрагента.Страна,
   |    ОбслуживаемыеКлиентыРеквизитыКонтрагента.Регион,
   |    ОбслуживаемыеКлиентыРеквизитыКонтрагента.Город,
   |    ОбслуживаемыеКлиенты.Менеджер
   |ИЗ
   |    Документ.ОбслуживаемыеКлиенты.РеквизитыКонтрагента КАК ОбслуживаемыеКлиентыРеквизитыКонтрагента
   |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОбслуживаемыеКлиенты КАК ОбслуживаемыеКлиенты
   |        ПО ОбслуживаемыеКлиентыРеквизитыКонтрагента.Ссылка = ОбслуживаемыеКлиенты.Ссылка";
   //Запрос.УстановитьПараметр("Менеджер",ТекМенджер);
   Результат=Запрос.Выполнить().Выгрузить();
   форма.ЭлементыФормы.ТабличноеПоле1.Значение=Результат;
   форма.ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
   
конецпроцедуры
далее в ТП общей формы у меня эти данные выгружаются
выбираю одну из строк ТП нажимаю другую кнопку
Процедура Кнопка6Нажатие(Элемент)
строка=ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные.Контрагент;
спр=Документы.ОбслуживаемыеКлиенты.НайтиПоРеквизиту("Контрагент",строка);
//Сообщить(спр);
Если спр =    Документы.ОбслуживаемыеКлиенты.ПолучитьСсылку()
   Тогда  ДокОбъект = спр.ПолучитьОбъект();
ДокОбъект.Удалить();
КонецЕсли;

и этот док должен удалиться
62 Vasus55
 
28.12.11
12:11
доступно написала?
63 Vasus55
 
28.12.11
12:11
блин опять а добавил
64 ЧеловекДуши
 
28.12.11
12:12
(62)Теперь Да, где фото и смени пол :)
65 Vasus55
 
28.12.11
12:13
смени пол :) начинаю подумывать над этим
66 ЧеловекДуши
 
28.12.11
12:13
Это зачем? "Документы.ОбслуживаемыеКлиенты.ПолучитьСсылку()"
Какую ссылку ты хочешь получить и куда?

Научу пользоваться отладчиком, не дорого.
67 NcSteel
 
28.12.11
12:14
(61) Во первых у тебя есть "Процедуры" , но нет "КонецПроцедуры" - в это первая и пока самая ВАЖНАЯ ошибка.
68 Vasus55
 
28.12.11
12:14
это просто я от руки писал и не дописал, в коде есть все это
69 Vasus55
 
28.12.11
12:15
воще хочу получить этот док
70 Vasus55
 
28.12.11
12:15
строку которого выделил мышью в ТП
71 ЧеловекДуши
 
28.12.11
12:16
(68)Тогда и показывай код :)
Нечего писать 2-жды. Могу научить копировать и вставлять.
72 НЕА123
 
28.12.11
12:16
2 АЛЛ

процитирую себя:
единственный пост (23) Eugene_life имеющий пользу в данной ветке.
73 ЧеловекДуши
 
28.12.11
12:18
(70)Отладчик в 1С 8.х все тебе покажет, как и главное откуда получить текущее значение :)
74 NcSteel
 
28.12.11
12:19
ТекущаяСтрока = ПолучитьТекущуюСтрокуТП("ТабличноеПоле1");
НайденныйДокумент = ПолучитьДокументПоКонтрагенту(ТекущаяСтрока.Контрагент);

Если ЗначениеЗаполнено(НайденныйДокумент) Тогда  
//ДокОбъект = НайденныйДокумент.ПолучитьОбъект();
//ДокОбъект.Удалить(); - Но так делать нельзя , так как остануться движения!!!
УдалитьДокументИзБД(НайденныйДокумент);

КонецЕсли;
75 Vasus55
 
28.12.11
12:25
NcSteel
{ОбщаяФорма.БазаКлиентов.Форма(80,19)}: Процедура или функция с указанным именем не определена (ПолучитьТекущуюСтрокуТП)
 ТекущаяСтрока = <<?>>ПолучитьТекущуюСтрокуТП("ТабличноеПоле1"); (Проверка: Толстый клиент (обычное приложение))
{ОбщаяФорма.БазаКлиентов.Форма(81,21)}: Процедура или функция с указанным именем не определена (ПолучитьДокументПоКонтрагенту)
НайденныйДокумент = <<?>>ПолучитьДокументПоКонтрагенту(ТекущаяСтрока.Контрагент); (Проверка: Толстый клиент (обычное приложение))
{ОбщаяФорма.БазаКлиентов.Форма(88,1)}: Процедура или функция с указанным именем не определена (УдалитьДокументИзБД)
<<?>>УдалитьДокументИзБД(НайденныйДокумент); (Проверка: Толстый клиент (обычное приложение))
76 НЕА123
 
28.12.11
12:26
(75)
С НОВЫМ ГОДОМ!
77 VasjaIvanov
 
28.12.11
12:26
ВЫБРАТЬ
   |    ОбслуживаемыеКлиенты.Контрагент.Ссылка , // добавь
78 VasjaIvanov
 
28.12.11
12:26
ВЫБРАТЬ
  |    ОбслуживаемыеКлиенты.Контрагент.Ссылка как ссылка , // добавь
79 VasjaIvanov
 
28.12.11
12:28
алее в ТП общей формы у меня эти данные выгружаются

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

Док.Удалить();


и этот док должен удалиться
80 VasjaIvanov
 
28.12.11
12:30
типа того, еще проверку можн одобавить н пустую ссылку Если не Док = Документы.ОбслуживаемыеКлиенты.ПусатяСсылка() Тогда
81 Vasus55
 
28.12.11
12:31
VasjaIvanov
ну как тогда сделать правильно, умные люди просвитите
82 Пришел в тапках
 
28.12.11
12:32
Vasus55 а какой у тебя пол указан в паспорте?
83 Vasus55
 
28.12.11
12:32
мужик)))
84 Vasus55
 
28.12.11
12:33
я еще совсем совсем чайник!!
85 VasjaIvanov
 
28.12.11
12:33
(78),(79)
86 Vasus55
 
28.12.11
12:40
Поле объекта не обнаружено (Ссылка)
 ссылкаДОк=ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные.Ссылка;
87 Пришел в тапках
 
28.12.11
12:40
Из (19)го:
>до этого столько раз так делала и спокойно прокатывало
Делала? ))))
88 Пришел в тапках
 
28.12.11
12:42
Мужик так никогда не оговорится )))
89 Vasus55
 
28.12.11
12:45
ОбслуживаемыеКлиенты.Контрагент.Ссылка
и проблема еще в этой строке
получается только так ОбслуживаемыеКлиенты.Контрагент
90 Fish
 
28.12.11
12:48
Правильно будет: ОбслуживаемыеКлиенты.Ссылка  - это и есть ссылка на док
91 VasjaIvanov
 
28.12.11
12:49
(90)точно, скопипастил неудачно
92 VasjaIvanov
 
28.12.11
12:50
темный лес тут, пробый консоль запросов, в ней сначало запускай все, и все видно будет как и что и где получаь
93 NcSteel
 
28.12.11
12:50
Суть в том что документов по контрагенту может быть миллион )

-Он гриь не удаляется
+конечно твой не удалился , а какой не будь другой с этим контрагентом запросто.
94 Vasus55
 
28.12.11
12:54
Поле объекта не обнаружено (Ссылка)
ссылкаДОк=ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные.Ссылка;
95 VasjaIvanov
 
28.12.11
12:56
а в запросе как ссылка написал?
96 NcSteel
 
28.12.11
12:57
(77) (78) за это растрел на месте !
97 VasjaIvanov
 
28.12.11
12:57
(94) значит не такого
98 Vasus55
 
28.12.11
12:57
нет просто
ОбслуживаемыеКлиенты.Ссылка
99 VasjaIvanov
 
28.12.11
12:58
(96)нормальновсе, немного подправиьт
100 Wobland
 
28.12.11
12:58
ничего вы тут развели...
сотня!
101 Fish
 
28.12.11
12:59
(93) "+конечно твой не удалился , а какой не будь другой с этим контрагентом запросто." - прочти пост (55). Может ТС этого и хочет? :)))
102 NcSteel
 
28.12.11
13:00
(102) Тогда тоже не правильный способ .

надо прямыми запросами работать )))
103 NcSteel
 
28.12.11
13:00
(102) к (101).
104 VasjaIvanov
 
28.12.11
13:06
(100) Новый год  же