Как создать бизнес процесс программно 1с

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

Введение

В этой статье решил привести небольшой программный эксперимент — позапускать собственную процедуру общего модуля конфигурации в многопоточном режиме, используя относительно новые методы библиотеки стандартных подсистем — набора модулей ДлительныеОперации. Разработку примеров я буду вести на типовой конфигурации БСП — версии 3.1.7 на Платформе 1с 8.3.20.

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

Напишем процедуру, которая будет использоваться в многопоточном запуске

В собственном общем модуле конфигурации (я работаю на типовой БСП 3.1.7), создаем искусственную процедуру, которую будем использовать в многопоточном запуске. Выглядит она пусть так:

22.11. Быстрая автоматизация бизнес-процессов в 1С


Если Параметры.ТипОбработки = «Вариант 1» Тогда // Создадим 500 документов поступления (можно и загрузить) Для Счетчик = 1 по 500 Цикл НовДок = Документы._ДемоПоступлениеТоваров.СоздатьДокумент(); НовДок.Дата = ТекущаяДата(); НовДок.Организация = Параметры.Организация; НовДок.Валюта = Справочники.Валюты.НайтиПоКоду(«643»); НовДок.Комментарий = Параметры.КомментарийДокумента; Попытка НовДок.Записать(РежимЗаписиДокумента.Запись); Исключение КонецПопытки; КоличествоСозданныхОбъектов = КоличествоСозданныхОбъектов + 1; КонецЦикла; ИначеЕсли Параметры.ТипОбработки = «Вариант 2» Тогда // Создадим 1000 записей справочника «Номенклатура» Для Счетчик = 1 по 1000 Цикл НовСпр = Справочники._ДемоНоменклатура.СоздатьЭлемент(); НовСпр.Наименование = «Новая номенклатура_»+Строка(Счетчик); НовСпр.НаименованиеДляПечати = «Новая номенклатура_»+Строка(Параметры.ОписаниеСправочника); НовСпр.Записать(); КонецЦикла; КоличествоСозданныхОбъектов = КоличествоСозданныхОбъектов + 1; КонецЕсли; КонецПроцедуры

При первом типе обработке — «Вариант 1», процедура — будет создать 500 документов. При втором типе — «Вариант 2» — запустим цикл по созданию 1000 элементов справочника «Номенклатура».

Теперь, перейдем к коду обработки, использующим ДлительныеОперации, запускающим ж

Описание функционала запуска с помощью функции «ВыполнитьПроцедуруВНесколькоПотоков»

Для начала нарисуем вот такую форму:

Рис.1 Форма для исследования многопоточности

Напишем процедуру клиентского запуска. Выглядит она вот так:

ПрогрессВыполнения», ЭтотОбъект); Задание = СоздадимПотокиНаСервере(УникальныйИдентификатор); ИдентификаторЗадания = Задание.ИдентификаторЗадания; НастройкиОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); НастройкиОжидания.ВыводитьОкноОжидания = Ложь; НастройкиОжидания.ОповещениеОПрогрессеВыполнения = ОповещениеОПрогрессеВыполнения; НастройкиОжидания.ВыводитьПрогрессВыполнения = Истина; Обработчик = Новый ОписаниеОповещения(«ОбработатьДанные», ЭтотОбъект); ДлительныеОперацииКлиент.ОжидатьЗавершение(Задание, Обработчик, НастройкиОжидания); КонецПроцедуры

Далее, функция СоздадимПотокиНаСервере(УИД)

Задачи и бизнес-процессы в 1С


ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр(«ru = ‘Выполнение многопоточной функции'»); ПараметрыВыполнения.ЗапуститьВФоне = Истина; ПараметрыМетода = Новый Соответствие(); // ===== первый поток выполнения ===== КодПотока = «Поток 1»; ПараметрыПотока = ПараметрыМногопоточнойФункции(); ПараметрыПотока.ТипОбработки = «Вариант 1»; ПараметрыПотока.ОписаниеСправочника = Объект.ОписаниеСправочника; ПараметрыПотока.КомментарийДокумента = Объект.КомментарийДокумента; ПараметрыПотока.Организация = Объект.Организация; ПараметрыВызоваСервера = Новый Массив; ПараметрыВызоваСервера.Добавить(КодПотока); // КодПотока ПараметрыВызоваСервера.Добавить(ПараметрыПотока); // Параметры функции в потоке ПараметрыМетода.Вставить(КодПотока,ПараметрыВызоваСервера); // ===== второй поток выполнения ===== КодПотока = «Поток 2»; ПараметрыПотока = ПараметрыМногопоточнойФункции(); ПараметрыПотока.ТипОбработки = «Вариант 2»; ПараметрыПотока.ОписаниеСправочника = Объект.ОписаниеСправочника; ПараметрыПотока.КомментарийДокумента = Объект.КомментарийДокумента; ПараметрыПотока.Организация = Объект.Организация; ПараметрыВызоваСервера = Новый Массив; ПараметрыВызоваСервера.Добавить(КодПотока); // КодПотока ПараметрыВызоваСервера.Добавить(ПараметрыПотока); // Параметры функции в потоке ПараметрыМетода.Вставить(КодПотока,ПараметрыВызоваСервера); // =================================== ИмяФункцииИлиПроцедуры = «ОбщийМодуль1.ПроцедураМногопоток»; ФоновоеЗадание = ДлительныеОперации.ВыполнитьПроцедуруВНесколькоПотоков(ИмяФункцииИлиПроцедуры, ПараметрыВыполнения, ПараметрыМетода); Если ФоновоеЗадание.Статус = «Ошибка» Тогда Сообщить(СокрЛП(ФоновоеЗадание.Статус)); КонецЕсли; Возврат ФоновоеЗадание; КонецФункции Результат.Вставить(«ТипОбработки», 0); Результат.Вставить(«ОписаниеСправочника», «»); Результат.Вставить(«КомментарийДокумента», «»); Результат.Вставить(«Организация», Справочники._ДемоОрганизации.ПустаяСсылка()); Результат.Вставить(«ЗагружатьПорциями», Истина); Возврат Результат; КонецФункции

Читайте также:  Руководство по успешным бизнес стратегия

Здесь, я обозначаю условные параметры для двух потоков «Поток 1» и «Поток 2». Далее, использую Функцию «ВыполнитьПроцедуруВНесколькоПотоков» с этими параметрами.

Опишем функции «ПрогрессВыполнения» и «ОбработатьДанные» (это будут чисто-условные «полупустые» функции)

НаСервереБезКонтекста Функция ПрочитатьПрогресс(ИдентификаторЗадания) Возврат ДлительныеОперации.ПрочитатьПрогресс(ИдентификаторЗадания); КонецФункции КонецЕсли; ЭтаФорма.РезультатВыполнения = СокрЛП(Задание.Статус) +» «+СокрЛП(ПолучитьИЗВременногоХранилища(Задание.АдресРезультата)); КонецПроцедуры

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

Результат.Вставить(«ТипОбработки», 0); Результат.Вставить(«ОписаниеСправочника», «»); Результат.Вставить(«КомментарийДокумента», «»); Результат.Вставить(«Организация», Справочники._ДемоОрганизации.ПустаяСсылка()); Результат.Вставить(«ЗагружатьПорциями», Истина); Возврат Результат; КонецФункции ПрогрессВыполнения», ЭтотОбъект); Задание = СоздадимПотокиНаСервере(УникальныйИдентификатор); //ИдентификаторЗадания = ПолучитьИЗВременногоХранилища(Задание.АдресРезультата).Получить(«Поток 1»).ИдентификаторЗадания;//Задание.ИдентификаторЗадания; ИдентификаторЗадания = Задание.ИдентификаторЗадания; //Сообщить(ИдентификаторЗадания); НастройкиОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); НастройкиОжидания.ВыводитьОкноОжидания = Ложь; НастройкиОжидания.ОповещениеОПрогрессеВыполнения = ОповещениеОПрогрессеВыполнения; НастройкиОжидания.ВыводитьПрогрессВыполнения = Истина; Обработчик = Новый ОписаниеОповещения(«ОбработатьДанные», ЭтотОбъект); ДлительныеОперацииКлиент.ОжидатьЗавершение(Задание, Обработчик, НастройкиОжидания); КонецПроцедуры ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр(«ru = ‘Выполнение многопоточной функции'»); ПараметрыВыполнения.ЗапуститьВФоне = Истина; ПараметрыМетода = Новый Соответствие(); // ===== первый поток выполнения ===== КодПотока = «Поток 1»; ПараметрыПотока = ПараметрыМногопоточнойФункции(); ПараметрыПотока.ТипОбработки = «Вариант 1»; ПараметрыПотока.ОписаниеСправочника = Объект.ОписаниеСправочника; ПараметрыПотока.КомментарийДокумента = Объект.КомментарийДокумента; ПараметрыПотока.Организация = Объект.Организация; ПараметрыВызоваСервера = Новый Массив; ПараметрыВызоваСервера.Добавить(КодПотока); // КодПотока ПараметрыВызоваСервера.Добавить(ПараметрыПотока); // Параметры функции в потоке ПараметрыМетода.Вставить(КодПотока,ПараметрыВызоваСервера); // ===== второй поток выполнения ===== КодПотока = «Поток 2»; ПараметрыПотока = ПараметрыМногопоточнойФункции(); ПараметрыПотока.ТипОбработки = «Вариант 2»; ПараметрыПотока.ОписаниеСправочника = Объект.ОписаниеСправочника; ПараметрыПотока.КомментарийДокумента = Объект.КомментарийДокумента; ПараметрыПотока.Организация = Объект.Организация; ПараметрыВызоваСервера = Новый Массив; ПараметрыВызоваСервера.Добавить(КодПотока); // КодПотока ПараметрыВызоваСервера.Добавить(ПараметрыПотока); // Параметры функции в потоке ПараметрыМетода.Вставить(КодПотока,ПараметрыВызоваСервера); // =================================== ИмяФункцииИлиПроцедуры = «ОбщийМодуль1.ПроцедураМногопоток»; ФоновоеЗадание = ДлительныеОперации.ВыполнитьПроцедуруВНесколькоПотоков(ИмяФункцииИлиПроцедуры, ПараметрыВыполнения, ПараметрыМетода); Если ФоновоеЗадание.Статус = «Ошибка» Тогда Сообщить(СокрЛП(ФоновоеЗадание.Статус)); КонецЕсли; Возврат ФоновоеЗадание; КонецФункции НаСервереБезКонтекста Функция ПрочитатьПрогресс(ИдентификаторЗадания) Возврат ДлительныеОперации.ПрочитатьПрогресс(ИдентификаторЗадания); КонецФункции КонецЕсли; ЭтаФорма.РезультатВыполнения = СокрЛП(Задание.Статус) +» «+СокрЛП(ПолучитьИЗВременногоХранилища(Задание.АдресРезультата)); КонецПроцедуры

Заключение и выводы

В статье попробовал использовать функционал многопоточности — запустил искусственную процедуру общего модуля с разными параметрами параллельно (при одних значениях параметрах). Задача выполнена. Спасибо за прочтение материала, надеюсь, что данная статья будет кому-то полезна.

Источник: habr.com

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

Документы в конфигурациях 1с являются ключевыми объектами. Весь учет в системе 1с ведется от документа. Программное создание документов в 1с значительно упрощает работу пользователя. Логически процесс создания можно разделить на три шага:

  1. Создаем документ
  2. Заполняем реквизиты документа
  3. Заполняем табличную часть документа.
Читайте также:  Макроэкономические факторы влияющие на бизнес

Рассмотрим пример создания документа на примере “Приходная накладная” в каркасной конфигурации

Во-первых создаем обработку для заполнения документов. Для этого в обработку добавим 2 подчиненных объекта-реквизита СуммаПоДокументу и Склад.

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

Во-вторых создаем документ на сервер. Затем заполняем его информацией. Для заполнения Даты используем функцию ТекущаяДата()

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

В-третьих создаем процедуру на клиенте для программного создания документа.

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

Выведем поиск по элементу справочника Номенклатура в отдельной функции. Представим код функции ниже.

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

Итого весь код создания выглядит так

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

Количество строк в табличной части документа.

Нахождение количества строк в табличной части документа.

Код создания документа в 1с

Сообщить(«Колво wp-block-image»>

Программное создание документов в 1с. Открыть форму документа 1с.

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

В 1С Предприятии 8.2 для этих целей существует два возможных сценария работы:

  • открыть форму нового документа и предоставить пользователю самому интерактивно записать данные объекта в базу данных.
  • создать новый документ программно, программно заполнить его данными и программно записать. Затем, если нужно, показать его пользователю.

В первом сценарии проще всего использовать метод глобального контекста ОткрытьФорму(). Это можно сделать на клиенте.

Для открытия формы документа 1с применяется команда ОткрытьФорму.

Приведем код открытия формы документа используя команду ОткрытьФорму():

Источник: ithelpyou.ru

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

Простой пример как создать, заполнить. записать и провести документ 1с программно.

Создать документ.
Док = Документы . РеализацияТоваровУслуг . СоздатьДокумент ( ) ;

Заполнить реквизиты.
Док . Дата = ТекущаяДата ( ) ;
Док . УстановитьНовыйНомер ( ) ; nbsp
Док . ВидОперации = Перечисления . ВидыОперацийРеализацияТоваров . ПродажаКомиссия ;

Записать и провести
Док . Записать ( РежимЗаписиДокумента . Проведение , РежимПроведенияДокумента . Неоперативный ) ;

Док.Записать() поумолчанию режимы Записать, Неоперативный
Док . Записать ( ) ;

Распровести документ
Док . Записать ( РежимЗаписиДокумента . ОтменаПроведения ) ;

Как программным путем отменить проведение документа в 1С v8? Рассмотрим на примере отмены проведения всех документов «ПриходныйОрдерНаТовары», на основании которых (в структуре подчиненности) нет ни одного проведенного документа. Для получения структуры подчиненных документов используется метод…

Читайте также:  Бизнес интеллект что это такое

Вопрос: Как программным путем отменить проведение документа в 1С v8?
Ответ Для этого используется метод записи с параметром «РежимЗаписиДокумента.ОтменаПроведения»
Пример: Рассмотрим на примере отмены проведения всех документов «ПриходныйОрдерНаТовары», на основании которых (в структуре подчиненности) нет ни одного проведенного документа.
Для получения структуры подчиненных документов используется метод «ПолучитьСписокДокументовПоКритериюОтбора», подробно описанный в статье Как программно получить список документов, подчиненных текущему.
Текст процедуры, решающей такую задачу отмены проведения таких документов:

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

Документы

Описание:

Документ — одно из основных понятий системы 1С:Предприятие. При помощи документов организуется ввод в систему информации о совершаемых хозяйственных операциях, а также ее просмотр и корректировка.

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

Структура каждого конкретного вида документа определяется при его создании в конфигураторе. У любого вида документа существуют реквизиты, которые создаются автоматически — это «Дата» и «Номер». Номер создается, если при конфигурировании длина номера указана больше 0. Другие реквизиты документа определяются в конфигураторе отдельно для каждого создаваемого вида документа.

Документы в языке 1С 8.3, 8.2 (в примерах)

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

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

Нажмите одну из кнопок, чтобы поделиться:

Источник: computermaker.info

Рейтинг
( Пока оценок нет )
Загрузка ...
Бизнес для женщин