Как вывести всплывающее сообщение пользователю? В 8.2 нужно воспользоваться функцией ПоказатьОповещениеПользователя
Код 1C v 8.2 УП ПоказатьОповещениеПользователя("Документ не записан!",
"http://doc.ru",
"О правилах заполнения документа, читайте здесь!",
БиблиотекаКартинок.Важно);
Код 1C v 8.х #Если Клиент Тогда
Форма = Источник.ПолучитьФорму();
Если Форма.Открыта() Тогда
ПоказатьОповещениеПользователя("Ошибка", ПолучитьНавигационнуюСсылку(Источник.Ссылка), "Не указана организация. Невозможно распределить платежи по документам расчетов с контрагентом", БиблиотекаКартинок.Ошибка32);
КонецЕсли;
#КонецЕсли
В 7.7 и 8.1 всплывающие окна отсутствуют, но это легко решается использованием:
Код 1C v 7.x WshShell=СоздатьОбъект("WScript.Shell");
WshShell.Popup("Текст сообщения",,"Текст заголовка",20);
или внешних компанент, например:
MiracleV8: Универсальная компонента для 1С 7.7 и 1С 8.x
[Tray1C] Сворачивание 1С в системный трей
Вывод иконки с восклицательным знаком в трей! Используя
AutoHotkey :
Код 1C v 8.х //Процедура выводит или убирает сообщение мессенджера и иконку, в зависимости от бПарам
Процедура ВывестиСообщениеМессенджера(бПарам = Истина) Экспорт
#Если Клиент Тогда
сКаталог = СокрЛП(Константы.КаталогПолногоДоступа.Получить())+"БП\MessageService";
ИмяФайла = сКаталог + "\autohotkey.exe";
Файл = Новый Файл(ИмяФайла);
ИмяФайлаИНИ = сКаталог + "\autohotkey.ini";
Если бПарам Тогда
ИмяФайлаИНИ_Задачи = сКаталог + "\autohotkey_Yes.ini";
Иначе
ИмяФайлаИНИ_Задачи = сКаталог + "\autohotkey_No.ini";
КонецЕсли;
ФайлИНИ_Задачи = Новый Файл(ИмяФайлаИНИ_Задачи);
Если Файл.Существует() И ФайлИНИ_Задачи.Существует() Тогда
Попытка
КопироватьФайл(ИмяФайлаИНИ_Задачи,ИмяФайлаИНИ);
ЗапуститьПриложение(ИмяФайла, сКаталог);
Если бПарам Тогда
ПараметрыСеанса.бСостояниеМессенджера = Истина;
Иначе
ПараметрыСеанса.бСостояниеМессенджера = Ложь;
КонецЕсли;
Исключение
КонецПопытки;
КонецЕсли;
#КонецЕсли
КонецПроцедуры
Категория:
Встроенные Функции Загрузка Dbf-файлов с длиной имени больше 8 символов Во время написания обработки чтения dbf файла столкнулся с проблемой: длина имени файла больше 8-ми символов. Вот так решил проблему:
Код 1C v 8.х Процедура ПрочитатьФайлНажатие(Элемент)
//Получаем объект Файл
НашФайл = Новый Файл(ИмяФайла);
//Получаем первые 8-мь симовол имени нашего исходного файла
НашеИмяФайла = Лев(НашФайл.ИмяБезРасширения,8)+".dbf";
//Копируем наш исходный файл во временный каталог с нормальным именем
НашПолныйПутьФайла = КаталогВременныхФайлов()+НашеИмяФайла;
КопироватьФайл(ИмяФайла,НашПолныйПутьФайла);
//Работа с dbf файлом
ФайлДБФ = Новый XBase;
ФайлДБФ.Кодировка = КодировкаXBase.OEM;
ФайлДБФ.ОткрытьФайл(НашПолныйПутьФайла);
ФайлДБФ.Первая();
Пока Не ФайлДБФ.ВКонце() Цикл
НомерЗаказаКонтрагента = СокрЛП(ФайлДБФ.ПолучитьЗначениеПоля("MSG"));
СуммаВФайле = СокрЛП(ФайлДБФ.ПолучитьЗначениеПоля("PAYSUM"));
//Обрабатываем запись dbf файла
ФайлДБФ.Следующая();
КонецЦикла;
ФайлДБФ.ЗакрытьФайл();
КонецПроцедуры
Категория:
XML, DBF, TXT, CSV Краткий пример работы с OpenOffice.org Writer и Microsoft Office Word Обработка демонстрирует простейший пример работы с 2-мя текстовыми процессорами - OpenOffice.org Writer и Microsoft Office Word. Нужно запустить файл обработки, в качестве шаблона она будет использовать файл "Primer.doc", который находится в одном каталоге с обработкой:
Скачивать файлы может только зарегистрированный пользователь!
Файл Шаблона - Primer.doc:
От: {Организация}
Кому: {Контрагент}
Ждем акт сверки взаиморасчетов!
Директор /{Директор}/
Необходимо заменить в шаблоне ключевые слова в скобках {}, на указанные значения, вот примерный код обработки:
Код 1C v 7.x
//рдТаблицаЗамен - Таблица значений:
// {Организация} ООО "Контора"
// {Контрагент} ООО "Должник"
// {Директор} Дядя Вася
ПечатьИзШаблона(рдТаблицаЗамен, "Primer.doc");
// Функция преобразует Windows имя файла в URL OpenOffice
Функция ПреобразоватьВURL(ИмяФайла)
Возврат "file:///" + СтрЗаменить(ИмяФайла, "\", "/");
КонецФункции
Функция ОбработкаФайлаШаблона(ИмяШаблона) Экспорт
ИмяФайла = КаталогВременныхФайлов() + "doc.tmp";
Путь = ""; Имя = "";
ФайлОбработки = РасположениеФайла(Путь, Имя);
КаталогШаблонов = Путь;
ПолноеИмяШаблона = КаталогШаблонов + ИмяШаблона;
РезультатОбработки = 0;
// Проверка на существование
ЕстьШаблон = 0;
Если ФС.СуществуетФайл(КаталогШаблонов + ИмяШаблона) = 0 Тогда
Сообщить("Файл " + ИмяШаблона + " не найден в каталоге шаблонов печатных форм! Обратитесь к системному администратору!", "!!!");
Иначе
ЕстьШаблон = 1;
КонецЕсли;
// Копирование во временный каталог
Если ЕстьШаблон = 1 Тогда
ФС.КопироватьФайл(ПолноеИмяШаблона, ИмяФайла, 0);
КонецЕсли;
// Проверка копирования
Если ФС.СуществуетФайл(ИмяФайла) = 1 Тогда
РезультатОбработки = 1;
Иначе
Сообщить("Не удалось скопировать шаблон во временный файл.");
КонецЕсли;
Возврат РезультатОбработки;
КонецФункции
Процедура ОткрытьТекстовыйПроцессор(ИмяФайла, ТаблицаЗамен)
ТекПроцессор = рдТекстовыйПроцессор.ПолучитьЗначение(рдТекстовыйПроцессор.ТекущаяСтрока());
Если ТекПроцессор = "OOoWriter" Тогда
// Открыть OpenOffice
ServiceManager = СоздатьОбъект("com.sun.star.ServiceManager");
Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop");
Scr = СоздатьОбъект("MSScriptControl.ScriptControl");
Scr.Language="javascript";
Scr.Eval("Args=new Array()");
Args = Scr.Eval("Args");
Scr.AddObject("ServiceManager", ServiceManager);
// Откроем шаблон
ТекстовыйПроцессор = Desktop.LoadComponentFromURL(ПреобразоватьВURL(ИмяФайла), "_blank", 0, Args);
// Заменяем ключевые поля на нужные значения
Replace = ТекстовыйПроцессор.CreateReplaceDescriptor();
Для x=1 По ТаблицаЗамен.КоличествоСтрок() Цикл
Replace.SearchString = ТаблицаЗамен.ПолучитьЗначение(x, 1);
Replace.ReplaceString = ТаблицаЗамен.ПолучитьЗначение(x, 2);
ТекстовыйПроцессор.ReplaceAll(Replace);
КонецЦикла;
Иначе
// Открываем MS Office Word
Попытка
ТекстовыйПроцессор = СоздатьОбъект("Word.Application");
Исключение
Сообщить("Не удалось создать объект Microsoft Office Word!", "!!!");
Возврат;
КонецПопытки;
// Открываем шаблон
ТекстовыйПроцессор.Visible = 0;
ТекстовыйПроцессор.Documents.Open(ИмяФайла,, -1);
Fnd = ТекстовыйПроцессор.ActiveDocument.Range().Find;
Fnd.ClearFormatting();
Fnd.Forward = -1;
// Заменяем ключевые поля на нужные значения
ТаблицаЗамен.ВыбратьСтроки();
Пока ТаблицаЗамен.ПолучитьСтроку() = 1 Цикл
Fnd.Execute(ТаблицаЗамен.Найти,,,,,,,,, ТаблицаЗамен.Заменить, 2);
КонецЦикла;
ТекстовыйПроцессор.Visible = -1;
ТекстовыйПроцессор.Activate();
КонецЕсли;
КонецПроцедуры
//*****************************************************************************
Процедура ПечатьИзШаблона(ТаблицаЗамен, ИмяФайлаШаблона) Экспорт
// Проверим, есть ли нужный шаблон
Если ОбработкаФайлаШаблона(ИмяФайлаШаблона) = 0 Тогда
Возврат;
КонецЕсли;
ИмяФайла = КаталогВременныхФайлов() + "doc.tmp";
// Открываем в текстовом процессоре файл шаблона
ОткрытьТекстовыйПроцессор(ИмяФайла, ТаблицаЗамен);
КонецПроцедуры
Категория:
Работа с Microsoft Office и OpenOffice Функция копирования файла с выводом сообщений о результатах Код 1C v 8.х //Возвращает Истина - скопирован, иначе Ложь
Функция СкопироватьФайл(ИмяФайлаИсточник, ИмяФайлаНазначение, ВыдаватьСообщения = Ложь) Экспорт
Попытка
ПозицияСимвола = СтрДлина(ИмяФайлаНазначение);
Пока ПозицияСимвола >= 1 Цикл
Если Сред(ИмяФайлаНазначение, ПозицияСимвола, 1) = "\" Тогда
Возврат ПозицияСимвола;
КонецЕсли;
ПозицияСимвола = ПозицияСимвола - 1;
КонецЦикла;
КаталогФайла=Сред(ИмяФайлаНазначение, 1, ПозицияСимвола - 1);
СоздатьКаталог(КаталогФайла);
КопироватьФайл(ИмяФайлаИсточник, ИмяФайлаНазначение);
Исключение
Сообщение = "Ошибка при копировании: " + ОписаниеОшибки() +
" (источник: " + ИмяФайлаИсточник + "; приемник: " + ИмяФайлаНазначение + ")";
Если ВыдаватьСообщения Тогда
Сообщить(Сообщение);
КонецЕсли;
Предупреждение(Сообщение);
Возврат Ложь;
КонецПопытки;
Возврат Истина;
КонецФункции
Категория:
Работа с Файлами и Каталогами