Всем добро время суток!
СведенияПоТабличнойЧасти - это Реализация из которой печатается чек.

Печать "Товарного чека" :

```1c
    КоличествоСтрок = СведенияПоТабличнойЧасти.Количество();

    ОбластьШапка.Параметры["Организация"] = СведенияПоДокументу["ГрузополучательПолноеНаименование"];

    ОбластьШапка.Параметры["ОрганизацияПунктРазгрузки"] = СведенияПоДокументу["ГрузополучательПунктРазгрузкиАдрес"];

    ОбластьШапка.Параметры["ОрганизацияИНН"]= СведенияПоДокументу["ГрузополучательИНН"];

    ОбластьШапка.Параметры["ДокументДата"]= ВыбДокумент["Дата"];

    ОбластьШапка.Параметры["НомерЧека"]= "001" + Прав(СведенияПоДокументу["НомерДокумента"], 6);

    СуммаИтого = 0;

    ТабДокумент.Вывести(ОбластьШапка);

    Для НомерСтрокиВыборки = 2 По КоличествоСтрок Цикл

    Строка= СведенияПоТабличнойЧасти[НомерСтрокиВыборки];

    ОбластьПозиция = Макет.ПолучитьОбласть("Позиция");

    Цена = ВыбДокумент["Товары"][Строка["НомерСтроки"] - 1]["Цена_Транзит"];

    Скидка = ВыбДокумент["Товары"][Строка["НомерСтроки"] - 1]["ПроцентСкидкиНаценки"];

    ДокумЗаказ = ВыбДокумент["Сделка"];

    Если (ТипЗнч(ДокумЗаказ) = Тип("ДокументСсылка.ЗаказПокупателя")) Тогда

    Для Каждого СтрокаДокумЗаказТовары из ДокумЗаказ.Товары Цикл

    Если СокрЛП(" + СтрокаДокумЗаказТовары.Номенклатура.Код) = СокрЛП(" + Строка.Код)

    И Строка.СерияНоменклатуры.Ссылка = СтрокаДокумЗаказТовары.СерияНоменклатуры.Ссылка Тогда

    Цена = СтрокаДокумЗаказТовары.ладЦена;

    Скидка = СтрокаДокумЗаказТовары.ладПроцентСкидкиНаценкиП;

    Прервать;

    КонецЕсли;

    КонецЦикла;

    КонецЕсли;

    Количество = Строка["Количество"];

    ЦенаСоСкидкой = Окр(Цена - Цена * Скидка / 100, 2);

    Сумма = Цена* Количество;

    СуммаСоСкидкой = ЦенаСоСкидкой * Количество;

    СуммаИтого = СуммаИтого + СуммаСоСкидкой;

    ОбластьПозиция.Параметры["Позиция"] = НомерСтрокиВыборки - 1;

    ОбластьПозиция.Параметры["ТоварНаименование"] = Строка["ТоварНаименованиеКраткое"];

    ОбластьПозиция.Параметры["Количество"] = Количество;

    ОбластьПозиция.Параметры["Цена"] = ЦенаСоСкидкой;

    ОбластьПозиция.Параметры["Сумма"] = СуммаСоСкидкой;

    ТабДокумент.Вывести(ОбластьПозиция);

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

Проблема в том, что когда к примеру есть две строки с одинаковой номенклатурой, но цена(ЛадЦена) у них разная. То почему то берётся всё равно цена из первой строки одинаковой позиции.
Полагаю, что в этот момент :
```1c
    Для Каждого СтрокаДокумЗаказТовары из ДокумЗаказ.Товары Цикл
```

По неизвестной мне причине берётся опять же номер строки первый.

Собственно вопрос, почему ? не могу понять, спасибо заранее !
---
```1c
    КоличествоСтрок = СведенияПоТабличнойЧасти.Количество();

    ОбластьШапка.Параметры["Организация"] = СведенияПоДокументу["ГрузополучательПолноеНаименование"];

    ОбластьШапка.Параметры["ОрганизацияПунктРазгрузки"] = СведенияПоДокументу["ГрузополучательПунктРазгрузкиАдрес"];

    ОбластьШапка.Параметры["ОрганизацияИНН"]= СведенияПоДокументу["ГрузополучательИНН"];

    ОбластьШапка.Параметры["ДокументДата"]= ВыбДокумент["Дата"];

    ОбластьШапка.Параметры["НомерЧека"]= "001" + Прав(СведенияПоДокументу["НомерДокумента"], 6);

    СуммаИтого = 0;

    ТабДокумент.Вывести(ОбластьШапка);
    //А.М.А+
    ТЗ = ВыбДокумент["Сделка"].Выгрузить();
    //А.М.А-

    Для НомерСтрокиВыборки = 2 По КоличествоСтрок Цикл

    Строка= СведенияПоТабличнойЧасти[НомерСтрокиВыборки];

    ОбластьПозиция = Макет.ПолучитьОбласть("Позиция");

    Цена = ВыбДокумент["Товары"][Строка["НомерСтроки"] - 1]["Цена_Транзит"];

    Скидка = ВыбДокумент["Товары"][Строка["НомерСтроки"] - 1]["ПроцентСкидкиНаценки"];

    ДокумЗаказ = ВыбДокумент["Сделка"];

    Если (ТипЗнч(ДокумЗаказ) = Тип("ДокументСсылка.ЗаказПокупателя")) Тогда

    //А.М.А+
    // Для Каждого СтрокаДокумЗаказТовары из ДокумЗаказ.Товары Цикл
    Для Каждого СтрокаДокумЗаказТовары из ТЗ Цикл
    //А.М.А-

    Если СокрЛП(" + СтрокаДокумЗаказТовары.Номенклатура.Код) = СокрЛП(" + Строка.Код) И Строка.СерияНоменклатуры.Ссылка = СтрокаДокумЗаказТовары.СерияНоменклатуры.Ссылка
    // А.М.А+
    И СтрокаДокумЗаказТовары.Количество = Строка.Количество тогда
    //А.М.А- я тут точно не знаю, где количество у Вас

    Цена = СтрокаДокумЗаказТовары.ладЦена;

    Скидка = СтрокаДокумЗаказТовары.ладПроцентСкидкиНаценкиП;

    //А.М.А+
    ТЗ.Удалить(СтрокаДокумЗаказТовары);
    //А.М.А-

    Прервать;

    КонецЕсли;

    КонецЦикла;

    КонецЕсли;

    Количество = Строка["Количество"];

    ЦенаСоСкидкой = Окр(Цена - Цена * Скидка / 100, 2);

    Сумма = Цена* Количество;

    СуммаСоСкидкой = ЦенаСоСкидкой * Количество;

    СуммаИтого = СуммаИтого + СуммаСоСкидкой;

    ОбластьПозиция.Параметры["Позиция"] = НомерСтрокиВыборки - 1;

    ОбластьПозиция.Параметры["ТоварНаименование"] = Строка["ТоварНаименованиеКраткое"];

    ОбластьПозиция.Параметры["Количество"] = Количество;

    ОбластьПозиция.Параметры["Цена"] = ЦенаСоСкидкой;

    ОбластьПозиция.Параметры["Сумма"] = СуммаСоСкидкой;

    ТабДокумент.Вывести(ОбластьПозиция);

    КонецЦикла;
```
---
ну, судя по тому, как я понял код, все дело в твоем цикле "Для Каждого СтрокаДокумЗаказТовары из ДокумЗаказ.Товары Цикл"

пример:
1 стр - 100р
2 стр - 200р

цикл нашел на первой строчке значение и дальше ты делаешь прерывание.
---
Да, вы правы. Но как исправить это, чтобы отрабатывало корректно ?хм
---
Потому что
тут

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

    Если СокрЛП(" + СтрокаДокумЗаказТовары.Номенклатура.Код) = СокрЛП(" + Строка.Код)

    И Строка.СерияНоменклатуры.Ссылка = СтрокаДокумЗаказТовары.СерияНоменклатуры.Ссылка Тогда

    Цена = СтрокаДокумЗаказТовары.ладЦена;

    Скидка = СтрокаДокумЗаказТовары.ладПроцентСкидкиНаценкиП;

    Прервать;

    КонецЕсли;

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

как только находится первое вхождение по номенклатуре, дальше уже не ищется, а подставляется то что нашел.
---
Путём анализа пришёл тоже к этому да. Но как исправить, чтобы было корректно ?
---
Табличная часть "Сделка" количесто имеет?
---
Разумеется.
---
Если да, тогда связать Если СокрЛП("" + СтрокаДокумЗаказТовары.Номенклатура.Код) = СокрЛП("" + Строка.Код)

                И Строка.СерияНоменклатуры.Ссылка = СтрокаДокумЗаказТовары.СерияНоменклатуры.Ссылка И <Товары.Количество> = <Сделка.Количество>
---
А если количество тоже одинаковое будет?мне кажется не вариант.
---
есть идентификатор строки?
---
что имеется ввиду? нету вроде как
---
Это поле для связи двух Табличных частей.

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

И в цикле ТЧ перебирать и сравнивать с реализацией по таким же условиям, только делать по ТЧ поиск ?
---
Да, тот же поиск + добавить поиск по количеству, НО! Удалять найденные строки из Таблицы значений, тем самым мы решим Вашу проблему
---
Подскажите как в цикле это сделать, имею ввиду поиск и удаление.
Я новичок, не совсем понимаю.
Мол если в тч нашло код такой же как и в реализации, то сперва приравниваем цену, а после удаляем ?
---
Обязательно почитайте по Таблицы значения. Без них никак.
https://helpme1c.ru/tablica-znachenij-v-yazyke-1s-8-v-primerax
---
Не получается методом Найти по ТЧ код. Тоесть в ТЧ то нету кода. Он есть только у номенклатуры...
И в какой момент удалять :(
---
```1c
    КоличествоСтрок = СведенияПоТабличнойЧасти.Количество();

    ОбластьШапка.Параметры["Организация"] = СведенияПоДокументу["ГрузополучательПолноеНаименование"];

    ОбластьШапка.Параметры["ОрганизацияПунктРазгрузки"] = СведенияПоДокументу["ГрузополучательПунктРазгрузкиАдрес"];

    ОбластьШапка.Параметры["ОрганизацияИНН"]= СведенияПоДокументу["ГрузополучательИНН"];

    ОбластьШапка.Параметры["ДокументДата"]= ВыбДокумент["Дата"];

    ОбластьШапка.Параметры["НомерЧека"]= "001" + Прав(СведенияПоДокументу["НомерДокумента"], 6);

    СуммаИтого = 0;

    ТабДокумент.Вывести(ОбластьШапка);
    //А.М.А+
    ТЗ = ВыбДокумент["Сделка"].Выгрузить();
    //А.М.А-

    Для НомерСтрокиВыборки = 2 По КоличествоСтрок Цикл

    Строка= СведенияПоТабличнойЧасти[НомерСтрокиВыборки];

    ОбластьПозиция = Макет.ПолучитьОбласть("Позиция");

    Цена = ВыбДокумент["Товары"][Строка["НомерСтроки"] - 1]["Цена_Транзит"];

    Скидка = ВыбДокумент["Товары"][Строка["НомерСтроки"] - 1]["ПроцентСкидкиНаценки"];

    ДокумЗаказ = ВыбДокумент["Сделка"];

    Если (ТипЗнч(ДокумЗаказ) = Тип("ДокументСсылка.ЗаказПокупателя")) Тогда

    //А.М.А+
    // Для Каждого СтрокаДокумЗаказТовары из ДокумЗаказ.Товары Цикл
    Для Каждого СтрокаДокумЗаказТовары из ТЗ Цикл
    //А.М.А-

    Если СокрЛП(" + СтрокаДокумЗаказТовары.Номенклатура.Код) = СокрЛП(" + Строка.Код) И Строка.СерияНоменклатуры.Ссылка = СтрокаДокумЗаказТовары.СерияНоменклатуры.Ссылка
    // А.М.А+
    И СтрокаДокумЗаказТовары.Количество = Строка.Количество тогда
    //А.М.А- я тут точно не знаю, где количество у Вас

    Цена = СтрокаДокумЗаказТовары.ладЦена;

    Скидка = СтрокаДокумЗаказТовары.ладПроцентСкидкиНаценкиП;

    //А.М.А+
    ТЗ.Удалить(СтрокаДокумЗаказТовары);
    //А.М.А-

    Прервать;

    КонецЕсли;

    КонецЦикла;

    КонецЕсли;

    Количество = Строка["Количество"];

    ЦенаСоСкидкой = Окр(Цена - Цена * Скидка / 100, 2);

    Сумма = Цена* Количество;

    СуммаСоСкидкой = ЦенаСоСкидкой * Количество;

    СуммаИтого = СуммаИтого + СуммаСоСкидкой;

    ОбластьПозиция.Параметры["Позиция"] = НомерСтрокиВыборки - 1;

    ОбластьПозиция.Параметры["ТоварНаименование"] = Строка["ТоварНаименованиеКраткое"];

    ОбластьПозиция.Параметры["Количество"] = Количество;

    ОбластьПозиция.Параметры["Цена"] = ЦенаСоСкидкой;

    ОбластьПозиция.Параметры["Сумма"] = СуммаСоСкидкой;

    ТабДокумент.Вывести(ОбластьПозиция);

    КонецЦикла;
```
---
а разве это не тоже самое,что Вы в (8) писали ? Хм
---
Я же комментарий свой добавил, где внес изменения и что нужно заменить)))
---
Я увидел) имею ввиду, что как и в (8) мы просто количество сравниваем по итогу то . Ну ещё и удаляем строки.
Суть то одна, если количество одинаково будет ? то не отработает же ?
---
Нет суть в том, что Вы все данные из табличной части выгружаете в Таблицу значение. А дальше поиск будет уже по Таблице значений. Когда вы данные найдете в таблице значений, Вы удаляете данную, найденную строку. Этим вы исключаете все свои нюансы.

Вот 3 наши строки в ТЧ
1)тов1 - Серия1 - 100
2)тов1 - Серия1 - 100
3)тов1 - Серия1 - 200

Первый раз: Поиск ищет по тов1, серия1, кол = 100
Строку 1 нашел - ОК -> удалил. Что осталось?
2)тов1 - Серия1 - 100
3)тов1 - Серия1 - 200

Второй раз: Поиск ищет по тов1, серия1, кол = 100
Строку 2 нашел (первой то нет уже)- ОК -> удалил. Что осталось?
3)тов1 - Серия1 - 200
---
Спасибо Вам. Хотел поинтересоваться ради интереса своего. Давно вы программируете на 1с ?)
---
пожалуйста. 2 года.
---
В помошь вам, есть такой способ у ТЧ
```1c
    найтистроки(отбор)
```

Находит строки с указанными в отборе значениями...возвращает массив найденных строк...что бы вы не писали такой ужас...уж простите за такие слова..