Удаление объектов в 1С при работе через COM (С#) #774574


#0 by Tezcatlipoka
Всем добрый день. Прошу вашего совета. Работаю с 1С через COM-соединение из внешнего приложения на C#. При попытке пометить на удаление элемент справочника "Файлы" вылетает с ошибкой "адресат вызова создал исключение" т.е. исключение возникает в самой 1С. (и через реквизит "ПометкаУдаления" и через функцию "УстановитьПометкуУдаления"). Причем такое поведение наблюдается только у данного справочника. Элементы других справочников без ошибок метятся на удаление. В конфигурацию никаких изменений не вносилось. Подключение к 1С идет через учетную запись администратора с полными правами. Из самой 1С файл метится на удаление без проблем. Так же, писал внешнюю обработку - файл так же метится без проблем. Пока приходится просто удалять файлы. Но это оставляет "битые ссылки" что может быть потенциально опасно для базы. Подскажите пожалуйста, в чем может быть проблема или хотя бы в каком направлении искать. Заранее, спасибо. Работаю в: 1С Предприятие 8.3.6.2421 Документооборот 8 КОРП 2.0.15.6
#1 by Prog111
Случайно не предопределенные элементы справочника?
#2 by varyag
а у справочника в правах данного пользователя удаление есть?
#3 by Tezcatlipoka
В данном случае я пытаюсь работать с элементами справочника "Файлы". Права есть - руками в настройках прав выставил полный доступ.
#4 by Tezcatlipoka
Файлы с которыми я работаю я сам же и создаю через общий модуль РаботаСФайламиВызовСервера.СоздатьФайлНаОсновеФайлаНаДиске
#5 by catena
Может в справочнике что-то обрабатывается ПриЗаписи, ПередЗаписью?
#6 by Tezcatlipoka
Как я уже говорил выше - в конфигурацию изменений не вносилось и из самой 1С и внешних обработок объекты метятся. Так что там все стандартно.
#7 by Prog111
Стандартно-то стандартно... Но возможно, что изначально прописано, что из формы помечаться может, а по соединению - какие-то условия не срабатывают. И покажи код, которым соединяешься.
#8 by catena
Область действия кода могла быть не рассчитана на внешнее подключение.
#9 by Tezcatlipoka
Подключался двумя способами.
#10 by Tezcatlipoka
static void OldConnect         {             try
#11 by Tezcatlipoka
static void NewConnect         {         }         public static object GetObjectProperty(object v83, object refObject, string propertyName)         }         public static  object InvokeObjectMethod(object v83, object refObject, string methodName, object[] parameters)         {         }         public static object SetObjectProperty(object v83, object refObject, string propertyName, object[] parameters)         }
#12 by Tezcatlipoka
Как можно видеть, пробовал работать с Внутренними документами и файлами. Внутренние документы без проблем метятся. Так же пробовал и с другими объектами справочников - они тоже метятся.
#13 by Prog111
Почему 2 последние строчки закомментированы?
#14 by arsik
Посмотри что пишется в журнале регистрации 1С.
#15 by Провинциальный 1сник
А если попробовать то же самое, но не из дотнета, а из другой базы 1с?
#16 by Tezcatlipoka
Потому что пробовал двумя способами пометить. Первый - через УстановитьПометкуУдаления(true), а второй - через реквизит ПометкаУдаления и непосредственную запись объекта. В обоих случаях валится в ошибку с NullReferenceExeption. Журнал не смотрел. Сейчас взгляну.
#17 by Tezcatlipoka
Попробовать из другой базы, конечно, можно. Но это ничего не даст. Речь о взаимодействии с 1С из внешнего приложения написанного на C#, так что от дотнета я все равно никуда не смогу уйти.
#18 by Провинциальный 1сник
Как минимум, это даст более четкую локализацию проблемы
#19 by Tezcatlipoka
В журнале регистрации при ошибках пометки на удаление для файла появляется запись следующего содержания: Событие: Данные.Изменение Статус транзакции:Отменена Метаданные: Регистр сведений. Дескрипторы доступа для файлов.
#20 by hhhh
значит прав нет на этот регистр сведений
#21 by Tezcatlipoka
Я работаю под админом с полными правами. Сейчас специально проверил - на этот регистр права на чтение, изменение, просмотр, редактирование и управление итогами.
#22 by Nuobu
Еще вариант: срабатывает подписка на событие, текст процедуры которой находится в модуле без галки "Внешнее подключение".
#23 by Tezcatlipoka
Благодарю. О варианте с подпиской не думал. Надо проверить.
#24 by Tezcatlipoka
Проблема решена. В большинстве процедур и функций работы с файлами встречается вот такой кусочек кода который, собственно, и не давал помечать файл из COM: Если Источник.ОбменДанными.Загрузка Тогда D моем случае всегда у полученного объекта файла значение ОбменДанными.Загрузка было равно Ложь. Проблема решилась тривиально: Всё работает, пометка ставится и снимается корректно. Всем огромное спасибо за советы и оперативную помощь. )
#25 by hhhh
Источник.ОбменДанными.Загрузка должно быть Ложь. Вы не то нашли.
#26 by КМ155
он то нашёл
#27 by Torquader
ОбменДанными.Загрузка=ИСТИНА переключает 1С в режим обязательной записи, то есть выключаются любые проверки корректности и т.п. Конечно, таким образом, пометка удаления поставится, но, вполне вероятно, что в регистре "Регистр сведений. Дескрипторы доступа для файлов" были какие-то данные помечаемого файла, которые не позволяли это делать. И вот - данные остались, а файл - пометился. P.S. использование ОбменДанными.Загрузка даже выключает контроль уникальности кодов в справочнике - так что нужно быть очень аккуратным.
#28 by hhhh
он теперь везде будет лепить эту свою находку: Источник.ОбменДанными.Загрузка = Истина; и у него и в проведении будет фигня и половина подписок не будет выполняться, потому что в подписках везде эта проверка.
#29 by Torquader
При установке ОбменДанными.Загрузка=ИСТИНА запись с проведением обычно не выполняется, но можно у документа поставить "Проведен=ИСТИНА" и просто записать, а потом удивляться - что это у нас вместо учёта в базе слово из четырёх букв.
#30 by Tezcatlipoka
Уважаемый hhhh - возможно, я не прав, используя Источник.ОбменДанными.Загрузка = Истина; Но предложите тогда верное решение данной проблемы, если мое не верно. У всех получаемых мной файлов всегда Источник.ОбменДанными.Загрузка равно Ложь. И при таком значении данного атрибута функция записи файла для установки пометки удаления просто не сработает.
#31 by Serginio1
void УничтожитьОбъект(object Объект)         {         }
#32 by hhhh
надо искать ошибку. Режим загрузка = Истина  это выключение обычного режима работы программы. То есть лучше просто тогда непосредственно удалить - это будет меньше вреда для базы.
#33 by DES
а разве при работе через ком нельзя пройти момент удаления под отладчиком ?
#34 by VensHak
также и я могу ошибаться, но проверьте из режима предприятия этот справочник. У элементов справочника есть реквизит "редактирует" где хранится имя пользователя, который не закрыл редактирование файла. И если реквизит не пустой, то пометить на удаление этот элемент нельзя.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С