Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> По результатам запроса: Ошибка - Объект не может быть перепозиционирован! , Запросом получаю элементы справочника, и затем им меняю Родителя          
leonid_gun Подменю пользователя
сообщение 04.01.19, 16:41
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 20
Спасибо сказали: 0 раз
Рейтинг: 0

Платформа 7.70.027, конфа допиленная ТиС 032.
Нужно некоторые элементы справочника имеющие признак Архив перенести из корня справочника в папку Архив, специально для этого заведенную. Выборка работает, но в момент замены Родителя возникает ошибка перепозиционирования. Помогите найти косяк.

Пробовал делать эту же операцию через ВыбратьЭлементы(), она работет, но только до момента когда перенесен первый найденный элемент справочника. Далее выборка сбивается и ее нужно инить заново. Так как-то криво. поэтому решил через запрос.

Процедура ВыполнитьАрхивациюЗапросом()
Перем Архив;
Архив = "";
Спр = СоздатьОбъект("Справочник.Пациенты");
Если Спр.НайтиПоНаименованию("Архив") = 1 Тогда // проверяем наличие папки Архив, куда будем переносить архивные карточки
    Если Спр.ЭтоГруппа() = 1 Тогда
        Архив = Спр.ТекущийЭлемент(); // получаем родителя (назначаем папку архивирования)
        Сообщить("Папка для архивирована выбрана - " + Архив);
    КонецЕсли;
Иначе
    Предупреждение("Папка Архив в текущем справочнике не найдена");
    Возврат;
КонецЕсли;  
Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    //|Период с ВыбНачПериода по ВыбКонПериода;
    |Обрабатывать НеПомеченныеНаУдаление;
    |Пациенты = Справочник.Пациенты.ТекущийЭлемент;
    |Группировка Пациенты без групп;
    |Условие(Пациенты.ВАрхиве.Получить(РабочаяДата()) = Перечисление.ДаНет.Да);
    |Условие(Пациенты.ПометкаУдаления()=0);
    |"//}}ЗАПРОС
   ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;
//Если Запрос.Пациенты.НайтиПоНаименованию("Архив") = 1 Тогда
//        Если Запрос.Пациенты.ЭтоГруппа() = 1 Тогда
//        Архив = Запрос.Пациенты.ТекущийЭлемент(); // получаем родителя (назначаем папку архивирования)
//        Сообщить("Папка для архивирована выбрана - " + Архив);
//    КонецЕсли;
//Иначе
//    Предупреждение("Папка Архив в текущем справочнике не найдена");
//    Возврат;
//КонецЕсли;  
    Пока Запрос.Группировка(1) = 1 Цикл
        Если Запрос.Пациенты.ЭтоГруппа()=1 Тогда
            Продолжить;
        КонецЕсли;
        Если (Запрос.Пациенты.ПринадлежитГруппе(Архив) = 0) И (Запрос.Пациенты.ВАрхиве.Получить(РабочаяДата()) = Перечисление.ДаНет.Да ) Тогда
        Запрос.Пациенты.Родитель = Архив; // ???? здесь ошибка  - Объект не может быть перепозиционирован!      
        Запрос.Пациенты.Записать();
        Сообщить(" Карточка клиента " + Запрос.Пациенты.Наименование + " имеет пометку для  Архив. Берем и переносим....");
        КонецЕсли;
    Состояние("Идет поиск карточек клиента для Архива...");
  
КонецЦикла;
КонецПроцедуры

Naghual Подменю пользователя
сообщение 04.01.19, 16:49
Сообщение #2

Завсегдатай
****
Группа: Пользователи
Сообщений: 102
Из: Днепропетровск
Спасибо сказали: 21 раз
Рейтинг: 0

Потому-что нельзя изменять объект, полученный запросом.
Вместо строк:
Запрос.Пациенты.Родитель = Архив; 
Запрос.Пациенты.Записать();

Напишите что-то типа:
Если СпрПацыки.НайтиЭлемент(Запрос.Пациенты) = 1 Тогда
  СпрПацыки.Родитель = Архив;
  СпрПацыки.Записать();
КонецЕсли;

Ну и в начале не забудьте:
СпрПацыки = СоздатьОбъект("Справочник.Пациенты");


П.С. Писал на скору руку, за синтаксис не отвечаю )


Signature
Я желаю всем Счастья!

Спасибо сказали: leonid_gun,

leonid_gun Подменю пользователя
сообщение 04.01.19, 23:21
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 20
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Naghual @ 04.01.19, 16:49) *
Если СпрПацыки.НайтиЭлемент(Запрос.Пациенты) = 1 Тогда
  СпрПацыки.Родитель = Архив;
  СпрПацыки.Записать();
КонецЕсли;

icon_beer17.gif Внес исправления, все заработало с пол тычка. rulez.gif

mister-x Подменю пользователя
сообщение 08.01.19, 12:31
Сообщение #4

...
Иконка группы
Модератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 3477
Из: Тернопіль
Спасибо сказали: 1417 раз
Рейтинг: 0

Цитата(Naghual @ 04.01.19, 16:49) *
Потому-что нельзя изменять объект, полученный запросом.
розшифрую для автора теми. В документації 7.7 це не обговорюється, але у 8-ці це вже роз'ясено - маємо справу із посиланням на об'єкт, а НайтиЭлемент вертає об'єкт по заданному посиланню, який можна змінити.

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 29.03.24, 1:41
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!