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

```1c
    Для Каждого Стр из ТЗ Цикл

    ДокументОбъект = Стр.ДокументВыпускПродукции.ПолучитьОбъект();
    НашиТовары = ДокументОбъект.Товары;

    Для Каждого СтрВып из НашиТовары цикл

    СтрВып.Номенклатура = Стр.Продукция;
    СтрВып.Количество = Стр.Количество
    СтрВып.Серия = Стр.СерияВыпуск;
    СтрВып.Цена = Стр.ЦенаВыпуск;
    СтрВып.Сумма = Стр.СуммаВыпуск;

    КонецЦикла;
    ДокументОбъект.Записать();
```

Проверенно отладчиком в документе ДокументВыпускПродукции находится ссылка, в ДокументОбъект находится объект. Не пойму, почему данные в документ не записываются. При чем не важно какой реквизит бы не менялся, результат один = ничего.
Подскажите где может быть ошибка, что рыть!?
---
Сразу возникает вопрос почему вы пытаетесь заполнить все строки ТЧ документа строками с одинаковыми значениями, но да ладно. Может в процедуре модуля объекта ПередЗаписью или ПриЗаписи все ваши изменения откатываются, или вообще происходит отказ.
---
Судя по коду, в ТЧ документа будут все записи одинаковые и соответствовать последней записи в ТЧ. Т.е.
Имеется документ. У него в ТЧ 3 записи:
1. Продукция1, Количество1, и т.д.
2. Продукция2, Количество2, и т.д.
3. Продукция3, Количество3, и т.д.

После кода из (0) получится:
1. Продукция3, Количество3, и т.д.
2. Продукция3, Количество3, и т.д.
3. Продукция3, Количество3, и т.д.

И как бы не изменяли в ТЗ значения кроме последней записи в ТЧ, всегда будут записываться в итоге по последней записи.
---
как вариант можно тупо перезаписывать ТЧ:

```1c
    ДокументОбъект = Стр.ДокументВыпускПродукции.ПолучитьОбъект();
    НашиТовары = ДокументОбъект.Товары;
    НашиТовары.Очистить();
    Для Каждого Стр из ТЗ Цикл
    СтрВып = НашиТовары.Добавить();
    СтрВып.Номенклатура = Стр.Продукция;
    СтрВып.Количество = Стр.Количество
    СтрВып.Серия = Стр.СерияВыпуск;
    СтрВып.Цена = Стр.ЦенаВыпуск;
    СтрВып.Сумма = Стр.СуммаВыпуск;
    КонецЦикла;
    ДокументОбъект.Записать();
```
---
//ВОТ ТАК ВОТ ДОЛЖНО БЫТЬ , ВАМ НЕ НУЖНО 2 ЦИКЛА

```1c
    ДокументОбъект = Стр.ДокументВыпускПродукции.ПолучитьОбъект();
    НашиТовары = ДокументОбъект.Товары;

    НашиТовары .Очистить();

    Для Каждого Стр из ТЗ Цикл

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

    КонецЦикла;

    ДокументОбъект.Записать();
```
---
Сразу возникает вопрос почему вы пытаетесь заполнить все строки ТЧ документа строками с одинаковыми значениями, но да ладно. Может в процедуре модуля объекта ПередЗаписью или ПриЗаписи все ваши изменения откатываются, или вообще происходит отказ.
---
Сразу возникает вопрос почему вы пытаетесь заполнить все строки ТЧ документа строками с одинаковыми значениями,

Вот тут ты был прав.
При двух строках, он записывает почему-то только если заполнена вторая строка и заполняет обе строки документа этими данными. Тоесть когда я меняю что-то в первой строке он вообще не реагирует
---
Судя по коду, в ТЧ документа будут все записи одинаковые и соответствовать последней записи в ТЧ. Т.е.
Имеется документ. У него в ТЧ 3 записи:
1. Продукция1, Количество1, и т.д.
2. Продукция2, Количество2, и т.д.
3. Продукция3, Количество3, и т.д.

После кода из (0) получится:
1. Продукция3, Количество3, и т.д.
2. Продукция3, Количество3, и т.д.
3. Продукция3, Количество3, и т.д.

И как бы не изменяли в ТЗ значения кроме последней записи в ТЧ, всегда будут записываться в итоге по последней записи.
---
А как от этого избавится, где ошибка в цикле!?
---
не совсем понятна логика формирования ТЗ и ее обработка. Но вот для примера:

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

Но я бы исходил из того, что не все строки ТЗ будут изменять. Тогда предпочтительно сохранять в дополнительной колонке ТЗ факт изменения и уже перезаписывать только измененные, а не все подряд.
---
В тз попадают все строки из Тч документа
Пользователь меняет какие-то данные (кол-во там или номенклатуру)
И нужно обратно записать эти измененные данные в этот же документ.
---
вот мне и не понятно, зачем эти сложности с ТЗ, если по описанию стандартная работа документа.
---
При записи документа, элементы с ТЧ формы записываются в ТЗ. А при открытии формы данные из ТЗ подтягиваются в нужном виде в ТЧ?
---
как вариант можно тупо перезаписывать ТЧ:

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

отберите строки с одинаковым Стр.ДокументВыпускПродукции и один раз Стр.ДокументВыпускПродукции.ПолучитьОбъект()
---
У меня уже две отдельных тз, под каждый документ.
просто к первому вопросов нет, там все записывается корректно. по второй кнопке теперь должен записываться второй документ.
Код такой же. но в первом случае отрабатывает, во втором нет.
Нифига не понимаю как так-то

```1c
    ВыпускПродукции = Объект.ВыпускПродукции.ПолучитьОбъект();

    Для Каждого Стр из ТЗВыпуск Цикл
    Для Каждого СтрВып из ВыпускПродукции.Товары цикл

    СтрВып.Номенклатура = Стр.Продукция;
    СтрВып.КоличествоУпаковок = Стр.КоличествоКгВыпуск;
    СтрВып.Количество = Стр.КоличествоКгВыпуск;
    СтрВып.Серия = Стр.СерияВыпуск;
    СтрВып.Цена = Стр.ЦенаВыпуск;
    СтрВып.Сумма = Стр.СуммаВыпуск;

    КонецЦикла;
    ВыпускПродукции.Записать();
    КонецЦикла;
```
---
Таки где находится ссылка на документ, в реквизите формы ДокументВыпускПродукции, как написано, или отдельно в каждой строке ТЗ, как в коде? Может оказаться что в результате запроса совсем другая ссылка и заполняется не тот документ, что в реквизите. Да и цикл странный, будет нормально только для случая с одной строкой в ТЧ, при нескольких строках заполнит все последней. Возьмите лучше заполнение из (29), надежнее будет.
---
Полагаю что срабатывает отказ при записи, т.к. возможно производится проверка на задвоение данных в табличной части, а так как у Вас данные одни и теже для всех строк табличной части, то это вполне возможно.
 Рыть как всегда отладчиком обработку "ПередЗаписью" и "ПриЗаписи". Отслеживать значение табличной части, чем заполнена, ловить момент, когда она очищается (если она очищается), или момент, когда происходит отказ от записи и смотреть, что произошло, почему отказ.
---
Попробуйте добавить в метод записи режим записи - ДокументОбъект.Записать(РежимЗаписи.Проведение);
---
А если человеку не нужно проводить документ?
---
Тогда так ДокументОбъект.Записать(РежимЗаписи.Записать) или РежимЗаписи.Запись - не помню как точно написать
---
РежимЗаписиДокумента.Запись Правильно так, но это ничем не отличается от того что написано сейчас.
---
поэтому нужно поставить отладку и посмотреть что происходит при /перед записью и далее проведении если нужно
---
Так я об этом ещё в первом комментарии написал.
---
При, перед записью нет никаких отказов, нет запретов.
---
Я писал про *. Перед записью может быть вставлен код, который перезаполняет что-нибудь, откатывая внесённые изменения.
---
Забавно, существительное, от которого происходит слово "откатывать", не пропускается каким-то фильтром и заменяется на звёздочку.
---
Пробовала, по регистру проводится с нужными данными, а в документе остаются прежние
---
Либо как вариант поставить отладку в документе и посмотреть где и как проходит запись, может в какой то момент возникает отказ
---
А с чего вы взяли, что не записывается? Журнал регистрации что говорит? Возможно просто данные не изменяются. т.е. СтрВып.Номенклатура уже = Стр.Продукция; Количество строк вы не меняете. Возможно с первого раза записалось, а дальше по кругу одно и то же пишется. Напишите СтрВып.Количество = 99999999 и посмотрите что произойдет.
---
После записи я открываю документ, а там данные старые
---
Возможно на форме документа отображается другая таблица? Посмотрите консолью запросов данные документа.
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
А вобще просто выгоните всех и почистите темпы, в апплокал, у нас частенькая такая фигня, пока не почистишь не работает.
---
Вы перебираете циклом строки табличной части документа, а надо перебирать строки таблицы из которой эти данные надо в документ добавлять! По сути Вам надо очистить табличную часть. Потом в цикле перебрать все строки вашей отредактированной таблицы и значениями из этих строк заполнить создаваемые строки табличной части документа!

У вас же сейчас перебираются строки табличной части документа и в каждую проставляется одна и та же информация из последней строки Вашей отредактированной таблицы.
---
//ВОТ ТАК ВОТ ДОЛЖНО БЫТЬ , ВАМ НЕ НУЖНО 2 ЦИКЛА

```1c
    ДокументОбъект = Стр.ДокументВыпускПродукции.ПолучитьОбъект();
    НашиТовары = ДокументОбъект.Товары;

    НашиТовары .Очистить();

    Для Каждого Стр из ТЗ Цикл

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

    КонецЦикла;

    ДокументОбъект.Записать();
```