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

Как открыть форму незаписанного объекта документа?

Тип: ОписаниеОповещения.
Содержит описание процедуры, которая будет вызвана после закрытия окна ввода значения с параметром

(10) > Форму не записанного документа открывать не надо

(14) Зачем записывать в базу документ, когда его можно не записывать? А если пользователь передумает его сохранять? Удалять документ из базы, или что?

Вот что получилось сделать для нового объекта Как открыть форму нового не записанного документа? УФ 1С 8.3
Подтверждаю, работает и даже могу модально форму открыть, вот код:

думаю сработает и с формой обычного объекта, его же можно получить через ключ:

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

Метод кривой, но если совсем никак без демонстрации, то чего поделать.

С небольшим кодом в расширении:

тогда работать можно так:

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

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

простейший пример, установка цен.
Перечитываю данные из объекта и получаю фигу, потому что таблица рисуется при создании на сервере, а не при чтении.

Так наглядно, понятно?

Источник

Создание объекта БД и открытия его формы без записи объекта

Дело в том, что ПолучитьФорму() вызывает ПрисозданииНаСервере () формы, а в нем происходит настройка формы, в зависимости от значений реквизитов объекта. Как правило, методы отвечающие за настройку формы вызываются и из ПриЧтенииНаСервере().
Т.е. получается, что объект еще не заполнен, а настройка формы уже произошла. Экспортных методов у формы нет, чтоб дернуть их для настройки формы после заполнения объекта.
В связи с этим вопрос: как выполнить настройку формы после заполнения реквизитов у созданного, но не записанного объекта?

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

Код
Показать полностью

Форма заимствована. Метод ВыполнитьНастройкуФормыПослеЗаполненияОбъекта () экспортный в расширении.

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

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

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

Код
Показать полностью

Форма заимствована. Метод ВыполнитьНастройкуФормыПослеЗаполненияОбъекта () экспортный в расширении.

(12) Я не настаиваю. Банальное любопытство: вдруг узнаю для себя что-то новое.

Я представлял себе решение так:
1. Собираете структуру параметров заполнения, включающую в себя все необходимые параметры для создания объекта. Вставляете также некий уникальный ключ в структуру.
2. Открываете/получаете форму с параметрами, где есть ключ «Основание» со значением структуры, собранной в п.1.
2. Создаете свой обработчик события «ОбработкаЗаполнения» для создаваемого объекта с диррективой «&Перед». Проверяете тип данных заполнения (должна быть структура) и наличие уникального ключа в данных заполнения. Если есть, выполняете алгоритм заполнения нового объекта, как это делала Ваша обработка, и очищаете данные заполнения (необязательно).

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

Источник

Создать документ, заполнить и открыть без записи

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

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

Открыть по записи связаный документ
Я представляю информации во View из одного документа, а при открытии записи из View должен.

С помощью ActiveX открыть документ excel, заполнить определённые ячейки набором чисел и сохранить
хочу с помощью ActiveX открыть документ excel, заполнить определённые ячейки набором чисел и.

Создать и открыть документ програмно
Пишу следующее Док = СоздатьОбъект(«Документ.Такой-то»); Док.Новый(); //Здесь нужно его открыть.

везде будет 10 и 55, да?) магические числа.

Это тут просто для примера, а на самом деле числа берутся из ТабДок, в который данные зачитаны из mxl файла.

Добавлено через 4 минуты

я думаю что так, хотя почему у вас не тот объект, я не врубился (

Что может быть не так с формой «ФормаДокумента»? В конфигурации «ФормаДокумента» стоит первой в списке форм.

Добавлено через 7 минут
Может ли как то это быть связано с правами пользователя? Что форму нельзя получить при исполнении обработки?

Добавлено через 16 минут
Попытка номер 2, подставил «ФормаОбъекта» (правильно ли?)

Как же заполнять табличную часть после получения формы?

Источник

Программирование в 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С — ника, которых полно и толку от которой — ноль. Не обращай на таких внимания. Основная масса, к сожалению, такая.

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

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

Источник

Как открыть форму с заполнением

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

Открытие формы с заполнением (передача в параметре открываемой формы и реализация метода «ОбработкаЗаполнения()») выполняется одинаково в управляемом и обычном приложении (проверял на платформе 8.3.5.1146 — управляемое приложение и на платформе 8.2.18.102 — обычное приложение).

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

В структуру «ПараметрыЗаполнения» записываются все нужные для заполнения данные, затем эта структура вставляется в другую структуру под названием «ПараметрыФормы».

Причем ключ, под которым структура «ПараметрыЗаполнения» вставляется в структуру «ПараметрыФормы», должен называться именно «ЗначенияЗаполнения» иначе, ничего не работать не будет.

Далее нужно реализовать событие модуля формы заполняемого объекта — «ОбработкаЗаполнения()». Я для этого использую следующую конструкцию, которая, на мой взгляд, изящно выглядит и позволяет избежать всех возможных ошибок (поправьте, если я ошибаюсь):

Напомню, что метод структуры «Свойство()» проверяет наличие в структуре элементы с именем, указанным в первом параметре и записывает найденное значение во второй параметр — в данном случае это реквизит заполняемого объекта (если элемент с указанным именем в структуре не найден, то во второй параметр записывается «Неопределено»).

На этом все, надеюсь данная статья Вам помогла.

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

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