Здравствуйте, подскажите, пожалуйста, как заполнить табличную часть документа выбранной группой контрагентов? Спасибо.
Конфигурация 1С Бухгалтерия Предприятия, ред 2.0.
Спасибо.
---
В чем собственно трудность? Ниже запрос для получения списка контрагентов в группе. Выполняете запрос, получаете список контрагентов, затем этим списком заполняете таблицу и/или выполняете нужные вам алгоритмы.

```1c
    ВЫБРАТЬ
    Контрагенты.Ссылка КАК Контрагент
    Из Справочник.Контрагенты КАК Контрагенты
    Где Контрагенты.Ссылка В ИЕРАРХИИ (&ГруппаКонтрагентов)
```
---
Вопрос о том как программно заполнить? Выбрать запросом контрагентов которые в иерархии выбранной группы и заполнить результатом таблицу.
---
SPID, Совершенно верно, программно.
---
В чем собственно трудность? Ниже запрос для получения списка контрагентов в группе. Выполняете запрос, получаете список контрагентов, затем этим списком заполняете таблицу и/или выполняете нужные вам алгоритмы.

```1c
    ВЫБРАТЬ
    Контрагенты.Ссылка КАК Контрагент
    Из Справочник.Контрагенты КАК Контрагенты
    Где Контрагенты.Ссылка В ИЕРАРХИИ (&ГруппаКонтрагентов)
```
---
SPID, Спасибо, попробую.
---
SPID,
```1c
    Процедура КоманднаяПанель1ЗаполнитьПоГруппе(Кнопка)
    Если Ссылка.Проведен Тогда
    Ответ = Вопрос("Табличная часть будет очищена. Продолжить?", РежимДиалогаВопрос.ДаНет, 60, КодВозвратаДиалога.Нет);
    Если Ответ = КодВозвратаДиалога.Нет Тогда
    Возврат;
    КонецЕсли;
    КонецЕсли;

    НачисленияЗаОбучениеИОбщежитие.Очистить();
    ВыборкаКонтр=Справочники.Контрагенты.Выбрать();
    Пока ВыборкаКонтр.Следующий() Цикл
    Если (Не ВыборкаКонтр.ЭтоГруппа) И (Не ВыборкаКонтр.ПометкаУдаления) Тогда
    Если ЗначениеЗаполнено(ВыборкаКонтр.НачислятьОбучение) или ЗначениеЗаполнено(ВыборкаКонтр.НачислятьОбщежитие) Тогда

    СтрокаТабличнойЧасти = НачисленияЗаОбучениеИОбщежитие.Добавить();
    СтрокаТабличнойЧасти.Студент = ВыборкаКонтр.Ссылка;

    СтрокаТабличнойЧасти.Группа = ВыборкаКонтр.Родитель.Ссылка;

    Если ЗначениеЗаполнено(ВыборкаКонтр.НачислятьОбучение) Тогда

    ЦенаОбучения = Ценообразование.ПолучитьЦенуНоменклатуры(ВыборкаКонтр.НачислятьОбучение,
    ВыборкаКонтр.ТипЦеныСтудента, Дата);
    Иначе
    ЦенаОбучения =0;
    КонецЕсли;

    Если ЗначениеЗаполнено(ВыборкаКонтр.НачислятьОбщежитие) Тогда
    ЦенаОбщежития = Ценообразование.ПолучитьЦенуНоменклатуры(ВыборкаКонтр.НачислятьОбщежитие,
    ВыборкаКонтр.ТипЦеныСтудента, Дата);
    Иначе
    ЦенаОбщежития =0;
    КонецЕсли;
    СтрокаТабличнойЧасти.СуммуОбучение = ЦенаОбучения;
    СтрокаТабличнойЧасти.СуммаОбщежитие = ЦенаОбщежития;

    КонецЕсли;

    КонецЕсли;

    КонецЦикла ;
    КонецПроцедуры
```

Есть вот такая процедура, но она заполняет всеми контрагентами, у которых есть удовлетворяющие условия, подскажите, пожалуйста, можно ли с этой процедурой что-то сделать или новую писать придется?
---
AndrewUs, да выложите уж саму обработку (или заготовку - что есть) - кому нелень - сделают.
вобще уже сказали ведь - (4) SPID
---
Salavat, если бы это была обработка, выложил бы, но это документ, добавленный в конфигурацию ... не всю же базу выкладывать?
---
AndrewUs, вобщем посмотрел - (6) AndrewUs - вроде как в строке
```1c
    ВыборкаКонтр=Справочники.Контрагенты.Выбрать();
```
достаточно указать типа -
```1c
    ВыборкаКонтр=Справочники.Контрагенты.Выбрать(&ГруппаИзКоторойОтбиратьНадо);
```
---
Salavat, не сработает для нескольких уровней вложенности
---
Alexey_, чаво????
---
Salavat,

```1c
    ВыборкаКонтр=Справочники.Контрагенты.Выбрать(ГруппаИзКоторойОтбиратьНадо);
```

первый параметр это родитель, т.е., если в этой папке будут подпапки, то контрагенты из этих подпапок не попадут в выборку, т.к. родитель у них будет другой
---
Alexey_, да теперь понял - простите - нужно написать -
```1c
    ВыборкаКонтр=Справочники.Контрагенты.ВыбратьИерархически(ГруппаИзКоторойОтбиратьНадо);
```
---
Пытаюсь сделать так, чтобы в документе (скрин выкладываю) происходило такое действие: при нажатии на кнопку "Заполнить по группе" выводилось окно, которое предлагало бы выбрать определенную группу контрагентов, в которой, кстати, нет другой группы, т.е. в папке нет подпапок, и при нажатии на ок в табличную часть документа попадали только контрагенты выбранной группы
---
Может должно быть что то типа (возможны синтаксические ошибки):

```1c
    Процедура КоманднаяПанель1ЗаполнитьПоГруппе(Кнопка)
    Если Ссылка.Проведен Тогда
    Ответ = Вопрос("Табличная часть будет очищена. Продолжить?", РежимДиалогаВопрос.ДаНет, 60, КодВозвратаДиалога.Нет);
    Если Ответ = КодВозвратаДиалога.Нет Тогда
    Возврат;
    КонецЕсли;
    КонецЕсли;

    НачисленияЗаОбучениеИОбщежитие.Очистить();

    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ВыбраннаяГруппа", ВыбраннаяГруппа);

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

    ВыборкаКонтр = Запрос.Выполнить().Выбрать();

    Пока ВыборкаКонтр.Следующий() Цикл

    СтрокаТабличнойЧасти = НачисленияЗаОбучениеИОбщежитие.Добавить();
    СтрокаТабличнойЧасти.Студент = ВыборкаКонтр.Ссылка;

    СтрокаТабличнойЧасти.Группа = ВыборкаКонтр.Родитель;

    Если ЗначениеЗаполнено(ВыборкаКонтр.НачислятьОбучение) Тогда

    ЦенаОбучения = Ценообразование.ПолучитьЦенуНоменклатуры(ВыборкаКонтр.НачислятьОбучение,
    ВыборкаКонтр.ТипЦеныСтудента, Дата);

    Иначе
    ЦенаОбучения =0;
    КонецЕсли;

    Если ЗначениеЗаполнено(ВыборкаКонтр.НачислятьОбщежитие) Тогда
    ЦенаОбщежития = Ценообразование.ПолучитьЦенуНоменклатуры(ВыборкаКонтр.НачислятьОбщежитие,
    ВыборкаКонтр.ТипЦеныСтудента, Дата);
    Иначе
    ЦенаОбщежития =0;
    КонецЕсли;

    СтрокаТабличнойЧасти.СуммуОбучение = ЦенаОбучения;
    СтрокаТабличнойЧасти.СуммаОбщежитие = ЦенаОбщежития;

    КонецЦикла ;

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

Единственно смущает
```1c
    ЗначениеЗаполнено(ВыборкаКонтр.НачислятьОбучение)
```
, если НачислятьОбучение имеет тип булево, то условие некорректное.
---
И еще ВыбраннаяГруппа как то значение надо получить - как вы указываете группу контрагентов которой нужно заполнить ТЧ?
---
SPID, Пока никак не указываю.
---
Так надо указать или как то определить значение ВыбраннаяГруппа
---
SPID, человек не знает - как/где/... надо указать ему.
за этим (в т.ч.) он и обратился.
---
В постановке вопроса "...выбранной группой контрагентов". Значит кто-то где-то эту группу уже выбрал. Как варианты: значение группы берется из какого-то реквизита документ; задается вопрос пользователю и открывается форма выбора группы контрагента.
---
SPID, Простите, я изначально Вас запутал ... эта группа даже еще не выбрана. В данном случае Вы правы, что должен задаваться вопрос пользователю для выбора группы контрагентов.
---
AndrewUs, тогда - выбрать группу -
```1c
    ФормаВыбораГруппы = Справочники.Контрагенты.ПолучитьФормуВыбораГруппы("ФормаВыбораГруппы");
    ВыбраннаяГруппа = ФормаВыбораГруппы.ОткрытьМодально();
```

примерно так.