#0
by Dmitriy_Kolesnikov
Подскажите, как красиво решить задачу. Есть ТЗ с большим количеством колонок (они формируются динамически, количество всегда разное) Мне надо узнать для каждой строки: заполнена ли хотя бы одна ячейка этой строки, начиная с пятой (например) колонки. Как это сделать красиво, не перебирая в цикле все колонкиячейки подряд? Все значения типа число.
#1
by Любопытная
А как формируются колонки? В процессе формирования считать сумму всех ячеек по строке и отсеивать те, где сумма = 0.
#2
by Dmitriy_Kolesnikov
сначала формируется таблица и выводится в табличное поле формы. Потом юзер её заполняет числами. И только потом я должен проанализировать, что он там навводил. Как посчитать сумму всех ячеек по строке, начиная с пятой, не перебирая циклом все ячейки?
#7
by Dmitriy_Kolesnikov
некрасиво и громоздко. Почему я могу посчитать итог колонки одной строкой без цикла, но не могу посчитать итог строки?
#14
by undertaker
сделать массив по количеству строк, по умолчанию там нули, в элемент массива по номеру строки при изменении в ячейке если не 0, то писать 1, потом анализировать массив
#15
by lodger
ха. ну подумай логически, тебе нужно от платформы узнать где что введено в таблице. угадай как она будет искать твои значения? правильно. циклом. только вот платформенные функции с ограниченными циклами во имя универсальности или заточенности под определенную задачу, типа как НайтиСтроки. так что громозди свой Для Каждого Цикл.
#16
by Ildarovich
Если числа в таблице - положительные, а строки - пронумерованы (ведь это табличное поле формы), то можно: 1) добавить в конец таблицы строку с нулями - образцовую незаполненную строку; 2) отсортировать ТЗ по колонкам, начиная с пятой, и далее - по колонке с номером; 3) найти номер Х образцовой строки в отсортированной таблице; 4) признаком заполненности строки будет то, что ее номер в отсортированной таблице будет больше Х. Все это можно сделать, не используя ни одного цикла.
#17
by Ildarovich
+ Если числа могут быть и отрицательными, то придется добавлять ограничивающие строки и в начало и в конец таблицы. Незаполненные строки тогда окажутся между ограничивающими после соответствующей сортировки.
#18
by Неверный Параметр И
Не хочешь циклы - пиши флаги в момент ввода. Ввел пользователь что-то в 6ю колонку, значит после 5й что-то есть.
#21
by lodger
ни одного объявленного в коде цикла. зато неявных сразу 2 (это еще неизвестно каким образом платформа проводит сортировку по множеству колонок, может там циклы в цикле)
#22
by Ildarovich
++ Все, наверное, еще гораздо проще. Незаполненные строки легко найти отбором по структуре А то, что предлагается делать в в момент ввода значения, можно сделать по указанному отбору методом ЗаполнитьЗначения. ...это еще неизвестно... ...может там циклы в цикле... Практика показывает, что платформенная сортировка - быстрая операция. Обгоняет любой цикл.
#23
by Ildarovich
А вообще вопрос интересный. По поводу сортировки. Его можно переформулировать так: как быстрее найти минимум в колонке большой таблицы значений: через сортировку и выбор значения из первой строки отсортированной таблицы или путем обхода таблицы типа: Кто-нибудь знает ответ?
#25
by Ildarovich
+ В общем, эксперименты "на коллайдере" показали, что сортировка (из-за N Log N) начинает явно проигрывать циклу, начиная с таблиц размером 20 тысяч строк. Это к тому, что для небольших таблиц (а пользователь вряд-ли будет в диалоге работать с очень большой таблицей) прием из вполне рабочий. Другое дело, что еще лучше и проще. Ну и более общий вывод, который можно сделать после экспериментов, что вопрос эффективности в данном случае не является актуальным: любой метод поиска пустых строк в ТЗ и с циклом и без цикла работает достаточно быстро, чтобы оператор не замечал этого времени и оптимизации не требовалось.
#27
by Dmitriy_Kolesnikov
"Не хочешь циклы - пиши флаги в момент ввода. Ввел пользователь что-то в 6ю колонку, значит после 5й что-то есть" - уже плавали. Всё хорошо, пока вы просто изменяете значения ячеек. Но как только вы начинаете добавлять и удалять строки - Элемент.ТекущаяСтрока начинает приобретать самые разные значения. То строка до удалённой, то после. И когда вы флагу в этой самой текущей строке начинаете что-то присваивать, то это не имеет отношения к реальности. &НаСервере
#28
by Ildarovich
Из непонятно, подошел ответ из или нет? Там предлагалось сформировать структуру: и находить незаполненные строки методом Структуру можно заполнить один раз при формировании колонок формы и хранить как переменную формы. Кажется, что это как раз то, что нужно. Или нет?
#29
by Dmitriy_Kolesnikov
не подошел, потому что на самом деле: 1. Надо находить строки не только с нулевым значением, но и с -1. То есть либо 0, либо -1. 2. Количество колонок очень большое (около 60), и чтобы их засунуть в структуру отбора, всё равно нужен цикл. 3. Параллельно можнонужно ещё засовывать данные в некую структуру. В итоге сделал двойной цикл.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Таблицы, таблицы, таблицы... Будь они неладны
- Как проверить скопирован ли документ?
- Как проверить значение перечисления в запросе?
- Не удалось проверить целостность app-sentx, код возврата -1073741819
- Подскажите плиз! Как проверить на идентичность 2 таблицы значений!
- проверить товар на вхождение в список
- Как проверить тч на заполнение?
- Как в Список Значений загрузить колонку Таблицы Значений?
- Заполнение документа MS Word из среды 1С:Предприятие .Заполнение закладок
- Как проверить строку табличной части на заполнение
- Заполнение таблицы данными из таблицы значений
- Заполнение дерева значений из таблицы значений
В этой группе 1С
- УТ 11 - БП 3.0 Заказы поставщикам в синхронизации данных
- Согласование в Документооборот КОРП
- v7: FprnM1C82_54FZ.dll
- почему клиент серверные базы долго обновляются?
- ЗУП 3.1 Вычеты на НДФЛ что я делаю не так?
- v7: 77 отчёт по НДС не выгружается, просит ИНН продавца при коде операции 20
- Подключение клиента к 1С через транслированный порт.
- Розница 2.2 базовая. Можно как то заменить стандартное РМК или изменить его?
- 1С УФ раскрасить строки ТЧ документа ...
- 1С 8 с ключами 7.7
- СКД. Как сделать в отчете на СКД ячейку доступную для редактирования?
- Где находятся правила обмена в конф Розница 2.0?
- Управление небольшой фирмой 1.6 Клиент-Банк
- Дополнительный внешний отчет. Передача параметра. УТ 11.2
- УПП - План закупок на основании плана продаж на месяц
- 1С ЗУП Среднесписочная численность
- УстановитьПривилегированныйРежим в форме объекта
- ЗУП3.1 Полный свод за несколько месяцев - кривое сальдо
- Термопринтер из Китая OCPP-583
- Печатная форма HTML