1с запустить команду формы программно

Управляемые формы. Как программно выполнить процедуры и обработ. событий формы?

Здравствуйте Уважаемые коллеги. Столкнулся с задачей выполнить процедуру управляемой формы, но что-то как-то не получается.
Коротко: в УТ11 создается программно элементы справочника вид цен. И все бы хорошо, только вот этот вид цен работать не будет до тех пор, пока элемент не откроешь в программе вручную, а затем нажмешь «Записать и закрыть».
Объекты создаются на сервере.
Проверял в отладчике, события формы элемента естественно не выполняются(при создании и записи).
Пробывал создовать объекты на сервере, затем по ссылке открывать формы на клиенте, все равно обработчики событий не срабатывают!

&НаКлиенте
Процедура ЗагрузитьНаКлиенте()

Для Каждого Строка Из МассивСсылок Цикл

ПараметрыОткрытия = Новый Структура(«Ключ», Строка);

ФормаОбъекта = ПолучитьФорму(«Справочник.ВидыЦен.Форма.ФормаЭлемента», ПараметрыОткрытия);

ФормаОбъекта.Открыть();
//ОЗ = ДанныеФормыВЗначение(Объект, Тип(«Справочник.ВидыЦен.Форма.ФормаЭлемента»));
ЭтаФорма.ОбновитьОтображениеДанных();
ФормаОбъекта.Закрыть();

На сервере создаются так:

&НаСервере
Процедура СоздатьВидЦен(КоллекцияАтрибутов, БазовыйВидЦен = Неопределено)

НовыйВидЦен.Заполнить(Неопределено);
НовыйВидЦен.Наименование = КоллекцияАтрибутов.ПолучитьИменованныйЭлемент(«Наименование»).Значение;

// недопустимо пустое наименование
Если Не ЗначениеЗаполнено(НовыйВидЦен.Наименование) Тогда
НовыйВидЦен.Наименование = Новый УникальныйИдентификатор();
КонецЕсли;

// не допустимы не уникальные идентификаторо относительно всех видов цен
Запрос = Новый Запрос;
Запрос.УстановитьПараметр(«Идентификатор», НовыйВидЦен.Идентификатор);
Запрос.Текст = «ВЫБРАТЬ
| ВидыЦен.Ссылка
|ИЗ
| Справочник.ВидыЦен КАК ВидыЦен
|ГДЕ
| ВидыЦен.Идентификатор = &Идентификатор»;
РезультатВыполнения = Запрос.Выполнить();

Если Не РезультатВыполнения.Пустой() Тогда

НовоеНаименование = НовыйВидЦен.Наименование + «_» + Новый УникальныйИдентификатор();

Если КоллекцияАтрибутов.ПолучитьИменованныйЭлемент(«ЦенаВключаетНДС»).Значение = «1» Тогда
НовыйВидЦен.ЦенаВключаетНДС = Истина;
КонецЕсли;

НовыйВидЦен.ИспользоватьПриПродаже = Истина;
НовыйВидЦен.ИспользоватьПриПередачеМеждуОрганизациями = Истина;

// проверим, если валюту не нашли отменяем создание вида цены
Если Не ЗначениеЗаполнено(НовыйВидЦен.ВалютаЦены) Тогда
Сообщить («Не удалось создать вид цен: » + НовыйВидЦен.Наименование + «. Причина: не найдена валюта цены с кодом: [» + КоллекцияАтрибутов.ПолучитьИменованныйЭлемент(«Валюта»).Значение + «]»);
Возврат;
КонецЕсли;

// Определимся, вдруг расчитывается на основании базовой цены
Если ЗначениеЗаполнено(БазовыйВидЦен) Тогда
НовыйВидЦен.СпособЗаданияЦены = Перечисления.СпособыЗаданияЦен.РассчитыватьПоДругимВидамЦен;
ПроцентнаяСтавка = КоллекцияАтрибутов.ПолучитьИменованныйЭлемент(«Процент»).Значение;
Если Число(ПроцентнаяСтавка) >= 0 Тогда
НовыйВидЦен.АлгоритмРасчетаЦены = «[» + БазовыйВидЦен.Идентификатор + «] * ((100 + » + Строка(ПроцентнаяСтавка) + «) / 100)»;
Иначе
НовыйВидЦен.АлгоритмРасчетаЦены = «[» + БазовыйВидЦен.Идентификатор + «] * ((100 » + Строка(ПроцентнаяСтавка) + «) / 100)»;
КонецЕсли;
Иначе
НовыйВидЦен.СпособЗаданияЦены = Перечисления.СпособыЗаданияЦен.Вручную;
КонецЕсли;

Вообще это все пишется для обработки переноса данных из писаной-переписанной семерки в УТ11. Так сказать, одноразовая обработка, лишь бы перебросить данные ))))

Вопрос: как программно эмулировать открытие формы и нажатие кнопки «Записать и закрыть» в управляемом приложении, так что бы выполнились все стандартные обработчики соответствующих событий формы? Желательно, что бы пользователь не наблюдал открытия и закрытия формы, но необязательно.

Источник

Программирование в 1С для всех

В этой статье научимся приемами программного создания и заполнения документов в 1С 8.3, кроме того, мы узнаем, как программно записывать и проводить документ 1С, а также узнаем, как программно открыть основную форму документа.

Прежде чем мы начнем разбирать вопросы программной работы с документами в 1С 8.3, хочу обратить Ваше внимание, что на управляемой форме в режиме тонкого клиента мы можем программно работать (создавать, записывать и проводить) с документами только в серверном контексте. То есть, ваша процедура или функция должна выполняться под директивами &НаСервере или &НаСервереБезКонтекста.

Все примеры в этой статье я буду показывать на управляемой форме обработки, которую создал «за кадром».

Создать документ 1С программно

В моей учебной конфигурации 1С имеется простенький документ с небольшим набором реквизитов, а также с одной табличной частью.

1 2

2 2

Для этой команды, я сделаю обработчики на клиенте и на сервере.

3 2

В серверном обработчике мы и напишем код, который и будет создавать документ..

В этом коде я обратился к менеджеру документа ПриходТовара (строка Документы.ПриходТовара), и использовал функцию менеджера документа СоздатьДокумент, которая и создает документ-объект. Переменная ДокПриход, которую мы создали будет иметь тип ДокументОбъект.ПриходТовара.

Следующим шагом, я присвою дату этому документу, для простоты, это будет текущая дата.

Номер я присваивать не буду, потому что у объекта моего документа включено свойство Автонумерация.

4 2

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

Записать документ 1С программно

Для того, чтобы документ 1С появился в базе, его необходимо записать. Делается это при помощи метода документа-объекта Записать. Этот метод позволяет и записать, и провести документ. Он имеет два параметра, которые я разберу ниже. Но, метод Записать также можно использовать и без параметров, тогда он будет просто записывать документ. Что мы и сделаем.

Все теперь документ появится в базе.

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

5 2

Для того, чтобы что-то в нем появилось, нам необходимо заполнить этот документ.

Заполнить документ 1С программно

У нашего документа два реквизита «шапки» – Склад и Комментарий. Создадим на форме обработки реквизит управляемой формы Склад с соответствующим типом, для последующей записи его в шапку документа, а реквизит комментарий заполним в ручную.

6 2

Присвоим реквизитам созданного объекта-документа нужные значения, просто обратившись через точку к этим реквизитам.

Так мы заполнили реквизиты «шапки», но у нас имеется еще табличная часть документа, необходимо заполнить и её. Для её заполнения, я создам таблицу значений в качестве реквизита формы обработки, и помещу её на эту форму.

7 1Мы будем в цикле обходить эту таблицу значений, создавая в каждой итерации цикла новую строку табличной части документа и заполняя её данными.

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

Всё! Мы можем смело создать документ, который будет заполнен.

8 1

9 1

Провести документ 1С программно

Все документы, которые мы создавали ранее были не проведены. Если мы хотим, чтобы документ был записан проведенным, то необходимо записывать его немного по-другому. Если раньше мы использовали метод Записать объекта документа без параметров, то теперь необходимо применять параметры этого метода. Данный метод имеет следующий синтаксис.

Записать( , )

Оба параметра это системные перечисления. Первый параметр это перечисление РежимЗаписиДокумента, которое может принимать следующие значения:

Т.е. мы можем записать документ, провести документ и отменить проведение документа.

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

Т.е. мы можем провести документ как в оперативном режиме, так и в неоперативном. Если этот параметр не указан, то документ проводится в неоперативном режиме.

Изменим запись нашего документа: пусть он проводится в оперативном режиме.

Теперь документ будет сразу проведен при создании.

Изменить документ 1С программно

Часто возникают задачи, когда нужно поменять уже созданный документ, или провести документ, который был только записан. Для этого необходимо из ссылки на документ получить его объект. Для примера, я опять создам «за кадром» новую обработку, на форме которой размещу ссылку на документ, поле с типом Склад и команду. При выполнение этой команды, будет меняться склад документа, а потом этот документ будет проводиться.

10 1

Как и в прошлый раз, я создам обработчик команды на сервере и на клиенте. И в серверном обработчике напишу код получения объекта из ссылки документа.

Мы получили объект документа, используя метод ссылки на документ ПолучитьОбъект. Имейте в виду, что этот метод можно использовать или на сервере, или клиенте в режиме толстого клиента. Переменная, которую мы создали будет иметь тип ДокументОбъект.ПриходТовара.

Изменим склад и проведем документ. В этот раз проведем в неоперативном режиме.

Открыть документ 1С программно

Научимся открывать документ 1С программно. Для этого мы доработаем предыдущую обработку: после изменения документа откроем основную форму этого объекта для просмотра и возможного редактирования. Для открытия формы документа, мы будем использовать метод ОткрытьФорму, в котором будем использовать параметр Ключ, где укажем ссылку на открываемый документ.

Если мы сейчас выполним этот код, то откроется форма документа, с уже измененным реквизитом Склад.

11 1

Более подробно и основательно разработка в 1С дается в моей книге: «Программировать в 1С за 11 шагов»

1C %D0%B2 %D0%B6%D0%B5%D0%BB%D1%82%D0%BE%D0%BC %D1%86%D0%B2%D0%B5%D1%82%D0%B5 3DИзучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

1 %D0%B2 %D0%B6%D0%B5%D0%BB%D1%82%D0%BE%D0%BC %D1%86%D0%B2%D0%B5%D1%82%D0%B5 3D %D0%BC%D0%B0%D0%BB%D0%B5%D0%BD%D1%8C%D0%BA%D0%B0%D1%8F

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

Промо-код на скидку в 15% — 48PVXHeYu

Вступайте в мои группы:

6 thoughts on “ Программная работа с документами в 1С ”

Одинаковые имена для реквизитов и элементов — это норма. Любую типовую открой и посмотри, как там сделано.
И о какой ошибке округления идет речь? Ты что здесь округлять собрался? В момент записи значения в поле Сумма округление производится автоматически в соответствие с заданной точностью в Конфигураторе.

По поводу книг. Читал книгу «Программировать в 1С за 11 шагов», книга написана очень понятным и доступным языком. Это первая книга, читая которую, я начал что-то понимать в 1С.

Ильяс, спасибо за статью. Что касается падежей — это не самое страшное. Плохо то, что сразу нарисовываются какие — то «умники», которых будут волновать округления и падежи. А вот если бы в статье о программной работе с документами учитывались округления, попытки, исключения — это была бы действительно статья типичного 1С — ника, которых полно и толку от которой — ноль. Не обращай на таких внимания. Основная масса, к сожалению, такая.

Падежи можно, конечно, и пропустить. Хотя, лучше все эти склонения и жиши перепроверить. Читающие оценят. Однако, ошибка в округлении — выдаёт безалаберность в прикладной области. Это важно. Автору — радуйтесь поддержке, но обращайте особое внимание на критику, она делает Вас лучше.

Ты где здесь ошибку в округлении нашел?
Ну и запятые проверь у себя в сообщении.

Источник

Программирование в 1С для всех

В этой статье я разберу особенности программного открытия обработок в 1С. Мы узнаем, как открыть форму обработки, как открыть форму внешней обработки из самой внешней обработки, а также как открыть форму внешней обработки из клиентского режима платформы 1С 8.3.

Открыть форму обработки 1С

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

В первой статье, в которой мы начали знакомиться с обработками в 1С, я создал обработку «Обработка для примера» с формой.

В этой статье я покажу, как открыть программно форму этой обработки из другой обработки «Обработка1». Для этого у Обработки1 я создал управляемую форму и команду формы.

1 3

В клиентском обработчике команды, напишем код, который будет открывать основную форму обработки.

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

2 3

После, в результате выполнения команды, в отдельном окне будет открываться форма обработки «Обработка для примера».

3 3

Открыть форму внешней обработки 1С

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

Разберем пример. Пусть, у внешней обработки будут две формы: Основная и Дополнительная.

4 4

На основной форме создадим команду «Открытие дополнительной», при выполнении которой будет открываться дополнительная форма.

5 4

У этой команды будет клиентский обработчик события, со следующим кодом:

Теперь, открыв внешнюю обработку, мы сможем из её основной формы открыть дополнительную.

6 3

Открыть внешнюю обработку 1С

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

Разберем эту задачу. Откроем внешнюю обработку из обработки, которую создали в предыдущей статье, и с которой работали уже в этой — «Обработка 1».

В этой обработке создадим команду, при выполнении которой откроется форма внешней обработки.

7 3

В форме обработки напишем следующий код:

Код работает, начиная с платформы 8.3.15.

В вышеприведенном коде, процедура ОткрытьВнешнююОбработку — обработчик команды «Открыть внешнюю обработку», в этом обработчике используется метод НачатьПолучениеФайлаНаСервер, который выполнен в варианте открытия диалога выбора файла. После выбора файла срабатывает процедура описания оповещения ПослеВыбораФайла. В этой процедуре получается адрес временного хранилища файла (переменная Адрес), по которому находится название внешней обработки (в серверной процедуре ПолучитьИмяВнешнейОбработки), а потом эта внешняя обработка открывается.

После выполнения команды, откроется окно выбора файла внешней обработки.

8 3

Если файл будет выбран, внешняя обработка откроется.

9 3

Статьи про открытие форм:

Статьи по конфигурированию в 1С:

Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»

1C %D0%B2 %D0%B6%D0%B5%D0%BB%D1%82%D0%BE%D0%BC %D1%86%D0%B2%D0%B5%D1%82%D0%B5 3D

Книга написана понятным и простым языком — для новичка.

О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

1C taxi blog

Промо-код на скидку в 15% — 48PVXHeYu

Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog


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

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • 1с запускается в управляемом приложении вместо обычного
  • 1с запуск внешней обработки нарушение прав доступа