Круглов Дмитрий дмитриевич:
Скрипт определяет наличие предыдущих платформ и деинсталлирует их..
далее устанавливает последнююю версию, прописывает нужные базы и прямые ярлыки
Рябко Михаил Евгеньевич:
При установке файла 1CEnterprise 8.2.msi через GPO платформа ставилась, но потом ее не могли удалить (после выключения из групповых политик установки). Никакой unistaller ee не брал. Потом почистили реестр, вроде победили.
Более того, инсталлер не прописывал ярлыки в каталог %SystemRoot%\Installer\{8150646B-4F88-4415-AF2A-F96199E3DA37},из за этого все ярлыки были без картинок.
Даже если бы все работало, этот способ не очень понравился, т.к. для 8.2 через те же GPO нельзя прописать базы. А смысл тогда?
Далее пробовали через скрипт. Такое же непредсказуемое поведение по деинсталляции платформы. Кроме этого появлялось 2 ярлыка после установки. Один - который прописан в скрипте, другой - после работы инсталлятора. Ну ладно, написал файл трансформации, чтобы лишний ярлык не создавал, но проблема ошибки при выполнения скрипта ("Требуется объект") и деинсталляции осталась.
Точно также проблема деинсталляции и с ярлыками остается при прямой установке 1CEnterprise 8.2.msi (без трансформации, запуском из проводника), разве что из списка программ удаляется, а все файлы остаются.
В итоге пришли к решению в лоб. Раз уж запуск 1cestart.exe на расшаренной папке дает более-менее положительный результат вручную, то нужно и идти по этому пути. Написал скрипт установки. Вроде работает. Правда, чтобы ограничится установкой без запуска, пришлось создать базу-пустышку и намеренно внести ошибку в параметр запуска. Далее по комментариям все должно быть понятно.
А так есть подозрение, что причина в кривом файле 1CEnterprise 8.2.msi (ярлыки то хотя бы он должен создавать нормально?). То ли дело установка через Setip.exe - тут все в шоколаде и работает.
Итак, альтернативный скрипт (сохранить с расширением *.vbs)
В качестве примера использования можно указать вот такую ситуацию: в зависимости от типа клиента (договора, документа и т.п) формируются разные тексты договоров с разным количеством таблиц. В реальности, конечно должены использоваться и макет и описанные здесь динамические механизмы.
В моем примере я заранее создал новый пустой документ. Тестировалось на Office 2007.
Часто при создании документа из макета используют метод замены кусков текста. В примере представлен другой вариант выполнения того же действия - с использованием закладок. Также представлен пример построения нумерованного списка, вставки картинки, настройки ее параметров.
Пример использования описанных возможностей прост. При формировании коммерческого предложения бывает необходимо описать список условий, добавить изображение образца продукции.
Для отображения закладок включите эту опцию в настройках вашего Word'а.
В моем примере я заранее создал новый пустой документ, путь к документу и картинке прописан в тексте. Не забудте указать свои пути.
Как в 1C из Microsoft Office Word 2007 внести текст?
Код получения текста из файла word:
Рассмотрим приёмы получения статистической информации о документе, его составе и т.д.:
'получить общее количество символов в активном документе
' (буквы, цифры, пробелы, переход на новую строку и т.д)
WordApp.ActiveDocument.Characters.Count
'получить символ по его индексу
WordApp.ActiveDocument.Characters(14).Text
'изменить символ по его индексу
WordApp.ActiveDocument.Characters(14).Text="е" 'можно несколько "еёе"
Только не забывайте, что заменив один символ несколькими, вы измените общее количество символов в документе. Поэтому осторожнее при применении циклов. Это также касается и следующего кода.
'получаем количество слов в документе
'(переход на новую строку считается словом)
DocWord.Words.Count
'получить слово по его индексу
DocWord.Words(2).Text
'изменить слово по его индексу
DocWord.Words(2).Text="текст" 'можно несколько слов "Новый текст"
'получить количество параграфов (абзацев) в документе
WordApp.ActiveDocument.Paragraphs.Count
'получить текст параграфа по его индексу
WordApp.ActiveDocument.Paragraphs(2).Range.Text
'изменить текст параграфа по его индексу
WordApp.ActiveDocument.Paragraphs(2).Range.Text="Много текста. Много " & _
" предложений. И так далее!"
'получить количество предложений в документе
WordApp.ActiveDocument.Sentences.Count
'получить текст предложения по его индексу
WordApp.ActiveDocument.Sentences(1).Text
'получить количество предложений во втором параграфе
WordApp.ActiveDocument.Paragraphs(2).Range.Sentences.Count
'получить текст предложения 1 в параграфе 2
WordApp.ActiveDocument.Paragraphs(2).Range.Sentences(1).Text
'получить текст слова 2, в предложении 1,в параграфе 2
WordApp.ActiveDocument.Paragraphs(2).Range.Sentences(1).Words(2).Text
'добавить новую секцию (раздел)
'создаёт новый раздел на новом листе
DocWord.Sections.Add
'создаёт новый раздел на текущем листе
DocWord.Application.S_election.I_nsertBreak (wdSectionBreakContinuous) '(3)
'получить количество секций в документе
DocWord.Sections.Count
'получить текст слова 2, в предложении 1,в параграфе 2, в секции 1.
DocWord.Sections(1).Range.Paragraphs(1).Range.Sentences(1).Words(2).Text
Используя Встроенные_Свойства_Документа получаем его статистические данные.
'получаем количество страниц (листов) в документе
WordApp.ActiveDocument.BuiltInDocumentProperties(wdPropertyPages) '(14)
'получаем количество строк в документе
WordApp.ActiveDocument.BuiltInDocumentProperties(wdPropertyLines) '(23)
'получаем количество слов в документе
WordApp.ActiveDocument.BuiltInDocumentProperties(wdPropertyWords) '(15)
'получаем количество параграфов (абзацев) в документе
WordApp.ActiveDocument.BuiltInDocumentProperties(wdPropertyParas) '(24)
'и т.д.
Рассмотрим примеры кода для передвижения по документу, а также поиска и замены текста.
Метод .GoTo (перейти к) позволяет вам переместиться на нужную позицию в документе. Он при прямом вызове возвращает новую позицию курсора.
'переход на лист с именем "1"
'если не указать в конце .S_elect, то код просто выдаст положение курсора
DocWord.Application.S_election.GoTo(wdGoToPage, , , "1").S_elect
wdGoToSection (0) - перейти к секции ; wdGoToPage (1) - перейти к листу ;
wdGoToTable (2) - перейти к таблице ; wdGoToLine (3) - перейти к строке ;
wdGoToFootnote (4) - перейти к сноске ; wdGoToEndnote (5) - к примечанию ;
wdGoToComment (6) - к комментарию ; wdGoToField (7) - к полю ;
wdGoToHeading (11) - к заголовку ;
wdGoToSpellingError (13) - к орфографической ошибке ;
wdGoToGrammaticalError (14) - к грамматической ошибке.
'переход на лист с индексом 1
DocWord.Application.S_election.GoTo(3, , 1, "").S_elect
'переход в начало строки с индексом 1
DocWord.Application.S_election.GoTo(3, , 1, "").S_elect
'переход в начало следующей строки (аналогично текущий_индекс+1)
DocWord.Application.S_election.GoTo(3, wdGoToNext, 1, "").S_elect
wdGoToNext (2) - на следующий ; wdGoToPrevious (3) - на предыдущий.
Поиск и замена:
'находим первое вхождение текста и выделяем его
WordApp.Application.S_election.Find.Text = "строка"
WordApp.Application.S_election.Find.Execute
'находим первое вхождение текста
WordApp.Application.S_election.Find.Text = "строка"
' и заменяем только его
WordApp.Application.S_election.Find.Replacement.Text = "1 строчка"
WordApp.Application.S_election.Find.Wrap = wdFindContinue
WordApp.Application.S_election.Find.Execute Replace:= wdReplaceOne '(1)
'или тоже самое, но другим способом (при повторном выполнении кода, заменится следующее слово)
WordApp.ActiveDocument.Content.Find.Execute _
FindText:="текста", ReplaceWith:="hello", Replace:= wdReplaceOne '(1)
Для замены всех вхождений текста применяйте wdReplaceAll (2).
Восстановление документов 1С из архива в рабочую базу (XML обмен)
Не редко требуется восстановить данные испорченного документа 1С из архива базы после не умышленных, а зачастую ошибочных, действий удачливого пользователя. Самым простым способом является выгрузка данных из базы архива 1с в XML, а затем загрузка этого XML файла в рабочую базу. Данное решение целиком и полностью опирается на внутренние XML алгоритмы работы конфигурации 1С. При помощи предлагаемой обработки в рабочую базу загружаются все реквизиты документа и его табличные части в том виде, в котором они существовали в архиве.
Исключение составляют движения документа. Данные о движениях не сохраняются при XML сериализации. Хотя документ и восстанавливается проведенным, но все регистры учета и накопления не трогаются. По этому, после восстановления документа следует его провести, либо воспользоваться обработкой, которая позволяет восстановить утерянный или испорченный документ со всеми его движениями.
Импорт - экспорт данных через XML. Обработка обмена данными.
Начало работы с обработкой по экспорту данных документа 1С в XML начинается с выбора имени XML файла и документа, данные которого необходимо сохранить. Первый этап следует выполнять на архивной копии базы, из которой требуется получить достоверные данные. После указания требуемых данных следует нажать кнопку "Выгрузить". Экспорт данных выбранного документа будет осуществлен в указанный пользователем XML файл.
Импорт данных из XML файла следует осуществлять уже в рабочей базе в режиме "1С Предприятие". Для этого откройте обработку, выберите файл данных и нажмите кнопку восстановить. Документ выбирать не обязательно, так как все его данные уже известны и содержаться в XML файле. Важное замечание - движения документа не изменяются, по этому если нужно их тоже восстановить документ следует провести. Скачать обработку:Скачивать файлы может только зарегистрированный пользователь!
Импорт данных из 1С в XML
Обеспечение возможности импорта данных из 1С в XML осуществляет процедура XML_Импорт. Процедура импорта проверяет пользовательский ввод - имя файла и ссылку на документ, данные которого нужно сохранить в XML файл. Далее создается новый текстовый файл, в который средствами 1С осуществляется выгрузка значений всех реквизитов документа и табличных частей. Исходный код процедуры:
Экспорт данных из XML в 1С
Обратная операция - экспорт данных из XML в 1С реализована в процедуре XML_Экспорт. Данные, сохраненные на предыдущем этапе, читаются из XML файл при помощи механизма XML Reader. Для восстановления данных документа достаточно указать только имя XML файла, так все необходимые данные о том, какой именно документ нужно восстанавливать уже имеются в файле. После успешного чтения данных 1С средствами платформы изменит требуем документ и откроет его в новом окне для проверки. Для восстановления движений документа его необходимо провести. Исходный код процедуры:
Вместо Таб.Показать() используем глобальную функцию - и отчет показывается сразу в Excel в удобоваримом виде - с форматированием колонок по ширине, автофильтром и ярлычками листов
Начиная с платформы 8.0 системы 1С Предприятие, существует возможность ограничивать права доступа пользователей на уровне записей. Для этого используется механизм RLS (Record Level Security). Такая «тонкая» настройка может быть полезна для ограничения доступа по организациям, клиентам, номенклатуре и др.
RLS – это возможность разработчика задать условие на таблицы базы данных для тех или иных пользователей (групп пользователей) и не дать им увидеть лишнего. Условие имеет булевый тип. Если значение условия принимает значение «истина», то доступ предоставляется, в противном случае – запрещается.
RLS используется одновременно с настройкой обычных прав доступа. Поэтому прежде чем приступить к настройке RLS, необходимо раздать обычные права на объекты конфигурации.
RLS применяется для следующих видов прав доступа:
* Чтение
* Добавление
* Изменение
* Удаление
Порядок настройки RLS
Рассмотрим простой пример выполнения настройки. Снимки экрана сделаны на версии 1С Предприятие 8.2 (8.2.9.356). Синтаксис шаблонов текстов ограничений описан в документации по 8.2 в книге «Руководство разработчика. Часть 1», поэтому на нем останавливаться не будем.
Итак, первым делом нужно определить шаблоны ограничений для каждой существующей роли.
После этого на основании указанных шаблонов задаются ограничения к необходимым объектам. Для редактирования текста условия можно воспользоваться конструктором ограничений доступа к данным.
Для редактирования нескольких ролей удобно управлять через окно «Все роли».
Для копирования условий в другие роли можно использовать окно «Все ограничения доступа». Шаблоны в другие роли могут копироваться только вручную.
Вот и все. Можно проверить результат.
Недостатки использования RLS:
1. Применение механизма ограничения доступа на уровне записей приводит к неявному увеличению таблиц, участвующих в запросе, что может привести к ошибкам в клиент-серверном режиме работы базы данных.
2. Для контроля записи бывает трудно или невозможно реализовать сложную логику приложения. В таких случаях лучше использовать условия в процедуре ПриЗаписи().
3. Написание условия (запроса) требует определенной квалификации разработчика.
4. Дополнительные трудности может создать невозможность отладки условия (запроса).
В типовых конфигурациях права на уровне записей могут быть заданы интерактивно для следующих объектов: организации, контрагенты, номенклатура, склады, подразделения, физические лица, заявки кандидатов и другие.
Следует помнить, что ограничения прав доступа на уровне записей довольно ресурсоемкий механизм и чем более сложные ограничения Вы поставите, тем медленнее программа будет работать, особенно при большой базе данных. Мелкоступов Александр
Отправка писем из 1С Предприятия – одна из самых необходимых функций, отсутствующая в штатном функционале платформы. Один из вариантов реализации – это подключение к MS Outlook по технологии OLE. В статье приведены примеры создания писем, событий и задач в MS Outlook из 1С. Автоматическое создание событий и задач используется не часто, но порой бывает очень удобно.
Для работы с сетевыми ресурсами в WSH предназначен объект WshNetwork. Из "1С:Предприятие" можно напрямую управлять сетевыми ресурсами, в том числе и принтерами.
Получить список принтеров
Подключение сетевого принтера
Объект WshNetwork позволяет определить список подключенных сетевых принтеров. Для этого используется метод EnumPrinterConnections, который возвращает коллекцию принтеров. Данную коллекцию можно перебрать с помощью конструкции