Одинаковые строки в табличной части при печати

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

Печать "Товарного чека" :
КоличествоСтрок          = СведенияПоТабличнойЧасти.Количество();

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

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

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

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

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

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

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

Для НомерСтрокиВыборки = 2 По КоличествоСтрок Цикл   
    
    Строка= СведенияПоТабличнойЧасти[НомерСтрокиВыборки];
    
    ОбластьПозиция = Макет.ПолучитьОбласть("Позиция");
    
    Цена  = ВыбДокумент["Товары"][Строка["НомерСтроки"] - 1]["Цена_Транзит"];
    
    Скидка = ВыбДокумент["Товары"][Строка["НомерСтроки"] - 1]["ПроцентСкидкиНаценки"];
    
    ДокумЗаказ = ВыбДокумент["Сделка"];                         
    
    Если (ТипЗнч(ДокумЗаказ) = Тип("ДокументСсылка.ЗаказПокупателя")) Тогда
        
        Для Каждого СтрокаДокумЗаказТовары из ДокумЗаказ.Товары Цикл
            
            Если СокрЛП("" + СтрокаДокумЗаказТовары.Номенклатура.Код) = СокрЛП("" + Строка.Код)
                
                И Строка.СерияНоменклатуры.Ссылка = СтрокаДокумЗаказТовары.СерияНоменклатуры.Ссылка Тогда                 
                
                Цена    = СтрокаДокумЗаказТовары.ладЦена;
                
                Скидка    = СтрокаДокумЗаказТовары.ладПроцентСкидкиНаценкиП;
                
                Прервать;
                
            КонецЕсли;
            
        КонецЦикла;
        
    КонецЕсли;
    
    Количество  = Строка["Количество"];
    
    ЦенаСоСкидкой  = Окр(Цена - Цена * Скидка / 100, 2);
    
    Сумма  = Цена* Количество;
    
    СуммаСоСкидкой  = ЦенаСоСкидкой * Количество;
    
    СуммаИтого  = СуммаИтого + СуммаСоСкидкой;
    
    ОбластьПозиция.Параметры["Позиция"]  = НомерСтрокиВыборки - 1;
    
    ОбластьПозиция.Параметры["ТоварНаименование"] = Строка["ТоварНаименованиеКраткое"];
    
    ОбластьПозиция.Параметры["Количество"]  = Количество;
    
    ОбластьПозиция.Параметры["Цена"]  = ЦенаСоСкидкой;
    
    ОбластьПозиция.Параметры["Сумма"]   = СуммаСоСкидкой;
    
    ТабДокумент.Вывести(ОбластьПозиция);
    
КонецЦикла;  
Показать


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

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

Собственно вопрос, почему ? не могу понять, спасибо заранее !
По теме из базы знаний
Найденные решения
17. motiask 10.06.20 20:02 Сейчас в теме
(16)
КоличествоСтрок          = СведенияПоТабличнойЧасти.Количество();

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

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

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

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

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

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

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

Для НомерСтрокиВыборки = 2 По КоличествоСтрок Цикл   
    
    Строка= СведенияПоТабличнойЧасти[НомерСтрокиВыборки];
    
    ОбластьПозиция = Макет.ПолучитьОбласть("Позиция");
    
    Цена  = ВыбДокумент["Товары"][Строка["НомерСтроки"] - 1]["Цена_Транзит"];
    
    Скидка = ВыбДокумент["Товары"][Строка["НомерСтроки"] - 1]["ПроцентСкидкиНаценки"];
    
    ДокумЗаказ = ВыбДокумент["Сделка"];                         
    
    Если (ТипЗнч(ДокумЗаказ) = Тип("ДокументСсылка.ЗаказПокупателя")) Тогда
        
        //А.М.А+
        //    Для Каждого СтрокаДокумЗаказТовары из ДокумЗаказ.Товары Цикл
        Для Каждого СтрокаДокумЗаказТовары из ТЗ Цикл
        //А.М.А-
            
            Если СокрЛП("" + СтрокаДокумЗаказТовары.Номенклатура.Код) = СокрЛП("" + Строка.Код) И Строка.СерияНоменклатуры.Ссылка = СтрокаДокумЗаказТовары.СерияНоменклатуры.Ссылка 
                // А.М.А+
                И СтрокаДокумЗаказТовары.Количество = Строка.Количество тогда 
                //А.М.А- я тут точно не знаю, где количество у Вас                
                
                Цена    = СтрокаДокумЗаказТовары.ладЦена;
                
                Скидка    = СтрокаДокумЗаказТовары.ладПроцентСкидкиНаценкиП;
                
                //А.М.А+
                ТЗ.Удалить(СтрокаДокумЗаказТовары);
                //А.М.А-
                
                Прервать;
                
            КонецЕсли;
            
        КонецЦикла;
        
    КонецЕсли;
    
    Количество  = Строка["Количество"];
    
    ЦенаСоСкидкой  = Окр(Цена - Цена * Скидка / 100, 2);
    
    Сумма  = Цена* Количество;
    
    СуммаСоСкидкой  = ЦенаСоСкидкой * Количество;
    
    СуммаИтого  = СуммаИтого + СуммаСоСкидкой;
    
    ОбластьПозиция.Параметры["Позиция"]  = НомерСтрокиВыборки - 1;
    
    ОбластьПозиция.Параметры["ТоварНаименование"] = Строка["ТоварНаименованиеКраткое"];
    
    ОбластьПозиция.Параметры["Количество"]  = Количество;
    
    ОбластьПозиция.Параметры["Цена"]  = ЦенаСоСкидкой;
    
    ОбластьПозиция.Параметры["Сумма"]   = СуммаСоСкидкой;
    
    ТабДокумент.Вывести(ОбластьПозиция);
    
КонецЦикла;  
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. motiask 10.06.20 16:13 Сейчас в теме
ну, судя по тому, как я понял код, все дело в твоем цикле "Для Каждого СтрокаДокумЗаказТовары из ДокумЗаказ.Товары Цикл"

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

цикл нашел на первой строчке значение и дальше ты делаешь прерывание.
4. Intercititude 10.06.20 16:14 Сейчас в теме
(2) Да, вы правы. Но как исправить это, чтобы отрабатывало корректно ?хм
3. a1ex4ndr 5 10.06.20 16:13 Сейчас в теме
Потому что
тут
 Для Каждого СтрокаДокумЗаказТовары из ДокумЗаказ.Товары Цикл
            
            Если СокрЛП("" + СтрокаДокумЗаказТовары.Номенклатура.Код) = СокрЛП("" + Строка.Код)
                
                И Строка.СерияНоменклатуры.Ссылка = СтрокаДокумЗаказТовары.СерияНоменклатуры.Ссылка Тогда                 
                
                Цена    = СтрокаДокумЗаказТовары.ладЦена;
                
                Скидка    = СтрокаДокумЗаказТовары.ладПроцентСкидкиНаценкиП;
                
                Прервать;
                
            КонецЕсли;
            
        КонецЦикла;
Показать

как только находится первое вхождение по номенклатуре, дальше уже не ищется, а подставляется то что нашел.
5. Intercititude 10.06.20 16:14 Сейчас в теме
(3) Путём анализа пришёл тоже к этому да. Но как исправить, чтобы было корректно ?
6. motiask 10.06.20 16:14 Сейчас в теме
Табличная часть "Сделка" количесто имеет?
7. Intercititude 10.06.20 16:15 Сейчас в теме
8. motiask 10.06.20 16:16 Сейчас в теме
Если да, тогда связать Если СокрЛП("" + СтрокаДокумЗаказТовары.Номенклатура.Код) = СокрЛП("" + Строка.Код)

И Строка.СерияНоменклатуры.Ссылка = СтрокаДокумЗаказТовары.СерияНоменклатуры.Ссылка И <Товары.Количество> = <Сделка.Количество>
9. Intercititude 10.06.20 16:21 Сейчас в теме
(8) А если количество тоже одинаковое будет?мне кажется не вариант.
10. motiask 10.06.20 16:23 Сейчас в теме
есть идентификатор строки?
11. Intercititude 10.06.20 16:26 Сейчас в теме
(10)что имеется ввиду? нету вроде как
12. motiask 10.06.20 16:30 Сейчас в теме
Это поле для связи двух Табличных частей.

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

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

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

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

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

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

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

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

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

Для НомерСтрокиВыборки = 2 По КоличествоСтрок Цикл   
    
    Строка= СведенияПоТабличнойЧасти[НомерСтрокиВыборки];
    
    ОбластьПозиция = Макет.ПолучитьОбласть("Позиция");
    
    Цена  = ВыбДокумент["Товары"][Строка["НомерСтроки"] - 1]["Цена_Транзит"];
    
    Скидка = ВыбДокумент["Товары"][Строка["НомерСтроки"] - 1]["ПроцентСкидкиНаценки"];
    
    ДокумЗаказ = ВыбДокумент["Сделка"];                         
    
    Если (ТипЗнч(ДокумЗаказ) = Тип("ДокументСсылка.ЗаказПокупателя")) Тогда
        
        //А.М.А+
        //    Для Каждого СтрокаДокумЗаказТовары из ДокумЗаказ.Товары Цикл
        Для Каждого СтрокаДокумЗаказТовары из ТЗ Цикл
        //А.М.А-
            
            Если СокрЛП("" + СтрокаДокумЗаказТовары.Номенклатура.Код) = СокрЛП("" + Строка.Код) И Строка.СерияНоменклатуры.Ссылка = СтрокаДокумЗаказТовары.СерияНоменклатуры.Ссылка 
                // А.М.А+
                И СтрокаДокумЗаказТовары.Количество = Строка.Количество тогда 
                //А.М.А- я тут точно не знаю, где количество у Вас                
                
                Цена    = СтрокаДокумЗаказТовары.ладЦена;
                
                Скидка    = СтрокаДокумЗаказТовары.ладПроцентСкидкиНаценкиП;
                
                //А.М.А+
                ТЗ.Удалить(СтрокаДокумЗаказТовары);
                //А.М.А-
                
                Прервать;
                
            КонецЕсли;
            
        КонецЦикла;
        
    КонецЕсли;
    
    Количество  = Строка["Количество"];
    
    ЦенаСоСкидкой  = Окр(Цена - Цена * Скидка / 100, 2);
    
    Сумма  = Цена* Количество;
    
    СуммаСоСкидкой  = ЦенаСоСкидкой * Количество;
    
    СуммаИтого  = СуммаИтого + СуммаСоСкидкой;
    
    ОбластьПозиция.Параметры["Позиция"]  = НомерСтрокиВыборки - 1;
    
    ОбластьПозиция.Параметры["ТоварНаименование"] = Строка["ТоварНаименованиеКраткое"];
    
    ОбластьПозиция.Параметры["Количество"]  = Количество;
    
    ОбластьПозиция.Параметры["Цена"]  = ЦенаСоСкидкой;
    
    ОбластьПозиция.Параметры["Сумма"]   = СуммаСоСкидкой;
    
    ТабДокумент.Вывести(ОбластьПозиция);
    
КонецЦикла;  
Показать
19. Intercititude 10.06.20 21:08 Сейчас в теме
(17)а разве это не тоже самое,что Вы в (8) писали ? Хм
20. motiask 10.06.20 21:10 Сейчас в теме
(19)Я же комментарий свой добавил, где внес изменения и что нужно заменить)))
21. Intercititude 10.06.20 21:50 Сейчас в теме
(20) Я увидел) имею ввиду, что как и в (8) мы просто количество сравниваем по итогу то . Ну ещё и удаляем строки.
Суть то одна, если количество одинаково будет ? то не отработает же ?
22. motiask 10.06.20 21:58 Сейчас в теме
(21)Нет суть в том, что Вы все данные из табличной части выгружаете в Таблицу значение. А дальше поиск будет уже по Таблице значений. Когда вы данные найдете в таблице значений, Вы удаляете данную, найденную строку. Этим вы исключаете все свои нюансы.

Вот 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
Intercititude; +1 Ответить
23. Intercititude 11.06.20 12:41 Сейчас в теме
(22) Спасибо Вам. Хотел поинтересоваться ради интереса своего. Давно вы программируете на 1с ?)
24. motiask 11.06.20 14:52 Сейчас в теме
25. bmk74 243 11.06.20 15:16 Сейчас в теме
(23)
В помошь вам, есть такой способ у ТЧ
найтистроки(отбор)

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

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот