Доброго вечера!
Я очень начинающая (учусь), пытаюсь разбираться сама (методом тыка и ютуба).
Прошу не судить строго)))

У меня стоит задача сделать внешнюю обработку (база учебная, не типовая).
Суть обработки: отобрать документы за определенный период.
Реализовала через запрос по кнопке Отобрать (сервер), отобразила документы в табличной части обработки + чекбоксы для выбора конкретных документов (работают).

Следующий этап - под табличной частью разместила кнопку "Перерасчет" (сервер).
При клике на нее должна (теоретически) запускаться процедура по перерасчету.
Для этого необходимо пройти по табличной части внешней обработки, отобрать документы с отмеченным чекбоксом - и пойти их перерасчитывать.
Хотела сделать это запросом - но не могу понять как обращаться к таблице внешней обработки..
По всякому ее крутила - не понимаю.
Пробовала Обращаться к табличной части внешней обработки - тоже не то, пишет

Подскажите, пожалуйста, через что писать запрос к табличной части отобранных документов? (вручную пробовала собирать запрос, но данные таблицы не обнаруживаются).
Или в чем проблема моего обращения ниже ? (пишет, что метод объекта выбрать не обнаружен:
```1c
    ОтборПользователя = Объект.ПереченьДокументов.Выбрать();
```
).

```1c
    &НаСервере
    Процедура ПоказатьНаСервере()

    //отбираем проведенные документы оказания услуг за выбранный период
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    | ОказаниеУслуги.Ссылка КАК Документ
    |ИЗ
    | Документ.ОказаниеУслуги КАК ОказаниеУслуги
    |ГДЕ
    | ОказаниеУслуги.Дата МЕЖДУ &НачалоПериода И КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ)
    | И ОказаниеУслуги.Проведен = ИСТИНА";

    Запрос.УстановитьПараметр("НачалоПериода", Объект.Период.ДатаНачала);
    Запрос.УстановитьПараметр("КонецПериода", Объект.Период.ДатаОкончания);

    РезультатЗапроса = Запрос.Выполнить();

    //ТЗ = РезультатЗапроса.Выгрузить();
    ВыборкаДокументыОказанияУслуг = РезультатЗапроса.Выбрать();

    //заполняем выбранными документами табличную часть
    Пока ВыборкаДокументыОказанияУслуг.Следующий() Цикл

    НоваяСтрока = Объект.ПереченьДокументов.Добавить();
    НоваяСтрока.Документ = ВыборкаДокументыОказанияУслуг.Документ;

    КонецЦикла;

    КонецПроцедуры

    &НаКлиенте
    Процедура Показать(Команда)
    ПоказатьНаСервере();
    КонецПроцедуры

    &НаСервере
    Процедура ПерерасчетНаСервере()

    ОтборПользователя = Объект.ПереченьДокументов.Выбрать();

    Пока ОтборПользователя.Следующий() Цикл
    Если ОтборПользователя.Использование = Истина Тогда
    Сообщить("Нашел!")
    КонецЕсли;
    КонецЦикла;

    КонецПроцедуры
```
---
Не совсем понимаю ваш вопрос
Если вы уже собрали список документов? Он у вас на форме? Форма не закрыта?
Пока форма жива и там данные, но вы их не записали? Я бы прошлась стандартным циклом для каждого МойДок из Объект, МояТЧ, цикл в форме обработки. Но клиент, сервер думаю вам не надо пояснять)))

```1c
    Для каждого Стр из Объект.ПереченьДокументов Цикл

    Если ОтборПользователя.Использование = Истина Тогда
    Сообщить("Нашел!")
    КонецЕсли;
    КонецЦикла
```

А выборка.Следующий() это больше для запросов. А так для ТЧ вроде всегда как таковой цикл был, что выше)))
---
Не совсем понимаю ваш вопрос
Если вы уже собрали список документов? Он у вас на форме? Форма не закрыта?
Пока форма жива и там данные, но вы их не записали? Я бы прошлась стандартным циклом для каждого МойДок из Объект, МояТЧ, цикл в форме обработки. Но клиент, сервер думаю вам не надо пояснять)))

```1c
    Для каждого Стр из Объект.ПереченьДокументов Цикл

    Если ОтборПользователя.Использование = Истина Тогда
    Сообщить("Нашел!")
    КонецЕсли;
    КонецЦикла
```

А выборка.Следующий() это больше для запросов. А так для ТЧ вроде всегда как таковой цикл был, что выше)))
---
```1c
    Процедура ПерерасчетНаСервере()

    СтруктураОтбора = Новый Структура("Использование ", Истина); // поле с флажком
    ОтборПользователя = Объект.ПереченьДокументов.НайтиСтроки(СтруктураОтбора);
    Для Каждого СтрокаТаблицы ИЗ ОтборПользователя Цикл
    //СтрокаТаблицы.Поле = ...
    КонецЦикла;
    //...
```
---
Либо цикл, либо НайтиСтроки

Обработки и отчёты не хранят данные в базе данных. А запросы предназначены именно для работы с базой данных.
---
```1c
    Для каждого ТекущаяСтрока Из ЭтотОбъект.МояТабЧасть Цикл
```

такое не работает?

Обработки и отчёты не хранят данные в базе данных. А запросы предназначены именно для работы с базой данных.
все так. данные в базе, но обращаетесь к ним по списку из вашей обработки
---
Ты у меня зачем спрашиваешь?
---
зачемОн не проснулся еще )))
---
Спасибо большое, голова совсем вечером не варит - нужно было

```1c
    Для каждого Стр из Объект.ПереченьДокументов Цикл
```

Но тут возникла новая проблема. Когда я пытаюсь найти и сохранить объект в переменную

```1c
    ТЧ = Объект.ПереченьДокументов;
    Для Каждого ТекущаяСтрока Из ТЧ Цикл
    Если ТекущаяСтрока.Использование = Истина Тогда

    Объект = ТекущаяСтрока.Документ.ПолучитьОбъект();

    КонецЕсли;
    КонецЦикла;
```

Вылетает ошибка:

Значение не является значением объектного типа (ПолучитьОбъект)
{ВнешняяОбработка.воПерерасчетСкидки.Форма.Форма.Форма(46)}:Объект = ТекущаяСтрока.Документ.ПолучитьОбъект();
{ВнешняяОбработка.воПерерасчетСкидки.Форма.Форма.Форма(59)}:ПерерасчетНаСервере();

[ОшибкаВоВремяВыполненияВстроенногоЯзыка, ОшибкаИспользованияВстроенногоЯзыка]

Вроде обращение делаю как положено, но почему вылетает ошибка..?
---
1. Потому что ПолучитьОбъект можно только у ссылки. А у тебя не ссылка.
2. Потому что делаешь на Клиенте. А надо на Сервере.

Выбирай.
---
(8) 2. Потому что делаешь на Клиенте. А надо на Сервере.

Процедура у меня прописана так:

```1c
    &НаСервере
    Процедура ПерерасчетНаСервере()

    //проходим по всем документам, выбранным пользователем для перерасчета
    ТЧ = Объект.ПереченьДокументов;
    Для Каждого ТекущаяСтрока Из ТЧ Цикл
    Если ТекущаяСтрока.Использование = Истина Тогда

    Объект = ТекущаяСтрока.Документ.ПолучитьОбъект();

    //Скидка = РаботаСРегистрамиСведений.РасчетРазмераСкидкиДляКлиента(Объект.Дата, Объект.Клиент);

    //ТекущаяСтрока.Документ.Записать(РежимЗаписиДокумента.Запись)

    КонецЕсли;
    КонецЦикла;

    КонецПроцедуры

    &НаКлиенте
    Процедура Перерасчет(Команда)
    ПерерасчетНаСервере();
    КонецПроцедуры
```

Как я понимаю, на клиенте после нажатия кнопки запускается серверная процедура, где уже процедура выполняется сервером. Т.е. выполнение должно вестись на сервере. Или это не так?

(9) (8) 1. Потому что ПолучитьОбъект можно только у ссылки. А у тебя не ссылка.

в табличной части у меня находятся ссылки, которые я получила из запроса к БД. Они приходят в текстовом варианте, верно?
Не совсем понимаю как тогда к ним обращаться.. через найти по ссылке?
---
Как я понимаю, на клиенте после нажатия кнопки запускается серверная процедура Тут уж как напрограммиздить. Само по себе ничего не запускается.
Они приходят в текстовом варианте, верно? Нет, не верно. Они приходят с типом Ссылка. Если запрос правильный, конечно.
У тебя тип колонки "Документ" в ТЧ "ПереченьДокументов" какой?
---
Я пробовала так искать ссылку:

```1c
    Ссылка = Документы.ОказаниеУслуги.НайтиПоРеквизиту("Ссылка", ТекущаяСтрока.Документ);
    Объект = Ссылка.ПолучитьОбъект();
```

Но вылетает такая ошибка:

Ошибка при вызове метода контекста (НайтиПоРеквизиту)
{ВнешняяОбработка.воПерерасчетСкидки.Форма.Форма.Форма(53)}:Ссылка = Документы.ОказаниеУслуги.НайтиПоРеквизиту("Ссылка", ТекущаяСтрока.Документ);
{ВнешняяОбработка.воПерерасчетСкидки.Форма.Форма.Форма(66)}:ПерерасчетНаСервере();

[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
Неверно указан реквизит
[ОшибкаИспользованияВстроенногоЯзыка]
---
В (9) Вы пишите, что в таблице колонка документ содержит ссылку. Зачем Вы еще раз ищете ссылку Ссылка = Документы.ОказаниеУслуги.НайтиПоРеквизиту("Ссылка", ТекущаяСтрока.Документ); к тому же не правильно

Тут, наверное, будет

```1c
    Ссылка = ТекущаяСтрока.Документ;
    // и наверное так
    ДокументОбъект = Ссылка.ПолучитьОбъект();
```
---
Я в (9) ничего не пишу, не надо мне тут напраслину!
---
сорян в (10) и не Вы