Здравствуйте!
Мы пользуемся программой 1С Бухгалтерия Предприятия 2.0 и Альфа-авто: автосалон+автосервис+автозапчасти проф, ред 2.0
Между этими конфигурациями осуществлен обмен, но есть одна проблемка, которая усложняет жизнь, а именно, давальческое сырье. Для этого собственно и переделал "Требование-накладная". В документе создал две кнопки "В материалы заказчика" и "Перенести в материалы" на закладках "Материалы" и "Материалы заказчика" соответственно по аналогии с услугами и агентскими услугами в документе "Реализация товаров и услуг", но давальческого сырья много и перемещать по одной позиции неудобно. Подскажите, как можно переместить группу материалов, если они все на одном счете?
Спасибо.
---
AndrewUs,

```1c
    Давальческий = ПланыСчетов.Хозрасчетный.НайтиПоКоду("003.01");
    Для каждого СтрокаТабличнойЧасти из Материалы Цикл
    Если ЗначениеЗаполнено(СтрокаТабличнойЧасти)
    И СтрокаТабличнойЧасти.Счет = Давальческий Тогда

    НоваяСтрока = МатериалыЗаказчика.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтрока,СтрокаТабличнойЧасти);
    Материалы.Удалить(СтрокаТабличнойЧасти);
    КонецЕсли;
    КонецЕсли;
```
---
AndrewUs, можно циклом:

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

Вроде так должно работать, для колонок, с одинаковым названием.
---
вы используете текущие данные ЭлементыФормы.Материалы.ТекущиеДанные
попробуйте в цикле пройтись по всем материалам
типа (2)

```1c
    кУдалению = Новый Массив;
    Для каждого СтрокаТабличнойЧасти Из Материалы Цикл
    Если ЗначениеЗаполнено(СтрокаТабличнойЧасти) Тогда
    НоваяСтрока = МатериалыЗаказчика.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТабличнойЧасти);
    кУдалению.Добавить( СтрокаТабличнойЧасти);
    КонецЕсли;
    КонецЦикла
    //Удаляем перенесенные
    Для каждого мСтрока Из кУдалению Цикл
    Материалы.Удалить(СтрокаТабличнойЧасти);
    КонецЦикла;
```
---
minimajack, {Документ.ТребованиеНакладная.Форма.ФормаДокумента.Форма(1182)}: Ошибка при вызове метода контекста (Удалить)
        Материалы.Удалить(СтрокаТабличнойЧасти);
по причине:
Значение индекса выходит за границы диапазона
 выдает ошибку, попутно увеличивая количество номенклатуры в документе.
---
AndrewUs,

```1c
    Материалы.Удалить(Материалы.Индекс(СтрокаТабличнойЧасти));
```
---
minimajack, такая же ошибка
---
AndrewUs, ну во первых на Легкая доработка документа "Требование-накладная" - это не катит. Так как в данном случае необходимо производить запрос и проверять позиции номенклатуры на остатках по счетам и в зависимости от этого перемещать - либо нет. Значит вам необходимо изучить что такое запрос, как получать остатки.
Решить что делать с материалом который в наличии и там и там...в каком порядке списывать.
В общем ищите готовое решение, альтруиста - либо нанимайте программиста.
---
minimajack, понятно, спасибо большое за помощь, очень вам признателен.
---
minimajack, Здравствуйте, а если не проверять наличие на складе, а просто, встав на строчку материала, счет учета которого 003.01, переместить все материалы, у которых совпадает счет учета?
---
AndrewUs, ну и поставь условие в цикле типа

```1c
    Давальческий = ПланыСчетов.Хозрасчетный.НайтиПоКоду("003.01");
    Если СтрокаТабличнойЧасти.СчетУчета = Давальческий Тогда
    ///пошло выполнение цикла как в (10) у minimajack
    КонецЕсли;
```
---
Denis_CFO, Спасибо, я обязательно попробую.
---
Denis_CFO, Попробовал, не получилось. Перемещение какое-то странное получается, часть перемещает, часть оставляет, да и еще и другие товары и материалы попадают, которые должны были остаться.
---
minimajack, плюс этот цикл переносит все материалы, как я понял, а необходимо определенную группу. Сейчас объясню. В документ требование накладная попадают все материалы, которые списываются, как находящиеся в собственности организации так и давальческие. Собственные - учет на 41.01 (не обращайте внимания на то, что 41 счет), а давальческие - 003.01. Было бы все хорошо, если бы документ проводился. Но для корректного проведения необходимо, чтобы материалы на счете 003.01 переместились из вкладки "Материалы" на вкладку "Материалы заказчика" и только эти материалы, а не все.
---
AndrewUs, знаете, что такое "Цикл"?
---
Martinian, Знаю
---
Сейчас у меня такая процедура:

```1c
    СтрокаТабличнойЧасти = ЭлементыФормы.Материалы.ТекущиеДанные;
    Если ЗначениеЗаполнено(СтрокаТабличнойЧасти) Тогда
    НоваяСтрока = МатериалыЗаказчика.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТабличнойЧасти);
    Материалы.Удалить(СтрокаТабличнойЧасти);
    КонецЕсли;
```
---
ну вот совместите код из 2 и 3 поста и будет ваш вариант
---
Я прекрасно понимаю, ребят, что многие посмеиваются, встречая начинающих работу с 1С как программиста, но вы не забывайте, пожалуйста, что все такими были когда-то.
---
AndrewUs, такими многие врятли были...прежде чем работать с механизмами - необходимо знать как устроены базовые конструкции языка - иначе много дров можно наломать. 1С - это прежде всего бизнес(деньги) - где любая ошибка может вылезти боком.
зы мне не смешно - мне грустно от того что вы не знаете
---
minimajack, Если я не знаю, то отписываю сюда, в ожидании не "лекции" по поводу недостатков знания, а помощи ...
---
В процедуре прописано:

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

Уверен, что ошибся, но где? Подскажите, пожалуйста.
---
AndrewUs,

```1c
    Давальческий = ПланыСчетов.Хозрасчетный.НайтиПоКоду("003.01");
    Для каждого СтрокаТабличнойЧасти из Материалы Цикл
    Если ЗначениеЗаполнено(СтрокаТабличнойЧасти)
    И СтрокаТабличнойЧасти.Счет = Давальческий Тогда

    НоваяСтрока = МатериалыЗаказчика.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтрока,СтрокаТабличнойЧасти);
    Материалы.Удалить(СтрокаТабличнойЧасти);
    КонецЕсли;
    КонецЕсли;
```
---
minimajack, Спасибо, помогло. Правда не всегда все перемещает, но тут можно и допереместить.
Спасибо.
---
А самое интересное, что перемещение идет через один.