Как сформировать новый договор, документ на основании файла, шаблона Microsoft Office Word? Для заключения договоров с контрагентами разработан типовой договор (шаблон).
При его оформлении (для реального контрагента) в определенные места документа вставляются данные о контрагенте.
Подобные фрагменты определены следующим образом: <ИмяОбласти> (на практике можно использовать другие способы, в нашем примере квадратные скобки [ ]).
Пример договора:
Договор
на оказание услуг
Я, [Заказчик], с одной стороны, именуемый в дальнейшем ЗАКАЗЧИК, и [Исполнитель],
с другой стороны, именуемый в дальнейшем ИСПОЛНИТЕЛЬ, заключили договор о настройке
системы 1С:Предприятие под нужды заказчика.
Дополнительные условия:
Глюки убирать сразу.
Оплата:
$100 в час. Обсуждению не подлежит.
Подписи сторон:
ЗАКАЗЧИК ИСПОЛНИТЕЛЬ
_____ [Заказчик] _____ [Исполнитель]
Оформленный таким образом документ сохранен в файле, который загружен в 1С v 8 в качестве макета (при его создании указывается, что тип макета – Active document).
Далее в соответствующем обработчике события (например, в обработчике нажатия на кнопку Создать договор) размещается следующий код:
Код 1C v 8.х Договор = ПолучитьМакет("Договор");
// Получить объект из макета.
MSWord = Договор.Получить();
Попытка
Документ = MSWord.Application.Documents(1);
Документ.Activate();
//Определим имена
Заказчик = "Петр Иванович КакВасТам";
Исполнитель = "helpf.pro - Помощник по 1С"
// Получить объект, который будем использовать для поиска и замены.
Замена = Документ.Content.Find;
// Заменить заранее определенные ключевые конструкции на требуемый текст.
Замена.Execute("[Заказчик]", Ложь, Истина, Ложь, , , Истина, , Ложь, Заказчик);
Замена.Execute("[Исполнитель]", Ложь, Истина, Ложь, , , Истина, , Ложь, Исполнитель);
// Далее аналогично для остальных ключевых конструкций.
// ...
// Делаем видимым приложение и активизируем его.
MSWord.Application.Visible = Истина;
MSWord.Activate();
Исключение
// Если произойдет ошибка, выводятся данные об ошибке и объект закрывается.
Сообщить(ОписаниеОшибки());
MSWord.Application.Quit();
КонецПопытки;
Код 1C v 7.x
Word = создатьОбъект("Word.Application");
wdDoc = Word.Documents;
wdDoc.Open(ИмяФайлаШаблона,0,1); //открываем только на чтение
// Делаем видимым приложение
Word.Visible = 1;
wdFindContinue = 1;
wdReplaceAll = 2;
True = 1;
False = 0;
Word.S_elect ion.Find.Execute("[Заказчик]", True, True, False, False, False, True, wdFindContinue,False,"Петр Иванович КакВасТам", wdReplaceAll);
Word.S_elect ion.Find.Execute("[Исполнитель]", True, True, False, False, False, True, wdFindContinue,False,"helpf.pro - Помощник по 1C", wdReplaceAll);
Категория:
Работа с Microsoft Office и OpenOffice Выгрузка метаданных конфигурации в Microsoft Word и Excel Код 1C v 8.х
Перем ОбъектыКонфы;
Перем СтруктКонфы;
Процедура ВыгрузитьВWord()
Попытка
Word = Новый COMОбъект("Word.Application");
Исключение
Сообщить("Не удалось открыть Word");
Возврат;
КонецПопытки;
Word.Documents.Add();
Документ = Word.ActiveDocument();
// Перебор типов метаданных
Для Каждого ТипОбъекта Из ОбъектыКонфы Цикл
Состояние(ТипОбъекта.Значение);
Если Метаданные[ТипОбъекта.Ключ].Количество() > 0 Тогда
// Добавляем новый параграф
Документ.Paragraphs.Add();
Номер = Документ.Paragraphs.Count();
Документ.Paragraphs(Номер-1).Range().I_nsertAfter(ТипОбъекта.Значение);
Документ.Paragraphs(Номер).Range().Style="Заголовок 1";
//Перебираем конктретные объекты
Для каждого Объект Из Метаданные[ТипОбъекта.Ключ] Цикл
// Добавляем новый параграф
Документ.Paragraphs.Add();
Номер = Документ.Paragraphs.Count();
Документ.Paragraphs(Номер-1).Range().I_nsertAfter(Объект.Синоним);
Документ.Paragraphs(Номер).Range().Style="Заголовок 2";
// Перебираем параметры метаданных
Для каждого Параметр Из СтруктКонфы Цикл
Попытка
Количество = Объект[Параметр.Ключ].Количество();
Исключение
Продолжить;
КонецПопытки;
Если Количество > 0 Тогда
// Добавляем новый параграф
Документ.Paragraphs.Add();
Номер = Документ.Paragraphs.Count();
Документ.Paragraphs(Номер-1).Range().I_nsertAfter(Параметр.Значение + " (" + Количество + ")");
Документ.Paragraphs(Номер).Range().Style="Заголовок 3";
// Добавляем новый параграф
Документ.Paragraphs.Add();
Номер=Документ.Paragraphs.Count();
// Добавляем новую таблицу
Документ.Tables.Add(Документ.Paragraphs(Номер).Range(),Количество+1,4);
Счетчик = 1;
// Заполняем шапку таблицы
Таблица = Документ.Tables(Документ.Tables.Count());
Таблица.Cell(Счетчик,1).Range().I_nsertAfter("Имя");
Таблица.Cell(Счетчик,2).Range().I_nsertAfter("Синоним");
Таблица.Cell(Счетчик,3).Range().I_nsertAfter("Тип");
Таблица.Cell(Счетчик,4).Range().I_nsertAfter("Комментарий");
// Устанавливаем жирный шрифт для шапки таблицы
Документ.Range(Таблица.Cell(Счетчик,1).Range.Start,Таблица.Cell(Счетчик,4).Range.End).Font.Bold = Истина;
Для каждого Значение Из Объект[Параметр.Ключ] Цикл
Счетчик = Счетчик + 1;
// Заполняем содержимое таблицы
Попытка
Таблица.Cell(Счетчик,1).Range().I_nsertAfter(Значение.Имя);
Исключение
КонецПопытки;
Попытка
Таблица.Cell(Счетчик,2).Range().I_nsertAfter(Значение.Синоним);
Исключение
КонецПопытки;
Попытка
СтрокаТипов = "";
// Выводим все типы
Для каждого Тип Из Значение.Тип.Типы() Цикл
СтрокаТипов = СтрокаТипов + " " + Строка(Тип);
КонецЦикла;
Таблица.Cell(Счетчик,3).Range().I_nsertAfter(СтрокаТипов);
Исключение
КонецПопытки;
Попытка
Таблица.Cell(Счетчик,4).Range().I_nsertAfter(Значение.Комментарий);
Исключение
КонецПопытки;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЦикла;
// Показываем документ
Word.Visible = Истина;
// Устанавливаем активность документа
Word.Activate();
Word = Неопределено;
КонецПроцедуры
Процедура ВыгрузитьВExcel()
Попытка
Excel = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Не удалось открыть Excel");
Возврат;
КонецПопытки;
// Добавляем новый лист
Excel.Application.Workbooks.Add(1);
Лист = Excel.ActiveSheet;
// Задаем имя закладки
Лист.Name = "Данные";
НомерСтроки = 0;
// Перебор типов метаданных
Для Каждого ТипОбъекта Из ОбъектыКонфы Цикл
Состояние(ТипОбъекта.Значение);
Если Метаданные[ТипОбъекта.Ключ].Количество() > 0 Тогда
// Добавляем новую строку
НомерСтроки = НомерСтроки + 1;
// Устанавливаем текст в ячейку
Лист.Cells(НомерСтроки, 1).Value = ТипОбъекта.Значение;
// Устанавливаем размер шрифта
Лист.Cells(НомерСтроки, 1).Font.Size = 16;
// Устанавливаем цвет
Лист.Cells(НомерСтроки, 1).Font.ColorIndex = 3;
//Перебираем конктретные объекты
Для каждого Объект Из Метаданные[ТипОбъекта.Ключ] Цикл
// Добавляем новую строку
НомерСтроки = НомерСтроки + 1;
// Устанавливаем текст в ячейку
Лист.Cells(НомерСтроки, 1).Value = Объект.Синоним;
// Устанавливаем отступ в 2 символа
Лист.Cells(НомерСтроки, 1).I_nsertIndent(2);
// Устанавливаем размер шрифта
Лист.Cells(НомерСтроки, 1).Font.Size = 12;
// Устанавливаем цвет
Лист.Cells(НомерСтроки, 1).Font.ColorIndex = 5;
// Перебираем параметры метаданных
Для каждого Параметр Из СтруктКонфы Цикл
Попытка
Количество = Объект[Параметр.Ключ].Количество();
Исключение
Продолжить;
КонецПопытки;
Если Количество > 0 Тогда
// Добавляем новую строку
НомерСтроки = НомерСтроки + 1;
Лист.Cells(НомерСтроки, 1).Value = Параметр.Значение + " (" + Количество + ")";
Лист.Cells(НомерСтроки, 1).I_nsertIndent(4);
// Устанавливаем жирный шрифт
Лист.Cells(НомерСтроки, 1).Font.Bold = Истина;
// Устанавливаем цвет
Лист.Cells(НомерСтроки, 1).Font.ColorIndex = 16;
// Добавляем новую таблицу
НомерСтроки = НомерСтроки + 1;
Лист.Cells(НомерСтроки, 1).Value = "Имя";
Лист.Cells(НомерСтроки, 2).Value = "Синоним";
Лист.Cells(НомерСтроки, 3).Value = "Тип";
Лист.Cells(НомерСтроки, 4).Value = "Комментарий";
Для Ном = 1 По 4 Цикл
// Устанавливаем ширину колонки
Лист.Cells(НомерСтроки, Ном).ColumnWidth = 20;
Лист.Cells(НомерСтроки, Ном).Font.Bold = Истина;
// Очищаем все границы
Лист.Cells(НомерСтроки, Ном).Borders(5).LineStyle = -4142;
// Устанавливаем левую границу
Лист.Cells(НомерСтроки, Ном).Borders(7).LineStyle = 1;
// Устанавливаем верхнюю границу
Лист.Cells(НомерСтроки, Ном).Borders(8).LineStyle = 1;
// Устанавливаем нижнюю границу
Лист.Cells(НомерСтроки, Ном).Borders(9).LineStyle = 1;
// Устанавливаем правую границу
Лист.Cells(НомерСтроки, Ном).Borders(10).LineStyle = 1;
// Устанавливаем цвет фона
Лист.Cells(НомерСтроки, Ном).Interior.ColorIndex = 34;
КонецЦикла;
Для каждого Значение Из Объект[Параметр.Ключ] Цикл
НомерСтроки = НомерСтроки + 1;
// Заполняем содержимое таблицы
Попытка
Лист.Cells(НомерСтроки, 1).Value = Значение.Имя;
Исключение
КонецПопытки;
Попытка
Лист.Cells(НомерСтроки, 2).Value = Значение.Синоним;
Исключение
КонецПопытки;
Попытка
СтрокаТипов = "";
// Выводим все типы
Для каждого Тип Из Значение.Тип.Типы() Цикл
СтрокаТипов = СтрокаТипов + " " + Строка(Тип);
КонецЦикла;
Лист.Cells(НомерСтроки, 3).Value = СтрокаТипов;
Исключение
КонецПопытки;
Попытка
Лист.Cells(НомерСтроки, 4).Value = Значение.Комментарий;
Исключение
КонецПопытки;
Для Ном = 1 По 4 Цикл
// Установка границ
Лист.Cells(НомерСтроки, Ном).Borders(5).LineStyle = -4142;
Лист.Cells(НомерСтроки, Ном).Borders(7).LineStyle = 1;
Лист.Cells(НомерСтроки, Ном).Borders(8).LineStyle = 1;
Лист.Cells(НомерСтроки, Ном).Borders(9).LineStyle = 1;
Лист.Cells(НомерСтроки, Ном).Borders(10).LineStyle = 1;
// Устанавливаем выравнивание по левому краю
Лист.Cells(НомерСтроки, Ном).VerticalAlignment = -4160;
// Устанавливаем перенос слов
Лист.Cells(НомерСтроки, Ном).WrapText = Истина;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЦикла;
// Показываем документ
Excel.Visible = Истина;
Excel = Неопределено;
КонецПроцедуры
Процедура Сформировать()
// Определяем все возможные объекты метаданных
ОбъектыКонфы = Новый Структура();
ОбъектыКонфы.Вставить("ОбщиеМодули", "Общие модули");
ОбъектыКонфы.Вставить("ОбщиеФормы", "Общие формы");
ОбъектыКонфы.Вставить("ОбщиеМакеты", "Общие макеты");
ОбъектыКонфы.Вставить("ОбщиеКартинки", "Общие картинки");
ОбъектыКонфы.Вставить("Роли", "Роли");
ОбъектыКонфы.Вставить("Интерфейсы", "Интерфейсы");
ОбъектыКонфы.Вставить("Стили", "Стили");
ОбъектыКонфы.Вставить("Языки", "Языки");
ОбъектыКонфы.Вставить("ПланыОбмена", "Планы обмена");
ОбъектыКонфы.Вставить("Константы", "Константы");
ОбъектыКонфы.Вставить("КритерииОтбора", "Критерии отбора");
ОбъектыКонфы.Вставить("Справочники", "Справочники");
ОбъектыКонфы.Вставить("Документы", "Документы");
ОбъектыКонфы.Вставить("ЖурналыДокументов", "Журналы документов");
ОбъектыКонфы.Вставить("Перечисления", "Перечисления");
ОбъектыКонфы.Вставить("Отчеты", "Отчеты");
ОбъектыКонфы.Вставить("Обработки", "Обработки");
ОбъектыКонфы.Вставить("ПланыВидовХарактеристик", "Планы видов характеристик");
ОбъектыКонфы.Вставить("ПланыСчетов", "Планы счетов");
ОбъектыКонфы.Вставить("ПланыВидовРасчета", "Планы видов расчета");
ОбъектыКонфы.Вставить("РегистрыСведений", "Регистры сведений");
ОбъектыКонфы.Вставить("РегистрыБухгалтерии", "Регистры бухгалтерии");
ОбъектыКонфы.Вставить("РегистрыРасчета", "Регистры расчета");
// Определяем все возможные параметры
СтруктКонфы = Новый Структура();
СтруктКонфы.Вставить("Измерения", "Измерения");
СтруктКонфы.Вставить("Ресурсы", "Ресурсы");
СтруктКонфы.Вставить("Реквизиты", "Реквизиты");
СтруктКонфы.Вставить("Формы", "Формы");
СтруктКонфы.Вставить("Макеты", "Макеты");
СтруктКонфы.Вставить("Графы", "Графы");
СтруктКонфы.Вставить("ТабличныеЧасти", "Табличные части");
СтруктКонфы.Вставить("Значения", "Значения");
ВыгрузитьВWord(); // из 1С в Microsoft Word
ВыгрузитьВExcel(); // из 1C в Microsoft Excel
КонецПроцедуры
Код 1C v 7.x
Процедура Справочник()
Ворд=СоздатьОбъект("Word.Application");
Ворд.DisplayAlerts=0;
Ворд.ActiveDocument.ActiveWindow.S_elect ion.I_nsertRowsBelow(1);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveLeft(1,1);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText("Код");
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveRight(1,1);
Тип=?(Метаданные.Справочник(СокрЛП(Имя)).ТипКода="Текстовый","Строка","Число");
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText(Тип+" ("+СокрЛП(Метаданные.Справочник(СокрЛП(Имя)).ДлинаКода)+")");
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText("");
Ворд.ActiveDocument.ActiveWindow.S_elect ion.I_nsertRowsBelow(1);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveLeft(1,1);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText("Наименование");
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText("Строка ("+СокрЛП(Метаданные.Справочник(СокрЛП(Имя)).ДлинаНаименования)+")");
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText("");
Для Сч=1 По Метаданные.Справочник(СокрЛП(Имя)).Реквизит() Цикл
Ворд.ActiveDocument.ActiveWindow.S_elect ion.I_nsertRowsBelow(1);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveLeft(1,1);
Реквизит=Метаданные.Справочник(СокрЛП(Имя)).Реквизит(Сч);
Синоним=Реквизит.Синоним;
Если ПустоеЗначение(Синоним)=0 Тогда
Если нрег(СтрЗаменить(Синоним," ",""))<>нрег(Реквизит.Идентификатор) Тогда
Синоним=" ("+Синоним+")";
Иначе
Синоним="";
КонецЕсли;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText(СокрЛП(Реквизит.Идентификатор)+Синоним);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveRight(1,1);
Тип=Реквизит.Тип;
Если Тип="Строка" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина)+")";
ИначеЕсли Тип="Число" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина);
Если ПустоеЗначение(Реквизит.Точность)=0 Тогда
Тип=Тип+"."+СокрЛП(Реквизит.Точность);
КонецЕсли;
Тип=Тип+")";
Иначе
Тип=Тип+"."+Реквизит.Вид;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText(Тип);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText(Реквизит.Комментарий);
КонецЦикла;
Предупреждение("Готово",5);
КонецПроцедуры
Процедура Документ()
Ворд=СоздатьОбъект("Word.Application");
Ворд.DisplayAlerts=0;
Для Сч=1 По Метаданные.Документ(СокрЛП(Имя)).РеквизитШапки() Цикл
Ворд.ActiveDocument.ActiveWindow.S_elect ion.I_nsertRowsBelow(1);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveLeft(1,1);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText("Шапка");
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveRight(1,1);
Реквизит=Метаданные.Документ(СокрЛП(Имя)).РеквизитШапки(Сч);
Синоним=Реквизит.Синоним;
Если ПустоеЗначение(Синоним)=0 Тогда
Если нрег(СтрЗаменить(Синоним," ",""))<>нрег(Реквизит.Идентификатор) Тогда
Синоним=" ("+Синоним+")";
Иначе
Синоним="";
КонецЕсли;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText(СокрЛП(Реквизит.Идентификатор)+Синоним);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveRight(1,1);
Тип=Реквизит.Тип;
Если Тип="Строка" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина)+")";
ИначеЕсли Тип="Число" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина);
Если ПустоеЗначение(Реквизит.Точность)=0 Тогда
Тип=Тип+"."+СокрЛП(Реквизит.Точность);
КонецЕсли;
Тип=Тип+")";
Иначе
Тип=Тип+"."+Реквизит.Вид;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText(Тип);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText(Реквизит.Комментарий);
КонецЦикла;
Для Сч=1 По Метаданные.Документ(СокрЛП(Имя)).РеквизитТабличнойЧасти() Цикл
Ворд.ActiveDocument.ActiveWindow.S_elect ion.I_nsertRowsBelow(1);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveLeft(1,1);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText("Таб. часть");
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveRight(1,1);
Реквизит=Метаданные.Документ(СокрЛП(Имя)).РеквизитТабличнойЧасти(Сч);
Синоним=Реквизит.Синоним;
Если ПустоеЗначение(Синоним)=0 Тогда
Если нрег(СтрЗаменить(Синоним," ",""))<>нрег(Реквизит.Идентификатор) Тогда
Синоним=" ("+Синоним+")";
Иначе
Синоним="";
КонецЕсли;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText(СокрЛП(Реквизит.Идентификатор)+Синоним);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveRight(1,1);
Тип=Реквизит.Тип;
Если Тип="Строка" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина)+")";
ИначеЕсли Тип="Число" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина);
Если ПустоеЗначение(Реквизит.Точность)=0 Тогда
Тип=Тип+"."+СокрЛП(Реквизит.Точность);
КонецЕсли;
Тип=Тип+")";
Иначе
Тип=Тип+"."+Реквизит.Вид;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText(Тип);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText(Реквизит.Комментарий);
КонецЦикла;
Предупреждение("Готово",5);
КонецПроцедуры
Процедура Общие()
Ворд=СоздатьОбъект("Word.Application");
Ворд.DisplayAlerts=0;
Для Сч=1 По Метаданные.ОбщийРеквизитДокумента() Цикл
Ворд.ActiveDocument.ActiveWindow.S_elect ion.I_nsertRowsBelow(1);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveLeft(1,1);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText("Шапка");
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveRight(1,1);
Реквизит=Метаданные.ОбщийРеквизитДокумента(Сч);
Синоним=Реквизит.Синоним;
Если ПустоеЗначение(Синоним)=0 Тогда
Если нрег(СтрЗаменить(Синоним," ",""))<>нрег(Реквизит.Идентификатор) Тогда
Синоним=" ("+Синоним+")";
Иначе
Синоним="";
КонецЕсли;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText(СокрЛП(Реквизит.Идентификатор)+Синоним);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveRight(1,1);
Тип=Реквизит.Тип;
Если Тип="Строка" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина)+")";
ИначеЕсли Тип="Число" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина);
Если ПустоеЗначение(Реквизит.Точность)=0 Тогда
Тип=Тип+"."+СокрЛП(Реквизит.Точность);
КонецЕсли;
Тип=Тип+")";
Иначе
Тип=Тип+"."+Реквизит.Вид;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText(Тип);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText(Реквизит.Комментарий);
КонецЦикла;
Предупреждение("Готово",5);
КонецПроцедуры
Процедура СтруктураРегистра()
Ворд=СоздатьОбъект("Word.Application");
Ворд.DisplayAlerts=0;
Для Сч=1 По Метаданные.Регистр(СокрЛП(Имя)).Измерение() Цикл
Ворд.ActiveDocument.ActiveWindow.S_elect ion.I_nsertRowsBelow(1);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveLeft(1,1);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText("Измерение");
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveRight(1,1);
Реквизит=Метаданные.Регистр(СокрЛП(Имя)).Измерение(Сч);
Синоним=Реквизит.Синоним;
Если ПустоеЗначение(Синоним)=0 Тогда
Если нрег(СтрЗаменить(Синоним," ",""))<>нрег(Реквизит.Идентификатор) Тогда
Синоним=" ("+Синоним+")";
Иначе
Синоним="";
КонецЕсли;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText(СокрЛП(Реквизит.Идентификатор)+Синоним);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveRight(1,1);
Тип=Реквизит.Тип;
Если Тип="Строка" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина)+")";
ИначеЕсли Тип="Число" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина);
Если ПустоеЗначение(Реквизит.Точность)=0 Тогда
Тип=Тип+"."+СокрЛП(Реквизит.Точность);
КонецЕсли;
Тип=Тип+")";
Иначе
Тип=Тип+"."+Реквизит.Вид;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText(Тип);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText(Реквизит.Комментарий);
КонецЦикла;
Для Сч=1 По Метаданные.Регистр(СокрЛП(Имя)).Ресурс() Цикл
Ворд.ActiveDocument.ActiveWindow.S_elect ion.I_nsertRowsBelow(1);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveLeft(1,1);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText("Ресурс");
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveRight(1,1);
Реквизит=Метаданные.Регистр(СокрЛП(Имя)).Ресурс(Сч);
Синоним=Реквизит.Синоним;
Если ПустоеЗначение(Синоним)=0 Тогда
Если нрег(СтрЗаменить(Синоним," ",""))<>нрег(Реквизит.Идентификатор) Тогда
Синоним=" ("+Синоним+")";
Иначе
Синоним="";
КонецЕсли;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText(СокрЛП(Реквизит.Идентификатор)+Синоним);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveRight(1,1);
Тип=Реквизит.Тип;
Если Тип="Строка" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина)+")";
ИначеЕсли Тип="Число" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина);
Если ПустоеЗначение(Реквизит.Точность)=0 Тогда
Тип=Тип+"."+СокрЛП(Реквизит.Точность);
КонецЕсли;
Тип=Тип+")";
Иначе
Тип=Тип+"."+Реквизит.Вид;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText(Тип);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText(Реквизит.Комментарий);
КонецЦикла;
Для Сч=1 По Метаданные.Регистр(СокрЛП(Имя)).Реквизит() Цикл
Ворд.ActiveDocument.ActiveWindow.S_elect ion.I_nsertRowsBelow(1);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveLeft(1,1);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText("Реквизит");
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveRight(1,1);
Реквизит=Метаданные.Регистр(СокрЛП(Имя)).Реквизит(Сч);
Синоним=Реквизит.Синоним;
Если ПустоеЗначение(Синоним)=0 Тогда
Если нрег(СтрЗаменить(Синоним," ",""))<>нрег(Реквизит.Идентификатор) Тогда
Синоним=" ("+Синоним+")";
Иначе
Синоним="";
КонецЕсли;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText(СокрЛП(Реквизит.Идентификатор)+Синоним);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveRight(1,1);
Тип=Реквизит.Тип;
Если Тип="Строка" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина)+")";
ИначеЕсли Тип="Число" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина);
Если ПустоеЗначение(Реквизит.Точность)=0 Тогда
Тип=Тип+"."+СокрЛП(Реквизит.Точность);
КонецЕсли;
Тип=Тип+")";
Иначе
Тип=Тип+"."+Реквизит.Вид;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText(Тип);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_elect ion.TypeText(Реквизит.Комментарий);
КонецЦикла;
Предупреждение("Готово",5);
КонецПроцедуры
Категория:
Работа с Microsoft Office и OpenOffice Запуск макроса в MS Word из 1С Код 1C v 8.х //Пример показывает как из 1С вызывается MS Word, вставляется макрос и запускается!
//Макрос пишет на листе Добрый день!, https://helpf.pro и сохраняет файл в D:/primer.doc
ПримерМакроса = "Sub VBAprimer()
|S_elect ion.TypeText Text:=""Добрый день!""
|Application.Keyboard (1033)
|S_elect ion.TypeText Text:="": https://helpf.pro""
|S_elect ion.TypeParagraph
|S_elect ion.MoveUp Unit:=wdLine, Count:=2
|S_elect ion.EndKey Unit:=wdLine, Extend:=wdExtend
|S_elect ion.Style = ActiveDocument.Styles(""Заголовок 1"")
|S_elect ion.MoveDown Unit:=wdLine, Count:=1
|S_elect ion.HomeKey Unit:=wdLine
|S_elect ion.EndKey Unit:=wdLine, Extend:=wdExtend
|S_elect ion.Style = ActiveDocument.Styles(""Заголовок 2"")
|ActiveDocument.SaveAs FileName:=""D:/primer.doc"", FileFormat:= _
| wdFormatDocument, LockComments:=False, Password:="""", AddToRecentFiles:= _
| True, WritePassword:="""", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _
| False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
| SaveAsAOCELetter:=False
|End Sub";
// Создание объекта
Word = Новый COMОбъект("Word.Application");
Word.Documents.Add();
//VBComponents = Word.VBE.ActiveVBProject .VBComponents;
VBComponents = Word.ActiveDocument.VBProject .VBComponents;
Count = VBComponents.Count();
VBComponents.Add(1);
VBComponents.Item(Count + 1).CodeModule.I_nsertLines(1, ПримерМакроса);
Word.Application.Run(VBAprimer");
Word.Quit();
Word = Неопределено;
Код 1C v 7.x // Если не будет работать - возможно установлен высокий уровень безопасности. Понизьте до среднего ...
Процедура Сформировать()
Попытка
W=СоздатьОбъект("Word.Application");
Исключение
Возврат;
КонецПопытки;
W.Documents.Add();
i = W.VBE.ActiveVBProject .VBComponents.Count();
W.VBE.ActiveVBProject .VBComponents.Add (1);
W.VBE.ActiveVBProject .VBComponents.Item(i + 1).CodeModule.I_nsertLines (1, "Sub Golif()");
W.VBE.ActiveVBProject .VBComponents.Item(i + 1).CodeModule.I_nsertLines (2, "MsgBox " + """" + "Работает" + """");
W.VBE.ActiveVBProject .VBComponents.Item(i + 1).CodeModule.I_nsertLines (3, "End Sub");
W.Application.Run ("Golif");
W="";
КонецПроцедуры
Категория:
Работа с Microsoft Office и OpenOffice Скрипт принудительного завершения процессов 1С на всех компьютерах В примере "1cv7s.exe", для 8-ки замениете на "1cv8.exe"
Код VBS
'Скрипт демонстрирует возможность принудительного завершения процессов 1С
'на всех компьютерахуказанного домена. Данный код можно применять непосредственно перед пакетным запуском 1С:Предприятия,
'требующим монопольного входа в базу данных (например, при резервном копировании).
'ВНИМАНИЕ! Задайте нужное значение переменной "DomainName"!
'ВНИМАНИЕ! Для успешной работы скрипта его желательно запускать с правами администратора домена.
'ВНИМАНИЕ! Чтобы опробовать скрипт, не производя деструктивных действий, достаточно закомментировать
'оператор "Proc.Terminate".
Option Explicit
On Error Resume Next
Dim DomainName 'Имя домена
DomainName = "MYDOMAIN"
Dim StrResult 'строка результата работы всей программы
StrResult = StrResult & CStr(Now) & " начало работы скрипта" & VbCrLf
Dim ADSI
Set ADSI = GetObject ("WinNT://" & DomainName)
ADSI.Filter = Array("computer")
Dim Comp 'компьютер
Dim WMI 'объект WMI
Dim Proc 'процесс
Dim CurrName 'имя текущего компьютера
CurrName = GetNameComp()
'Цикл по компьютерам домена
For Each Comp In ADSI
If Comp.Name <> CurrName Then
Set WMI = GetObject ("winmgmts:{ImpersonationLevel=Impersonate}!\\" & Trim(Comp.Name) & "\Root\CIMV2")
If Err.Number=0 Then
'Цикл по процессам компьютера
For Each Proc In WMI.ExecQuery("S_elect * FROM Win32_Process WHERE Name = '1cv7s.exe'")
StrResult = StrResult & _
CStr(Now) & " Computer=" & Comp.Name & " PID=" & Proc.ProcessId & _
VbCrLf
'Завершение процесса
Proc.Terminate
Next 'Цикл по процессам компьютера
Else 'Не удалось соединиться с компьютером
If Err.Number <> 462 Then 'The remote server machine does not exist or is unavailable
StrResult = StrResult & _
" " & CStr(Now) & " Computer=" & Comp.Name & " ERROR " & Err.Number & _
VbCrLf
End If
End If
Err.Clear
End If
Next 'Цикл по компьютерам домена
StrResult = StrResult & CStr(Now) & " конец работы скрипта" & VbCrLf
'Отображение результата
ShowInNotepad("Процессы 1cv7s.exe:" & VbCrLf & VbCrLf & StrResult)
'==========================================================================
'Процедура отображает переданную строку в блокноте
Sub ShowInNotepad(StrToFile)
Dim FSO 'Объект файловой системы Scripting.FileSystemObject
Dim TempPath 'Путь к временному файлу
Dim TxtFile 'Поток текстового файла
Set FSO = CreateObject ("Scripting.FileSystemObject ")
TempPath = GetTempPath() & "\" & FSO.GetTempName
Set TxtFile = FSO.CreateTextFile(TempPath)
TxtFile.WriteLine(StrToFile)
TxtFile.Close
CreateObject ("WScript.Shell").Run "notepad.exe " & TempPath
WScript.Sleep 1000
FSO.DeleteFile TempPath
End Sub 'ShowInNotepad
'==========================================================================
'Функция возвращает путь к каталогу временных файлов текущего пользователя
Function GetTempPath()
GetTempPath = CreateObject ("WScript.Shell").ExpandEnvironmentStrings("%TEMP%")
End Function 'GetTempPath
'==========================================================================
'Функция возвращает имя текущего компьютера
Function GetNameComp()
GetNameComp = CreateObject ("WScript.Network").ComputerName
End Function 'GetNameComp
Категория:
Администрирование Скрипт запуска 1С:Предприятия от имени Администратора или Пользователя Данные пример для 7.7, для 8-ых версий указать путь к 1Сv8.exe
Код VBS
Dim WshShell, ObjFSO
Set WshShell = CreateObject ("WScript.Shell")
set objFSO = CreateObject ("Scripting.FileSystemObject ")
appl="C:\1Cv7\BINOP\1CV7s.exe"
users="DomenKompanii\emigachev"
Set objWMIService = GetObject _
("winmgmts:\\.\root\cimv2:Win32_Process")
errReturn = objWMIService.Create _
("cmd.exe /K ""title RUNAS_AUTO & runas.exe /user:" & users & " """ & appl & """""", Null, Null, intProcessID)
wscript.Sleep(1000)
wshShell.AppActivate "RUNAS_AUTO"
function WriteWord()
WshShell.SendKeys "P@ssw0rd"
end function
wscript.Sleep(1000)
wshShell.SendKeys "{ENTER}"
или так:
Код VBS
Set WshShell = CreateObject ("Wscript.Shell")
Set WshEnv = WshShell.Environment("PRocess")
WshShell.Run "runas.exe /user:DomenKompanii\emigachev C:\WD\1Cv7\BINOP\1CV7s.exe"
Wscript.Sleep 800
WshShell.AppActivate WshEnv("SystemRoot") & "\system32\runas.exe"
Wscript.Sleep 200
WshShell.SendKeys "P@ssw0rd"
Wscript.Sleep 500
Категория:
Администрирование Пример получения списка пользователей из файла users.usr Получает из users.usr список пользователей, каталоги пользователей и даже хеши паролей
Код 1C v 7.x // заполним список пользователей
FSO=createobject ("Scripting.FileSystemObject ");
WshShell = CreateObject ("WScript.Shell");
Txt=FSO.OpenTextFile(КаталогИБ()+"usrdef\users.usr");
LineUser="";
ChI=0;
Пока Txt.AtEndOfStream=0 Цикл
Chi=Chi+1;
Buf=Txt.Read(1);
Если КодСимв(Buf)>31 Тогда
LineUser=LineUser+Buf;
КонецЕсли;
КонецЦикла;
LineBof="{"+chr(34)+"Container.Contents"+chr(34)+",";
LineUser=Сред(LineUser,Найти(LineUser,LineBof)+23);
LineUser=Сред(LineUser,1,Найти(LineUser,"}}"));
//Сп=СоздатьОбъект("СписокЗначений");
LineUser=СтрЗаменить(LineUser,РазделительСтрок," ");
LineUser=СтрЗаменить(LineUser,"},{",РазделительСтрок);
Для к=1 По СтрКоличествоСтрок(LineUser) Цикл
а=СтрЗаменить(СтрПолучитьСтроку(LineUser,к),Симв(34),"");
а=СтрЗаменить(СтрПолучитьСтроку(LineUser,к),"}","");
а=Сред(а,19);
а=Сред(а,Найти(а,",")+1);
а=Сред(а,1,Найти(а,",")-1);
а=СтрЗаменить(а,"""",""); // уберем кавычки
списПользователи.Установить(а,а);
КонецЦикла;
списПользователи.ТекущаяСтрока(1);
// Список Пользователей заполнен
Посмотрите еще:
Как получить список зарегистрированных пользователей базы 1С Категория:
Пользователь, роль доступа, интерфейс Как проиграть wav, mp3 файл Код 1C v 8.х ScriptCtrl = Новый COMОбъект("MSScriptControl.ScriptControl");
ScriptCtrl.Language = "vbscript";
ScriptCtrl.AddCode("
Function PlayS()
| Set Wrap = CreateObject (""DynamicWrapper"")
| Wrap.Register ""winmm.dll"", ""sndPlaySound"", ""i=sl"", ""f=s"", "r=l""
| PlayS = Wrap.sndPlaySound(""C:\Sounds\newemail.wav"", SDN_ASYNC)
| End Function");
ScriptCtrl.Run("PlayS");
Категория:
COM-объекты, WMI, WSH Как посмотреть список баз, зарегистрированных в выбранном кластере? Код 1C v 8.х // В приведенном примере производится подключение к агенту сервера, выбирается первый кластер.
// Для этого кластера получается список информационных баз, который затем обходится в цикле.
Соединитель = Новый COMObject ("V81.COMConnect or");
ИмяМашины = "SERVANT";
Порт = "1540";
СтрокаСоединения = "TCP://" + ИмяМашины + ":" + Порт;
СоединениеСАгентом = Соединитель.Connect Agent(СтрокаСоединения);
МассивКластеров = СоединениеСАгентом.GetClusters();
// получается первый массив кластера.
ОписаниеКластера = МассивКластеров.GetValue(МассивКластеров.GetLowerBound());
// в случае если определены администраторы кластера, должны быть указаны данные о логине.
СоединениеСАгентом.authenticate(ОписаниеКластера, " ", " ");
МассивБаз = СоединениеСАгентом.GetInfoBases(ОписаниеКластера);
МаксимальныйИндекс = МассивБаз.GetUpperBound();
Для ТекущийИндекс = МассивБаз.GetLowerBound() По МаксимальныйИндекс Цикл
ОписаниеБазы = МассивБаз.GetValue(ТекущийИндекс);
Сообщить(ОписаниеБазы.Descr);
Сообщить(ОписаниеБазы.Name);
КонецЦикла;
Категория:
Полезные, Универсальные Функции Формирование списка зарегистрированных информационных баз системы 1Cv8 В отличие от 1Cv7 (
где список зарегистрированных информационных баз хранится в системном реестре (Щелкните для просмотра примеров) ):
в 1C v 8 :
список зарегистрированных информационных баз хранится в текстовом файле v8ib.lst (кодировка UTF-8)
в каталоге \Application Data\1C\1Cv8 текущего пользователя на локальном компьютере (где запускается программа 1С:Предприятие v 8).
т.е. C:\Documents and Settings\%CurrentUser%\Application Data\1C\1Cv8\v8ib.lst
в 1C v 8.1 :
список зарегистрированных информационных баз хранится в текстовом файле ibases.v8i (кодировка UTF-8)
в каталоге \Application Data\1C\1Cv81 текущего пользователя на локальном компьютере (где запускается программа 1С:Предприятие v 8).
т.е. C:\Documents and Settings\%CurrentUser%\Application Data\1C\1Cv81\ibases.v8i
Если открыть этот файл в NotePad.exe, то видно, что он имеет структуру, схожую со стандартным INI-файлом :
[База Разработки]
Conn
ect =File="F:\1C\1Cv8\DBRaz";
ID=1cd97bfa-4e57-4a23-9ee1-073a0a28e01c
OrderInList=16384
Folder=/
OrderInTree=16384
[Enterprise]
Conn
ect =File="F:\1C\1Cv8\1cv8.db\Enterprise";
ID=647840fa-65e0-44e8-ad40-12476f178b92
OrderInList=20480
Folder=/
OrderInTree=32768
в 1C v 8.2 :
список зарегистрированных информационных баз хранится в текстовом файле ibases.v8i (кодировка UTF-8)
в каталоге \Application Data\1C\1Cv8 текущего пользователя на локальном компьютере (где запускается программа 1С:Предприятие v 8).
т.е. C:\Documents and Settings\%CurrentUser%\Application Data\1C\1CEStart\ibases.v8i
Если открыть этот файл в NotePad.exe, то там:
[1C:Документооборот 8 (демо)]
Conn
ect =File="C:\Documents and Settings\E.S.Migachev\Мои документы\1C\DemoDoc8";
ID=b3b46c21-bd2a-481e-b100-e6cbdcba3e3d
OrderInList=16384
Folder=/
OrderInTree=256
External=0
ClientConn
ect ionSpeed=Normal
App=Auto
WA=1
Version=8.2
Структура хранения информации по каждой информационной базе :
<Наименование информационной базы>
<ID>
<Connect >
<Folder>
<OrderInList>
<OrderInTree>
Где:
Conn
ect - строка соединения с информационной базой,
ID - внутренний идентификатор информационной базы,
OrderInList - порядок в списке при представлении списком
Folder - наименование ветви в дереве информационных баз,
OrderInTree - порядок в ветви при представлении деревом.
В 1С 8.1 еще добавили External - но он всегда равен 0, для чего он пока не известно.
В 1С 8.2 добавлено:
ClientConn
ect ionSpeed=Normal - скорость соединения
App=Auto - тип соединения - толстый, тонкий клиент.
WA=1
Version=8.2
Вот код получения получения списка баз из файла 1С 8.0 8.1 8.2
Код 1C v 8.х
Функция ПолучимСписокБаз1СИзФайла(Версия)
// Функция получения списка баз 1С 8.0 8.1 8.2 E_Migachev
// Возвращает Таблицу Значений содержащую Название, СтрокаСоединения с базами 1С
// Для начала получим программным путем полный путь к папке Application Data
// Способ из https://helpf.pro/faq/view/271.html
App = Новый COMОбъект("Shell.Application");
AppData=App.Namespace(26).Self.Path;
ТЗБаз=Новый ТаблицаЗначений;
ТЗБаз.Колонки.Добавить("Название",,"Название",25);
ТЗБаз.Колонки.Добавить("СтрокаСоединения",,"СтрокаСоединения",30);
Если Версия = "v80" Тогда
СписокБаз=AppData+"\1C\1Cv8\v8ib.lst";
ИначеЕсли Версия = "v81" Тогда
СписокБаз=AppData+"\1C\1Cv81\ibases.v8i";
ИначеЕсли Версия = "v82" Тогда
СписокБаз=AppData+"\1C\1CEStart\ibases.v8i";
КонецЕсли;
Сообщить("Файл со списком баз: "+Строка(СписокБаз));
//Открываем файл в кодировке UTF8
ФайлБаз= Новый ЧтениеТекста;
ФайлБаз.Открыть(СписокБаз, КодировкаТекста.UTF8);
Стр = ФайлБаз.ПрочитатьСтроку();
Пока НЕ Стр = Неопределено Цикл
Если СтрДлина(СокрЛП(Стр)) Тогда
ТекущаяСтрока = СокрЛП(Стр);
Если Лев(ТекущаяСтрока, 1) = "[" Тогда
НоваяСтрока = ТЗБаз.Добавить();
НоваяСтрока.Название = ТекущаяСтрока;
КонецЕсли;
Если Лев(ТекущаяСтрока, 8) = "Connect =" Тогда
Попытка
НоваяСтрока.СтрокаСоединения = Прав(ТекущаяСтрока, СтрДлина(ТекущаяСтрока)-8);
Исключение
// Это группа
НоваяСтрока.СтрокаСоединения = "";
КонецПопытки;
КонецЕсли;
КонецЕсли;
Стр = ФайлБаз.ПрочитатьСтроку();
КонецЦикла;
//Удалим из ТЗ строки с пустой Строкой Соединения, т.к это группы, а они нам не нужны
ПустыеСтроки = ТЗБаз.НайтиСтроки(Новый Структура("СтрокаСоединения",));
Для каждого СтрокаТаблицы Из ПустыеСтроки Цикл
ТЗБаз.Удалить(СтрокаТаблицы)
КонецЦикла;
Возврат ТЗБаз;
КонецФункции
Процедура ПолучимИзФайла(Кнопка)
ТЗБаз = ПолучимСписокБаз1СИзФайла(Кнопка.Имя);
//Выведем список баз из ТЗ в табличное поле
Список=ТЗБаз;
ЭлементыФормы.Список.СоздатьКолонки();
КонецПроцедуры
Пример обработки для 1С 8.1 "Получения списка баз 1С 8.0 8.1 8.2 E_Migachev"
Скачивать файлы может только зарегистрированный пользователь!
Обработка для 1С 8.1 "Чтение списка информационных баз 1С 8.1"(формирует дерево баз) Fisca
Скачивать файлы может только зарегистрированный пользователь! Категория:
Полезные, Универсальные Функции Как из 1С написать формулу в Excel Объяснить мне сразу трудно - поэтому давайте "на пальцах"
Свежий простой пример :
вопрос " Ексель.Cells(1,3).Formula= "=СЦЕПИТЬ(E1;C7)";" "
первое на что хочу обратить внимание
те функции которые Вы видите визуально в ячейке MS EXCEL для 1С "слегка не знакомы", ей лучше озвучить имя функции на VBA
откуда Вы знаете как это функция на VBA называется ???
я Вам расскажу, немного терпения:
1. открываем новую книгу MS EXCEL
2. идем в меню Сервис - Макрос - Начать запись - Ок (появится маленькое окошко с квадратной кнопкой - его не кое случае не закрывать)
3. кликаем ячейку "С1" и пишем в ней формулу =СЦЕПИТЬ(E1;C7)
4. после этого нажимаем на квадратную кнопочку (Мы только что с Вами записали макрос на языке VBA)
5.посмотрим что получилось
идем в меню Сервис - Макрос - Макросы - (там будет в новой книге по умолчанию Макрос1) - выбираем его и нажимаем кнопку "Войти"
Поздравляю - мы попали во встроенный редактор VBA (аналог конфигурартора 1С)
и что мы видим
Код Sub Макрос1()
Range("C1").S_elect
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[2],R[6]C)"
Range("C2").S_elect
End Sub
теоритически нам нужно только
Код Range("C1").FormulaR1C1 = "=CONCATENATE(RC[2],R[6]C)"
это и будет для 1С =
Код 1C v 7.x Cells(1,3).Formula= "=СЦЕПИТЬ(E1;C7)";" "
Проверим, напишем код на любимом 1С:
Код 1C v 7.x Процедура Сформировать()
Перем Кат,Шаб;
Ехсел=СоздатьОбъект("Excel.Application");
Книга=Ехсел.Workbooks;
Если ФС.ВыбратьФайл(0,Кат,Шаб,"Выбери файл Еxcel",,"*.xls",)=1 Тогда
Книга.Open(Шаб+Кат);
Ехсел.Range("C1").FormulaR1C1 = "=CONCATENATE(RC[2],R[6]C)";
Книга.Close();
Ехсел="";
КонецЕсли;
КонецПроцедуры
все работает.
немного подумав, Вы поймете, что
Код 1C v 7.x Ехсел.Range("C1").FormulaR1C1 = "=CONCATENATE(RC[2],R[6]C)";
можно заменить на
Код 1C v 7.x Ехсел.Cells(1, 3).FormulaR1C1 = "=CONCATENATE(RC[2],R[6]C)";
и результат не изменится, а возможностей прибавится.
В MS EXCEL только амлет нельзя пожарить - возможности его одурманивают.
Tatitutu Категория:
Работа с Microsoft Office и OpenOffice Получения курса валют из Интернет Код 1C v 8.х Соединение = Новый HTTPСоединение("export.rbc.ru"); //готовим соединение
ИмяФайла = ПолучитьИмяВременногоФайла(".txt");
//строка-образец
//http://export.rbc.ru/free/cb.0/free.fcgi?period=DAILY&tickers=USD&d1=18&m1=01&y1=2009&d2=17&m2=02&y2=2009&lastdays=30&separator=TAB&data_format=BROWSER&header=1
//http://export.rbc.ru/free/cb.5/free.fcgi?period=DAILY&tickers=USDEUR_BASKET&d1=08&m1=07&y1=2009&d2=22&m2=07&y2=2009&lastdays=14&separator=TAB&data_format=BROWSER&header=1
СтрокаСоединения="/free/"+Источник+"/free.fcgi?period=DAILY&tickers="+Валюта1+"&d1="+День1+"&m1="+Месяц1+"&y1="+Год1+"&d2="+День2+"&m2="+Месяц2+"&y2="+Год2+"&separator=%7C&data_format=BROWSER";
СтрокаСоединения=СтрЗаменить(СтрокаСоединения," ","");
Попытка //соединяемся
Соединение.Получить(СтрокаСоединения,ИмяФайла);
Исключение
Сообщить("Невозможно получить курс по адресу http://export.rbc.ru"+СтрокаСоединения);
КонецПопытки;
КурсыТекст=Новый ТекстовыйДокумент; //читаем результат запроса
КурсыТекст.Прочитать(ИмяФайла);
Код 1C v 8.х // еще пример
Функция ПолучитьКакСтроку(Адресс)
соминет = Новый COMОбъект("MSXML2.XMLHTTP");
соминет.open ("GET", Адресс, Ложь);
соминет.send();
Возврат соминет.responseText;
КонецФункции
Функция ПреобразоватьДату(дат)
// Медот преобразования даты времен 1Сv7
//Т=Строка(Дат);
//Возврат Сред(Т,7,4)+"/"+Сред(Т,4,2)+"/"+Лев(Т,2);
Возврат Формат(Дат,"ДФ=""гггг/ММ/дд""");
КонецФункции
Процедура КнопкаЗагрузитьКурсы(Элемент)
//Список - список валют
Для А = 1 по Список.Количество() цикл
Если Список[а-1].Пометка тогда
Сообщить("Загружаем курсы для "+Строка(Список[а-1].Значение));
Код = Строка(Список[а-1].Значение.Код);
Дат = ПериодС;
Пока Дат <= ПериодПо цикл
Стр = ПолучитьКакСтроку("http://cbrates.rbc.ru/tsv/"+Код+"/"+ПреобразоватьДату(Дат)+".tsv");
Поз = Найти(Стр,Символы.Таб);
Если Поз = 0 Тогда
Дат = Дат + 86400;
Продолжить;
КонецЕсли;
Кратность = Число(СокрЛП(Лев(стр,Поз-1)));
курс = Число(СокрЛП(Сред(Стр,Поз+1,СтрДлина(Стр)-Поз)));
Сообщить("Дата="+Строка(Дат)+" Курс="+Строка(курс)+" Кратность="+Строка(Кратность));
Запись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
Запись.Период = Дат;
Запись.Валюта = Список[а-1].Значение.Ссылка;
Запись.Курс = Курс;
Запись.Кратность = Кратность;
Запись.Записать(Истина);
Дат = Дат + 86400;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Код 1C v 7.x // Взято с http://www.1c-club.kz IUnknown
//Небольшая обработка для получения курса валют размещенной на странице Национального Банка РК.
//Внимание: работоспособность данной обработки может быть нарушена, если дизайнеры сайта НБ РК изменят формат страницы с //официальным курсом валюта. Но не большой анализ нового формата и работоспособность обработки будет восстановлена.
// шаблон для отображаемой на форме таблице значения
перем тзПустышка;
//*******************************************
// ПриНачалеВыбораЗначения(стрНазвание, чисФлаг)
//
// Параметры:
// стрНазвание - Строка. Наименование реквизита формы инициюрующей
// вызов процедуры.
// чисФлаг - Число. Флаг станадартной обработки иницации нажатия
// кнопки выбора значения.
//
// Возвращаемое значение:
// Нет.
//
// Описание:
// Переопределенная процедура инициирующая при нажатии кнопки
// выбора значения реквизита формы.
//
процедура ПриНачалеВыбораЗначения(стрНазвание, чисФлаг)
// Если инициировали из реквизита "стрУРЛа"
если стрНазвание = "стрУРЛа" тогда
// откроем страницу с введенным URL
запуститьприложение(стрУРЛа);
конецесли;
конецпроцедуры
//*******************************************
// кнПолучить()
//
// Параметры:
// Нет
//
// Возвращаемое значение:
// Нет.
//
// Описание:
// Процедура получающая курсы валют с URL находящегося в
// строковом реквизите формы "стрУРЛа". Пытается по указаноому URL
// получить страницу и распарсить ее.
//
// ПРЕДУПРЕЖДЕНИЕ:
// В случае измения формата данных представленных на странице, возможно
// будет работать не правильно.
//
процедура кнПолучить()
// сгенирим имя файла для временного хранения содержимого
// страницы курса валют Национального банка
стрИмяФайла = каталогпользователя() + "$$$$.###";
// создадим объект XMLHttpRequest
олеХМЛ = создатьобъект("Microsoft.XMLHTTP");
// иницируем его типом запроса и нужным нам URL
олеХМЛ.Open("GET", стрУРЛа, 0);
// отправим запрос для обработки серверу
олеХМЛ.Send();
// создадим "поток" через ADODDB для работы с данными
олеАДО = создатьобъект("ADODB.Stream");
// зададим тип и режим потока
олеАДО.Mode = 3;
олеАДО.Type = 1;
// откроем его
олеАДО.Open();
// создадим объект для управления скриптами
олеШелл = создатьобъект("MSScriptControl.ScriptControl");
// установим язык сценариев
олеШелл.Language = "vbscript";
// добавим созданные объекты
олеШелл.AddObject ("oleADO", олеАДО);
олеШелл.AddObject ("oleXML", олеХМЛ);
// с помощью скрипта запишем в поток ADO данные из
// объекта XMLHttpRequest
// то есть содержимое страницы
олеШелл.Eval("oleADO.Write(oleXML.ResponseBody)");
// запишем данные во временный файл
олеАДО.SaveToFile(стрИмяФайла, 2);
// закроем данный поток
олеАДО.Close();
// для ускорения парсера занесем весь файл в строковую
// переменую с разделителем строк
// для этого инициализуруем поток установкой
// соотвествующим режимом и типом
олеАДО.Mode= 3;
олеАДО.Type = 2;
// так как страница курса валют НБК имеет формат
// символов UTF-8, то установим соотвествующий набор
олеАДО.CharSet="UTF-8";
// откроем поток
олеАДО.Open();
// загрузим содержимое нашего файла в поток
олеАДО.LoadFromFile(стрИмяФайла);
// обнулим временную строковую переменную
стрТемп = "";
// в цикле получим из потока все строки
пока олеАДО.EOS() = 0 цикл
// и запишем их во временную переменую, добавив разделитель строк
стрТемп = стрТемп + олеАДО.ReadText(-2) + разделительстрок;
конеццикла;
// закроем поток
олеАДО.Close();
// удалим временный файл
фс.УдалитьФайл(стрИмяФайла);
// найдем в строке позицию начала блока с данными о курсе
чисПозиция = найти(стрТемп, "Официальные курсы валют на");
если чисПозиция = 0 тогда
// если позиции нет ... то мы имем другую страницу
// или другой формат страницы...
предупреждение("Не получилось получить курсы валют");
иначе
// создаим временную таблицу значений
// для более шустрого заполения из-за отстуствия вызова
// функции перерисовки таблицы при изменении данных
тзТемп = создатьобъект("ТаблицаЗначений");
// установим для нее нужный формат
тзПустышка.Выгрузить(тзТемп);
// отрежем все лишнее
стрТемп = сред(стрТемп, чисПозиция);
// получим дату курса
дтКурса = дата(стрзаменить(стрполучитьстроку(стрТемп, 2), "/", "."));
// первая строка с курсом валюты находится на 18 строке от начала
// после удаления мусора
чисПозиция = 18;
// узнаем сколько всего строк в многострочке
чисКоличествоСтрок = стрколичествострок(стрТемп);
// получим строку
стрТекущая = стрполучитьстроку(стрТемп, чисПозиция);
// если в строке есть подстрока ... то значит это наверное очередная валюта
пока найти(стрТекущая, "input type=""checkbox"" name=""idval""") > 0 цикл
// добавляем новую строку
тзТемп.НоваяСтрока();
// получаем строку со смещением 1 от позиции
стрТекущая = стрполучитьстроку(стрТемп, чисПозиция + 1);
// используя фичу 1С по преобразованию, получим число
// за сколько единиц валюты имеем курс в тенге
тзТемп.Количество = число(стрТекущая);
// путем убирания "мусора" получаем наименование валюты
тзТемп.Наименование = сокрлп(стрзаменить(стрзаменить(стрТекущая, тзТемп.Количество, ""), "</td>", ""));
// получаем строку со смещением 2 от позиции
стрТекущая = стрполучитьстроку(стрТемп, чисПозиция + 2);
// убираем html мусор
стрТекущая = сокрлп(стрзаменить(стрзаменить(стрТекущая, "<td class=""gen7"" align=""center"">", ""), "</td>", ""));
// получаем код валюты
тзТемп.Код1 = лев(стрТекущая, 3);
// получаем код валюты "Тенге"
тзТемп.Код2 = прав(стрТекущая, 3);
// получаем строку со смещением 5 от позиции
стрТекущая = стрполучитьстроку(стрТемп, чисПозиция + 5);
// очищаем от мусора и преобразуем в число... получаем курс
тзТемп.Курс = число(стрзаменить(стрзаменить(стрТекущая, "<td class=""gen7"" align=""center"">", ""), "</td>", ""));
// увеличиваем позицию на 17 ...
чисПозиция = чисПозиция + 17;
если чисПозиция > чисКоличествоСтрок тогда
// если позици дальше имеющихся строк
// то все курсов больше нет
стрТекущая = "";
иначе
// получаем очередную строку для разбора
стрТекущая = стрполучитьстроку(стрТемп, чисПозиция);
конецесли;
конеццикла;
// сформированую таблицу копируем в таблицу на форме
тзТемп.Выгрузить(тзКурсов);
конецесли;
конецпроцедуры
//*******************************************
// установим значение реквизита текущим URL по которому можно получить курс валют
стрУРЛа = "http://www.nationalbank.kz/?docid=460&uid=DD54B73C-802C-E8F0-E27EDF82ECF77C1D";
// формируем формат таблицы
тзПустышка = создатьобъект("ТаблицаЗначений");
тзПустышка.НоваяКолонка("Количество", "число", 3, 0, "", 5);
тзПустышка.НоваяКолонка("Наименование", "строка", , , "Наименование", 70);
тзПустышка.НоваяКолонка("Код1", "строка", 3, , "код", 10);
тзПустышка.НоваяКолонка("Код2", "строка", 3, , "код", 10);
тзПустышка.НоваяКолонка("Курс", "число", 7, 2, "Курс", 10);
// копируем получившийся формат в таблицу на форме
тзПустышка.Выгрузить(тзКурсов);
Категория:
COM-объекты, WMI, WSH Получить статус сетевой карты(устройства), Работает или уже нет Код 1C v 7.x // Глобальная переменная в которой будем хранить
// известные нам типы статусов сетевой карты
перем сзТипСтатуса;
// Глобальная переменая
перем обШелл;
//*******************************************
// стрСтатусАдаптера(стрИмя = "")
//
// Параметры:
// стрИмя - Строка. Имя сетевой статус которой надо определить.
// В том виде как показа в сетвых подключениях.
//
// Возвращаемое значение:
// Строка. Статус заданой сетевой.
//
// Описание:
// Функция определяет статус сетевой.
//
функция стрСтатусАдаптера(стрИмя = "")
Ответ = "";
// Попытаемся получить статус через контрол скриптов
попытка
сзСтевые = создатьобъект("списокзначений");
// Выполняем скрипт. Из полученного значения пытаемся
// сформировать список значений
сзСтевые = значениеизстроки(обШелл.Run("strGetAdapterInfo"));
исключение
// По каким-то причинам выполнить скрипт не удалось
Ответ = "Статус установить не удалось";
конецпопытки;
// Если в возращаемом значение пустая строка, то скрипт
// выполнился. Можно смотреть дальше.
если Ответ = "" тогда
// Получаем индекс статуса сетевой.
стрСтатус = строка(сзСтевые.Получить(стрИмя));
// Проверяем на пустое значение индекса.
если пустоезначение(стрСтатус) = 1 тогда
// Если индекс пуст, то сетевая суказанным именем отсуствует
Ответ = "Сетевая с таким именем отсуствует";
иначе
// Ищем индекс статуса в известных нам типов статуса.
чисПозиция = сзТипСтатуса.НайтиЗначение(стрСтатус);
если чисПозиция = 0 тогда
// Не нашли. Смотрим MSDN
Ответ = "Не известный тип статуса сетевой";
иначе
// Получаем строковое представление статуса.
сзТипСтатуса.ПолучитьЗначение(чисПозиция, Ответ);
конецесли;
конецесли;
конецесли;
// Возвращаем полученный статус
возврат Ответ;
конецфункции;
//*******************************************
// Этот блок обязателен.
// Необходимо что бы он отработал до первого вызова
// функции стрСтатусАдаптера
//*******************************************
// Создаем объект для управления скриптами
обШелл = создатьобъект("MSScriptControl.ScriptControl");
// Устанавливаем рабочий язык для выполнения скриптов
обШелл.Language = "VBScript";
// Сам срипт который соберет статусы всех сетевых устройств
тхтКод = "
|function strGetAdapterInfo()
| dim objNetworkAdapter
| Answer = ""{""""СписокЗначений"""",{""
| set objWMI = getobject (""WinMgmts:\\.\Root\CIMV2"")
| set objNetworkAdapters = objWMI.ExecQuery(""S_elect * FROM Win32_NetworkAdapter"", , 48)
| for each objNetworkAdapter in objNetworkAdapters
| Answer = Answer & ""{{""""Строка"""","""""" & objNetworkAdapter.NetConnect ionStatus &_
| """"""}, """""" & objNetworkAdapter.NetConnect ionID & """""",""""0""""}""
|
| next
| Answer = Answer & ""}}""
| strGetAdapterInfo = Answer
| end function";
// Добавим наш скрипт в котрол скриптов
обШелл.AddCode(тхтКод);
// Создадим список значений в который поместим все известные нам
// виды статуса сетевых устройств.
сзТипСтатуса = создатьобъект("списокзначений");
// Поместим в список значений виды статусов их строковое представление
сзТипСтатуса.ДобавитьЗначение("0", "Отключенно");
сзТипСтатуса.ДобавитьЗначение("1", "Подключение");
сзТипСтатуса.ДобавитьЗначение("2", "Подключено");
сзТипСтатуса.ДобавитьЗначение("3", "Отключение");
сзТипСтатуса.ДобавитьЗначение("4", "Устройство не представленно");
сзТипСтатуса.ДобавитьЗначение("5", "Устройство отключено");
сзТипСтатуса.ДобавитьЗначение("6", "Устройство не исправно");
сзТипСтатуса.ДобавитьЗначение("7", "Соединение разорвано");
сзТипСтатуса.ДобавитьЗначение("8", "Аутентификация");
сзТипСтатуса.ДобавитьЗначение("9", "Аутентификация прошла успешно");
сзТипСтатуса.ДобавитьЗначение("10", "Аутентификация не прошла");
сзТипСтатуса.ДобавитьЗначение("11", "Неправильный адресс");
сзТипСтатуса.ДобавитьЗначение("12", "Требуется полномочия");
IUnknown Категория:
COM-объекты, WMI, WSH Как получить список зарегистрированных пользователей базы 1С Код 1C v 8.х Выборка = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого ЭлементМассива Из Выборка Цикл
ИмяПользователя = ЭлементМассива.Имя;
ПолноеИмяПользователя = ЭлементМассива.ПолноеИмя;
ЕстьПароль = ЭлементМассива.ПарольУстановлен;
Роли = ЭлементМассива.Роли;
Для Каждого Роль Из Роли Цикл
ИмяРоли = Роль.Имя;
КонецЦикла;
КонецЦикла;
Код 1C v 7.x // Функция возвращает список зарегистрированных для выбранной
// базы пользователей. Если пользователи не определены, список
// будет пуст.
//
функция сзПолучитьПользователей(стрПутьКБазе)
// Создаем список значений для возврата
Ответ = создатьобъект("СписокЗначений");
// Формируем полное имя файла, в котором 1С
// хранит информацию о пользователях базы.
стрИмяФайла = стрПутьКБазе + "\UsrDEF\Users.USR";
// Проверим его наличие.
если фс.СуществуетФайл(стрИмяФайла) > 0 тогда
// Создаем объект FSO для работы с файлами.
обФСО = создатьобъект("Scripting.FileSystemObject ");
// Открываем файл пользователей как текстовый.
тхтФайл = обФСО.OpenTextFile(стрИмяФайла);
// Инициализация первоначальных переменных
// Загружаем в буфер(тестовую строку) информацию из файла.
стрБуфер = "";
чисПозиция = 0;
// Перебеирать файл придеться посимвольно, так как 1С не совсеми
// символами может работать коректно если они находяться в строке.
пока тхтФайл.AtEndOfStream = 0 цикл
// Получаем очередную позицию в файле.
чисПозиция = чисПозиция + 1;
// Получаем символ из данной позиции.
стрСимв = тхтФайл.Read(1);
// Если код символа больше 31
если кодсимв(стрСимв) > 31 тогда
// Тогда добавляем его к буферу.
стрБуфер = стрБуфер + стрСимв;
конецесли;
конеццикла;
// После формирования буфера начнем искать пользователей в нем.
// Признаком для пользователя будет строка '{"UserItemType","Page.'
стрПоиска = "{""UserItemType"",""Page.";
// Получаем позицию первого пользователя.
чисПозиция = найти(стрБуфер, стрПоиска);
// Проверяем если в буфере нужная нам строка
если чисПозиция > 0 тогда
// Если есть, вырезаем из строки ненужную информацию.
стрБуфер = сред(стрБуфер, чисПозиция);
// Позиция после отрезания становиться в единицу
чисПозиция = 1;
конецесли;
// В цикле получаем информацию о пользователях БД
пока чисПозиция > 0 цикл
// Удаляем из буфера 'мусор'
стрБуфер = сред(стрБуфер, чисПозиция + 22);
// Находим признак начала информации об имени пользователя.
чисСмещение = найти(стрБуфер, """,""") + 3;
// Перемещаем начало буфера на начало информации об имени пользователя
стрБуфер = сред(стрБуфер, чисСмещение);
// Получаем имя пользователя
стрИмяПользователя = лев(стрБуфер, найти(стрБуфер, """,""") - 1);
// Добовляем имя к нашему списку.
Ответ.ДобавитьЗначение(стрИмяПользователя);
// Получаем очередную позицию информации о пользователе
чисПозиция = найти(стрБуфер, стрПоиска);
конеццикла;
конецесли;
// Возращаем полученный список значений содержащий в себе список пользователей базы
возврат Ответ;
конецфункции
еще Пример получения списка пользователей из файла users.usr Категория:
Полезные, Универсальные Функции Практическая работа с почтой (E-mail,The Bat, Outlook, Mozilla Thunderbird) Код 1C v 8.х Попытка
ОтправитьПоПочте2(ТекСтрока); // работает с Батом
Исключение
Попытка
ОтправитьПоПочте1(ТекСтрока); // работает с Аутлуком, но переспрашивает при отправке
Исключение
Сообщить_и_записать("Ошибка при отправке почты - "+ОписаниеОшибки(),СтатусСообщения.Важное);
КонецПопытки;
КонецПопытки;
Процедура ОтправитьПоПочте1(ТекСтрока)
Почта = Новый Почта;
Сообщение = Новый ПочтовоеСообщение;
//Работает с Аутглуком, но переспрашивает при отправке
//не работает с Батом 3.60
Почта.Подключиться("name@mysite.dp.ua","password");
Сообщение.Вложения.Добавить(ПолучитьИмяФайлаПодразделения(ТекСтрока.филиал.наименование));
Сообщение.Получатели.Добавить(ТекСтрока.филиал.email);
Сообщение.Тема ="Проигнорированные документы в офисе. Письмо сгенерированно роботом";
Сообщение.Текст="Проверьте, будь ласка эти документы ПОСЛЕ получения обновления из офиса. Ваши изменения в этих документах не попали в базу. Откройте прикрепленный файл";
Почта.Послать(Сообщение);
Почта.Отключиться();
УдалитьФайлы(ПолучитьИмяФайлаПодразделения(ТекСтрока.филиал.наименование));
КонецПроцедуры
Процедура ОтправитьПоПочте2(ТекСтрока)
ПочтовыйПрофиль = Новый ИнтернетПочтовыйПрофиль;
ПочтовыйПрофиль.АдресСервераPOP3 = "pop3.mysite.dp.ua";
ПочтовыйПрофиль.АдресСервераSMTP = "smtp.mysite.dp.ua";
ПочтовыйПрофиль.ПортSMTP = 25;
ПочтовыйПрофиль.ПортPOP3 = 110;
ПочтовыйПрофиль.Пользователь = "name";
ПочтовыйПрофиль.Пароль = "password";
ПочтовыйПрофиль.ВремяОжидания = 60;
Сообщение = Новый ИнтернетПочтовоеСообщение ;
Сообщение.Вложения.Добавить(ПолучитьИмяФайлаПодразделения(ТекСтрока.филиал.наименование));
Сообщение.Получатели.Добавить(ТекСтрока.филиал.email);
Сообщение.Тема ="Проигнорированные документы в офисе. Письмо сгенерированно роботом";
Сообщение.ИмяОтправителя="Обмен";
Сообщение.Отправитель="name@mysite.dp.ua";
Текст = Сообщение.Тексты.Добавить("Проверьте, будь ласка эти документы ПОСЛЕ получения обновления из офиса. Ваши изменения в этих документах не попали в базу. Откройте прикрепленный файл");
Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;
Почта = Новый ИнтернетПочта();
Почта.Подключиться(ПочтовыйПрофиль);
Почта.Послать(Сообщение);
Почта.Отключиться();
УдалитьФайлы(ПолучитьИмяФайлаПодразделения(ТекСтрока.филиал.наименование));
КонецПроцедуры
А вот так 1с работает с Мозилой Сундербердом (который хорошо поддерживает IMAP):
Код 1C v 8.х ПутьМозиллы = """C:/Program Files/Mozilla Thunderbird/thunderbird.exe""";
Текст = Новый ЗаписьТекста(КаталогОбмена + "sendfiletofilial"+Строка(ТекСтрока.филиал.наименование)+".bat", КодировкаТекста.OEM);
Текст.ЗаписатьСтроку("@echo off");
Текст.ЗаписатьСтроку("@echo Отправка проигнорированных писем на филиал"+Строка(ТекСтрока.филиал.наименование));
СтрокаЗапуска = " -compose to='"+ТекСтрока.филиал.email+"',cc='name@mysite.dp.ua',subject =""Проигнорированные документы в офисе. Письмо сгенерированно роботом"",body=""Проигнорированные документы в офисе. Письмо сгенерированно роботом"",attachment=""file://";
Файл = """"+ПолучитьИмяФайлаПодразделения(ТекСтрока.филиал.наименование)+"""";
Текст.ЗаписатьСтроку(ПутьМозиллы+СтрокаЗапуска +Файл);
Текст.ЗаписатьСтроку("del "+Файл);
Текст.Закрыть();
ЗапуститьПриложение(КаталогОбмена + "sendfiletofilial"+Строка(ТекСтрока.филиал.наименование)+".bat",КаталогОбмена)
Получение почты
Код 1C v 8.х
Процедура КнопкаВыполнитьНажатие(Кнопка)
Почта = Новый ИнтернетПочта;
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераPOP3 = "192.168.0.2";
Профиль.Пользователь = "romix";
Профиль.Пароль = "ТутНапишитеПароль";
Почта.Подключиться(Профиль);
МассивПисем = Почта.Выбрать(Ложь);
Для Каждого Письмо из МассивПисем Цикл
Сообщить("Получено письмо с заголовоком: "+Письмо.Тема);
Для Каждого Вложение из Письмо.Вложения Цикл
Сообщить("Вложение: "+Вложение.ИмяФайла);
Вложение.Данные.Записать("c:\tempdata\"+Вложение.ИмяФайла);
КонецЦикла;
Для Каждого Текст из Письмо.Тексты Цикл
Сообщить("Текст: "+Текст.Текст);
Текст.Данные.Записать("c:\tempdata\ТекстСообщения.txt");
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Автор: 1CLama
Категория:
Работа с Интернет, Почтой (Mail), FTP Как получить высоту картинки, изображения, локально и в интернет. Код 1C v 7.x Шелл=СоздатьОбъект("Shell.Application");
Место=Шелл.NameSpace(Путь);
Сообщить(Место.GetDetailsOf(Место.ParseName(Файл),26));
А если картинка на интерне сайте, и нужно узнать ее высоту, то:
Код 1C v 7.x ИЕ=CreateObject ("InternetExplorer.Application");
ИЕ.Navigate("Aboutblank"); // нужно AboutДВОЕТОЧИЕblank добавить в надежные узлы
Док=ИЕ.document;
Док.write("<img id=img src=file:"+Каталог+ИмяКартинки+">");
Результат = Док.getElementById("img").height;
//Или такой вариант:
Текст=СоздатьОбъект("Текст");
Текст.ДобавитьСтроку("<img id=img src='file://"+Путь+Файл+"' >");
Времянка=КаталогВременныхФайлов()+_GetPerformanceCounter()+".html";
Текст.Записать(Времянка);
ИЕ=CreateObject ("InternetExplorer.Application");
ИЕ.Navigate(Времянка);
Пока ИЕ.ReadyState<4 Цикл
КонецЦикла;
Док=ИЕ.document;
Сообщить(Док.getElementById("img").height);
Категория:
COM-объекты, WMI, WSH