СУТЬ ПРОБЛЕМЫ: Недавно поступило предложение - из 1с Предприятие 8 УТ сделать запуск бизнес-процесса утверждения "Заявки на оборудование, материалы и т.д" и после прохождения согласования и утверждения всеми участниками бизнес-процесса, что бы эта заявка попадала в снабжение на исполнение откуда и появилась, т.е. в 1с Предприятие 8.
ВИЗУАЛЬНОЕ РЕШЕНИЕ: Как известно существует синхронизация с инфоблоками 1с Предприятия 8 и Битрикс. Суть в том, что идет обращение к скрипту, который выполняет функции обмена информацией. ИМХО: нет больших трудностей написать свой скрипт, который при обращении к нему перемещал сохраненную заявку в заданную папку документов и в таблицах MySQL делал новую запись запуска процесса утверждения (надо только выяснить как бизнес-процесс записывается в MySQL) именно этого документа. Таким же образом проверять текущие статусы запущенных на утверждение документов и если статус достиг последнего этапа, то в 1С - Предприятие 8 заданная заявка появляется у пользователя Снабжения, который обрабатывает её обычными механизмами 1с 8.
Хотелось бы услышать мнение экспертов по этому вопросу. Мне кажется такая функция была бы очень полезна, причем не только на нашем предприятии.
сопровождаю блог об 1С Предприятие 8.3, где публикую материалы по администрированию, настройке и сопровождению типовых конфигураций
Блин, как бы объяснить - я программирую в 1с, так же знаю php с mysql. До этого похожие задачи решал через прямую запись (как вы выразились). C API Битрикса не сталкивался, - видать этого не избежать. Сажусь за мат. часть.
сопровождаю блог об 1С Предприятие 8.3, где публикую материалы по администрированию, настройке и сопровождению типовых конфигураций
Смотрите API. В базу лучше не лезть, особенно в бизнес-процессы, там сложная структура, много записей используется, блобы... плюс изменения модуля и, вероятно, таблиц ещё ожидаются. Ну и вообще - это проще, на самом деле, и есть хоть какая-то документация.
Это у меня есть. Ясно - значит дальше предстоит самому копать и разбирать что хранит та или иная переменная и что выполняет та или иная функция модуля БП и искать ту функцию, которая делает запуск БП и делать запуск через неё прописывая свои параметры. Я правильно мыслю?
сопровождаю блог об 1С Предприятие 8.3, где публикую материалы по администрированию, настройке и сопровождению типовых конфигураций
пардон, не ту ссылку дал. смотреть здесь. но в общем и целом - да, чего не хватает в доках - искать в коде, или надеяться, что тут помогут, или терзать тп.
зы. в принципе, для запуска БП в общих чертах этой доки должно хватить. Сделать какие-то манипуляции по окончании БП можно будет уже действием "код пхп" в самом шаблоне БП.
О-о-о... уже что-то. Есть от чего оттолкнуться. Спасибище!!!
Про "код ПХП" конечно интересно, но что им можно сделать? Инициатором, думаю, должна выступать 1с и проверять (через обращение к скрипту) скажем через каждые минут 20 - есть документ с присвоенным 1с названием в бизнес-процессах? Есть! А не конечный ли этап бизнес-процесса? Конечный! Супер - выставляем в 1с реквизит - "видим для Снабжекния" в Истина. Дальше просто обыгрываю событие изменения этого реквизита в Истина - появлением документа в журнале Снабженцев с выделенным цветом и выводом сообщения или ещё как...
сопровождаю блог об 1С Предприятие 8.3, где публикую материалы по администрированию, настройке и сопровождению типовых конфигураций
Икар пишет: Про "код ПХП" конечно интересно, но что им можно сделать?
Да много что можно сделать, по идее, это же код пхп =)
Ну а реализацию проверки окончания БП - это зависит от вас, какую схему придумаете и будете использовать. Можете через апи статус процесса дёргать, можете с портала стучать или скидывать файл-флаг в пхп коде, например, можете... и т.д.
Кстати, хорошая идея появилась. После каждого утверждения вместо оповещения вносить "Код ПХП" на изменение имеющегося или добавление нового текстового файла (записываемого в заданную папку) с названием утверждаемого документа, а в сам файл - этап выполнения.
Например, перед тем, как документ попадет на утверждение директора будет создан (или изменен имеющийся) файл "Заказ покупателя № 00000437.тхт" в котором будет записана (или изменена с прежнего состояния) строчка: "Утверждается у директора".
Тогда (подключившись по фтп и прочитав этот файл) в 1с можно будет получить текущий статус документа. И если статус конечный (заданный в бизнес-процессе, а значит известный нам) после считки и внесения изменений в 1с (что бы этот документ стал виден в 1с снабженцев) файл можно удалять...
сопровождаю блог об 1С Предприятие 8.3, где публикую материалы по администрированию, настройке и сопровождению типовых конфигураций
Почитал высланный файл с описанием бизнес-процессов, в принципе все понятно:
Так бизнес-процесс запускается:
Цитата
// Код шаблона бизнес-процесса (при создании запускаемого БП будет нам известен) $workflowTemplateId = 12;
// Бизнес-процесс запускается для документа - элемента инфоблока с кодом 358 (вот тут надо разобраться, как файлу, который по задумке, должен попасть в Битрикс из 1С, - присваивается код и как его узнать) $documentId = array("iblock", "CIBlockDocument", 358);
Как считать статус тоже ясно. Зададим новый параметр, в котором будут храниться статусы и при изменении статусы будем присваивать этому параметру. Считываются параметры командами:
Цитата
$rootActivity = $this->GetRootActivity(); if ($rootActivity->IsPropertyExists("MyProperty")) $val = $rootActivity->MyProperty;
Вывод: осталось не выясненным только, как файлу, который по задумке, должен попасть в Битрикс из 1С, - присваивается код инфоблока.
сопровождаю блог об 1С Предприятие 8.3, где публикую материалы по администрированию, настройке и сопровождению типовых конфигураций
Из 1с документ сохранять во временную папку компьютера в формате *.xls, а потом (так же средствами 1с) по ФТП переносить файл в конкретную папку нужного инфоблока с документами подобного типа (к которой будет прикреплен нужный бизнес-процесс утверждения), но не знаю как работает механизм регистрации документов и присвоения кодов и какими функциями можно получить присвоенный документу код.
К тому же если не получится по ФТП, то можно подключить сетевой диск папки документов инфоблока и переносить сохраненный из 1с файл в неё.
Но вопрос открыт - как получить присвоенный документу код? Можно сделать по первобытному запрос к нужной таблице MySQL (только эту таблицу нужно сначала разыскать), но думаю, что есть более цивилизованный способ - через API. Покопаюсь в документации...
сопровождаю блог об 1С Предприятие 8.3, где публикую материалы по администрированию, настройке и сопровождению типовых конфигураций
Хм. Так вы хотите подключить к библиотеке документов какое-то файловое хранилище (папку) просто, и надеетесь, что битрикс всё это дело всосёт? Не выйдет, в таком режиме бизнес-процессы будут недоступны, некоторые свойства и тп, так как не задействованы инфоблоки, это просто интерфейс к физической папке на диске и всё. Потому и спросил. Так просто фокус не удастся. Тут надо будет работать с полноценной "библиотекой документов" на инфоблоках и опять же действовать через API. Я бы вообще, наверное, смотрел в данном случае в сторону веб-сервисов, вроде как в 1С 8 веб-сервисы создавать довольно просто. Хотя можно реализовывать и по-другому. В любом случае будет требоваться код, который будет создавать элемент инфоблока в библиотеке документов с заполнением соответствующих полей. В нём же вы и сможете получить ид созданного элемента и уже проводить с ним дальнейшие манипуляции (в т.ч. запуск БП).
Я может не так выразился, но ход мыслей у меня такой...
1) Создаем новый инфоблок, например, "Документы заявки" (по типу как "Документы руководства"). 2) Подключаем к этому Инфоблоку бизнес-процессы и пишем новый бизнес-процесс утверждения заявки. 3) Папку с файлами Инфоблока подключаем через сетевой диск (в проводнике - Подключить сетевой диск... и т.д.) 4) При записи документа в 1с создаём Экселовский файл и помещаем его в созданный сетевой диск подключенного инфоблока. Как я понимаю - при помещении файла в инфоблок таким способом в Битриксе он всё-таки регистрируется и ему присваивается код. Это было бы логично! Я прав или нет? 5) Через 1с делаем обращение к скрипту с передачей параметра - Имя документа, который помещен в сетевой диск в п. 4). 6) Выполняется скрипт, который по имени файла должен найти присвоенный файлу Код и через указанные выше функции запустить бизнес-процесс. 7) В бизнес-процессе на каждом шаге утверждения использовать элемент БП "Код ПХП", который бы создавал файл txt (в любом установленном нами файловом хранилище - откуда он будет считываться 1с), с именем = названию файла, и в этот файл бы записывал текущий статус выполнения заявки. При изменении статуса - этот файл следует перезаписывать, т.е. изменять содержимое файла, содержащего название текущего статуса. 8) В 1с через каждые минут 30 (можно и чаще при необходимости) делать сканирование папки, где хранится созданный файл Название_документа.тхт и со статусом утверждения внутри. Примечание: Для утверждаемого документа следует создать новый реквизит для указания статуса, в который записывать статус из текстового файла. И соответственно этот реквизит начать выводить в отчетах по заявкам, что бы создавшие заявку пользователи видели на каком этапе исполнения она сейчас находится. 9) После всех утверждений, заявка становится видна в Снабжении и приобретает статус - "На исполнении в снабжении". Когда по этой заявке будут делаться заказы поставщикам, то из этого документа будет считываться дата поступления товара на предприятие, и статус по заказанным номенклатурным позициям будет меняться на "Ожидается поступление дд.мм.гггг".
Я вижу решение этой задачи как-то так. Что неверно в этой схеме?
сопровождаю блог об 1С Предприятие 8.3, где публикую материалы по администрированию, настройке и сопровождению типовых конфигураций
Икар пишет: 4) При записи документа в 1с создаём Экселовский файл и помещаем его в созданный сетевой диск подключенного инфоблока. Как я понимаю - при помещении файла в инфоблок таким способом в Битриксе он всё-таки регистрируется и ему присваивается код. Это было бы логично! Я прав или нет?
а, понял. да, в битриксе создастся элемент инфоблока в этом случае. только его айдишник при помещении файла в папку вы никак не получите, только поиском по инфоблоку выцеплять (причём поиск скорее всего придётся выполнять только по названию файла, с реквизитами там не особо, простенький сериализованный массив только). Но я бы не использовал наверное такой способ, не внушает он мне доверия =)
4) При записи документа в 1с создаём Экселовский файл и помещаем его в созданный сетевой диск подключенного инфоблока. Как я понимаю - при помещении файла в инфоблок таким способом в Битриксе он всё-таки регистрируется и ему присваивается код. Это было бы логично! Я прав или нет?
а, понял. да, в битриксе создастся элемент инфоблока в этом случае. только его айдишник при помещении файла в папку вы никак не получите, только поиском по инфоблоку выцеплять (причём поиск скорее всего придётся выполнять только по названию файла, с реквизитами там не особо, простенький сериализованный массив только).
Ведь это вполне подходит: 5) Через 1с делаем обращение к скрипту с передачей параметра - Имя документа, который помещен в сетевой диск в п. 4). 6) Выполняется скрипт, который по имени файла должен найти присвоенный файлу Код и через указанные выше функции запустить бизнес-процесс.
Функции обращения к массиву не подскажешь?
Цитата
nukemonk пишет: Но я бы не использовал наверное такой способ, не внушает он мне доверия =)
А какие есть ещё варианты? Прямое помещение файла в этот каталог через ФТП даст файлу ID?
сопровождаю блог об 1С Предприятие 8.3, где публикую материалы по администрированию, настройке и сопровождению типовых конфигураций
Икар пишет: Функции обращения к массиву не подскажешь?
К какому массиву? Если это про сериализованный с атрибутами файла - то он не нужен, я чот его так упомянул, по инерции =) Поиска по названию (имени файла) там будет вполне достаточно, имя же уникальное будет, как я понял, всё в одном каталоге? Поиск стандартный инфоблочный, с фильтром по названию.
Цитата
Икар пишет: А какие есть ещё варианты?
Ну я уже говорил - WS =) можно прописать нормальные интерфейсы и передавать/дёргать информацию в один заход. Например отправлять файл через метод WS и сразу возвращать ответ с идом созданного элемента. По мне так это удобней, только читать больше надо будет, чтобы разобраться =) Но это имхо =)
Цитата
Икар пишет: Прямое помещение файла в этот каталог через ФТП даст файлу ID?
Нет, по-идее, в этом случае WebDAV не задействован.
Ну я уже говорил - WS =) можно прописать нормальные интерфейсы и передавать/дёргать информацию в один заход. Например отправлять файл через метод WS и сразу возвращать ответ с идом созданного элемента. По мне так это удобней, только читать больше надо будет, чтобы разобраться =) Но это имхо =)
Ясно, если не ошибаюсь, то именно так обменивается с Битрикс стандартная перегрузка в 1с 8?
сопровождаю блог об 1С Предприятие 8.3, где публикую материалы по администрированию, настройке и сопровождению типовых конфигураций
Вот смотрю сейчас и вижу - что бы воспользоваться этим компонентом, нужно передать в скрипт - место хранения файла, все остальные параметры будут известны и постоянны.
Дальше - можно проверить, перенесся ли файл? Через подключенную сетевую папку... Если все отлично - передать параметры для запуска БП. В ответ - в обозначенной папке должен создаться файл с названием документа и этапом его исполнения внутри. Пускай при запуске будет просто "Запуск БП" Из 1с проанализировать - есть ли такой файл? Если есть - значит БП запустился. Дальше - просто сканить папку с файлом на наличие изменений через определенное время и при наличии оных - вносить изменения в реквизит документа выводящего этап его исполнения в 1с.
Логично, если так сделать?
сопровождаю блог об 1С Предприятие 8.3, где публикую материалы по администрированию, настройке и сопровождению типовых конфигураций