1с запрет редактирования строки табличной части
При программном изменении существующих объектов есть правило: сразу после получения объекта из ссылки, необходимо его заблокировать для редактирования. Это позволяет:
- во-первых, проверить, что данный объект не заблокирован в настоящий момент другим пользователем;
- во-вторых, гарантирует, что другой пользователь не сможет изменить объект, пока не будут записаны изменения в текущем сеансе;
Внимание! Данное правило неприменимо при пакетной загрузке данных, когда требуется принятие изменений пакетом, а также при разрешении коллизий, возникающих при загрузке данных из другого источника, обладающего большим приоритетом
Заблокировать произвольный объект можно двумя способами:
- Используя метод Заблокировать() объекта метаданных ссылочного типа (Справочники, Документы и т.п.);
- Используя метод ЗаблокироватьДанныеДляРедактирования() глобального контекста;
Давайте рассмотрим примеры работы с каждым из этих методов
Метод Заблокировать()
Если Ваш алгоритм не взаимодействует с пользователем, перед тем как заблокировать объект, следует проверить, не заблокирован ли этот объект другим пользователем или процессом. Если, все же, взаимодействует, следует исключить код для варианта 1. Тогда в случае заблокированного объекта будет вызвано исключение и пользователь увидит полное описание ошибки.
Недостатки: Метод доступен только в контексте сервера, толстого клиента или внешнего соединения
Метод ЗаблокироватьДанныеДляРедактирования()
Данный метод обладает большим спектром возможностей, чем предыдущий:
- он умеет блокировать записи регистра сведений;
- он умеет блокировать данные в контексте управляемых форм;
- он умеет блокировать данные, если совпадает версия данных;
С учетом этого, перепишем предыдущий пример следующим образом:
В том случае, когда нам необходимо заблокировать некоторые данные на время открытия управляемой формы, можно поступить следующим образом:
Блокировка будет снята неявно при закрытии привязанной формы, либо при завершении сеанса пользователя, либо явно при вызове метода РазблокироватьДанныеДляРедактирования()
Внимание! Методы ЗаблокироватьДанныеДляРедактирования() и РазблокироватьДанныеДляРедактирования() доступны только начиная с версии платформы 1С 8.2.9
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с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 миллионов строк ему нужно всего то получить несколько тысяч с конкретными условиями.
под эти условия было создано решение. А не так как школота решает - давайте все загрузим, дадим какой то уни инструмент и пусть делает что хочет. Нет неправильно.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой
Необходимо запретить редактирование строк табличного поля документа добавленных ранее.
Пример: Пользователи ежедневно добавляют в документ строки с данными, нужно чтобы позже они не могли изменять уже введенные данные.
Для реализации этого, необходимо в ранее добавленных ячейках установить ТолькоПросмотр=Истина
Пример табличного поля:
Похожие FAQ
Еще в этой же категории
Как обновить динамический список или реквизит на форме клиента? 22
Если вы, открыв форму справочника или документа, выполнили некоторое действие, код который должен изменить состояние данных в динамических списках или значение реквизита. Данные изменены, но в открытой форме осталось все как было, можно конечно закр Динамический список ~ Как на управляемой форме разместить список регистра сведений с отбором? 18
Решение рассмотрено для элемента справочника (Контрагент и регистр КонтактнаяИнформация) 1. Создание реквизита: Добавляем новый реквизит формы (. не путать с реквизитом справочника . ) с типом " ДинамическийСписок" В поле " Основная табли Как установить параметр динамического списка? 16
Когда используете для вывода данных динамический список и произвольный запрос, то бывают ситуации когда надо указать параметр используемый в этом запросе. Ниже пример вывода данных регистра сведений в карточке клиента Для вывода используется исп Форма ~ Программное создание таблицы значений с условным оформлением 12
Как создать на форме таблицу и сделать для нее подсветку содержимого колонки в строке по условию? Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем ма Поле выбора ~ Заполнение списка значений в элементе поле выбора на форме 10
//Заполнение списка перебором данных // Элемент формы МетаданныеВыбор имеет тип - Произвольный, Использование - Режим выбора из Списка, кнопка списка Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл ЭлементыФормы.МетаданныеВыбор.Спи Посмотреть все в категории Работа с Формой (Диалог) и её элементами
В некоторых случаях необходимо запретить пользователям редактировать табличную часть документов, добавлять, изменять или удалять строки и даже изменять их порядок. Реализовать это в 1С очень просто, например, можно полностью отключить возможность изменения состава строк. В этом случае на форме пропадут соответствующие кнопки «Добавить», «Изменить», «Удалить». Можно отдельно отключить возможность изменения порядка строк в табличной части. Так же есть возможность настройки доступных команд, например, можно разрешить только добавлять строки, или только удалять ну или только изменять.
Кстати у табличной части можно вообще убрать командную панель, на которой расположены кнопки «Добавить», «Изменение порядка» и меню «Еще», но через контекстное меню вызванное кликом ПКМ мышки все же это сделать можно будет.
Как убрать возможность добавления, удаления, изменения строк табличной части документа
Давайте рассмотрим все варианты отключение возможности редактирование табличной части.
Открываем конфигуратор и свойства табличной части у которой хотим заблокировать возможность редактирования.
В свойствах ищем раздел «Использование» в нем пункт «Изменять Состав Строк» и снимаем на против него флаг.
В результате этих действий пропадут кнопки «Добавить», «Изменить», «Удалить».
Они исчезнут из всех меню.
Но возможность изменения порядка строк все же остается, для того чтобы её отключить в свойствах табличной части в разделе «Использование» нужно снять флаг напротив пункта «Изменять порядок строк».
Для того чтобы убрать отдельную команду, например, добавления, изменения, удаления или перемещения строк табличной части, нужно открыть пункт «Состав команд» и отметить только необходимые.
Таким образом можно разрешить пользователю например, только добавлять строки в табличную часть.
Вот таким образом можно запретить редактирование табличных частей, либо частично ограничить возможности пользователей. Так же все это можно запретить программно.
Читайте также: