Одинаковые строки в табличной части при печати
Всем добро время суток!
СведенияПоТабличнойЧасти - это Реализация из которой печатается чек.
Печать "Товарного чека" :
Проблема в том, что когда к примеру есть две строки с одинаковой номенклатурой, но цена(ЛадЦена) у них разная. То почему то берётся всё равно цена из первой строки одинаковой позиции.
Полагаю, что в этот момент :
По неизвестной мне причине берётся опять же номер строки первый.
Собственно вопрос, почему ? не могу понять, спасибо заранее !
СведенияПоТабличнойЧасти - это Реализация из которой печатается чек.
Печать "Товарного чека" :
КоличествоСтрок = СведенияПоТабличнойЧасти.Количество();
ОбластьШапка.Параметры["Организация"] = СведенияПоДокументу["ГрузополучательПолноеНаименование"];
ОбластьШапка.Параметры["ОрганизацияПунктРазгрузки"] = СведенияПоДокументу["ГрузополучательПунктРазгрузкиАдрес"];
ОбластьШапка.Параметры["ОрганизацияИНН"]= СведенияПоДокументу["ГрузополучательИНН"];
ОбластьШапка.Параметры["ДокументДата"]= ВыбДокумент["Дата"];
ОбластьШапка.Параметры["НомерЧека"]= "001" + Прав(СведенияПоДокументу["НомерДокумента"], 6);
СуммаИтого = 0;
ТабДокумент.Вывести(ОбластьШапка);
Для НомерСтрокиВыборки = 2 По КоличествоСтрок Цикл
Строка= СведенияПоТабличнойЧасти[НомерСтрокиВыборки];
ОбластьПозиция = Макет.ПолучитьОбласть("Позиция");
Цена = ВыбДокумент["Товары"][Строка["НомерСтроки"] - 1]["Цена_Транзит"];
Скидка = ВыбДокумент["Товары"][Строка["НомерСтроки"] - 1]["ПроцентСкидкиНаценки"];
ДокумЗаказ = ВыбДокумент["Сделка"];
Если (ТипЗнч(ДокумЗаказ) = Тип("ДокументСсылка.ЗаказПокупателя")) Тогда
Для Каждого СтрокаДокумЗаказТовары из ДокумЗаказ.Товары Цикл
Если СокрЛП("" + СтрокаДокумЗаказТовары.Номенклатура.Код) = СокрЛП("" + Строка.Код)
И Строка.СерияНоменклатуры.Ссылка = СтрокаДокумЗаказТовары.СерияНоменклатуры.Ссылка Тогда
Цена = СтрокаДокумЗаказТовары.ладЦена;
Скидка = СтрокаДокумЗаказТовары.ладПроцентСкидкиНаценкиП;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Количество = Строка["Количество"];
ЦенаСоСкидкой = Окр(Цена - Цена * Скидка / 100, 2);
Сумма = Цена* Количество;
СуммаСоСкидкой = ЦенаСоСкидкой * Количество;
СуммаИтого = СуммаИтого + СуммаСоСкидкой;
ОбластьПозиция.Параметры["Позиция"] = НомерСтрокиВыборки - 1;
ОбластьПозиция.Параметры["ТоварНаименование"] = Строка["ТоварНаименованиеКраткое"];
ОбластьПозиция.Параметры["Количество"] = Количество;
ОбластьПозиция.Параметры["Цена"] = ЦенаСоСкидкой;
ОбластьПозиция.Параметры["Сумма"] = СуммаСоСкидкой;
ТабДокумент.Вывести(ОбластьПозиция);
КонецЦикла;
ПоказатьПроблема в том, что когда к примеру есть две строки с одинаковой номенклатурой, но цена(ЛадЦена) у них разная. То почему то берётся всё равно цена из первой строки одинаковой позиции.
Полагаю, что в этот момент :
Для Каждого СтрокаДокумЗаказТовары из ДокумЗаказ.Товары Цикл
По неизвестной мне причине берётся опять же номер строки первый.
Собственно вопрос, почему ? не могу понять, спасибо заранее !
По теме из базы знаний
Найденные решения
(16)
КоличествоСтрок = СведенияПоТабличнойЧасти.Количество();
ОбластьШапка.Параметры["Организация"] = СведенияПоДокументу["ГрузополучательПолноеНаименование"];
ОбластьШапка.Параметры["ОрганизацияПунктРазгрузки"] = СведенияПоДокументу["ГрузополучательПунктРазгрузкиАдрес"];
ОбластьШапка.Параметры["ОрганизацияИНН"]= СведенияПоДокументу["ГрузополучательИНН"];
ОбластьШапка.Параметры["ДокументДата"]= ВыбДокумент["Дата"];
ОбластьШапка.Параметры["НомерЧека"]= "001" + Прав(СведенияПоДокументу["НомерДокумента"], 6);
СуммаИтого = 0;
ТабДокумент.Вывести(ОбластьШапка);
//А.М.А+
ТЗ = ВыбДокумент["Сделка"].Выгрузить();
//А.М.А-
Для НомерСтрокиВыборки = 2 По КоличествоСтрок Цикл
Строка= СведенияПоТабличнойЧасти[НомерСтрокиВыборки];
ОбластьПозиция = Макет.ПолучитьОбласть("Позиция");
Цена = ВыбДокумент["Товары"][Строка["НомерСтроки"] - 1]["Цена_Транзит"];
Скидка = ВыбДокумент["Товары"][Строка["НомерСтроки"] - 1]["ПроцентСкидкиНаценки"];
ДокумЗаказ = ВыбДокумент["Сделка"];
Если (ТипЗнч(ДокумЗаказ) = Тип("ДокументСсылка.ЗаказПокупателя")) Тогда
//А.М.А+
// Для Каждого СтрокаДокумЗаказТовары из ДокумЗаказ.Товары Цикл
Для Каждого СтрокаДокумЗаказТовары из ТЗ Цикл
//А.М.А-
Если СокрЛП("" + СтрокаДокумЗаказТовары.Номенклатура.Код) = СокрЛП("" + Строка.Код) И Строка.СерияНоменклатуры.Ссылка = СтрокаДокумЗаказТовары.СерияНоменклатуры.Ссылка
// А.М.А+
И СтрокаДокумЗаказТовары.Количество = Строка.Количество тогда
//А.М.А- я тут точно не знаю, где количество у Вас
Цена = СтрокаДокумЗаказТовары.ладЦена;
Скидка = СтрокаДокумЗаказТовары.ладПроцентСкидкиНаценкиП;
//А.М.А+
ТЗ.Удалить(СтрокаДокумЗаказТовары);
//А.М.А-
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Количество = Строка["Количество"];
ЦенаСоСкидкой = Окр(Цена - Цена * Скидка / 100, 2);
Сумма = Цена* Количество;
СуммаСоСкидкой = ЦенаСоСкидкой * Количество;
СуммаИтого = СуммаИтого + СуммаСоСкидкой;
ОбластьПозиция.Параметры["Позиция"] = НомерСтрокиВыборки - 1;
ОбластьПозиция.Параметры["ТоварНаименование"] = Строка["ТоварНаименованиеКраткое"];
ОбластьПозиция.Параметры["Количество"] = Количество;
ОбластьПозиция.Параметры["Цена"] = ЦенаСоСкидкой;
ОбластьПозиция.Параметры["Сумма"] = СуммаСоСкидкой;
ТабДокумент.Вывести(ОбластьПозиция);
КонецЦикла;
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Потому что
тут
как только находится первое вхождение по номенклатуре, дальше уже не ищется, а подставляется то что нашел.
тут
Для Каждого СтрокаДокумЗаказТовары из ДокумЗаказ.Товары Цикл
Если СокрЛП("" + СтрокаДокумЗаказТовары.Номенклатура.Код) = СокрЛП("" + Строка.Код)
И Строка.СерияНоменклатуры.Ссылка = СтрокаДокумЗаказТовары.СерияНоменклатуры.Ссылка Тогда
Цена = СтрокаДокумЗаказТовары.ладЦена;
Скидка = СтрокаДокумЗаказТовары.ладПроцентСкидкиНаценкиП;
Прервать;
КонецЕсли;
КонецЦикла;
Показатькак только находится первое вхождение по номенклатуре, дальше уже не ищется, а подставляется то что нашел.
(15) Обязательно почитайте по Таблицы значения. Без них никак.
https://helpme1c.ru/tablica-znachenij-v-yazyke-1s-8-v-primerax
(16)
КоличествоСтрок = СведенияПоТабличнойЧасти.Количество();
ОбластьШапка.Параметры["Организация"] = СведенияПоДокументу["ГрузополучательПолноеНаименование"];
ОбластьШапка.Параметры["ОрганизацияПунктРазгрузки"] = СведенияПоДокументу["ГрузополучательПунктРазгрузкиАдрес"];
ОбластьШапка.Параметры["ОрганизацияИНН"]= СведенияПоДокументу["ГрузополучательИНН"];
ОбластьШапка.Параметры["ДокументДата"]= ВыбДокумент["Дата"];
ОбластьШапка.Параметры["НомерЧека"]= "001" + Прав(СведенияПоДокументу["НомерДокумента"], 6);
СуммаИтого = 0;
ТабДокумент.Вывести(ОбластьШапка);
//А.М.А+
ТЗ = ВыбДокумент["Сделка"].Выгрузить();
//А.М.А-
Для НомерСтрокиВыборки = 2 По КоличествоСтрок Цикл
Строка= СведенияПоТабличнойЧасти[НомерСтрокиВыборки];
ОбластьПозиция = Макет.ПолучитьОбласть("Позиция");
Цена = ВыбДокумент["Товары"][Строка["НомерСтроки"] - 1]["Цена_Транзит"];
Скидка = ВыбДокумент["Товары"][Строка["НомерСтроки"] - 1]["ПроцентСкидкиНаценки"];
ДокумЗаказ = ВыбДокумент["Сделка"];
Если (ТипЗнч(ДокумЗаказ) = Тип("ДокументСсылка.ЗаказПокупателя")) Тогда
//А.М.А+
// Для Каждого СтрокаДокумЗаказТовары из ДокумЗаказ.Товары Цикл
Для Каждого СтрокаДокумЗаказТовары из ТЗ Цикл
//А.М.А-
Если СокрЛП("" + СтрокаДокумЗаказТовары.Номенклатура.Код) = СокрЛП("" + Строка.Код) И Строка.СерияНоменклатуры.Ссылка = СтрокаДокумЗаказТовары.СерияНоменклатуры.Ссылка
// А.М.А+
И СтрокаДокумЗаказТовары.Количество = Строка.Количество тогда
//А.М.А- я тут точно не знаю, где количество у Вас
Цена = СтрокаДокумЗаказТовары.ладЦена;
Скидка = СтрокаДокумЗаказТовары.ладПроцентСкидкиНаценкиП;
//А.М.А+
ТЗ.Удалить(СтрокаДокумЗаказТовары);
//А.М.А-
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Количество = Строка["Количество"];
ЦенаСоСкидкой = Окр(Цена - Цена * Скидка / 100, 2);
Сумма = Цена* Количество;
СуммаСоСкидкой = ЦенаСоСкидкой * Количество;
СуммаИтого = СуммаИтого + СуммаСоСкидкой;
ОбластьПозиция.Параметры["Позиция"] = НомерСтрокиВыборки - 1;
ОбластьПозиция.Параметры["ТоварНаименование"] = Строка["ТоварНаименованиеКраткое"];
ОбластьПозиция.Параметры["Количество"] = Количество;
ОбластьПозиция.Параметры["Цена"] = ЦенаСоСкидкой;
ОбластьПозиция.Параметры["Сумма"] = СуммаСоСкидкой;
ТабДокумент.Вывести(ОбластьПозиция);
КонецЦикла;
Показать
(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
Вот 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
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот