18 марта 2012 в 16:41:59
(12 лет 35 недель 6 дней 9 часов назад)
04.03.2012 11:02:53
Текст задания
Делаю репостинг задачи т.к. возникло много однотипных вопросов из-за непонимания задачи и ни одного полноценного предложения.
Необходимо периодически, по плану выгруждать последние измененные документы во внешнюю компоненту. Решение должно быть максимально универсальные т.е. работать на всех конфигурациях 1С 8.x. Также оно должно быть максимально универсально в отношении передаваемых документов. Исключить из выгрузки можно служебные объекты. Можно обсудить список типов объектов, которые нужно выгружать. Особых предпочтений в формате передаваемых данных нет. Это может быть XML или DBF.
ВАЖНО! Необходимо обратить внимание на две взаимосвязанные проблемы: 1) ссылки на объекты в документах: и 2) отслеживание изменений в документах.
Хранение документов в 1С подразумевает перечень данных и ссылок на другие объекты. В нашем случае необходимо передавать документы именно так, как они бы выглядели при печати или представлении пользователю. То есть ссылки на объекты необходимо заменять данными. Это важно.
С этим связана вторая проблема. Поскольку ссылка на объект может сохранится, а сам объект, и, следовательно, весь документ может измениться. Соответственно, нужно отслеживать в каких объектах участвует измененный элемент и повторно отправлять их на выгрузку.
Сами идентификаторы-ссылки на объекты в документе передавать не нужно.
Из внешней компоненты будет приходить запрос на получение списка документов для выгрузки. То есть планировщик будет расположен во внешней компоненте. Соответственно, должно быть элементарное взаимодействие со внешней компонентой, которое предполагает получение внешней команды, информирование о том, что команда получена (или код ошибки), возвравщение во внешнюю компоненту результатов обработки, получение от нее подтверждения о получении. Формат передачи данных должен включать поле/элемент типа передаваемого объекта/документа, уникальный идентификатор документа, список полей документа. Идентификатор документа нужен для того, чтобы в случае обновления, а не создания документа не создавать его дубликаты во внешней системе. Тип документа нужен для того, чтобы определить список полей документа, тип каждого из них и валидацию. Во внешней системе (куда будут передаваться документы) администратор может настроить обработку документов на уровне полей. Поэтому отвечая на вопрос какие свойства документа нужно передавать - практически все, кроме тех, что никакого значения не имеют для понимания документа пользователем. Какие-то нюансы по этим свойствам можно обсудить. В общем случае передаются все документы.
Команда определения типа документа. Изначально никакой информации о типах документов в 1С внешняя система не имеет. Для того, чтобы настроить обработку документов 1С необходимо, чтобы администратор получил список полей для каждого типа документа и настроил их обработку во внешней системе. Это можно сделать во внешней компоненте, которая будет передавать данные во внешнюю систему. Но удобнее и правильнее будет воспользоваться средствами 1С для передачи спсика типов документов и списка их полей с наименованиями. То есть, первоначальное взаимодействие внешней системы и 1С будет выглядеть следующим образом.
После первого запуска внешней компоненты и ее подключения к конфигурационному серверу внешней системы она отправляет запрос в 1С configureme. По этому запросу нужно возвращать список типов документов и их полей с наименованиями. Эти данные внешняя компонента передает внешней системе. После того как админстратор сконфигурировал обработку документов, внешняя система информирует внешнюю компоненту о том, что система сконфигурирована и готова обрабатывать данные. Уже после этого внешняя компонента отправляет запрос 1С для получения данных документов.
============
Вторая часть задачи предполагает написание библиотечки на с++, которая будет отправлять данные нашей системе и включать в себя библиотеку нашего протокола. Она будет обернута в COM. Теоретически, если есть квалифицированные люди, которые могут выполнить обе части, то можно и сразу все. Но, скорее всего, придется разбить именно на две части - 1С и библиотека для передачи данных.
============
Схема работы. Меньше всего мне хотелось бы потратить время на то, чтобы через неделю-другую узнать, что исполнитель работы не понял или не смог сформировать, реализовать изложенные требования. Поэтому задачу я предлагаю разбить на две части. Сначала формулируется и описывается решение (какие средства 1С и т.д. будут использоваться, как будут решаться изложенные выше проблемы и т.п.), мы его с вами согласовываем на предмет того, что все это реализуемо и дает необходимый результат. И на втором этапе исполнитель это проектик реализует. Если вы беспокоитесь, что я украду у вас решение и после получения проекта найму кого-то еще делать, то проектирование выделяем в отдельный проектик, который оцениваестся отдельно и оплачивается, соответственно, тоже.