Ограничить количество строк в таблице 1с
Для того чтобы найти строки таблицы значений, в 1с 8 используется два метода: Найти и НайтиСтроки. Первый предназначен для поиска одной строки, содержащей указанное значение. Второй для поиска всех строк, соответствующих указанному отбору. Разберем оба метода подробнее.
Метод Найти
Метод таблицы значений Найти, предназначен для поиска строки таблицы, содержащей указанное значение. Если строк содержащих значение будет несколько, будет найдена только первая из них. Эту особенность надо учитывать. Поиск осуществляется только на «равно». Синтаксис метода:
В первый параметр передаем значение, которое необходимо найти. Во втором можно через запятую указываем список колонок, в которых необходимо проводить поиск. Также можно не заполнять второй параметр, тогда поиск будет учитывать значения во всех колонках таблицы. В случае успешного поиска, метод вернет строку таблицы значений. В противном случае будет получено Неопределено.
Рассмотрим простой пример. У нас есть таблица значений с колонками: Номенклатура, Количество, Цена, Сумма. Найдем строку, содержащую значение 2 в колонке Количество или в колонке Цена.
После поиска, обязательно делаем проверку на Неопределено. Иначе, в случае не найденной строки, можно получить ошибку.
При изменении значений в найденной строке, изменяются и значения в самой таблице. Это логично, так как мы работаем непосредственно со строкой таблицы значений.
Метод НайтиСтроки
Метод НайтиСтроки предназначен для поиска всех строк таблицы значений, соответствующих указанному отбору. Синтаксис метода:
Параметры отбора — это структура, где ключ — имя колонки таблицы, а значение — значение, по которому будет осуществляться поиск в данной колонке. Поиск элементов осуществляется только на «равно». Данный метод возвращает массив найденных строк таблицы, либо пустой массив, если по данным условиям ничего не найдено.
Пример 2. Пусть у нас есть Таблица значений содержащаяся в переменной Таблица, у которой есть колонки Наименование и Код.
Как и в предыдущем методе, изменение значений в найденных строках ведет к изменению значений в таблице. Это не так очевидно, и происходит из-за того, что массив найденных строк содержит ссылки на строки исходной таблицы. Это работает и в обратную сторону. То есть, если вы измените значения в таблице, они изменятся и в найденных строках.
Другие способы найти строки таблицы значений
У рассмотренных методов есть свои недостатки. Основной, поиск только на равенство. Если вам необходимо использовать более сложные конструкции отбора строк, то можно обойти таблицу значений циклом, или передать ее в запрос.
Пример 3. Воспользуемся таблицей из самого первого примера. Обработаем строки, цена в которых находится в интервале от 100 до 1000.
Пример 4. Сделаем тоже самое при помощи запроса.
Стоит заметить, что данные найденные запросом никак не связаны с таблицей значений. Это стоит учитывать, если вам необходимо изменять исходные данные.
Таблица значений часто применяется при программировании на 1С, потому что имеет множество полезных возможностей и работает очень быстро. Таблица значений создается в памяти и не сохраняется в базе данных, т.е. это временный набор данных.
//можно указать тип данных каждой колонки
//если тип данных колонки не указан, то можно хранить данные любого типа
Синтаксис: НоваяКолонка(, , , , , , , )
Добавление строк в таблицу значений
Перебор строк таблицы значений
Сортировка таблицы значений
Поиск в таблице значений
Синтаксис: НайтиЗначение(,,)
Возвращает число: 0 - значение не найдено; 1 - значение найдено
Если указан параметр , то поиск производится только по заданной строке
Если указан параметр , то поиск производится только по заданной колонке
Итоги и группировка таблицы значений
//часто требуется группировать строки и подсчитывать итоги по группам,
//в этом случае применяется метод Свернуть
Удаление строк и колонок из таблицы значений
ВНИМАНИЕ
Часто требуется удалить строки, удовлетворяющие определенному условию.
Так как при удалении строки из таблицы значений следующая строка становится текущей,
то указанная ниже программа может удалить НЕ ВСЕ необходимые строки.
В этом случае я рекомендую использовать следующий прием:
А вот еще один правильный алгоритм, предложенный Wlad:
Замечание(Туц). Предыдущий вариант не совсем правильный. Случай, когда последняя строка попадает под условие и в условии идёт обращение к строке таблицы, приводит к ошибке. Т.е. происходит попытка чтения для строки 0.
И ещё вариант, предложенный Туц:
Замечание (vligm). А я использую такой алгоритм (это, собственно говоря, шаблон):
Таблица значений как элемент диалога
Таблица значений может использоваться в экранных формах как элемент диалога с пользователем.
Методы УстановитьЗначение и ПолучитьЗначение
Эти методы позволяют обращаться к данным в таблице значений для чтения и записи.
Они могут пригодиться в особых случаях при написании универсальных программ (мастеры отчетов и т.д.).
1с8.3.9
Надо заполнить оборотный регистр данными.
Неожиданно столкнулся с ограничением на размер табличной части документа в 99 999 строк.
Можно ли это обойти.
И как заполнить регистр большим объемом данных, используя 1с Предприятие 8?
> И как заполнить регистр большим объемом данных, используя
15 млн строк по 5000 строк на документ, неужели тяжко сгенерить 3000 доков. Да и разбираться с частями в случае чего быстрее и проще, чем распроводить док на 15 млн строк.
Или тебя фузиновцы укусили?
(6) Если это мусор, то в мусорке. Зачем мусор в 1с пихать?
А если серьезно, то прямо в регистр и писать, а не в тч добавлять. Если нужен корректный регистратор, то создать служебный и его указать.
(10) Это интересно. В этом что-то есть. Писать напрямую в оборотный регистр. Благо на форме документ позволяет заполнять 500 тыс строк
(16) Есть большой объем данных. Продажи мелкой сети типа Дикси. Надо грузануть их в 1С для анализа. Один файл за один месяц 500 тыс строк. Это еще не весь ассортимент.
(21) есть такое решение - мегапрайс назвывается, он вроде в это умеет)))
(23) Корректировка записей региста
(14) Форма нужна только людям. Но я не знаю тех, кто будет просматривать мильон строк с экрана. Мазохизм однако..
Но как то странно, ТаблицыЗначений, СпискиЗначений научились делать более 100 тыс, а табличную часть нет.
А что Фузина умеет хранить более 100 тыс строк?
(37) Это специальное ограничение.
Счтается, что если тебе надо более 100К строк в ТЧ - то у тебя беда с архитектурой
Что за странная тяга тащить всякий мусор в базы 1с? Ну загрузи в любой внешний источник, подключи в 1с и анализируй на здоровье!
(37) табличная часть документа на такое количество строк - методологичекская ошибка.
1С сама рекомендует при таком количестве строк выполнять запись напрямую в регистр, не используя ТЧ, как с документом операциябух.
(0) Даже, если писать КЗР, рекомендую, разбивать весь массив на несколько документов. Иначе при объединении дубля контрагента, например, можно неожиданно записать набор в 15 млн записей.
Глянуть если что.. Проверить, что все реквизиты заполнены. На сколько я понимаю, в регистр сведений не добавишь дополнительные реквизиты
(48) Я тоже думал, что 1с8 фиолетово. Но оказалось, что не так. У меня еще толстый клиент. А "тонкий" клиент у меня умирал задолго до 100 тыс. строк
(48) забавно что врятли ктото проверял этот факт фиолетовости, в реальности внезапно начнут вылезать всякие ограничения кешей и т.п.
Формировал движения сразу по регистру через Корректировка записей регистров. Но не 15 миллионов, а поменьше.
(51) *например видел в реальной системе трабл схожий где разработчики не знали что есть ограничения, там форма генерила запрос который не влезал в запрос БД. и они долго не могли догнать почему. в итоге отделались пунктом в мануале в стиле 'а вы не делайте много строчек в документе'
(51) в соседнюю ветку зайдите. Там конечно флейма и флуда вагон, но как раз обсуждалась с примерами эта проблема.
А у фузины табличная часть это просто объекты (строки) с ссылкой при обнулении которой удаляется сам объект (строка в данном случае)
(54) неохота ковырятся там. но использовать напрямую orm с большими объемами данных это уже заявка на победу
(45) Если незачем просматривать, то не нужен документ и форма к нему.
Достаточно иметь только документ как регистратор без всяких ТЧ
(55) там нет orm все не на сервере приложений, а наоборот делается на уровне СУБД.
(56) строго говоря в 1с непериодический регистр сведений и есть просто таблица с ключами. Что конечно жесть не очевидно.
"Регистр сведений
Прикладной объект, предназначенный для хранения произвольных данных в разрезе нескольких измерений. В том числе в разрезе времени.
Например, в регистре сведений можно хранить курсы валют в разрезе валют, или цены предприятия в разрезе номенклатуры и типа цен."
(59) а теперь представьте что вы объясняете это кому то кто не знает 1с. Помните тот фильм про расизм, где в конце адвокат говорит: а теперь представьте что эта девочка белая.
(61) И в чем проблема? Или обучаемый так же не знает про БД, таблицы, ключи (в т.ч. составные), тогда зачем ему это объяснять?
В клюшках было много не логичного (типа объект Периодический), в снеговике структура как раз прозрачна и логична.
(54) Как отрабатывается сценарий "редактировал-редактировал, набил 100 строк, потом закрыл без сохранения"?
Я бы хранил все ТУПО ВО ВНЕШЕМ CSV ФАЙЛЕ и читал бы его и делал бы все что угодно ПОТОКОВЫМ ЧТЕНИЕМ в 1С.
У меня есть такой файл ровно в 15 000 000 строк. Потоковым чтением он весь построчно перечитывается 1Ской за 1 минуту.
Я думаю это будет быстрее чем пихать все это в 1С - что нерально, да еще потом сто пудово в 1С какие то фигни использовать. Когда тупо извне CSV будет в потоком чтении просто влет работать.
Но опять таки все зависит что это за данные и для чего используются, с какой периодичностью и прочее.
(54) > в соседнюю ветку зайдите
Бродит дурачок^wфузиновец по лесу^wфоруму, ищет дурачок^wфузиновец глупее себя.
(21) те у тебя в отих отчетах данные по продажам? Тем БОЛЕЕ через (68).
Потому как ты на загрузке застрял, но даже не задумался а с какой скоростью ты потом будешь в 1С это получать. Ибазу я бы не засирал.
Очень легко потоковым чтением все 30 файлов перечитать и сразу сделать отчет - хоч в 1С, хоч сразу во внешний файл. Хоч можно даже свои данные добавить.
Я две обработки таких сделал для CSV
Одна умеет перечитывать и редактировать файлы любого размера / резать их / фильтровать.
Вторая умеет брать кучу файлов и делать сводную таблицу.
причем это добро десятки лет работает. или надо сначала писать велосипеды, изучать матчасть потом? а то потоковое чтение, оно хоть и неплохо, но все равно интерпретатор 1с тормозной до ужаса.
(75) тормозной это когда час что то делается. а когда на таких обьемах какие то минуты, то с головой.
Ну так не извращайся, сразу в регистр и пиши, ты же не будешь их через ТЧ редактировать
Создай регистратор без ТЧ и к нему присобачь 15 лямов записей набором записей
Увидишь Бро, плюнь ему в спину, у нас так принято
(77) ну вот ты переделай на внешние источники данных и посмотри, сколько времени ты сэкономишь на работе алгоритма, а главное - на разработке того, как с этим работать из 1с. Или точить как всегда некогда, пилить надо? Технологии, если что, более 20 лет.
(0) Пиши сразу в регистр.
Запись порциями по 25000-50000 элементов в 1 транзакции. Перед этим установи УстановитьИспользованиеИтогов в ложь после записи включи.
15 млн строк загрузятся очень быстро.
(80) нет смысла. я выполнил требуемую задачу разовым заказчикам. И больше эти модули не пользовались спросом - видимо нет у остальных таких задач. впустую работать смысле нет, это нужно делать только если решение нуждается в этом. а так я с этого ничего не зарабатываю когда нет спроса
(21) грузани их в бесплатный BI, который фузиновцы пропагандируют. пусть там онолитеги крутят и наслаждаются
(39) если документ практически как в зеркало отражаетяс на регистр - то ясен пень.
а вот если в проведении логика подшита, вычисления итд - вот тооогда.
(66) в клюшках периодические реквизиты - для юзверей совершенно понятны и прозрачны.
для программиста - если он пОГРомист 1С - может и нет.
(87) с пользователями понятно. Адекватный прог тоже во всём разберётся и даже привыкнет. Тем не менее решение хранить периодические значения вместе с константами никак не выглядит логичным. Несколько способов работы (Объект.Периодический/Реквизит.Установить/ИспользоватьДату)с этими сущностями тоже не выглядят логичными, а скорее ситуативными
Ну вопрос и вопрос на засыпку старому клюшечнику
создаст записи на дату по каждому периодическому реквизиту?
В общем после этого (привычного уже на тот момент) треша, РС в восьмерке просто образцом логичности были.
Нет чтобы узнать задачу и отталкиваться от нее, ведете себя как примитивные кодеры школьники, зачем пытаться решить загрузку во что либо, если для правильного пути нужно узнать конечную задачу. она истина.
(94) конечная задача - повертеть плоские данные по разным параметрам. для этого 1С непрвильно юзать (так говорят боги фузины). следует выгрузить массив в BI в любое облако и там обкрутить хоть обкакатьяс с туевой хучей готовых сценариев обработки и отображения.
.
я бы кстати на месте ТС так и попробовал сделать.
опять ты пытаешс как кодер обрисовать задачу. меня интересует чтобы я полностью услышал что хочет пользователь и озвучил это как пользователь. с полным набором что он хочет
я больше чем на 1000000 процентов знаю что такой обьем информации не способен переработать яеловек чтобы оно ни было.
значит на тот же миллион процентов есть явно выраженная конечная цель, которая явно является конечной задачей с полным перечнем условий
Как пример мне тоже заказчик пришел сначала нес фигню. Но когда я начал задавать вопросы наводящие, то оказалось что из 15 миллионов строк ему нужно всего то получить несколько тысяч с конкретными условиями.
под эти условия было создано решение. А не так как школота решает - давайте все загрузим, дадим какой то уни инструмент и пусть делает что хочет. Нет неправильно.
Привет всем! Кто-нибудь знает, существуют ли рекомендации фирмы 1С по максимальному разумному количеству строк в документе 7.7? Заказчики требуют создать документ и запихнуть в него чуть ли не всю номенклатуру. А это ни много ни мало почти 100000 наименований. Максимальное количество строк в документе может быть 9999 (сегодня сам замерил), но это не разумно. Ответ: создавай несколько документов. А сколько? Вот мне и нужны веские аргументы, чтобы отплеваться от этого бредового задания.
"строк в документе может быть 9999 (сегодня сам замерил)" yes! хотел бы я посмотреть на это! а ведь гугл мог упростить задачку :) "А сколько?" разумность определяется задачами и тем, что будет происходить при проведении документа. Но ИМХО, лучше по 1000 делать и не париться
ну например какаянить групповая установка цен. делается один раз обработкой которая тупо текущую цену увеличивает на 3 процента. документ естественно никто никогда не открывает и руками не редактирует.
и не строк а номеров строк, ограниченных длиной поля таблички данных. долби хоть миллион. только дождаться окончания проведения такого дока = уже не в этой жизни.
Народ, я прекрасно сам понимаю, что это бред, однако упрямству Ген и Фин диров можно противостоять только если ткнуть их носом в некие официальные рекомендации.
эээ в регистр чем писать будешь? вроде как про семерку речь. ну еще один вариант: в базу грузят данные билинга. например платежи по картам. каждая карта - контрагент. в день один миллион новых контрагентов нужно по каждой карте грузить Д50 К62.х :) операция с проводками. сколько делать проводок в операции??
да пофигу. В ОбработкеПроведения описать, с чем работаем и какие движения делаем - и всё. Я к тому клоню, что постановщику задачи предложить другие решения. Может и прокатит.
ихмо от 500 до 1000. тут еще важно сколько этот документ будет проводиться (например при программном перепроведение)
Во-первых, мне кажется, здесь что-то не то с постановкой задачи. Нужно пересмотреть необходимость заталкивания всей номенклатуры в табличную чать документа. Это попахивает бредом, независимо от количества документов. Может быть, подоойдет просто отчет?
Инвентаризация заяем нужна? Однако нужна, хоть и не проводится. И это примерног так же, не не инвентаризация - другие принципы заполнения и назначение. Верно. я тоже пытаюсь им это доказать, потому и спрашиваю насчет официальных рекомендаций 1С
Подобных рекомендаций от 1С я не встречал. Правда, я не Яндекс. Давай лучше сюда исходную задачу. Что им надо?
При переносе остатков я обычно формирую документы по 300 строк. Во всяком случае, больше 500 не советую.
telepat.dll мне подсказывает, что имеется сеть ларьков неавтоматизированых, которые раз в неделю проводят инвентаризацию. Для единства стиля всем выдается портянка на 100000 позиций, со всей номенклатурой, куда они вписывают остаток. Чтобы операторам не заморачиваться с подбором хотят сделать такую же портянку в доке, куда он будет так же остатки забивать, но уже с клавы. Угадал? Т.е. строк с ненулевыми цифрами много меньше 100000? Если так то просто рядом с графой количество выведи колонку с кодом, в доке быстрый поиск по коду, а для проверки печатную форму в виде той же портянки. Можно так же таблицу в режиме редактирования заюзать для ввода, но не факт что более эффективно.
Спасибо всем! Понял, про оф. рекомендации никто не слышал, однако по практике оптимально не более 500 - 1000 строк. Пошел отбиваться.
"Заказчики требуют создать документ" - не их дело совать нос в структуру программы. Пусть заказчих задачу ставит, а не структуру конфигурации рисует..
заказчик может соваться куда угодно и как угодно.. в плоть до требований сделать отдельный регистр для какойнить х.ни или сделать кнопочку желтой. на то он и заказчик.
заказчик может требовать сделать кнопочку желтой, а с регистром, те структурой данных должен идти в опу он может требовать бизнес логику и интерфейс
Таблица значений в 1С 8.3 позволяет строить динамические наборы значений. При этом каких-либо жестких ограничений на тип данных не накладывается. Таблица значений создается в памяти и не сохраняется в базе данных, имеет множество полезных возможностей и работает очень быстро.
Свойствами таблиц значений являются:
- индексы (коллекция индексов таблицы значений)
- колонки (коллекция колонок таблицы значений).
Элементом коллекции является строка таблицы значений. Но необходимо учитывать тот факт, что с таблицей значений можно работать только на сервере.
Работа с таблицей значений в 1С 8.3 на примерах
Создать новую таблицу значений
Добавить колонку в таблицу значений
Добавить колонку с описанием типа
Добавить строку в таблицу значений
Заполнить строку значениями
Вставить строку
Сортировка
//Сортирует таблицу значение по нужным колонкам и направлению сортировки
ТЗ.Сортировать(«Цвет Убыв, Вес Возр»);
Получить значение
Удалить строку
Найти одну строку
Найти несколько строк
Свернуть таблицу значений
Скопировать таблицу
Скопировать таблицу без данных
Узнать количество строк
Очистить
Обход таблицы значения
Обход коллекции с выбором элемента осуществляется с помощью цикла >, где оператор цикла Для предназначен для циклического повторения операторов, находящихся внутри конструкции, в данном случае таблицы значений. Так же можно обращаться к элементу коллекции посредством оператора [ ] ([аргумент]), где аргументом является индекс строки. Нумерация индексов строк начинается с нуля [0].
Прямой обход
Обратный обход таблицы (снизу вверх)
Чаще всего применяется для удаления строк в таблице.
Обход колонок
Можно перечислить все колонки в таблице значений в 1с 8.3 с помощю цикла >:
Читайте также: