Добрый день, уважаемые читатели форума и эксперты.

Помогите разобраться в ситуации.

1. как показано в изображении имеем документ прихода с табличной частью.
2. имеем другой документ вк как показано в изображении без табличной части
3. То что куда должно вставлятся если создаем вк на основании приходного документа.

Так вот суть вопроса как при создании на основе сделать так чтобы документ ВК создался и заполнился столько раз сколько строк в документе приходная накладная. со всеми реквизитами.

```1c
    Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
    //{{__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ПриходДокументов") Тогда
    // Заполнение шапки
    НомерФасонины = ДанныеЗаполнения.Комментарий;
    Коментарий = ДанныеЗаполнения.Комментарий;
    Обьект = ДанныеЗаполнения.ОбьектСтроительство;
    Составил = ДанныеЗаполнения.Ответственный;
    Дата = ДанныеЗаполнения.Дата;

    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    КонецЕсли;
    //}}__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ

    КонецПроцедуры
```
---
Чтобы обойти таблицу из формы документа:

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

```1c
    &НаСервере
    Процедура Команда1НаСервере()

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

    Сообщить("Документ по Входному контролю "+Объект.ВходящийДокумент+" успешно создан");
    Исключение
    Сообщить("Не удалось создать документ по Входному контролю"+Объект.ВходящийДокумент);
    КонецПопытки;

    КонецЦикла

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

    &НаКлиенте
    Процедура Команда1(Команда)
    Команда1НаСервере();
    КонецПроцедуры
```
---
К сожалению режим ввода на основании не поддерживает отношение один ко многим.
Возможно, вам подойдет открытие обработки и создание необходимого вам количества объектов по кнопке.
---
зможно, вам подойдет открытие обработки и создание необходимого вам количества объектов

Возможно конечно, может быть подскажите пример какой недь?
---
например, клиент банк создает платежные поручения на основании одной таблицы платежей. Обработка клиент банк есть практически в любой типовой конфигурации.
---
например, клиент банк создает платежные поручения на основании одной таблицы платежей. Обработка клиент банк есть практически в любой типовой конфигурации.
Спасибо буду смотреть клиент-банк.
---
Открыл, конфигурации Бухгалтерия, и если честно потерялся.(((
в модуле обьекта платежное поручение обработка заполнения вот сюда же смотреть?
---
прикрепил файл конфигурации для примера.
Если делать ввод на основании прихода то увы дальше у меня потеря потерь
---
В БСП тоже есть примеры обработки, которая подключается к внешним отчетам и обработкам и содержит модуль заполнение на основании.
Принцип такой:
1 Обработка подключается как дополнительная и выглядит как кнопка в журнале или в документе основании.
2. Пользователь нажимает на эту кнопку вместо стандартного ввода на основании.
3. По вашему выбору либо открывается окно для ввода дополнительной информации либо сразу создаются программно пакет нужных вам документов.
---
эхх ничего не получается(
---
Что не получается?
Не нужна ни какая процедура заполнения (типовая).
Просто создаешь на форме кнопку (или как команду, если хочешь в списке видеть). И пишешь код, что то вроде этого:

```1c
    Для каждого стр из ТабличнойЧасти Цикл
    Об = Документы.НужныйДокумент.Создать();
    //Здесь заполняешь документ
    Об.Записать();
    ОткрытьФорму("ПутьКФормеДокумента",Новый Структура("Ключ",Об.Ссылка)); //Открываем документ
    КонецЦикла;
```

Единственный недостаток, это все созданные документы будут записаны в базу сразу, но по другому ни как не создать не записывая множество документов в базе.
---
Спасибо за пример.

вот что получилось.

```1c
    &НаСервере
    Процедура Команда1НаСервере()

    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    | ПриходДокументов.ОбьектСтроительство КАК ОбьектСтроительство
    |ИЗ
    | Документ.ПриходДокументов КАК ПриходДокументов";

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

    Для Каждого ЭлементРезультата из Результат Цикл
    Попытка
    НовыйДокумент = Документы.Входной.СоздатьДокумент(); // Создает новый ВК
    НовыйДокумент.Обьект = ЭлементРезультата.ОбьектСтроительство; //Заполняем данными
    НовыйДокумент.Дата = ТекущаяДата();

    НовыйДокумент.Записать();
    Сообщить("Документ по договору "+ЭлементРезультата.ОбьектСтроительство+" успешно создан");
    Исключение
    Сообщить("НЕ УДАЛОСЬ создать окумент по договору "+ЭлементРезультата.ОбьектСтроительство);
    КонецПопытки;

    КонецЦикла;

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

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

При этом ошибку не выдал а создал 1800 документов которые не нужны мне***(((
---
Правильно, потому что так написали, этот код бы создал и больше документов, но у Вас там их всего 1800.
В данном случае запрос не нужен, вы уже находитесь в документе.
Можно и запросом сделать, но:
1) В запрос добавьте условие, а то выборка получилась всех документов.
2) Запрос делайте сразу к табличной части, с выборкой всех данных, иначе смысла в запросе нет.
2) Проверяйте перед заполнением, что документ записан в базу, так как документ могут поменять, но еще не записать в базу. И заполнение произойдет по старым данным.
---
да и заполнились документы криво

```1c
    НовыйДокумент.Обьект = ЭлементРезультата.ОбьектСтроительство; //Заполняем данными
```

Это что за заполнение данных?
И вам надо заполнять построчно, а заполняете по объекту, если вообще такое работает.
Если уж хотите заполнить однотипные реквизиты, то делается это так:

```1c
    ЗаполнитьЗначенияСвойств(НовыйДокумент,ЭлементРезультата.ОбьектСтроительство);
```
---
Спасибо за совет. ну что буду дальше изучать как сделать это.
согласен запросом можно и не пользоватся.
перебрать данные таблицы тупо у меня не получается.
Пишет то ошибка то нет данных переменой
я только учусь так что не нужно меня ругать.
---
Чтобы обойти таблицу из формы документа:

```1c
    Для каждого стр из Объект.ИмяТаблицы Цикл
    //стр - конкретная строка табличной части
    КонецЦикла
```
---
Все создает столько документов сколько строк в документе.
Наверное это уже будет наглость. но не могли бы подсказать с заполнением еще

```1c
    Для каждого стр из Объект.Таблица Цикл
    Попытка
    НовыйДокумент = Документы.Входной.СоздатьДокумент(); // Создает новый ВК
    НовыйДокумент.Дата = Элементы.Дата();
    //НовыйДокумент.Составил = Элементы.Ответственный;
    НовыйДокумент.Записать();

    Сообщить("Документ по входному контролю "+Объект.ВходящийДокумент+" успешно создан");
    Исключение
    Сообщить("НЕ УДАЛОСЬ создать документ по Входному "+Объект.ВходящийДокумент);
    КонецПопытки;

    КонецЦикла
```
---
ЗаполнитьЗначенияСвойств(Приемник,Источник) вам в помощь, если имена реквизитов одинаковые. Остальные реквизиты заполняются непосредственным указанием значений или реквизита.
НовыйДокумент.Договор = Объект.ДоговорКонтрагента;
НовыйДокумент.Сумма = стр.Сумма;;
---
Спасибо большое очень помогли решить задачу))
(17)
---
Вот конечный результат
Вдруг кому пригодится

```1c
    &НаСервере
    Процедура Команда1НаСервере()

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

    Сообщить("Документ по Входному контролю "+Объект.ВходящийДокумент+" успешно создан");
    Исключение
    Сообщить("Не удалось создать документ по Входному контролю"+Объект.ВходящийДокумент);
    КонецПопытки;

    КонецЦикла

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

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