1с провести и закрыть код
Программирование в 1С для всех
В этой статье научимся приемами программного создания и заполнения документов в 1С 8.3, кроме того, мы узнаем, как программно записывать и проводить документ 1С, а также узнаем, как программно открыть основную форму документа.
Прежде чем мы начнем разбирать вопросы программной работы с документами в 1С 8.3, хочу обратить Ваше внимание, что на управляемой форме в режиме тонкого клиента мы можем программно работать (создавать, записывать и проводить) с документами только в серверном контексте. То есть, ваша процедура или функция должна выполняться под директивами &НаСервере или &НаСервереБезКонтекста.
Все примеры в этой статье я буду показывать на управляемой форме обработки, которую создал «за кадром».
Создать документ 1С программно
В моей учебной конфигурации 1С имеется простенький документ с небольшим набором реквизитов, а также с одной табличной частью.
Для этой команды, я сделаю обработчики на клиенте и на сервере.
В серверном обработчике мы и напишем код, который и будет создавать документ..
В этом коде я обратился к менеджеру документа ПриходТовара (строка Документы.ПриходТовара), и использовал функцию менеджера документа СоздатьДокумент, которая и создает документ-объект. Переменная ДокПриход, которую мы создали будет иметь тип ДокументОбъект.ПриходТовара.
Следующим шагом, я присвою дату этому документу, для простоты, это будет текущая дата.
Номер я присваивать не буду, потому что у объекта моего документа включено свойство Автонумерация.
В принципе, этого вполне достаточно, чтобы наш документ существовал. Но создав его при помощи функции СоздатьДокумент, мы не записали его непосредственно в базу. После выполнения кода выше, ни какого документа в базе не появится!
Записать документ 1С программно
Для того, чтобы документ 1С появился в базе, его необходимо записать. Делается это при помощи метода документа-объекта Записать. Этот метод позволяет и записать, и провести документ. Он имеет два параметра, которые я разберу ниже. Но, метод Записать также можно использовать и без параметров, тогда он будет просто записывать документ. Что мы и сделаем.
Все теперь документ появится в базе.
Мы его можем создать, и это будет абсолютно пустой документ, без всяких реквизитов и без заполненной табличной частью.
Для того, чтобы что-то в нем появилось, нам необходимо заполнить этот документ.
Заполнить документ 1С программно
У нашего документа два реквизита «шапки» – Склад и Комментарий. Создадим на форме обработки реквизит управляемой формы Склад с соответствующим типом, для последующей записи его в шапку документа, а реквизит комментарий заполним в ручную.
Присвоим реквизитам созданного объекта-документа нужные значения, просто обратившись через точку к этим реквизитам.
Так мы заполнили реквизиты «шапки», но у нас имеется еще табличная часть документа, необходимо заполнить и её. Для её заполнения, я создам таблицу значений в качестве реквизита формы обработки, и помещу её на эту форму.
Мы будем в цикле обходить эту таблицу значений, создавая в каждой итерации цикла новую строку табличной части документа и заполняя её данными.
В этом коде я обращаюсь к табличной части документа-объекта посредством точки (строка ДокПриход.СписокТоваров), получаю табличную часть этого объекта, и используя метод Добавить, создаю новую строку табличной части. А потом заполняю реквизиты табличной части документа данными из таблицы значений. Поскольку у нас названия реквизитов табличной части и таблицы значений совпадают, мы можем упростить код заполнения табличной части, используя метод ЗаполнитьЗначенияСвойств.
Всё! Мы можем смело создать документ, который будет заполнен.
Провести документ 1С программно
Все документы, которые мы создавали ранее были не проведены. Если мы хотим, чтобы документ был записан проведенным, то необходимо записывать его немного по-другому. Если раньше мы использовали метод Записать объекта документа без параметров, то теперь необходимо применять параметры этого метода. Данный метод имеет следующий синтаксис.
Записать( , )
Оба параметра это системные перечисления. Первый параметр это перечисление РежимЗаписиДокумента, которое может принимать следующие значения:
Т.е. мы можем записать документ, провести документ и отменить проведение документа.
Во втором параметр РежимПроведения необходимо указывать системное перечисление РежимПроведениеДокумента, которое может принимать следующие значения:
Т.е. мы можем провести документ как в оперативном режиме, так и в неоперативном. Если этот параметр не указан, то документ проводится в неоперативном режиме.
Изменим запись нашего документа: пусть он проводится в оперативном режиме.
Теперь документ будет сразу проведен при создании.
Изменить документ 1С программно
Часто возникают задачи, когда нужно поменять уже созданный документ, или провести документ, который был только записан. Для этого необходимо из ссылки на документ получить его объект. Для примера, я опять создам «за кадром» новую обработку, на форме которой размещу ссылку на документ, поле с типом Склад и команду. При выполнение этой команды, будет меняться склад документа, а потом этот документ будет проводиться.
Как и в прошлый раз, я создам обработчик команды на сервере и на клиенте. И в серверном обработчике напишу код получения объекта из ссылки документа.
Мы получили объект документа, используя метод ссылки на документ ПолучитьОбъект. Имейте в виду, что этот метод можно использовать или на сервере, или клиенте в режиме толстого клиента. Переменная, которую мы создали будет иметь тип ДокументОбъект.ПриходТовара.
Изменим склад и проведем документ. В этот раз проведем в неоперативном режиме.
Открыть документ 1С программно
Научимся открывать документ 1С программно. Для этого мы доработаем предыдущую обработку: после изменения документа откроем основную форму этого объекта для просмотра и возможного редактирования. Для открытия формы документа, мы будем использовать метод ОткрытьФорму, в котором будем использовать параметр Ключ, где укажем ссылку на открываемый документ.
Если мы сейчас выполним этот код, то откроется форма документа, с уже измененным реквизитом Склад.
Более подробно и основательно разработка в 1С дается в моей книге: «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
Промо-код на скидку в 15% — 48PVXHeYu
Вступайте в мои группы:
6 thoughts on “ Программная работа с документами в 1С ”
Одинаковые имена для реквизитов и элементов — это норма. Любую типовую открой и посмотри, как там сделано.
И о какой ошибке округления идет речь? Ты что здесь округлять собрался? В момент записи значения в поле Сумма округление производится автоматически в соответствие с заданной точностью в Конфигураторе.
По поводу книг. Читал книгу «Программировать в 1С за 11 шагов», книга написана очень понятным и доступным языком. Это первая книга, читая которую, я начал что-то понимать в 1С.
Ильяс, спасибо за статью. Что касается падежей — это не самое страшное. Плохо то, что сразу нарисовываются какие — то «умники», которых будут волновать округления и падежи. А вот если бы в статье о программной работе с документами учитывались округления, попытки, исключения — это была бы действительно статья типичного 1С — ника, которых полно и толку от которой — ноль. Не обращай на таких внимания. Основная масса, к сожалению, такая.
Падежи можно, конечно, и пропустить. Хотя, лучше все эти склонения и жиши перепроверить. Читающие оценят. Однако, ошибка в округлении — выдаёт безалаберность в прикладной области. Это важно. Автору — радуйтесь поддержке, но обращайте особое внимание на критику, она делает Вас лучше.
Ты где здесь ошибку в округлении нашел?
Ну и запятые проверь у себя в сообщении.
Переопределение кнопки «Провести и закрыть»
Уверен, что для многих эта задача не представляет никакой сложности. Очень даже возможно, что эта задача решается и другими способами.
Имеется: Документ с реквизитами НомерВх и ДатаВх, а также основная форма документа
Зачада: Перед записью необходимо задать вопрос пользователю и по результату ответа продолжить запись, либо не продолжать.
В свойствах формы редактируем список команд: снимаем галки с команд «Провести и закрыть», «Записать», «Провести».
Для командной панели убираем признак «Автозаполнение». Добавляем на форму свои команды, а также добавляем группу с типовыми командами. Далее описываем код для созданных команд:
Далее описываем код команд и проверку на дубли
Для каждой команды определяем ПараметрыЗаписи, а также добавляем признак «Закрыть», чтобы после того, как будет задан вопрос, можно было определить надо ли закрывать форму или оставить форму открытой.
Собственно, процедура самой проверки
Далее процедура обработки оповещения, в которой происходит запись и закрытие документа (если он должен закрыться)
Остается ещё один момент: документ может быть записан при закрытии на крестик, тогда будут отрабатывать только типовые механизмы записи документа. Для себя решил это следующим образом (возможно, не очень правильно):
Добавлен реквизит формыВ процедуре ПередЗаписью следующий код
В процедуре ПриСозданииНаСервере устанавливаем флаг в положение ИСТИНА
Вот и всё, типовые команды заменены на наши и можно задавать вопросы пользователю до записи документа. Надеюсь статья будет кому-то полезна. Самого на написание статьи подтолкнула ситуация, когда при нажатии на кнопку «Провести и закрыть» выводится вопрос, подтверждаю запись, но документ не закрывается, закрыть документ можно только по крестику.
[Новое в платформе] Как правильно закрывать формы и приложение в платформе 1С:Предприятие 8.3.8 (и старше)
Эта статья для программистов 1С – в ней разберем новое ограничение платформы при разработке кода.
При закрытии формы обработки или при закрытии всего приложения достаточно часто используется дополнительный диалог.
В основной массе диалог представляет собой вопрос для подтверждения операции закрытия, но бывают более сложные случаи. Например, при закрытии формы подбора товаров можно запросить у пользователя разрешение на перенос подобранных товаров в документ.
Начиная с версии 8.3.8 разработчики платформы изменили подход, которому должны следовать программисты при решении подобного рода задач.
Коротко о главном…
Сначала коротко обозначим суть изменений. Начиная с версии платформы 8.3.8 необходимо выделять 2 сценария закрытия формы:
Как это повлияло на объем кода?
Кроме этого, изменения платформы серьезно затронули логику программного кода. Теперь в процессе закрытия приложения практически невозможно организовать произвольный сценарий из-за введенных ограничений. В чем суть ограничений?
Фактически теперь в процессе закрытия приложения можно указать только текст вопроса, который увидит пользователь.
Скорее всего, у вас уже возник вопрос: к чему же все эти изменения?
Приведем цитату разработчиков платформы из файла V8Update.htm, содержащего перечень изменений релизов платформы:
Теперь подробнее разъясним суть проблемы.
Раньше при выходе из системы, когда возникала задача открытия диалогов, приходилось писать программный код отдельно для веб-клиента и отдельно для других клиентов. Связано это с тем, что все современные веб-браузеры, если страница не хочет, чтобы ее закрывали, выводят свой диалог. Примеры этих диалогов вы сможете увидеть ниже, в той части статьи, где подробно рассматривается поведение веб-браузеров.
Что же сделали разработчики платформы? Теперь платформа ведет себя так же, как и веб-браузеры: если приложение не хочет, чтобы его закрывали, тогда выводится платформенный диалог. В результате нет необходимости писать код под разные клиенты, так как работает он одинаково, но платой за такую универсальность являются описанные выше ограничения.
При этом даже если мы не предполагаем использование веб-клиента в нашей базе, то это ничего не меняет. Ограничения все равно действуют. В некоторых случаях это может быть неудобным, но с этим придется мириться. В частности, теперь открытие дополнительных обработок при закрытии приложения может вызвать затруднение. Решение подобной задачи мы рассмотрим в конце статьи.
На этом завершаем краткий обзор изменений и переходим к подробному разбору.
Вопрос при закрытии формы
Изменения в коде будем рассматривать в сравнении с тем, как это делалось в предыдущих версиях платформы.
Ранее, когда в процессе закрытия формы возникала необходимость задать вопрос пользователю, использовался следующий программный код:
Если данный код попытаться выполнить на платформе 8.3.8 с отключенным режимом совместимости, тогда возникнет ошибка:
Теперь, начиная с версии платформы 8.3.8, необходимо выделять 2 сценария закрытия формы. Первый вариант – когда пользователь закрывает форму самостоятельно и второй вариант – когда форма закрывается в результате закрытия всего приложения.
Таким образом, код требует модернизации:
Как вы можете заметить, у обработчика ПередЗакрытием появились 2 новых параметра:
Теперь подробнее об изменении в коде. Как вы видите, появилась новая ветка алгоритма, которая выполняется в процессе завершения работы системы.
Обращаем ваше внимание, что никаких диалогов в этом случае не открывается, так как они запрещены. В коде устанавливается только текст предупреждения и обязательно устанавливается флаг Отказ. Как уже отмечалось выше, нельзя программным способом отменить процесс закрытия приложения, поэтому флаг Отказ работает иначе, чем при обычном закрытии формы. Установка флага указывает необходимость отображения предупреждения для пользователя, которое хранится в параметре ТекстПредупреждения.
В толстом и тонком клиенте окно предупреждения будет следующим:
Стоит отметить, что если флаг Отказ сброшен, а ТекстПредупреждения заполнен, тогда система проигнорирует текст и сообщение отображено не будет. Если же флаг Отказ установлен, а параметр ТекстПредупреждения не заполнен, тогда будет отображено системное предупреждение:
Также следует отметить, что количество подобных диалогов может быть любым – по числу закрываемых форм. Кроме того, аналогичный диалог может формироваться в обработчике ПередЗавершениемРаботыСистемы модуля управляемого приложения (этот вариант будет рассмотрен ниже). В итоге, если пользователь хотя бы в одном диалоге нажмет кнопку Продолжить работу, процесс завершения работы будет отменен и на экране останется та форма, в которой была нажата кнопка.
В веб-клиенте диалог будет выглядеть иначе. В веб-браузерах Mozilla Firefox и Google Chrome будет отображен только текст, заданный разработчиками веб-браузера и не будет отображаться текст, установленный в обработчиках событий системы.
Пример диалога для Mozilla Firefox:
Пример диалога для Google Chrome:
В веб-браузере Internet Explorer диалог будет выглядеть иначе. Будет отображен единый диалог, содержащий все сообщения, установленные в обработчиках формы и модуле управляемого приложения:
Стоит отметить, что если в свойствах конфигурации включен режим совместимости с 8.3.7 и более ранними версиями, то данный механизм будет работать в старом варианте.
Таким образом, при отключении режима совместимости следует проанализировать и скорректировать программный код по закрытию форм, так как если код содержит обращения к серверу или код по открытию дополнительных форм, то это будет приводить к ошибкам в процессе завершения работы системы.
Также можно сформулировать небольшую рекомендацию. Если в коде обработчика формы ПередЗакрытием, исполняемом в процессе завершения работы системы, необходимо получать дополнительные данные с сервера, то их следует получить заранее и хранить в данных формы.
Вопрос при закрытии приложения
В данном случае мы не будем приводить программный код, который использовался в предыдущих версиях для отображения вопроса при выходе из системы, так как он достаточно громоздкий. Приведем лишь новый код модуля управляемого приложения, который упростился до минимума:
Теперь для отображения вопроса при выходе из системы достаточно установить текст предупреждения и флаг Отказ равным Истина.
Опять же, в коде запрещены обращения к серверу и открытия дополнительных форм, а также поведение в веб-браузере будет аналогичным тому, что уже было описано выше.
Открытие формы обработки при закрытии приложения
В завершении статьи хотелось бы продемонстрировать прием, который позволяет открыть форму некоторой обработки в процессе завершения работы системы.
Наша задача заключается в том, чтобы отменить процесс закрытия приложения и открыть форму некоторой обработки. Проблема в том, что отменить процесс закрытия или открыть форму мы не можем, так как это запрещено.
Поэтому, для того чтобы отменить закрытие приложения, потребуется использовать предупреждение, а для того чтобы открыть форму, используем обработчик ожидания, который выполнится только в том случае, если пользователь откажется от завершения работы системы.
Используя инструкции препроцессора, мы разделили сценарии закрытия в веб-клиенте и в других видах клиентов. В случае веб-клиента мы не открываем обработку, так как практически во всех веб-браузерах текст нашего предупреждения не отображается. В других видах клиентов будет отображен наш диалог:
Если пользователь нажмет кнопку Продолжить работу, тогда сработает обработчик ожидания и будет открыта форма обработки.
Заключение
Платформа продолжает свое уверенное движение в сторону веб-браузеров, но на этот раз разработчики наложили ограничения на программный код, исполняемый в толстом и тонком клиентах. С одной стороны, это упростило и унифицировало код при закрытии форм, так как теперь нет необходимости писать несколько вариантов кода под каждый клиент, с другой стороны, это ограничило нас в возможностях.
Чтобы освоить разработку интерфейсов и форм в 1С:Предприятие 8.3
на профессиональном уровне, рекомендуем записаться на курс:
Поддержка – 3 месяца. Объем курса – 49 учебных часов.
Об авторе
Автор статьи – Сергей Калинкин
Директор ЦСО «Центр профессионального программирования», г. Казань
PDF-версия статьи для участников группы ВКонтакте
Если Вы еще не вступили в нее – сделайте это сейчас, и в блоке ниже (на этой странице) появятся ссылки на скачивание материалов.
1с провести и закрыть код
Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.
Документы
Описание:
В большинстве своем документы, которые создаются в процессе настройки конфигурации задачи, являются электронными аналогами стандартных бумажных документов, являющихся основаниями для тех или иных учетных действий или расчетов. Тем не менее, использование этого типа данных может выходить далеко за рамки простой фиксации изменений, внесенных в учетные регистры.
Документы в языке 1С 8.3, 8.2 (в примерах)
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Подписывайтесь и получайте новые статьи и обработки на почту (не чаще 1 раза в неделю). |
Вступайте в мою группу ВКонтакте, Одноклассниках, Facebook или Google+ — самые последние обработки, исправления ошибок в 1С, всё выкладываю там в первую очередь.
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
Нажмите одну из кнопок, чтобы поделиться:
Документ в 1С 8.3: настройка, проведение и формирование
Документы – это объекты конфигурации и метаданных в системе учета 1С:Предприятие 8.3. Они используются для хранения данных о событиях и операциях, которые происходили на предприятии. Это могут быть, например: документы на отгрузку, платежные поручения, выписки, приказы о приеме на работу и тому подобные. В данной статье будут рассматриваться формы этих документов, как они вводятся, формируются, а так же их параметры и изменения.
Структура документа в 1С
Продуманная система документооборота в 1С автоматические каждому новому документу присвоит порядковый номер, время и дату создания документа. Для того чтобы не позволить пользователям запутаться, в системе у каждого документа может быть только свой уникальный номер, без повторений.
Дата документа, то есть время – одна из ключевых характеристик в документах 1С. Благодаря этому можно легко узнать хронологический порядок создания документов и проследить всю цепочку по какому-то процессу.
В 1С:Бухгалтерия используются три вида документов: исходящие, входящие и внутренние. Для каждого документа прилагаются реквизиты, которые пользователь системы должен заполнить подробной информацией. Например, в документе типа «Заказ Поставщику» в обязательном порядке должно быть отражено наименования товара, склада, поставщика, а так же указан контрагент по операции и вид хозяйственной операции в системе.
Всем документам такого типа присущи эти характеристики, что позволяет соблюдать принципы ведения бухгалтерского учета. Каждый документ обязательно содержит свой набор информации. Она может быть однотипна по своей структуре, но различаться по количеству.
В большинстве случаев в документах 1С присутствует табличная часть, для удобства прописи однотипных данных. В качестве такие данных могут выступать, например: перечень отгружаемых или приобретаемых товаров, их количество и цены.
Дополнительные сведения документа
Для удобства работы в 1С пользователь может в любой документ добавлять дополнительные сведения. Для того чтобы сохранить порядок в документации, функциями добавления дополнительных сведений обладает только ограниченный круг пользователей с полными правами в системе. Как добавляются дополнительные сведения рассмотрим на примере документа «Заказ поставщику». Для этого сначала заполним настройки и далее заходим в пункт меню «Администрирование-Общие настройки».
В этом окне выберем вкладку «Дополнительные реквизиты и сведения» и поставим галочку в поле, которое так же называется. Затем переходим в меню «Администрирование-Формы-Дополнительные сведения».
В списке документов, открывшемся перед нами, мы можем задать дополнительные сведения. Например, для документа «Поступление (акты, накладные)» мы решили ввести дополнительные пункты. Находим нужный документ, выделяем его и кликаем на кнопку «Создать».
Откроется таблица, где создаются дополнительные сведения. Заполняем всё как необходимо. Укажем наименование дополнительного сведения и его тип значения. Тип значения для удобства может содержать различные варианты: договор, число, валюта, дата, договор и т. д.
Затем последуем на вкладку «Значения» и жмем на кнопку «Создать». Во всплывающем окне заполняем нужные пункты сведений.
Дополнительные сведения, которые создали, будут отображены в списке.
Жмем «Записать и закрыть». С этого момента в документах типа «Поступление (акты, накладные)» появляется возможность присоединить менеджера по закупкам, который занимается этим заказ.
Для проверки, что все отлично работает перейдем в «Покупки-Покупки-Поступление (акты, накладные)». Мы увидим список документов поступления. В верху списка находим значок «Дополнительные сведения», который появится после того, как создали и настроили дополнительные сведения.
Проведение документов в 1С
Важной особенностью документа является то, что возможна его запись и проведение. Если документ просто записывается, то он никак не влияет на учет других данных. Чтобы каждый документ влиял на общий учет предприятия и вносил изменения в общую картину, он имеет свойство проведения.
В каждом документе в верхней части есть кнопки типа «Провести и закрыть» или «Записать и закрыть». Например, документ «Заказ Поставщику» должен вносить изменения в состояние расчетов, текущих остатков на складе готовой продукции и заказов, так как у него есть свойство проведения. Для того, чтобы все работало как надо необходимо, чтобы у документа был статус «проведен».
Формы документов в 1С
Чтобы пользователю было удобно работать с системой, легко просматривать и изменять данные в документах, программа имеет несколько форм для одного и того же документа. 1С умеет генерировать все необходимые для документа формы. Разработчикам предоставляется возможность конфигурировать самостоятельно формы для документов, которые им необходимы. Увидеть все формы документа можно в конфигураторе системы. Для этого нужно зайти в него и в окне конфигурации выбрать интересующий объект. В раскрытой ветке документа будут отображены все формы документа.
Если необходимо просмотреть весь список документов или только определенный тип в 1С существует «Форма списка». В этих списках можно легко отобрать нужные документы, быстро изменить их или произвести поиск данных.
Макеты документов в 1С
Все документы в 1С сопровождаются макетами, которые будут содержать информацию внесенную в документ. Эти макеты используются для создания формы документа пригодной к печати
Макеты можно использовать не только для печати, но и чтобы просмотреть дополнительную информацию, которая имеет отношение к выбранному типу документа.
В них подробно отражена вся хозяйственная деятельность предприятия, связанная с налоговым учетом, покупками, продажами и другими операциями. Все документы в совокупности представляют собой единый учет компании.