Как узнать, что цикл сейчас находится на последней строке группы документов?
Таблица заполняется данными из запроса
Эта таблица выводит идентичные документы вместе,например:
документ1
документ1
документ1
документ1
документ1
документ1
документ2
документ2
документ2
документ3
документ3
документ3
документ3
В последней строке группы документов нужно,чтобы другая колонка выводила информацию.
Как узнать, что цикл сейчас находится на последней строке группы документов?
Для каждого строка из ТЗ Цикл
//Здесь заполняется таблица.....
КонецЦикла;
Эта таблица выводит идентичные документы вместе,например:
документ1
документ1
документ1
документ1
документ1
документ1
документ2
документ2
документ2
документ3
документ3
документ3
документ3
В последней строке группы документов нужно,чтобы другая колонка выводила информацию.
Как узнать, что цикл сейчас находится на последней строке группы документов?
По теме из базы знаний
- Сравнение 1С8 и Navision
- Разработка и сценарное тестирование с Vanessa-ADD. Концепция, теория и сквозной пример создания сценария
- Разработка и сценарное тестирование с Vanessa-ADD. Установка инструментов. Запись действий пользователя и выполнение сценариев
- Конфигурация Flowcon
- Разработка и сценарное тестирование с Vanessa-ADD. Практические примеры сценариев. Шаги встроенной библиотеки
Найденные решения
(21)так- же, после
строка = Тз.получить(к);
переменная строка ни чем не отличается от строки в вашем цикле
строка = Тз.получить(к);
переменная строка ни чем не отличается от строки в вашем цикле
док = ТЗ.Получить(0).Документ;
Для к=0 по тз.Количество()-1 цикл
строка = Тз.получить(к);
//здесь идет ваше заполнение таблицы цикла
//здесь проверка на последний элемент
Если не к = тз.Количество()-1 тогда
следСтрока = Тз.получить(к+1);
Если не следСтрока.Документ = док тогда
//это последний
док = следСтрока.Документ;
//конец проверки
КонецЕсли;
КонецЕсли;
КонецЦикла;
Показать
Ух сколько всего! Похрустели мозгами! А что мешает к тому что уже работает добавить проверку на последнюю строку?
P.S. А, предлагали же уже схожее решение в (23)
ИндексПоследнейСтроки = ТЗ.Количество() - 1;
Для Каждого Строка ИЗ ТЗ Цикл
ТекущийДокумент = Строка.Документ;
ТекущийИндекс = ТЗ.Индекс(Строка);
Если ТекущийИндекс < ИндексПоследнейСтроки Тогда
СледующийДокумент = ТЗ[ТекущийИндекс + 1].Документ;
Иначе
СледующийДокумент = Неопределено
КонецЕсли;
Если СледующийДокумент <> ТекущийДокумент Тогда
Сообщить("Счастье!");
КонецЕсли;
КонецЦикла
ПоказатьP.S. А, предлагали же уже схожее решение в (23)
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(3)сообщение выводит только на последней строке всей таблицы.Наверное я неправильно объяснил.
На скрине видны 2 колонки. Накладная и бонусная накладная.Все накладные документ Реализация товаров и услуг.На последней строке каждой группы накладных должна заполняться колонка "Бонусная накладная". На скрине красными черточками указал места, где должны быть значения у колонки "Бонусная накладная".
На скрине видны 2 колонки. Накладная и бонусная накладная.Все накладные документ Реализация товаров и услуг.На последней строке каждой группы накладных должна заполняться колонка "Бонусная накладная". На скрине красными черточками указал места, где должны быть значения у колонки "Бонусная накладная".
Прикрепленные файлы:
(7)
Какой тогда критерий предупреждения, что это - последний документ этого вида, если все документы одного вида ?
Нужно отличить Накладную от бонусной накладной ?
Все накладные документ Реализация товаров и услуг
Эта таблица выводит идентичные документы вместе
Какой тогда критерий предупреждения, что это - последний документ этого вида, если все документы одного вида ?
Нужно отличить Накладную от бонусной накладной ?
(11)
Допустим в колонке "Накладная" 10 строке
1.Реализация товаров и услуг А0635041
2.Реализация товаров и услуг А0635041
3.Реализация товаров и услуг А0635041 -----здесь выводим в колонке "Бонусная накладная" выводил "ааааа"
4.Реализация товаров и услуг А0635658
5.Реализация товаров и услуг А0635658
6.Реализация товаров и услуг А0635658
7.Реализация товаров и услуг А0635658 -----здесь выводим в колонке "Бонусная накладная" выводил "ааааа"
8.Реализация товаров и услуг А0636024
9.Реализация товаров и услуг А0636024
10.Реализация товаров и услуг А0636024-----здесь выводим в колонке "Бонусная накладная" выводил "ааааа"
Нужно отличить Накладную от бонусной накладной ?
- нет
Допустим в колонке "Накладная" 10 строке
1.Реализация товаров и услуг А0635041
2.Реализация товаров и услуг А0635041
3.Реализация товаров и услуг А0635041 -----здесь выводим в колонке "Бонусная накладная" выводил "ааааа"
4.Реализация товаров и услуг А0635658
5.Реализация товаров и услуг А0635658
6.Реализация товаров и услуг А0635658
7.Реализация товаров и услуг А0635658 -----здесь выводим в колонке "Бонусная накладная" выводил "ааааа"
8.Реализация товаров и услуг А0636024
9.Реализация товаров и услуг А0636024
10.Реализация товаров и услуг А0636024-----здесь выводим в колонке "Бонусная накладная" выводил "ааааа"
(12)перед циклом
док = ТЗ.Получить(0).Документ;
Для к=0 по тз.Количество()-1 цикл
строка = Тз.получить(к);
Если не к = тз.Количество()-1 тогда
следСтрока = Тз.получить(к+1);
Если не следСтрока.Документ = док тогда
//это последний
док = следСтрока.Документ;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Показать
(15)
Сделал так и получил 3804 сообщений
СуммаЗаказаДо = 0;
ОтгруженоБонуса = 0;
ОтгруженоБонусаРуб = 0;
ПредоставленоСкидки = 0;
СуммаЗаказаДоРОИСкидкиДляИтога = 0;
СуммаЗаказаДоРОИБонусДляИтога = 0;
ОтгруженоБонусаДляИтога = 0;
ОтгруженоБонусаРубДляИтога = 0;
ПредоставленоСкидкиДляИтога = 0;
ОтданоКолДляИтога = 0;
СтарыйДокумент = Неопределено;
СтарыйАдрес = Неопределено;
СтарыйКонтрагент = Неопределено;
СтараяТерритория = Неопределено;
НовыйДокумент = Неопределено;
ОтданоКол = 0;
СчетчикДокументов = 0;
// -- Доработка ---Показатели приравниваются к 0 и неопределено
ТЗ = новый таблицазначений;
тз = запрос.Выполнить().Выгрузить();
//тз.ВыбратьСтроку("Акции"); //Возврат;
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("ОтчетПоАкциямМакет1");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.ЗаголовокТаб = "Отчет по акции *"+этаформа.ЭлементыФормы.ПолеВыбора1.Значение+"* за период с "+лев(строка(НачДата),10)+" по "+лев(строка(КонДата),10)+" в "+?(ФлагРасчетВШтуках=Истина,"штуках","местах");
ТабДок.Вывести(ОбластьШапка);
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьСтрокаВыделена = Макет.ПолучитьОбласть("СтрокаКР");
ОбластьСтрокаРои = Макет.ПолучитьОбласть("СтрокаРОИ");
док = ТЗ.Получить(0).РегистраторДокументПродажи;
Для каждого строкаТЗ из ТЗ Цикл
Для к=0 по тз.Количество()-1 цикл
строка = Тз.получить(к);
Если не к = тз.Количество()-1 тогда
следСтрока = Тз.получить(к+1);
Если не следСтрока.РегистраторДокументПродажи = док тогда
//это последний
Сообщить("Последний документ в группе");
док = следСтрока.РегистраторДокументПродажи;
КонецЕсли;
КонецЕсли;
КонецЦикла;
//Здесь заполняется таблица....
КонецЦикла;
ПоказатьСделал так и получил 3804 сообщений
перед циклом
перед каким циклом, перед моим циклом Для каждого строка из ТЗ Цикл или перед циклом Для к=0 по тз.Количество()-1 ?
(21)так- же, после
строка = Тз.получить(к);
переменная строка ни чем не отличается от строки в вашем цикле
строка = Тз.получить(к);
переменная строка ни чем не отличается от строки в вашем цикле
док = ТЗ.Получить(0).Документ;
Для к=0 по тз.Количество()-1 цикл
строка = Тз.получить(к);
//здесь идет ваше заполнение таблицы цикла
//здесь проверка на последний элемент
Если не к = тз.Количество()-1 тогда
следСтрока = Тз.получить(к+1);
Если не следСтрока.Документ = док тогда
//это последний
док = следСтрока.Документ;
//конец проверки
КонецЕсли;
КонецЕсли;
КонецЦикла;
Показать
(22)все отлично. Но в последнюю группу добаляет одну лишнюю строку.То есть идет последняя группа документов и потом последней строкой идет пустая колонка, в котором находится итог по этим документам.Можно сделать так,чтобы также как и с другими группами документов итог располагался на последней строке группы документов?
Под итогом имею ввиду колонка "Бонусная накладная"
Под итогом имею ввиду колонка "Бонусная накладная"
(24)
//здесь проверка на последний элемент
Если не к = тз.Количество()-1 тогда
следСтрока = Тз.получить(к+1);
Если не следСтрока.Документ = док тогда
//это последний
док = следСтрока.Документ;
КонецЕсли;
Иначе
//это последний
КонецЕсли;
//конец проверки
Показать
(26)все-таки не понимаю как это исправить
все отлично. Но в последнюю группу добаляет одну лишнюю строку.То есть идет последняя группа документов и потом последней строкой идет пустая колонка, в котором находится итог по этим документам.Можно сделать так,чтобы также как и с другими группами документов итог располагался на последней строке группы документов?
Под итогом имею ввиду колонка "Бонусная накладная"
Под итогом имею ввиду колонка "Бонусная накладная"
(1)
Т.е. нас интересует не последняя строка цикла, а принадлежность к последней строке группы документов?
Тогда вопрос : Документы, которые потом группируются по виду, изначально, отсортированы по виду или массив неупорядоченный ?
Т.е. предпоследний вид - РКО, последний ПКО.
Документы идут в след.порядке:
РКО, ( молчим)
ПКО , ( кричим)
СчетФактура, (что говорим ???)
ПКО, (если снова кричим , то про что ?)
Такова картина мира ?
Как узнать, что цикл сейчас находится на последней строке группы документов?
Т.е. нас интересует не последняя строка цикла, а принадлежность к последней строке группы документов?
Тогда вопрос : Документы, которые потом группируются по виду, изначально, отсортированы по виду или массив неупорядоченный ?
Т.е. предпоследний вид - РКО, последний ПКО.
Документы идут в след.порядке:
РКО, ( молчим)
ПКО , ( кричим)
СчетФактура, (что говорим ???)
ПКО, (если снова кричим , то про что ?)
Такова картина мира ?
(6)
документы отсортированы и у все документы имеют тип Реализация товаров и услуг.На скрине в (7) видно
Т.е. нас интересует не последняя строка цикла, а принадлежность к последней строке группы документов?
-да,именно.
Тогда вопрос : Документы, которые потом группируются по виду, изначально, отсортированы по виду или массив неупорядоченный ?
-
документы отсортированы и у все документы имеют тип Реализация товаров и услуг.На скрине в (7) видно
(1)чтобы подобные вопросы не возникали, создайте список документов и обходите циклом именно этот список, а не всю "кучу" данных.
МассивДокументов = ТЗ.Скопировать(, "Накладная,ДатаНакладной");
МассивДокументов.Сортировать("ДатаНакладной");
МассивДокументов = МассивДокументов.ВыгрузитьКолонку("Накладная");
Для Каждого Документ Из МассивДокументов Цикл
СтрокиПоДокументу = ТЗ.НайтиСтроки(Новый Структура("Накладная", Документ))
Для Каждого СтрокаПоДокументу Из СтрокиПоДокументу Цикл
//делаем, что необходимо
КонецЦикла;
КонецЦикла;
Показать
(2) -(4) если вы думаете, что дали решение, то ошибаетесь
тс - это разработка сколково и очень часто вопрос задан от балды, а нужно нечто другое.
в примере ясно, что нужно определять не поледнюю строку в цикле, а последнюю строку из массива порций строк.
сейчас будет две страницы обсуждения, как выделить порцию строк в цикле.
чтобы не мучились...
перед циклом в служебную переменную запоминаем первый документ
и в конце итерации проверяем
тс - это разработка сколково и очень часто вопрос задан от балды, а нужно нечто другое.
в примере ясно, что нужно определять не поледнюю строку в цикле, а последнюю строку из массива порций строк.
сейчас будет две страницы обсуждения, как выделить порцию строк в цикле.
чтобы не мучились...
перед циклом в служебную переменную запоминаем первый документ
и в конце итерации проверяем
если слПерем <> тДокумент тогда
Сообщитьчтото(слПерем);
слПерем = тДокумент;
конецесли;
Как то так, надо еще в отладке доотладить
ЭтоПоследнийДокумент = Неопределено;
Для Каждого СтрокаТЗ Из ТЗ Цикл
Если Не ЭтоПоследнийДокумент = Неопределено
И Не ЭтоПоследнийДокумент = СтрокаТЗ.Документ Тогда
Инд = ТЗ.Индекс(СтрокаТЗ) - 1;
Сообщить(ТЗ[Инд].ВтораяКолонка);
КонецЕсли;
ЭтоПоследнийДокумент = СтрокаТЗ.Документ;
КонецЦикла;
Сообщить(СтрокаТЗ.ВтораяКолонка);
Показать
(23) выводит также как в (22)
и ваш способ очень короткий конечно)
Можно как-то это исправить последней группой документов?
все отлично. Но в последнюю группу добаляет одну лишнюю строку.То есть идет последняя группа документов и потом последней строкой идет пустая колонка, в котором находится итог по этим документам.Можно сделать так,чтобы также как и с другими группами документов итог располагался на последней строке группы документов?
Под итогом имею ввиду колонка "Бонусная накладная"
Под итогом имею ввиду колонка "Бонусная накладная"
и ваш способ очень короткий конечно)
Можно как-то это исправить последней группой документов?
(27)
Для каждого строкаТЗ из ТЗ Цикл
Инд = ТЗ.Индекс(строкаТЗ);
Если ТЗ.Количество() - 1 = Инд ИЛИ ТЗ[Инд].РегистраторДокументПродажи <> ТЗ[Инд + 1].РегистраторДокументПродажи и ПредоставленоСкидки <> 0 и не ТЗ[Инд].РегистраторДокументПродажи =Null Тогда
//// Это последний в группе
Сообщить("последняя строка документа");
ОбластьСтрока.Параметры.РОИ = Окр(((СуммаЗаказаДо-ПредоставленоСкидки)/?(ПредоставленоСкидки = 0,1,ПредоставленоСкидки)*100),2);
КонецЕсли;
//// ++ Доработка
НовыйДокумент = строкаТЗ.ДокументНачисления; //----новый документ приравнивается к выборке из запроса
НовыйКонтрагент = строкаТЗ.РегистраторКонтрагент;
Если НовыйДокумент <> СтарыйДокумент И Не СтарыйДокумент = Неопределено Тогда
Если ЗначениеЗаполнено(СтарыйДокумент) Тогда
ОбластьСтрока.Параметры.Контрагент = СтарыйКонтрагент;
ОбластьСтрока.Параметры.Адрес = СтарыйАдрес;
ОбластьСтрока.Параметры.Территория = СтараяТерритория;
Если ОтданоКол<>0 Тогда
СуммаЗаказаДоРОИБонусДляИтога = СуммаЗаказаДоРОИБонусДляИтога + СуммаЗаказаДо;
ОтгруженоБонусаРубДляИтога = ОтгруженоБонусаРубДляИтога + ОтгруженоБонусаРуб;
ИначеЕсли НовыйКонтрагент <> СтарыйКонтрагент И Не СтарыйКонтрагент = Неопределено Тогда
ОбластьСтрока.Параметры.РОИ = Окр(((СуммаЗаказаДо-ПредоставленоСкидки)/?(ПредоставленоСкидки = 0,1,ПредоставленоСкидки)*100),2);
СуммаЗаказаДоРОИСкидкиДляИтога = СуммаЗаказаДоРОИСкидкиДляИтога + СуммаЗаказаДо;
ПредоставленоСкидкиДляИтога = ПредоставленоСкидкиДляИтога + ПредоставленоСкидки;
КонецЕсли;
ОбластьСтрока.Параметры.РОИ = "";
///----показатели-числа приравниваются к 0
СуммаЗаказаДо = 0;
ПредоставленоСкидки = 0;
ОтгруженоБонусаРуб = 0;
ОтгруженоБонуса = 0;
ОтданоКол = 0;
Иначе
КонецЕсли
КонецЕсли;
///----показатели-строки приравниваются к выборке запроса
СтарыйДокумент = строкаТЗ.ДокументНачисления;
//СтарыйКонтрагент = строкаТЗ.РегистраторКонтрагент;
СтарыйАдрес = строкаТЗ.АдресДоставки;
СтараяТерритория = строкаТЗ.Территория;
///---- считаются показатели, по которым считается РОИ
ОтданоКол = ОтданоКол + строкаТЗ.КоличествоПосле-строкаТЗ.ИсходноеКоличество;
СуммаЗаказаДо = СуммаЗаказаДо + строкаТЗ.ИсходнаяЦена*строкаТЗ.ИсходноеКоличество;
ПредоставленоСкидки = ПредоставленоСкидки + ?(строкаТЗ.ИсходнаяЦена>0,(строкаТЗ.ИсходнаяЦена-строкаТЗ.ЦенаПосле) * строкаТЗ.КоличествоПосле,0) ;
ОтгруженоБонусаРуб = ОтгруженоБонусаРуб + (строкаТЗ.КоличествоПосле-строкаТЗ.ИсходноеКоличество)*строкаТЗ.БазоваяЦена;
ОтгруженоБонуса = ОтгруженоБонуса + (строкаТЗ.КоличествоПосле-строкаТЗ.ИсходноеКоличество);
КонецЦикла;
Показать
(29) В приведенном коде нет ничего о том, каким образом создается строка "ОбластьСтрока", также нет информации о том, как она выводится. По всей видимости это где-то за пределами указанного кода. Таким образом предоставленный код никак не влияет на последнюю группу документов.
(30)
и сам отчет:
ТЗ = новый таблицазначений;
тз = запрос.Выполнить().Выгрузить();
//тз.ВыбратьСтроку("Акции"); //Возврат;
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("ОтчетПоАкциямМакет1");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.ЗаголовокТаб = "Отчет по акции *"+этаформа.ЭлементыФормы.ПолеВыбора1.Значение+"* за период с "+лев(строка(НачДата),10)+" по "+лев(строка(КонДата),10)+" в "+?(ФлагРасчетВШтуках=Истина,"штуках","местах");
ТабДок.Вывести(ОбластьШапка);
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьСтрокаВыделена = Макет.ПолучитьОбласть("СтрокаКР");
ОбластьСтрокаРои = Макет.ПолучитьОбласть("СтрокаРОИ");
Для каждого строкаТЗ из ТЗ Цикл
Инд = ТЗ.Индекс(строкаТЗ);
Если ТЗ.Количество() - 1 = Инд ИЛИ ТЗ[Инд].РегистраторДокументПродажи <> ТЗ[Инд + 1].РегистраторДокументПродажи и ПредоставленоСкидки <> 0 и не ТЗ[Инд].РегистраторДокументПродажи =Null Тогда
//// Это последний в группе
Сообщить("последняя строка документа");
ОбластьСтрока.Параметры.РОИ = Окр(((СуммаЗаказаДо-ПредоставленоСкидки)/?(ПредоставленоСкидки = 0,1,ПредоставленоСкидки)*100),2);
КонецЕсли;
//// ++ Доработка
НовыйДокумент = строкаТЗ.ДокументНачисления; //----новый документ приравнивается к выборке из запроса
НовыйКонтрагент = строкаТЗ.РегистраторКонтрагент;
Если НовыйДокумент <> СтарыйДокумент И Не СтарыйДокумент = Неопределено Тогда
Если ЗначениеЗаполнено(СтарыйДокумент) Тогда
ОбластьСтрока.Параметры.Контрагент = СтарыйКонтрагент;
ОбластьСтрока.Параметры.Адрес = СтарыйАдрес;
ОбластьСтрока.Параметры.Территория = СтараяТерритория;
Если ОтданоКол<>0 Тогда
СуммаЗаказаДоРОИБонусДляИтога = СуммаЗаказаДоРОИБонусДляИтога + СуммаЗаказаДо;
ОтгруженоБонусаРубДляИтога = ОтгруженоБонусаРубДляИтога + ОтгруженоБонусаРуб;
ИначеЕсли НовыйКонтрагент <> СтарыйКонтрагент И Не СтарыйКонтрагент = Неопределено Тогда
ОбластьСтрока.Параметры.РОИ = Окр(((СуммаЗаказаДо-ПредоставленоСкидки)/?(ПредоставленоСкидки = 0,1,ПредоставленоСкидки)*100),2);
СуммаЗаказаДоРОИСкидкиДляИтога = СуммаЗаказаДоРОИСкидкиДляИтога + СуммаЗаказаДо;
ПредоставленоСкидкиДляИтога = ПредоставленоСкидкиДляИтога + ПредоставленоСкидки;
КонецЕсли;
ОбластьСтрока.Параметры.РОИ = "";
///----показатели-числа приравниваются к 0
СуммаЗаказаДо = 0;
ПредоставленоСкидки = 0;
ОтгруженоБонусаРуб = 0;
ОтгруженоБонуса = 0;
ОтданоКол = 0;
Иначе
КонецЕсли
КонецЕсли;
///----показатели-строки приравниваются к выборке запроса
СтарыйДокумент = строкаТЗ.ДокументНачисления;
//СтарыйКонтрагент = строкаТЗ.РегистраторКонтрагент;
СтарыйАдрес = строкаТЗ.АдресДоставки;
СтараяТерритория = строкаТЗ.Территория;
///---- считаются показатели, по которым считается РОИ
ОтданоКол = ОтданоКол + строкаТЗ.КоличествоПосле-строкаТЗ.ИсходноеКоличество;
СуммаЗаказаДо = СуммаЗаказаДо + строкаТЗ.ИсходнаяЦена*строкаТЗ.ИсходноеКоличество;
ПредоставленоСкидки = ПредоставленоСкидки + ?(строкаТЗ.ИсходнаяЦена>0,(строкаТЗ.ИсходнаяЦена-строкаТЗ.ЦенаПосле) * строкаТЗ.КоличествоПосле,0) ;
ОтгруженоБонусаРуб = ОтгруженоБонусаРуб + (строкаТЗ.КоличествоПосле-строкаТЗ.ИсходноеКоличество)*строкаТЗ.БазоваяЦена;
ОтгруженоБонуса = ОтгруженоБонуса + (строкаТЗ.КоличествоПосле-строкаТЗ.ИсходноеКоличество);
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
Показатьи сам отчет:
Прикрепленные файлы:
222.epf
(34) Вам уже посоветовали сделать через запрос , тем более он уже есть просто сделаете Итоги по полю РегистраторДокументПродажи
И будет у вас что-то типа
И будет у вас что-то типа
ОбходЗапроса = ОбходРезультатаЗапросаПоГруппировкам;
ВыборкаДокументПродажи = Запрос.Выполнить().Выбрать(ОбходЗапроса);
Пока ВыборкаДокументПродажи .Следующий() Цикл // цикл по документам продаж
ДетальныеЗаписи = ВыборкаДокументПродажи.Выбрать();
Пока ДетальныеЗаписи.Следующий() Цикл
ОбластьСтрока = Макет.ПолучитьОбласть();
....
....
КонецЦикла;
// тут должно быть заполнение колонки бонусная накладная
ОбластьСтрока.Параметры.БонуснаяНакладная = ...
КонецЦикла
Показать
(32)скорее всего новая строка в конце создается из-за того,что у ТЗ[Инд + 1].РегистраторДокументПродажи в конце "индекс находится за границами массива и так как выполняется данное условие, то и выводит лишнюю строку, в котором значение только в той колонке в которой считаю. Вот это значение "867,26" в конце выводит два раза.
Но как это исправить?
Если ТЗ.Количество() - 1 = Инд ИЛИ ТЗ[Инд].РегистраторДокументПродажи <> ТЗ[Инд + 1].РегистраторДокументПродажи Тогда
ОбластьСтрока.Параметры.РОИ = Окр(((СуммаЗаказаДо-ОтгруженоБонусаРуб)/?(ОтгруженоБонусаРуб = 0,1,ОтгруженоБонусаРуб)*100),2);
КонецЕсли;
Но как это исправить?
Прикрепленные файлы:
Ух сколько всего! Похрустели мозгами! А что мешает к тому что уже работает добавить проверку на последнюю строку?
P.S. А, предлагали же уже схожее решение в (23)
ИндексПоследнейСтроки = ТЗ.Количество() - 1;
Для Каждого Строка ИЗ ТЗ Цикл
ТекущийДокумент = Строка.Документ;
ТекущийИндекс = ТЗ.Индекс(Строка);
Если ТекущийИндекс < ИндексПоследнейСтроки Тогда
СледующийДокумент = ТЗ[ТекущийИндекс + 1].Документ;
Иначе
СледующийДокумент = Неопределено
КонецЕсли;
Если СледующийДокумент <> ТекущийДокумент Тогда
Сообщить("Счастье!");
КонецЕсли;
КонецЦикла
ПоказатьP.S. А, предлагали же уже схожее решение в (23)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот