1с у пространства блокировок не существует поля с именем ведущаязадача
Доброго дня всем
1с 8.3 Работаю с бизнес -процессами. Возникла сложность при завершении.
Есть ТЗ: При завершении задачи "Ознакомится с результатом" завершить комплексный бизнес процесс и все незавершенные задачи по нему.
В форме ЗадачиИсполнителя есть кнопка. Команда на кнопке выполняется наКлиенте. В конце выполнения я и решила подпихнуть свою обработку. Которая выполняется в общем модуле.
Вот как я это делаю. Вызов общего (клиент) из команды формы (Параметр: форма задачи)
Вызов
Ну и в общем модуле я работаю уже непосредственно с задачей, ищу по ней бизнес-процесс, завершаю задачи.
Так вот теперь суть всего вопроса:
После завершения работы на сервере когда уже отладчик стоит на КонецФункции у меня неожиданно все сваливается в ошибку
Я не могу понять в чем она заключается. Я вроде бы никакие данные не передаю. Задача - ссылку которой я беру уже завершена и я ее не изменяю.
ЧТо не так то?? Почитала кучу форумов и справок, но не нашла ответа на вопрос. Может кто поможет и опишет корректность выполнения процедур Клиент-Сервер-Клиент. Буду очень признательна за любую информацию по этому вопросу
Ошибка при вызове метода
Всем доброго утречка! Такой вот код написала, где программно создаю и хочу провести, но выдаёт.
Ошибка при вызове метода
Выдает ошибку в строке Ferma.ask(); хочу чтобы при запуске программы писало строчку, а потом.
данные с типом "СтрокаТаблицыЗначений" на клиента пытаетесь передать, где он не могет существовать, абашто вам и матерится 1с.
Я не могу этого понять Функция из общего модуля не возвращает никакие значения.
По логике я просто прихожу в нее с задачей,ссылкой. Ее использую как параметр для запроса. Сама задача не перезаписывается, не изменяется. Из функции я просто выхожу не передавая никаких параметров.
Возникает вопрос откуда появляются эти данные с типом СтрокаТаблицыЗначений. Зачем они возвращаются?? Как они передаются и почему, если программно я их не передаю??
Именно это мне и хочется понять и разобраться, чтоб в будущем обойти эту проблему
З.Ы. ТЗ я выполнила, обошла другим путем. Вызвала свою обработку с из процедуры которая выполняется наСервере. Все отработало отлично без всяких проблем
Но все таки может кто знает и сталкивался с такими ситуациями?? Поделитесь опытом
Возникла такая же ошибка. Кто-то может подсказать решение данной проблемы?
Alexpln Решили ли данную проблему ? У нас такая же проблема. Лишь с несколькими контрагентами
да, такая же ситуация после обновления появилась. никто не решил?
Внутри процедуры ОбщегоНазначения.УстановитьУправляемуюБлокировку так и не смотрели?
Уважаемый IBReiter А можно подробнее. Не совсем понятно мне.
Если я создаю нового (копию) контрагента, то с новым контрагентом документ проводится.
Такая же проблема. Копирую договор у контрагента, после этого проводится. В чем может быть проблема?
Один и тот же контрагент в одном учреждении проводится, в другом нет.
Вам нужно отладчиком зайти в эту процедуру, она не такая уж и большая, и посмотреть, в каком месте возникает ошибка. Скорее всего в этом месте отказ устанавливается в истину
Если поставить галочку не списывать аванс автоматически, то документ проводится. Но это выход если организация одна. А наша организация обслуживает более 50 организаций. Эта проблема возникает только с 206 счетом по предоплате. Надеюсь разработчики как-то отреагируют.
Установил режим управления блокировок - автоматический, документ провелся.
А где происходит смена режима блокировок и какой тип стоял по умолчанию?
В конфигураторе, в свойствах конфигурации. Стоял управляемый.
Эта проблема действительно существует, и возникает очень выборочно. В ближайшие дни (где-то 23- 24.12.2015) будет еще один плановый релиз с новой структурой бюджетной классификации. В этом релизе эта ошибка будет исправлена. Пока, если у клиентов есть возможность, можно внести исправления самостоятельно. В общем модуле "Бухгалтерский учет" в функции "СформироватьТаблицуЗачетаАвансаВыданного" Код СтруктураИсточникаДанных = Новый Структура( "Счет, КВД, КБК, Баланс", "Счет", "КВД", "КБК", "Баланс"); заменить на СтруктураИсточникаДанных = Новый Соответствие; СтруктураИсточникаДанных.Вставить("Счет", "Счет"); СтруктураИсточникаДанных.Вставить("КВД", "КВД"); СтруктураИсточникаДанных.Вставить("КБК", "КБК"); СтруктураИсточникаДанных.Вставить("Баланс", "Баланс"); Если возможности такой нет, то, т.к. проблема возникает при зачете аванса, можно, пока, не зачитывать документом аванс выданный. Т.е. перед проведением документа покупки, включить флажок "Не производить автоматический зачет аванса".
Главное не забыть, после обновления на новый релиз, включить в этих документах флажок, и перепровести их.
Часто возникает необходимость в частичном ограничении доступа к данным. Например, когда пользователь должен видеть документы только своей организации. В таких случаях в 1С используется механизм ограничения доступа на уровне записей (так называемый, RLS – Record Level Securiy).
Для примера предположим, что перед нами стоит следующая задача. На предприятии ведется многофирменный учет и каждый контрагент и пользователь базы данных относится к определенной организации. Необходимо обеспечить доступ к справочнику “Контрагенты” таким образом, чтобы каждый пользователь мог просматривать, редактировать и добавлять контрагентов только своей организации.
Для решения задачи будем использовать платформу “1С:Предприятие 8.2″. Создадим новую конфигурацию в свойствах которой в качестве основного режима запуска будет выбран вариант “Управляемое приложение”.
Далее создадим справочник “Организации” и ещё два справочника – “Контрагенты” и “Пользователи” с реквизитом “Организация”. Кроме справочников нам понадобятся два параметра сеанса – “Организация” и “Пользователь” (соответствующих типов). Значения этих параметров устанавливаются при запуске сеанса работы с конфигурацией и хранятся до его завершения. Именно значения этих параметров мы и будем использовать при добавлении условий ограничения доступа на уровне записей.
Установка параметров сеанса выполняется в специальном модуле – “Модуль сеанса”
В этом модуле опишем предопределенную процедуру “УстановкаПараметровСеанса” в которой вызовем функцию заранее подготовленного общего модуля “ПолныеПрава”. Это необходимо в силу особенностей работы базы данных в режиме управляемого приложения, когда часть программного кода может выполняться только на стороне сервера (подробно на объяснении этих принципов в данной статье я останавливаться не буду).
В свойствах модуля “ПолныеПрава” необходимо отметить флажки “Сервер”, “Вызов сервера” и “Привилегированный” (последнее означает, что процедуры и функций данного модуля будут выполнятся без контроля прав доступа). Текст модуля будет выглядеть так:
В модуле управляемого приложения будем проверять наличие пользователя конфигурации в справочнике “Пользователи” (для простоты будем искать его по наименованию) и завершать работу системы если он не найден. Это необходимо для того, чтобы обеспечить заполнение параметров сеанса.
Перейдем на закладку “Права” роли “Пользователь” и откроем список прав справочника “Контрагенты”. Будем использовать шаблон ограничений “КонтрагентыЧтениеИзменеие” для прав “Чтение”, “Изменение” и “Доблавление”.
Для права “Чтение” будем использовать шаблон с параметром “ИЛИ ЭтоГруппа”. При этом пользователям данной роли будет разрешено чтение не только элементов справочника “Контрагенты” своей организации, но и всех групп этого справочника.
Поскольку при добавлении новых элементов справочника системой выполняется неявное чтение предопределенных реквизитов (это нужно, например, для нумерации), то необходимо обеспечить беспрепятственное чтение этих полей. Для этого добавим дополнительную строку с пустым текстом ограничения в таблицу ограничения доступа к данным и перечислим поля для которых действует данное правило – Ссылка, Версия данных, Родитель, Код.
Таким образом, поставленная задача ограничения доступа на уровне записей решена. Пользователи с действующими ограничениями получат доступ на просмотр и редактирование данных только своей организации.
Провожу в двух параллельных сеансах (Групповая обработка спр. и документов) платежные поручения входящие - по одной и той же организации, но разным ответственным.
Документ имеет свойство "Движения"="Не удалять автоматически"
В результате в обработке проведения:
Процедура ОбработкаПроведения(Отказ, Режим)
Перем Заголовок, СтруктураШапкиДокумента;
Если мУдалятьДвижения Тогда
ОбщегоНазначения.УдалитьДвиженияРегистратора(ЭтотОбъект, Отказ, Истина, Режим);
КонецЕсли;
и далее происходит удаления движений по Хозрасчетному в процедуре:
Процедура ЗаписатьНаборЗаписейНаСервере(ИмяРегистра, Регистратор, ТаблицаДвижений = Неопределено, ТипРегистра = "РегистрНакопления") Экспорт
Если ТипРегистра = "РегистрНакопления" Тогда
Набор = РегистрыНакопления[ИмяРегистра].СоздатьНаборЗаписей();
Если ТаблицаДвижений <> Неопределено Тогда
Набор.мТаблицаДвижений = ТаблицаДвижений;
ОбщегоНазначения.ВыполнитьДвижениеПоРегистру(Набор);
КонецЕсли;
Иначе
Если ТипРегистра = "РегистрБухгалтерии" Тогда
Набор = РегистрыБухгалтерии[ИмяРегистра].СоздатьНаборЗаписей();
ИначеЕсли ТипРегистра = "РегистрСведений" Тогда
Набор = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей();
ИначеЕсли ТипРегистра = "РегистрРасчета" Тогда
Набор = РегистрыРасчета[ИмяРегистра].СоздатьНаборЗаписей();
КонецЕсли;
Если ТаблицаДвижений <> Неопределено Тогда
Набор.Загрузить(ТаблицаДвижений);
КонецЕсли;
КонецЕсли;
Набор.Отбор.Регистратор.Установить(Регистратор);
Набор.Записать(); // ТУТ ТАЙМАУТ (Когда "РегистрБухгалтерии.Хозрасчетный" )
Может не удалять движения по БУ ? Чем это чревато ?
(1)я понимаю, что у РБ по сути одно измерение "Организация", т.о. выполняя:
Набор.Записать(); - в начале транзакции мы исключительно блокируем до окончания транзакции!
В добавок ко всему есть запрос в обработке проведения, который медленно выполняется => длинная транзакция!
Если мы хотим, чтобы многопользовательская система работала быстро – нужно, среди прочего, подумать, как минимизировать ожидания на блокировках. Как только появляются ожидания – замедляется проведение документов.
Поэтому важно проектировать поведение системы на самых ранних этапах – до написания программного кода.
И здесь есть важный нюанс:
программисты часто думают, что управляемые блокировки происходят на уровне записей.
Мы подготовили для Вас видео, в котором рассказали, по каким принципам блокируются строки во время работы пользователей и как свести к минимуму количество ожиданий из-за блокировок.
Как это часто бывает, некоторые из этих нюансов в документации не описаны…
Длительность видео 9 минут – и оно того стоит.
Это же всегда неловкий момент, когда ты веришь, что что-то должно работать одним образом, а потом оказывается, что все совсем иначе :)
Тайминг ключевых моментов:
00:41 – постановка задачи
01:52 – демонстрация ожидания при управляемых блокировках
03:09 – первый принцип работы управляемых блокировок
04:40 – второй принцип работы управляемых блокировок
06:46 – третий принцип работы управляемых блокировок
07:37 – анализ причин ожидания на блокировках в решаемой задаче
08:47 – решение проблемы
Умение находить и устранять причины медленной и нестабильной работы систем на 1С обязательно для программистов 1С
Чтобы Вы могли быстро и без ошибок решать эти задачи, мы выпустили новый курс «Ускорение и оптимизация 1С, 2022».
После курса Вы сможете:
- Оценивать состояние системы в любой момент времени
- Быстро находить причины замедления в программном коде – и сразу писать его так, чтобы замедления в будущем не было
- Отслеживать динамику производительности за определенный период
- Устранять ожидания на блокировках и решать проблемы со взаимоблокировками
Для кого этот курс
- Писать код, за который не стыдно – в нестабильное время особенно важно быть в компании на хорошем счету
- Быть востребованным специалистом – на каждом втором собеседовании спрашивают про умение оптимизировать 1С
- Не терять клиентов из-за того, что «ваша 1С тормозит, а вы ничего не делаете» – это и раньше было нехорошо, а теперь и вовсе непозволительная роскошь
Комментарии / обсуждение (31):
Блин. Все таблицы плоские, Нет там областей, есть записи. 10 лет писал а FoxPro и ни каких проблем не возникало с блокировками записей. Откуда этот гимор.
Речь идет не о таблицах и блокировках СУБД, в видео говорится про управляемые блокировки которые “живут” на сервере 1С, они блокируют не таблицы СУБД, а пространства 1С.
Спасибо за ценную информацию!
Пожалуйста!
Интересного обучения!
Андрей, добрый день! Спасибо за разъяснение.
Подскажите, если блокировка набора записи (подчинен регистратору) происходит по регистратору. Значит при проведении двух документов регистраторов возникнут блокировки на наборах, у которых совпадают значения хотя бы одного из измерений, правильно?
Здравствуйте.
1. То что регистр подчинен регистратору здесь роли не играет, т.к. регистраторы разные то и ожидания на пространстве ИмяРегистра.НаборЗаписей практически никогда не бывает.
2. Что бы было ожидание на обычном пространстве блокировок, у вас должна быть хотя бы одна одинаковая комбинация значений измерений в обоих документах.
Если значение хотя бы в одном измерении отличается то это уже другая область.
Попробуйте от руки начертить координатную сетку как на видео, и в уме провести 2 документа параллельно закрашиваю квадраты, думаю все сразу встанет на свои места.
Вообще ситуация из видео когда не указано значение поля блокировки не возможна при записи движений при проведении, т.к. в этот момент платформа сама ставит упр. блокировку по всем измерениям регистра.
Читайте также: