Для объекта не определена форма по умолчанию 1с

Обновлено: 06.07.2024

Задача: В "1С:Управление торговлей 11" (релиз 11.06.7). В форме документа счет-фактура выданный аванс заполнить табличную часть Авансы на основании документа поступление безналичных денежных средств.

1) Перед заполнением табличной части документа получить от пользователя подтверждение на это действие;

2) Обработку создания документа сделать внешней и подключаемой к форме документа счет-фактура на аванс выданный;

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

Пункты 1 и 2 не представляют особой сложности, но пункт 3 заставил меня задуматься и написать, по-моему мнению, топорный, но исправно действующий код.

Понятно, что от нас требуется создать внешнюю обработку вида "ЗаполнениеОбъекта" и подключить её в информационную базу.

Приведу код в модуле обработки:

Так как нам придется работать с формами объектов, мы просто вынуждены использовать метод ВызовКлиентскогоМетода для вызова команды внешней обработки.

Напомню, при использовании ВызовСерверногоМетода с формами объектов работать не получится.

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

Так как мы использовали ВызовКлиентскогоМетода, то обязательную процедуру, для внешней подключаемой обработки заполнения объектов, ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт, необходимо выполнять &НаКлиенте в модуле формы обработки, а значит создадим любую форму обработки, пользователь её всеравно не увидит, и поместим внутрь модуля формы следующий код:

Ниже приведу код, который у вас может быть совершенно другим и делать какие-либо другие манипуляции с объектом формы:

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

Поэтому если есть другое решение поставленной задачи, то обязательно сообщите о нем.

Заполнение табличной части документа счет-фактура на аванс

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

(1) Не разбираешься, не лезь. И описывать различия не требуется, кто в теме, в курсе.

Разница такая, что в этой статье описана методика заполнения объекта (аналог из УПП 1.2 или УТ 10.3 - заполнение табличных частей), а в другой - описание создания связанных объектов или ввода на основании.
Статья полезная, сам думал, как бы это сделать пооптимальней. Намудили Намудрили разработчики с БСП.

criptid; cheburashka; Denis_Lebedinsky; Serg3141; stoptime; Enyel; hromovanton; Dmitri93; Krasnyj; klmop; MarinaLed; Lo1jke; dbachinsky; Spacer; tkv44; shard; biz-intel; KazeNoYaida; ShyThun; kote; Cobalt River; Nuobu; Denizzz; + 23 – 2 Ответить Вроде как в первом случае используется СозданиеСвязанныхОбъектов
а во втором ЗаполнениеОбъекта
в принципе задача то одна, а вот решения разные. Обратил внимание на ВыполнитьКоманду В данном контексте читать как "Результат один"
Понимаю, что основной задаче для автора является ее реализация.
полностью согласен. БСП еще допиливать и допиливать

(0) Автор, все еще жду ответа и исправления в описании!

(3) 1. Будь вежливее.
2. Цель моего предложения в (1) - автор ДОЛЖЕН расписать отличие одной обработки от другой, чтобы пользователь сайта, который не разбирается в этом (а ведь статья именно для таких пользователей! ), мог понять отличие и назначение каждой статьи.
Если ТЕБЕ эта моя цель непонятна/недоступна, это твои проблемы!
Уважаю тебя за твои работы, но здесь ты неправ.

ЗЫ На будущее - Не лезь и не обсуждай работу Модераторов.

Ляль Дикий; echo77; 1c.pro.fun; Lyolik; copperfox; pipetkabeatboo; www2000; altimait; + 8 – 3 Ответить

Разница публикаций очевидна из их названия.
Поясню:
1) Создание связанных объектов
2) Заполнение объекта

Задачи поставлены разные.
1) Создать документ счет-фактура выданный аванс на основании документа поступление безналичных денежных средств
2) В форме документа счет-фактура выданный аванс заполнить табличную часть Авансы

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

Я мог конечно написать только суть и даже не публиковать обработку, но тогда по собственному опыту скажу, что были бы только вопросы и плевки в мою сторону, особенно у новичков.

TaTaPuH-Magic; taasha25; baracuda; KarV; svartemov; drcrasher; Denizzz; Поручик; + 8 – Ответить (10) Успокойся, здесь люди всё таки адекватные, статью не удалят.
Это две разные публикации о разных задачах. Заявляю, как человек постоянно с прошлого года работающий с УТ 11 и вообще с БСП.
- это вполне может быть, здесь полно таких, вот я, к примеру. Поэтому Вам предложили только более понятно описать, о чем материал в статье, чтобы нам, "чайникам", было понятно. Удалять статьи никто не собирался. Подскажите можно ли как то делать отладку внешней подключаемой обработки?
И как какая тут последовательность надо вначале создать документ "счет-фактура выданный аванс" потом выбрать у него в основание "поступление безналичных денежных средств" а потом нажать заполнение? Хм, а если после выполнения обработки при любой попытке изменить реквизит или просто сохранить пишет «Ошибка блокировки объекта. Объект уже заблокирован <наименование сеанса>» ? Разобрался.
Опа, нет ещё.
Короче, нифига не выходит с заполнением формы без сохранения данных в объекте: форма заполняется - но больше с ней ничего не сделать: «Ошибка блокировки объекта. Объект уже заблокирован». Пришлось в серверной процедуре записывать объект с помощью ДанныеФормыВЗначение. Пытался прикрутить к УТ 11.0.6.7 заполнение графы «Основание» в ПКО описанием документа-основания ПКО. как обойти «Ошибка блокировки объекта. Объект уже заблокирован», подскажите оч надо Кстати, а зачем обработка заполнения ТЧ счета-фактуры на аванс?
На мой взгляд правильней заполнять с/ф в обработке формирования с/ф на аванс.

Кстати, а зачем обработка заполнения ТЧ счета-фактуры на аванс?

На мой взгляд правильней заполнять с/ф в обработке формирования с/ф на аванс.

Это лишь пример реализации интерактивного заполнения ТЧ. Можно было бы заполнять другую ТЧ, но суть решения не изменилась бы.

Хм, а если после выполнения обработки при любой попытке изменить реквизит или просто сохранить пишет «Ошибка блокировки объекта. Объект уже заблокирован <наименование сеанса>» ?

Верно подмечено. Разбираюсь в этой проблемой в данный момент.

?
Не хочу троллить, но автор сам пользовался этой обработкой? Сталкнулся с проблемой когда созданная внешняя обработка по загрузке прайса из XLS в док заказ клиента - выдавал в документе что он заблокирован, и в результате после заполнения таблич части документа нельзя было его не записать не сохранить - это безусловно баг УТ 11 и пофиксят непонятно в каких релизах потом - но проблема осталась!

Короче, нифига не выходит с заполнением формы без сохранения данных в объекте: форма заполняется - но больше с ней ничего не сделать: «Ошибка блокировки объекта. Объект уже заблокирован». Пришлось в серверной процедуре записывать объект с помощью ДанныеФормыВЗначение. Пытался прикрутить к УТ 11.0.6.7 заполнение графы «Основание» в ПКО описанием документа-основания ПКО.

Вопрос блокировок конечно очень обширный, поэтому я хотел бы для себя разобраться для начала в каком то одном частном вопросе. А именно как работает свойство БлокироватьДляИзменения у набора записей в 8.2 в управляемом режиме (SQL). Если для предыдущих версий платформы все достаточно понятно, так например:
Для 8.1 (Автоматический режим) ответы будут следующие:
1) Когда читаются данные, которые необходимо изменять в текущей транзакции необходимо в запросе указывать "ДЛЯИЗМЕНЕНИЯ"
2) Блокировка накладывается в момент выполнения запроса, диапазон блокируемых данных определяется условиями в запросе.
3) Блокируется запись, а так же чтение другими транзакциями, запросы которых используют директиву "ДЛЯИЗМЕНЕНИЯ"

Для 8.1 (Управляемый режим)
1) Когда читаются данные которые необходимо изменять в текущей транзакции нужно установить исключительную блокировку, когда необходимо просто обеспечить неизменность прочитанных данных - разделяемую.
2) Блокировка устанавливается явно, методом Заблокировать() блокируемые записи так же явно указываем в коде.
3) Разделяемая - запрещает запись, Исключительная - Чтение и запись

Для 8.2 (Управляемый режим) в принципе верно тоже что и для 8.1 (Управляемый),
но это если использовать старую методику - сначала контроль остатков, потом проведение.
Как действовать при новой методике, непонятно. ответ судя по всему кроется в понимании принципов работы этой самой "БлокироватьДляИзменения"

я так думаю нужно переделать в обработке каркас а именно это
Форма = ОткрытьФорму("Документ.СчетФактураВыданныйАванс.Форма.ФормаДокумента",КлючПоиска. Окно);

//Далее мы получаем объект только, что повторно открытой формы и помещаем её в переменную
//В объекте содержатся все реквизиты (элементы) формы
НовыйОбъект = Форма.Объект;

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

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

Обычные (неуправляемые) формы могут работать только в толстом клиенте. Тонкий и веб-клиенты поддерживают работу только с управляемыми формами.

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

Проще всего запустить толстого клиента в режиме управляемого приложения из конфигуратора, указав это в параметрах: Сервис - Параметры - Запуск 1С:Предприятия - Основные - Толстый клиент (управляемое приложение) .


При этом нужно помнить, что запуск клиентов в управляемом режиме возможен только в том случае, если у конфигурации отключена совместимость в версией 8.1 (свойство Режим совместимости ).


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

Возможность использования обычных форм в управляемом режиме регулируется специальным свойством конфигурации - Использовать обычные формы в управляемом приложении . Это свойство нужно установить.

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



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

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