Закрыть документ программно в 1С 7.7
1С 7.7 Комплексная ред. 4.5 (7.70.493)
Пишу док.закрыть(), выскакивает ошибка — Поле агрегатного объекта не обнаружено (закрыть).
Gluk8888
- 09.06.2010
- #2
KSergei
- 09.06.2010
- #3
SaschaL
- 10.06.2010
- #4
Добрый день!
Функция Закрыть() работает только для формы документа и применение её актуально в том случае если вы открыли форму документа.
Если же вы создаете документ программно и так программно заполняете документ данными то в таком случае достаточно использовать функцию Записать()
например:
Вот примерно так!
Natalya
- 10.06.2010
- #5
Мне нужно из обработки записать изменения в документ. Всё работает. Я хотела бы, если документ открыт, с помощью программы его закрыть, и записать изменения. Только не знаю с помощью какой функции это сделать.
SaschaL
- 10.06.2010
- #6
Natalya
- 10.06.2010
- #7
vitfil
- 10.06.2010
- #8
- 10.06.2010
- #9
Natalya
- 11.06.2010
- #10
vitfil
- 11.06.2010
- #11
Darlock
- 11.06.2010
- #12
vitfil
- 11.06.2010
- #13
Natalya
- 11.06.2010
- #14
Суть такая: нужно реквизиту документа присвоить значение.
Можно, конечно, изменения внести в сам модуль формы документа. Но изменений получается много и при обновлении их придётся постоянно вносить.
Обработка специальная для записи значения не писалась, просто в некую обработку (внешний отчёт) добавлены изменения. Чтобы записать изменения в документ придётся вернуться и его закрыть (документ открывает и обработку запускает один пользователь).
При записи изменений в конфигуратор нужно будет вносить изменения при обновлении и проверять правильность записи значения. Изменения внесённые в обработку упрощают это.
simply1
- 17.08.2010
- #15
simply1
- 26.08.2010
- #16
jmunya
- 17.07.2012
- #17
puh14
- 18.07.2012
- #18
Я вот задумался — а как бы это сделать. Получилось примерно так — делается константа СписокНаЗакрытие, тип — строка, длина неограничена.
для закрытия вешаем на список документов кнопочку с процедуркой
процедура ВнестиВСписокНаЗакрытие()
Если СокрЛП(Константа.СписокНаЗакрытие) = "" тогда
Спс = СоздатьОбъект("списокЗначений");
иначе
Спс = ЗначениеИзСтроки(Константа.СписокНаЗакрытие);
КонецЕсли;
Спс.ДобавитьЗначение(ТекущийДокумент);
Константа.СписокНаЗакрытие = ЗначениеВСтроку(Спс);
КонецПроцелдуры
В форме документа пишем процедурку
Процедура ЗакрытьПоЗапросу()
Если СокрЛП(Константа.СписокНаЗакрытие) = "" тогда
Спс = СоздатьОбъект("списокЗначений");
иначе
Спс = ЗначениеИзСтроки(Константа.СписокНаЗакрытие);
КонецЕсли;
Нашли = Спс.НайтиЗначение(ТекущийДокумент());
Если Нашли >0 Тогда
Спс.УдалитьЗначение(Нашли);
Форма.Закрыть(0);
КонецЕсли;
КонецПроцедуры
и чтобы это работало раз в скажем 5 секунд в приОТкрытии() добавляем строчку
раз в пять сек буду всех пользователей с открытыми документами этого типа будет вызываться процедура ЗакрытьПоЗапросу() получать список документов на закрытие, если нашел себя — то закрываться без запросов.
Как в 1с закрыть документ программно
Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.
Документы
Описание:
Документ — одно из основных понятий системы 1С:Предприятие. При помощи документов организуется ввод в систему информации о совершаемых хозяйственных операциях, а также ее просмотр и корректировка.
В большинстве своем документы, которые создаются в процессе настройки конфигурации задачи, являются электронными аналогами стандартных бумажных документов, являющихся основаниями для тех или иных учетных действий или расчетов. Тем не менее, использование этого типа данных может выходить далеко за рамки простой фиксации изменений, внесенных в учетные регистры.
Структура каждого конкретного вида документа определяется при его создании в конфигураторе. У любого вида документа существуют реквизиты, которые создаются автоматически — это «Дата» и «Номер». Номер создается, если при конфигурировании длина номера указана больше 0. Другие реквизиты документа определяются в конфигураторе отдельно для каждого создаваемого вида документа.
- Как выбрать и упорядочить документы за период
- Как найти документ по номеру
- Как найти документы по реквизиту
- Как выбрать все документы, которые не проведены и не помечены на удаление
- Как найти подчиненные документы
- Как перебрать (перечислить) строки табличной части документа
- Как создать новый документ
- Как записать документ
- Как провести документ
- Как отменить проведение документа
- Как внести изменения в документ по ссылке
- Как получить пустую ссылку типа документ
- Как скопировать существующий документ
- Как заблокировать документ перед изменениями
- Как создать новый документ на основании другого объекта
- Как пометить на удаление документ
- Как найти и изменить программно движения документа по регистрам
- Как прочитать движения документа по регистрам запросом
- Как изменить проведенный документ, не меняя его движений (проводок)
- Как открыть форму существующего документа по ссылке
- Как открыть форму выбора документа и отследить её закрытие
- Как открыть форму списка (журнал) документов и с отбором по реквизиту
- Как открыть форму только что созданного, но ещё не записанного документа
- Скачать и выполнить эти примеры на компьютере
Документы в языке 1С 8.3, 8.2 (в примерах)
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
Как программно полноценно закрыть задачу в 1С:ДО 3?
Пишу доп. обработчик бизнес событий для 1С:ДО3. Этот обработчик закрывает задачу «ОЖИДАНИЕ СКАНИРОВАНИЯ» комплексного процесса обработки входящей :
1. Работает по событию «Создание файла».
2. Переходит к документу-владельцу файла.
3. Получает задачи, предметом которых является этот документ.
4. Находит через RegExp задачу, которая содержит в своем имени «ОЖИДАНИЕ СКАНИРОВАНИЯ», получает её.
5. Закрывает полученную задачу.
Так вот. Задача закрывается через метод «Задача.ВыполнитьЗадачу()», комплексный процесс переходит к следующему этапу, и если провалиться в задачу, то можно увидеть в статусе, что она закрыта.
Проблема заключается в том, что видимо не все признаки «выполненности задачи» заполняются методом который я использую и в разделе документа «обработка» у задачи остается состояние «На исполнении», и в левом крайнем столбце
отображается соответсвующая пиктограмма И по прохождению всех этапов процесса он не завершается.
Здесь изображен нормально завершенный процесс, обработанный вручную. 
Здесь изображен процесс, в котором пункт 6 завершен обработчиком. 
Скрин кода.

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

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

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

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

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

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

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

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


Провести документ 1С программно
Все документы, которые мы создавали ранее были не проведены. Если мы хотим, чтобы документ был записан проведенным, то необходимо записывать его немного по-другому. Если раньше мы использовали метод Записать объекта документа без параметров, то теперь необходимо применять параметры этого метода. Данный метод имеет следующий синтаксис.
Записать(<РежимЗаписи>,<РежимПроведения>)
Оба параметра это системные перечисления. Первый параметр это перечисление РежимЗаписиДокумента, которое может принимать следующие значения:
Т.е. мы можем записать документ, провести документ и отменить проведение документа.
Во втором параметр РежимПроведения необходимо указывать системное перечисление РежимПроведениеДокумента, которое может принимать следующие значения:
Т.е. мы можем провести документ как в оперативном режиме, так и в неоперативном. Если этот параметр не указан, то документ проводится в неоперативном режиме.
Изменим запись нашего документа: пусть он проводится в оперативном режиме.
Теперь документ будет сразу проведен при создании.
Изменить документ 1С программно
Часто возникают задачи, когда нужно поменять уже созданный документ, или провести документ, который был только записан. Для этого необходимо из ссылки на документ получить его объект. Для примера, я опять создам «за кадром» новую обработку, на форме которой размещу ссылку на документ, поле с типом Склад и команду. При выполнение этой команды, будет меняться склад документа, а потом этот документ будет проводиться.

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

Более подробно и основательно разработка в 1С дается в моей книге: «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Вступайте в мои группы:
8 Replies to “Программная работа с документами в 1С”
Ошибки в падежах и склонениях. Типично для 1Совца.
Судя по этой статье, здесь много что выкинуто за кулису и непонятно. Если и книжки так написаны, то зачем они нужны, тем более новичкам.
Это классика: 99% «профессоров» пишут книжки для себя, хотя утверждают обратное. Молодец, написал сам себе памятку. Подсчёт суммы в первом варианте неправильный из-за округления.
Всё названо одинаково и реквизиты и элементы….всё по 1Совски, чтобы вообще нихера не понять.
До УЧИТЕЛЯ дорасти надо, хотя при капитализме каждый суслик мнит себя агрономом.
Одинаковые имена для реквизитов и элементов — это норма. Любую типовую открой и посмотри, как там сделано.
И о какой ошибке округления идет речь? Ты что здесь округлять собрался? В момент записи значения в поле Сумма округление производится автоматически в соответствие с заданной точностью в Конфигураторе.
По поводу книг. Читал книгу «Программировать в 1С за 11 шагов», книга написана очень понятным и доступным языком. Это первая книга, читая которую, я начал что-то понимать в 1С.
Ильяс, спасибо за статью. Что касается падежей — это не самое страшное. Плохо то, что сразу нарисовываются какие — то «умники», которых будут волновать округления и падежи. А вот если бы в статье о программной работе с документами учитывались округления, попытки, исключения — это была бы действительно статья типичного 1С — ника, которых полно и толку от которой — ноль. Не обращай на таких внимания. Основная масса, к сожалению, такая.
Падежи можно, конечно, и пропустить. Хотя, лучше все эти склонения и жиши перепроверить. Читающие оценят. Однако, ошибка в округлении — выдаёт безалаберность в прикладной области. Это важно. Автору — радуйтесь поддержке, но обращайте особое внимание на критику, она делает Вас лучше.
Ты где здесь ошибку в округлении нашел?
Ну и запятые проверь у себя в сообщении.
Как обработкой создать сразу много документов?чтобы данные табЧасти заполнялись например,из самописного регистра или табличногодок-та?на каждую строчку новый документ?