1с данная команда не может выполняться

Обновлено: 02.07.2024

Методика расследования причин медленной работы операции на примере открытия управляемой формы

Для начала необходимо убедиться, что проблема стабильно воспроизводится (в одинаковых условиях) и что все пункты с описанием применения методики выполнены. Для этого можно сделать следующее:

Сбор и анализ стандартных данных

Разберем пример для операции открытия формы документа "Табель учёта рабочего времени".

Мы организовали тестовый стенд, на котором наша проблема воспроизводится под пользователем с полными правами. К этому стенду мы можем подключаться как напрямую с удаленной рабочей станции в режиме тонкого клиента, так и в режиме веб-клиента через публикацию на веб-сервере.

Настройка технологического журнала на клиенте может быть такой:

Фильтр по имени процесса для нашей задачи избыточен и нужен для того, чтобы в случае ошибочной настройки такого лога на сервере не получить сбор всех событий для серверных процессов, что может занять значительный объем. С другой стороны, при осознанном включении такой настройки на сервере (если клиентские приложения запускаются там же, где может быть развернут и сервер приложений 1С:Предприятие) мы в отдельном каталоге Client_Full увидим данные только клиентских приложений (хотя при этом подкаталоги других процессов тоже будут созданы, но они буду пустыми). Свойство Interface не собираем, так как оно дублируется более "человек читаемым" свойством IName (хотя даже последнее нам в данном примере не обязательно нужно).

После настройки технологических журналов и проверки корректности замера времени ОценкиПроизводительности БСП выполняем повторение операции с включенной отладкой.

Замеры времени средствами БСП будут выглядеть следующим образом:


Везде далее будем рассматривать верхний в этом списке замер от последнего повторения, его длительность 13,022 секунды.

Замер отладчиком конфигуратора изображен на следующем рисунке:


Как видно, сумма длительности всех строк, связанных с открытием формы составила всего 1,523 секунды.

'00010101' + ТекущаяУниверсальнаяДатаВМиллисекундах() / 1000

а для миллисекунд взять остаток от деления на 1000 (то есть просто последние три цифры, обратите внимание на "779" на следующей картинке).


Точное время начала замера (минут:секунд.миллисекунд): 25:10.779


Точное время окончания замера (минут:секунд.миллисекунд): 25:23.801

Найдем теперь записи технологического журнала, соответствующие данному замеру, они будут примерно следующими:


Здесь видно, что соответствующий нашему замеру серверный вызов SCALL завершился примерно за 10,1 секунды, это соответствует интервалу между запросом VRSREQUEST и ответом VRSRESPONSE.
Причем время начала замера почти совпадает с началом вызова, то есть событием VRSREQUEST, что собственно ожидаемо, так как замер БСП начинается на клиенте и должен быть непосредственно перед командой открытия формы. А вот окончание вызова сервера случилось раньше, чем окончание замера, что значит, что эта разница во времени пришлась на часть работы клиентского приложения.

Итак, промежуточный итог по длительностям замеров разными способами показывает соответствие нашей ситуации ограничениям и выполнение неравенства: 1,5 < 10,1 < 13.

Стандартными инструментами не удается увидеть причину проблем низкой производительности работы (открытия) управляемой формы, поэтому воспользуемся следующими помощниками:

  • Отладчик операционной системы: Windows Performance Recorder для сбора метрик и Windows Performance Analyzer для их визуализации и анализа;
  • Анализатор сетевых протоколов Wireshark или прокси-сервер Fiddler Web Debugger.

Установим и запустим Windows Performance Recorder ("C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\WPRUI.exe"), укажем настройки:


После того, как их подготовили, перейдем в тонкий клиент 1С, откроем форму списка документов и непосредственно перед воспроизведением проблемной операции запустим сбор данных WPR (кнопка Start).

После открытия формы в тонком клиенте запись можно остановить и открыть ее для анализа. В открывшемся окне найдем по PID 5508 (его можно определить в диспетчере задач ОС или по логам ТЖ) наш тонкий клиент 1С и должны получить примерно следующую картинку:


По данным Windows Performance Analyzer видим, что у нас нет серьезной нагрузки по дискам, а поток тонкого клиента потребляет 100% ЦП на протяжении длительного времени вплоть до завершения замера.

Запомним этот результат и проанализируем траффик.

Запустим Wireshark и повторим проблемную операцию в тонком клиенте 1С:Предприятие с прямым подключением к серверу приложений 1С.

При сборе данных с помощью Wireshark (и отбору по пакетам с сервером-источником равным серверу приложений 1С:Предприятие) запуск открытия формы документа будет выглядеть примерно так:


Здесь каждая такая строка – это пакет (или если точнее, то "кадр", frame), который в свою очередь является частью общего большого пакета поверх протокола TCP (PDU – Protocol Data Unit). Если их сложить, получим пакет около 70 Кб. Стоит обратить внимание, что это будет размер с учётом сжатия, а если без него – то должны получить что-то около 2500 – 3500 Кб данных.

Устанавливаем и запускаем Fiddler, на панели инструментов ищем "Browse", выбираем любимый браузер и запускаем в нем необходимое нам приложение (информационную базу 1С:Предприятие). После запуска переходим в форму списка документов (готовимся воспроизвести сценарий), возвращаемся в Fiddler и включаем сбор траффика (кнопка F12), переходим в браузер и открываем форму документа. После её открытия сбор траффика можно отключить и заняться его анализом. Мы должны получить примерно следующее:


В данном дампе достаточно быстро находится относительно большой пакет искомого размера, выбираем его в списке слева, а в правой части окна переключаемся на страницу Inspectors, выбираем там просмотр заголовков (Headers), и так как у нас пакет является сериализованным json (Content-Type: application/json), то попросим Fiddler десериализовать его для нас.

После этого в окне предпросмотра отобразится древовидная структура ответа (response), которая передается с сервера на клиент и содержит так много данных. Далее нам необходимо проанализировать её и найти наиболее проблемные места. Может помочь кнопка Expand All, которая развернёт все элементы дерева, но это может занять некоторое время. Чтобы его сократить, сначала поймем, что именно нужно искать.

Подведем промежуточный итог:

  • Проблем с медленной работой прикладного кода 1С или запросов нет.
  • Большая часть времени открытия формы состоит из сетевого взаимодействия.
  • Размер пакета с формой подозрительно велик.
  • После получения пакетов имеем высокую утилизацию ЦП тонким клиентом 1С (или веб-клиентом).
  • Потерянное время находится где-то между окончанием/началом работы прикладного кода 1С и сетевой передачей.

Из всех этих пунктов для нас наиболее полезным и требующим дополнительного анализа является тезис "Размер пакета с формой подозрительно велик".
Какие могут быть причины для такой ситуации? В общем случае их несколько:

  • Сама по себе большая и сложная форма с большим количеством экранных элементов и реквизитов. Наверное, редкий и точно не очень правильный случай, лучше такого избегать на этапе проектирования систем.
  • Простая форма, но много данных в реквизитах формы (включая данные объекта), в особенности:
    • Хранилище значения, Строка(0);
    • Большие коллекции (Таблица, Дерево, Список);
    • Произвольный тип (концентрация проблем).

    Так как наша проблема (у вас может быть по-другому) воспроизводится даже при очень небольшом количестве данных в ТЧ, и реквизитов у документа (т.е. объекта формы) совсем не много, то их мы не рассматриваем. Остаются реквизиты формы, не равные основному реквизиту "Объект".

    Среди них находится несколько реквизитов, имеющих произвольный тип. Могут выглядеть так:


    Сопоставляем эти данные с уже собранным ранее замером с помощью конфигуратора, и видим заполнение этих структур достаточно большим количеством элементов (например, можно 5059 в реквизите "СвойстваИзмерений").
    Снова вернемся к дампу траффика в Fiddler и найдем там элемент, отвечающий за параметры формы (response/props). Увидим там примерно следующее:


    И если развернем далее эти элементы, убедимся, что их там несколько тысяч, каждый из которых представляет собой вложенную структуру вида:


    Найдем прикладной код, заполняющий эти параметры, и убедимся, что данных там действительно достаточно много (2-3 Мб), и они представляют собой большое количество сложных вложенных структур.

    Отключив заполнение данных реквизитов, убеждаемся, что проблема с производительностью формы исчезает, что значит, что причина была найдена правильно.

    Выводы и рекомендации

    Длительная работа открытия формы обусловлена сериализацией и десериализацией больших коллекций значений при передаче их между клиентом и сервером.

    Для того чтобы оценить степень влияния всех факторов, которые имеют значения в этом процессе, можно сделать несколько тестов (замеров), изменяя эти факторы и оценивая корреляцию их значений и длительности. В нашем случае причиной проблем были структуры, хранящие данные справочников территорий и условий труда, поэтому изменяли количество этих элементов и пробовали замерять передачу с клиента на сервер этих данных (процедура ДанныеДляРедактированияВХранилище).

    В следующей таблице приведены результаты таких замеров в нашем примере. Сразу следует оговориться, что не стоит никаким образом рассматривать в ней абсолютные значения, так как это будет зависеть еще и от конфигурации компьютера, сети, версии платформы и многого другого, связанного именно с нашим примером. Для нас же важны зависимости и их характер (линейная, экспоненциальная и т.д.). Предлагаем вам проанализировать их самостоятельно (или даже повторить замеры на актуальной версии платформы в вашей среде).


    Принимая во внимание полученные таким образом данные, можно предложить следующие возможные пути решения:

    Глобальные действия - это действия, которые вы можете выполнять в любом состоянии программы. При этом не важно, что на данный момент открыто в "1С:Предприятии". Главное, чтобы приложение не было занято выполнением какой-либо задачи.

    Глобальные действия - это действия, которые можно вызывать в любом месте запущенной платформы "1С:Предприятие 8". Независимо от того, что именно происходит в запущенной конфигурации, смысл глобальных действий не меняется (например, нажатие Ctrl+N всегда будет вызывать диалог создания нового документа).

    "Горячие" клавиши для глобальных действий

    Действие

    Сочетания клавиш

    Как работает программа

    Создать новый документ

    Открывает окно, в котором будет предложено выбрать тип создаваемого нового документа в различных форматах - например, в текстовом, табличном или HTML

    Открыть существующий документ

    Открывает стандартное диалоговое окно "Открыть", доступное через меню "Файл/Открыть…"

    Активизация поля поиска в командной панели

    Устанавливает курсор в это поле

    Alt + Enter
    Ctrl + E

    В зависимости от того, на что установлен курсор, открывает соответствующую палитру свойств этого объекта или элемента. Полезно при работе с таблицами, текстом, HTML и т. п.

    Вызвать содержание справки

    Вызывает содержание справки

    Вызвать индекс справки

    Вызывает индекс справки

    "Горячие" клавиши: глобальные действия

    Глобальные действия - это действия, которые вы можете выполнять в любом состоянии программы. При этом не важно, что на данный момент открыто в "1С:Предприятии". Главное, чтобы приложение не было занято выполнением какой-либо задачи.

    Глобальные действия - это действия, которые можно вызывать в любом месте запущенной платформы "1С:Предприятие 8". Независимо от того, что именно происходит в запущенной конфигурации, смысл глобальных действий не меняется (например, нажатие Ctrl+N всегда будет вызывать диалог создания нового документа).

    "Горячие" клавиши для глобальных действий

    Действие

    Сочетания клавиш

    Как работает программа

    Создать новый документ

    Открывает окно, в котором будет предложено выбрать тип создаваемого нового документа в различных форматах - например, в текстовом, табличном или HTML

    Открыть существующий документ

    Открывает стандартное диалоговое окно "Открыть", доступное через меню "Файл/Открыть…"

    Активизация поля поиска в командной панели

    Устанавливает курсор в это поле

    Alt + Enter
    Ctrl + E

    В зависимости от того, на что установлен курсор, открывает соответствующую палитру свойств этого объекта или элемента. Полезно при работе с таблицами, текстом, HTML и т. п.

    Вызвать содержание справки

    Вызывает содержание справки

    Вызвать индекс справки

    Вызывает индекс справки

    "Горячие" клавиши: общие действия

    Общие действия - действия, которые имеют один и тот же смысл в различных объектах конфигурации, но поведение платформы "1С:Предприятие 8" меняется в зависимости от того где именно вы используете то или иное общее действие. Например, нажатие на клавишу "Del", помечает на удаление текущий элемент справочника, если вы находитесь в окне списка элементов справочника. Или удаляет содержимое текущей ячейки табличного документа, если вы его редактируете.

    "Горячие" клавиши для общих действий

    Действие

    Сочетания клавиш

    Как работает программа

    Удаляет элемент под курсором (текущий элемент) или выделенную группу элементов

    Позволяет добавить новый элемент

    Сохранить активный документ

    Сохраняет активный документ

    Печать активного документа

    Вызывает диалог печати для активного документа

    Печать на текущий принтер

    Инициирует непосредственную печать активного документа на принтер, назначенный в системе по умолчанию (без открытия диалога печати)

    Копировать в буфер обмена

    Ctrl + C
    Ctrl + Ins

    Копирует необходимый элемент или выделенную группу элементов в буфер обмена ОС Windows

    Вырезать в буфер обмена

    Ctrl + X
    Shift + Del

    Вырезает необходимый элемент или выделенную группу элементов в буфер обмена ОС Windows. Отличается от копирования тем, что копируемый элемент или группа после попадания в буфер удаляется

    Вставить из буфера обмена

    Ctrl + V
    Shift + Ins

    Вставляет в место, отмеченное курсором находящиеся данные из буфера обмена ОС Windows

    Добавить к буферу обмена как число

    Используется для числовых значений

    Добавить к буферу обмена

    Используется для числовых значений. Операция сложения с данными в буфере обмена

    Вычесть из буфера обмена

    Используется для числовых значений. Операция вычитания с данными в буфере обмена

    Выделяет все доступные элементы в активном документе

    Отменить последнее действие

    Ctrl + Z
    Alt + BackSpace

    Отменяет последнее совершенное действие

    Вернуть отмененное действие

    Ctrl + Y
    Shift + Alt + BackSpace

    Позволяет отменить "Ctrl + Z", иными словами - вернуть то, что вы сделали до нажатия отмены последнего совершенного действия

    Открывает диалог настройки параметров поиска в активном объекте конфигурации и выполнения этого поиска

    Находит следующий элемент, соответствующий указанным в настройках поиска параметрам

    Найти следующий выделенный

    Находит следующий элемент, соответствующий тому, который вы выделили (например, на котором установлен курсор)

    Находит предыдущий элемент, соответствующий указанным в настройках поиска параметрам

    Найти предыдущий выделенный

    Ctrl + Shift + F3

    Находит предыдущий элемент, соответствующий тому, который вы выделили

    Открывает диалог поиска и замены значений (там, где это разрешено)

    Свернуть (узел дерева, группу табличного документа, группировку модуля)

    Используется там, где доступны узлы деревьев, отмеченные значками "+" или "-"

    Выделяет все доступные элементы в активном документе

    Отменить последнее действие

    Ctrl + Z
    Alt + BackSpace

    Отменяет последнее совершенное действие

    Вернуть отмененное действие

    Ctrl + Y
    Shift + Alt + BackSpace

    Позволяет отменить "Ctrl + Z", иными словами - вернуть то, что вы сделали до нажатия отмены последнего совершенного действия

    Открывает диалог настройки параметров поиска в активном объекте конфигурации и выполнения этого поиска

    Находит следующий элемент, соответствующий указанным в настройках поиска параметрам

    Найти следующий выделенный

    Находит следующий элемент, соответствующий тому, который вы выделили (например, на котором установлен курсор)

    Находит предыдущий элемент, соответствующий указанным в настройках поиска параметрам

    Найти предыдущий выделенный

    Ctrl + Shift + F3

    Находит предыдущий элемент, соответствующий тому, который вы выделили

    Открывает диалог поиска и замены значений (там, где это разрешено)

    Свернуть (узел дерева, группу табличного документа, группировку модуля)

    Используется там, где доступны узлы деревьев, отмеченные значками "+" или "-"

    Свернуть (узел дерева, группу табличного документа, группировку модуля) и все подчиненные

    Свернуть (все узлы дерева, группы табличного документа, группировки модуля)

    Ctrl + Shift + Num + (-)

    Развернуть (узел дерева, группу табличного документа, группировку модуля)

    Развернуть (узел дерева, группу табличного документа, группировку модуля) и все подчиненные

    Развернуть (все узлы дерева, группы табличного документа, группировки модуля)

    Ctrl + Shift + Num + (+)

    Ctrl + Page Down
    Ctrl + Alt + F

    Быстрое листание активного документа

    Ctrl + Page Up
    Ctrl + Alt + B

    Используется там, где поддерживается и возможно форматирование текста

    Переход к предыдущей web-странице/главе справки

    Используется в HTML-документах

    Переход к следующей web-странице/главе справки

    Прервать исполнение отчета системы компоновки данных

    "Горячие" клавиши: управление окнами

    В этом разделе объединены общие для всех окон и форм платформы "1С:Предиприятие" "горячие" клавиши.

    "Горячие" клавиши для управления окнами

    Действие

    Сочетания клавиш

    Как работает программа

    Закрыть активное свободное окно, модальный диалог или приложение

    Этой комбинацией можно быстро завершить работу всей конфигурации на платформе "1С:Предприятие", поэтому пользуйтесь ей осторожно

    Закрыть активное обычное окно

    Закрывает текущее обычное окно

    Закрыть активное окно

    Закрывает текущее активное окно

    Активизировать следующее обычное окно

    Ctrl + Tab
    Ctrl + F6

    Позволяет активизировать следующее окно среди открытых в рамках конфигурации. Нажатие в цикле с удерживанием клавиши Ctrl позволяет листать отрытые окна "вперед"

    Активизировать предыдущее обычное окно

    Ctrl + Shift + Tab
    Ctrl + Shift + F6

    Позволяет активизировать предыдущее окно среди открытых в рамках конфигурации. Нажатие в цикле с удерживанием клавиши Ctrl позволяет листать отрытые окна "назад"

    Активизировать следующую секцию окна

    Активирует следующую секцию текущего окна

    Активизировать предыдущую секцию окна

    Активирует предыдущую секцию текущего окна

    Вызвать системное меню приложения или модального диалога

    Позволяет увидеть системное меню операций (свернуть, переместить, закрыть и т. п.) над окном программы или открытого модального диалога

    Вызвать системное меню окна (кроме модальных диалогов)

    Alt + Hyphen + (-)
    Alt + Num + (-)

    Позволяет увидеть системное меню операций (свернуть, переместить, закрыть и т. п.) над активным окном

    Вызвать главное меню

    Активирует главную панель с кнопками текущего окна. Тем самым вы можете выбирать действия без участия мыши

    Вызвать контекстное меню

    Отображает контекстное меню над текущим активным элементом. Аналогично нажатию правой кнопки мыши на нем

    Вернуть активность обычному окну

    Возвращает активность обычному окну после работы с контекстным меню. Внимание! В любом другом случае, Esc инициирует закрытие активного окна

    "Горячие" клавиши: управление формами

    Здесь собраны "горячие" клавиши, упрощающие и ускоряющие работу с различными формами, которые созданы в конфигурациях, написанных на платформе "1С:Предприятие".

    "Горячие" клавиши для управления формами

    Действие

    Сочетания клавиш

    Как работает программа

    Перейти на следующий элемент управления/вызов кнопки по умолчанию

    Переход между элементами управления на форме "вперед" (см. Tab)

    Вызов кнопки по умолчанию

    Как правило, у различных форм назначена кнопка по умолчанию (она отличается от других - например, выделена жирным). Использование этой комбинации клавиш позволяет из любого места открытой формы активировать кнопку по умолчанию

    Перейти на следующий элемент управления

    Переход между элементами управления на форме "вперед"

    Перейти на предыдущий элемент управления

    Переход между элементами управления на форме "назад"

    Активизирует командную панель, связанную с активным элементом управления/формой

    Активирует главную панель с кнопками текущей формы. Тем самым вы можете выбирать действия без участия мыши

    Перемещение по элементам управления, объединенным в одну группу

    Используя клавиши-курсоры можно быстро перемещаться между сгруппированными элементами управления

    Закрывает окно текущей формы

    Восстановить положение окна

    Если сбились какие-то параметры окна формы, эта комбинация позволяет вернуть все назад

    "Горячие" клавиши: работа со списком и деревом

    "Горячие" клавиши этого раздела помогут эффективно работать без использования мыши в многочисленных списках и деревьях, которые активно используются в различных объектах конфигураций на платформе "1С:Предприятие 8".

    "Горячие" клавиши для работы со списком и деревом

    Действие

    Сочетания клавиш

    Как работает программа

    Открывает для изменения элемент, на который установлен курсор. Клавиша аналогична действию "Изменить" на стандартной панели кнопок формы

    Ctrl + Shift + R
    F5

    Обновляет данные в списке или дереве. Особенно актуально для динамических списков (например, список документов), когда для них не включено автообновление

    Создает новый элемент списка, используя в качестве шаблона текущий элемент. Аналогично кнопке "Добавить копированием"

    Создает новую группу. Аналогично кнопке "Добавить группу"

    Непосредственное удаление текущего элемента. Внимание! Используйте эту комбинацию с большой осторожностью в динамических списках, так как отменить удаление нельзя

    Перемещение строки вверх

    Ctrl + Shift + Up

    В списках, где разрешено изменение порядка строк, позволяет передвинуть текущую строку вверх. Аналогично кнопке "Переместить вверх"

    Перемещение строки вниз

    Ctrl + Shift + Down

    В списках, где разрешено изменение порядка строк, позволяет передвинуть текущую строку вниз. Аналогично кнопке "Переместить вниз"

    Перенести элемент в другую группу

    Ctrl + Shift + M
    Ctrl + F5

    Позволяет быстро переместить текущий элемент (например, справочника) в другую группу

    Перейти на уровень вниз с одновременным раскрытием группы

    Переходит внутрь папки, на которой был установлен курсор

    Перейти на уровень вверх (к "родителю")

    Выходит наверх из папки, в которой вы находились

    Завершает с сохранением изменений редактирование элемента списка

    Раскрыть узел дерева

    Используется там, где доступны узлы деревьев, отмеченные значками "+" или "-"

    Закрыть узел дерева

    Раскрыть все узлы дерева

    Инвертирует значение флажка текущего элемента (включает или отключает его)

    "Горячие" клавиши: поле ввода

    Поле ввода - активно используемый элемент управления во множестве мест форм конфигураций. "Горячие" клавиши для поля ввода позволяют быстро выполнить часто используемые действия над ним. Особенно полезно использовать эти клавиши там, где разработчик конфигурации не вывел нужные вам кнопки управления полем ввода.

    "Горячие" клавиши для поля ввода

    Действие

    Сочетания клавиш

    Как работает программа

    Переключить режим вставки/замены

    Аналогично поведению при редактировании обычного текста, позволяет либо добавлять новые символы при вводе к старым, либо затирать старые новыми

    Выбор соответствующего объекта, связанного с полем ввода (например, выбор нужного документа из списка). Аналогично кнопке поля ввода "Выбор"

    Ctrl + Shift + F4

    Открытие формы выбранного объекта в текущем поле ввода. Аналогично нажатию кнопки поля ввода "Открыть"

    Очистить поле ввода от текущего в нем значения

    Удалить символ слева от курсора

    Работа с набранным текстом в поле ввода

    Удалить символ справа от курсора

    Удалить слово слева от курсора

    Удалить слово справа от курсора

    Перейти в начало строки

    Перейти в конец строки

    Нажатие указателем мыши кнопки "Вверх" для кнопки регулирования

    Использование регулировки, если это разрешено в поле ввода. Например, изменение дат, счетчиков и т. п. Аналогично нажатию на кнопку "вверх" регулятора поля ввода

    Нажатие указателем мыши кнопки "Вниз" для кнопки регулирования

    Использование регулировки, если это разрешено в поле ввода. Например, изменение дат, счетчиков и т. п. Аналогично нажатию на кнопку "вниз" регулятора поля ввода

    "Горячие" клавиши: поле картинки

    Поле картинки - это стандартный элемент платформы "1С:Предприятие 8" для отображения графических изображений. "Горячие" клавиши помогут, например, комфортно просмотреть изображение, расположенное в поле картинки.

    По кнопке на форме элемента справочника вызывается процедура. В процедуре требуется осуществить запись текущего элемента. Запись;. На это 1С ругается:Данная команда не может выполняться в формуле элемента диалога!Как можно обойти?v77.20.SQL.

    2 Да я в курсе, что Записать, а не Запись - я просто опечатался.

    Если есть ТИС 9.2., то см. кнопки на форме документа Перемещение ТМЦ

    1 - А процедура как называеться?2 - Посмотри в процедуре ПриЗаписи нет ли там Записать

    а расскажи-ка что у тебя написано в формуле элемента диалога.

    2 Ничего особенного, только вызов этой процедуры ПересчетЕё код:КонецПроцедуры;Вобщем смысл её таков:После изменений в элементе-владельце (в текущем элементе), нужно пересчитать некоторые значения в элементах подчиненного справочника "Ресурсы", а для этого надо сначала записать все эти изменения.. Вот запись изменений мне и не удается. Можно,конечно, сделать две кнопки "Запись" и "Пересчет", но как-то это не красиво.

    так и думал, покажи как делаешь запись текущего после пересчёта подч. справочника

    а чего ты вообще паришься? вызывай свой пересчет в процедуре ПриЗаписи

    гм. мой 18ый относился к 16ому посту.2 А это-то здесь причем. Мне не надо закрывать форму. Мне надо осуществить запись элемента в процедуре, вызываемой по кнопке на его форме.

    2 А ты порядок действий в посмотри внимательно, и поймешь почему парюсь - мне надо записать, а потом пересчитать, а потом опять записать. А ты предлагаешь: пересчитать, записать. Потому что в ПриЗаписи выполняется ПЕРЕД записью данных.

    кстати, в тебе правильно сказали: Спр.ИспользоватьВладельца(ТекущийЭлемент);и еще: зачем тебе все-таки записывать ДО вызова пересчета?

    Не тупи твой порядок действий1. Записать текущий эл.2. Пересчитать подчиненные.3. Поскольку подчиненные изменились - пересчитать одну цифру в текущем.4. Снова записать.получиться такой1. Пересчитать подчиненные.2. Поскольку подчиненные изменились - пересчитать одну цифру в текущем.3. Снова записать.И НЕ НАДО 2 РАЗА ЗАПИСЫВАТЬ. что сократит также время выполнения модуля

    24) а если пересчет зависит от изменённых данных в текущем?

    2 Что я не так делаю?Создал элемент справочника. Повесил кнопку с ПересчетВ модуле элемента:Процедура ПересчетКонецПроцедурыВсе записывает, все меняет ни на что не ругается.

    1:0 ступил , вот и я говорю пусть весь код покажет , млят гдето накалывают не пойму где , должен же записывать полюбому

    Два в одном - два развода на одной странице.Есть ли возможность спозиционироваться программно в форме списка?Данная команда не может выполняться в формуле элемента диалога.

    неспокойно мне всёж по поводу пересчёта подчиненных. полный текст дать можно?

    2 ИМЕННО! Мне подчиненные и надо пересчитать, чтобы рассчитать их сумму для нового количества в текущем. А вот новую (рассчитанную при пересчете) сумму подчиненных надо занести в текущий. Вот и получается, что надо записать изменения в текущем (чтобы при пересчете подчиненных брались новые значения владельца), пересчитать подчиненные (и получить новую сумму подчиненных),(занести новую сумму в текущий) и опять записать.Весь этот гемморой из-за того, что в процедуре пересчета подчиненных используются данные не непосредственно из переданного контекста, а переданный контекст (элемент-владелец) находится в справочнике и данные берутся из него. Такая беда из-за того,что процедура пересчета вызывается из множества мест и достаточно универсальна.Отсю.да рождается второй вариант решения данной проблемы: Переделка всех процедур пересчета. Иерархия подчинения справочников довольно-таки не малая: 1-3-2-2 (к главному подчиняются три справочника, а им в свою очередь еще два, а к ним еще два).

    Народ. Никакого развода. Есть форма элемента. На ней кнопка "Применить", в формуле которой только вызов процеджуры Пересчет.КонецПроцедурыглРасчетРесурсаРасценки(Спр) - процедура пересчета подчиненного элемента.глРасчетРасценки(Контекст) - процедура пересчета текущего.Всё.

    самое интересное в глобальных процедурах. не отстану. покажи её.

    Т.е. Процедура Пересчет с закоментированными Записать в начале и конце процедуры отрабатывается нормально?

    Блин! Долбанный диал-ап :( Столько написал и в пустую.Короче: Нашел я проблему.. как ни смешно, но на мысль натолкнул ПУХ, со своим "что я делаю неправильно". Вобщем начал от открытия формы рыть. и нарыл вот что: Если в процедуре ПриОткрытии есть Записать или вызов процедуры с Записать, то получите выше указанную ошибку и совсем не важно, что НИ В ОДНОМ из элементов формы НЕТ вызова этой процедуры.

    СПАСИБО ВСЕМ. Серьезно. Спасибо народ. И извините, что время отнял.

    2 Да понятно, что при открытии Записать не может работать, а ты попробуй сообрази, если 1С ошибку пишет про формулу элемента формы.

    Владислав Вдовин


    Владислав Вдовин

    Владислав Вдовин


    Владислав Вдовин

    Владислав Вдовин


    Владислав Вдовин Николай, это в общем модуле "ПодключаемыеКомандыКлиент"
    Процедура ПродолжитьВыполнениеКоманды(Контекст)

    Андрей Карпов

    Добавь в динамический список поле "ссылка" и отключи пользовательскую видимость для нее

    Владислав Вдовин


    Владислав Вдовин

    Андрей Карпов

    а у реквизита "ссылка" стоит галка "Использовать всегда" ?

    Владислав Вдовин


    Владислав Вдовин ответил Андрею

    Андрей Карпов

    На сколько мне известно нужно в предопределенный модуль добавить ваш документ ну или проверить его наличия там.

    Владислав Вдовин


    Владислав Вдовин

    Николай, Все делал по этой статье с ИТС, однако ошибка.
    Вот отсюда идем: если форма является формой списка, тогда:
    1. В параметре <ОбъектИлиТаблицаФормы> следует передавать элемент формы типа ТаблицаФормы, связанный с динамическим списком. Например:
    ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список);
    Показать полностью.

    2. В обработчике ПриАктивизацииСтроки таблицы формы следует вставить вызов по шаблону:
    &НаКлиенте
    Процедура <ИмяТаблицы>ПриАктивизацииСтроки(Элемент)
    // СтандартныеПодсистемы.ПодключаемыеКоманды
    ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
    // Конец СтандартныеПодсистемы.ПодключаемыеКоманды
    КонецПроцедуры

    3. Опционально. Добавить реквизит формы ПараметрыПодключаемыхКоманд произвольного типа. Это позволит не создавать реквизит формы динамически, что ускорит время открытия формы.

    Читайте также: