Получение данных для расчета и Расчет Собственно процесс расчета записей каждого поднабора состоит в получении всех необходимых данных для расчета каждой записи и вычислении значений ресурсов этой записи по формуле, определяемой способом расчета данной записи. Например, для расчета записи об окладе нужно будет получить данные графика этой записи, для расчета премии необходимо будет рассчитать базу и так далее.
Ниже приведен пример процедуры, осуществляющей расчет набора записей одного приоритета. Для каждой записи при помощи функции
ПолучитьДанныеДляРасчета() возвращается структура данных, которая передается в процедуру РассчитатьЗапись().
Расчет набора записей одного приоритета
Код 1C v 8.х Процедура РассчитатьНаборЗаписей(НаборЗаписей, Приоритет, ТабличнаяЧасть = Неопределено)
Иначе
СтруктураДанных.Вставить("ОтработаноВремени", 0); СтруктураДанных.Вставить("НормаВремени", 0);
Для каждого Запись из НаборЗаписей Цикл
Если Запись.ВидРасчета.Приоритет = Приоритет Тогда
// Получить данные для расчета записи.
ДанныеДляРасчета = ПолучитьДанныеДляРасчета(Запись);
// Вызвать процедуру расчета записи. РассчитатьЗапись(Запись, ДанныеДляРасчета);
// Возвратить результат расчета в табличную часть документа. Если Не ТабличнаяЧасть = Неопределено Тогда
СтрокаТабличнойЧасти = ТабличнаяЧасть.Получить(Запись.НомерСтроки-1); СтрокаТабличнойЧасти.Результат = Запись.Результат;
КонецЕсли; КонецЕсли;
КонецЦикла;
КонецПроцедуры
В функции ПолучитьДанныеДляРасчета() должны быть прописаны алгоритмы, при помощи которых можно получить данные для расчета записи с любым способом расчета, существующим в конфигурации. Ниже приведен пример функции, которая получает данные для трех способов расчета:
Получение данных для трех видов расчета
Код 1C v 8.х Функция ПолучитьДанныеДляРасчета(Запись)
СпособРасчета = Запись.ВидРасчета.СпособРасчета; СтруктураДанных = Новый Структура;
Если СпособРасчета = Перечисления.СпособыРасчета.ПоМесячнойСтавке Тогда
// Получить данные графика.
Запрос = Новый Запрос("
|ВЫБРАТЬ
| ДанныеГрафика.ЗначениеФактическийПериодДействия КАК ГрафикФакт,
| ДанныеГрафика.ЗначениеПериодДействия КАК ГрафикНорма
|ИЗ
| РегистрРасчета.ОсновныеНачисленияРегл.ДанныеГрафика(
| Регистратор = &Регистратор
| И НомерСтроки = &НомерСтроки)
КАК ДанныеГрафика");
Запрос.УстановитьПараметр("Регистратор", Запись.Регистратор); Запрос.УстановитьПараметр("НомерСтроки", Запись.НомерСтроки);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
СтруктураДанных.Вставить("ОтработаноВремени", Выборка.ГрафикФакт);
СтруктураДанных.Вставить("НормаВремени", Выборка.ГрафикНорма);
КонецЕсли;
ИначеЕсли
СпособРасчета = Перечисления.СпособыРасчета.ПроцентомОтБазы Тогда
Запрос = Новый Запрос("
|ВЫБРАТЬ
| База.РезультатБаза
|ИЗ
| РегистрРасчета.ОсновныеНачисленияРегл.БазаОсновныеНачисленияРегл(
| &Измерения, &Измерения, ,
| Регистратор = &Регистратор
| И НомерСтроки = &НомерСтроки) КАК База");
Измерения = Новый Массив(2); Измерения[0] = "ФизЛицо"; Измерения[1] = "Организация";
Запрос.УстановитьПараметр("Регистратор", Запись.Регистратор);
Запрос.УстановитьПараметр("НомерСтроки", Запись.НомерСтроки);
Запрос.УстановитьПараметр("Измерения", Измерения);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
СтруктураДанных.Вставить("База", Выборка.РезультатБаза);
Иначе
СтруктураДанных.Вставить("База", 0);
КонецЕсли;
ИначеЕсли СпособРасчета = Перечисления.СпособыРасчета.ПоСдельнойВыработке Тогда
// Получить данные регистра накопления
// фактическая выработка за период действия записи.
Запрос = Новый Запрос("
|ВЫБРАТЬ
| СУММА(СдельнаяВыработкаОбороты.ВыработкаОборот) КАК ВыработкаОборот
|ИЗ
| РегистрНакопления.СдельнаяВыработка.Обороты(
| &ДатаНачало, &ДатаКонец, ,
| Организация = &Организация И ФизЛицо = &ФизЛицо)
| КАК СдельнаяВыработкаОбороты");
Запрос.УстановитьПараметр("ДатаНачало", НачалоДня(Запись.ПериодДействияНачало));
Запрос.УстановитьПараметр("ДатаКонец", КонецДня(Запись.ПериодДействияКонец));
Запрос.УстановитьПараметр("ФизЛицо", Запись.ФизЛицо); Запрос.УстановитьПараметр("Организация", Запись.Организация);
Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда
СтруктураДанных.Вставить("Выработка", Выборка.ВыработкаОборот);
Иначе
СтруктураДанных.Вставить("Выработка", 0); КонецЕсли;
КонецЕсли;
Возврат СтруктураДанных;
КонецФункции // ПолучитьДанныеДляРасчета
В данном случае для расчета записей со способом ПоМесячнойСтавке система получит данные графика за период действия и фактический период действия, для способа ПроцентомОтБазы будет получена расчетная база записи, а для способа ПоСдельнойВыработке будут рассчитаны обороты по соответствующему регистру накопления за интервал периода действия записи. Способ расчета ФиксированнойСуммой не требует получения данных.
Функция ПолучитьДанныеДляРасчета() возвращает структуру, содер- жащую различные поля в зависимости от способа расчета, применяемого в данной записи
Расчет значений ресурсов записи
После того как данные для расчета получены, необходимо прописать в модуле формулу для заполнения реквизитов каждой записи в соответствии со способом расчета. В данном случае эту функцию выполняет процедура РассчитатьЗапись(). В процедуре РассчитатьЗапись() для каждого возмож- ного способа расчета описывается формула,
позволяющая из реквизитов записи и полученных данных рассчитать значения ресурсов этой записи.
Процедура расчета записей
Код 1C v 8.х Процедура РассчитатьЗапись(Запись, ДанныеДляРасчета) СпособРасчета = Запись.ВидРасчета.СпособРасчета;
Если СпособРасчета = Перечисления.СпособыРасчета.ПоМесячнойСтавке Тогда
Если Не ДанныеДляРасчета.НормаВремени = 0 Тогда
Результат = Запись.Размер * ДанныеДляРасчета.ОтработаноВремени / ДанныеДляРасчета.НормаВремени;
Иначе
Результат = 0; КонецЕсли;
ИначеЕсли
СпособРасчета = Перечисления.СпособыРасчета.ПроцентомОтБазы Тогда
Результат = Запись.Размер * ДанныеДляРасчета.База / 100;
ИначеЕсли
СпособРасчета = Перечисления.СпособыРасчета.ФиксированнойСуммой Тогда
Результат = Запись.Размер;
ИначеЕсли
СпособРасчета = Перечисления.СпособыРасчета.ПоСдельнойВыработке Тогда
Результат = ДанныеДляРасчета.Выработка; КонецЕсли;
Запись.Результат = Результат * ?(Запись.Сторно, -1, 1);
КонецПроцедуры // Рассчитать запись
При расчете записей следует учитывать, что сторно-записи рассчитываются в общем порядке. Поэтому в ресурсы сторно-записи должно попадать отрицательное значение результата расчета. Например, сторно- запись отменяет начисленный оклад за период 5 дней. При расчете такой записи по формуле система получит сумму оклада за 5 дней, например, 1200 руб. В ресурс сторно-записи в этом случае должно быть записано значение -1200.
Категория:
Регистры расчета Сохранение реквизитов и табличных частей объектов в XML Сохранение производится процедурой СохранитьРеквизитыИТабличныеЧасти. В качестве параметров она принимает сохраняемый объект и имя файла. Ссылочные реквизиты сохраняются в виде GUID.
Код 1C v 8.х Процедура СохранитьРеквизитыИТабличныеЧасти (Объект, ИмяФайлаXML=Неопределено) Экспорт
ФайлXML = Новый ЗаписьXML;
ФайлXML.ОткрытьФайл(ИмяФайлаXML);
ФайлXML.ЗаписатьОбъявлениеXML();
ФайлXML.ЗаписатьНачалоЭлемента("Root");
ФайлXML.ЗаписатьАтрибут("Объект",Объект.Метаданные().Имя);
//Сохраняем реквизиты
Для Каждого Реквизит Из Объект.Метаданные().Реквизиты Цикл
ФайлXML.ЗаписатьНачалоЭлемента("Реквизит");
ФайлXML.ЗаписатьАтрибут("Имя", Реквизит.Имя);
ТипЗначения = ТипЗнч(Объект[Реквизит.Имя]);
Если Не ТипЗначения = Тип("Неопределено") Тогда
ФайлXML.ЗаписатьАтрибут("ИмяТипа", XMLТип(ТипЗначения).ИмяТипа);
ФайлXML.ЗаписатьАтрибут("URI", XMLТип(ТипЗначения).URIПространстваИмен);
КонецЕсли;
ФайлXML.ЗаписатьТекст(XMLСтрока(Объект[Реквизит.Имя]));
ФайлXML.ЗаписатьКонецЭлемента();
КонецЦикла;
//Сохраняем табличные части
Для Каждого ТЧ из Объект.Метаданные().ТабличныеЧасти Цикл
ФайлXML.ЗаписатьНачалоЭлемента("ТабличнаяЧасть");
ФайлXML.ЗаписатьАтрибут("Имя", ТЧ.Имя);
Для Каждого СтрокаТЧ из Объект[ТЧ.Имя] Цикл
ФайлXML.ЗаписатьНачалоЭлемента("ЭлементКоллекции");
Для Каждого РеквизитТЧ Из ТЧ.Реквизиты Цикл
ФайлXML.ЗаписатьНачалоЭлемента("Реквизит");
ФайлXML.ЗаписатьАтрибут("Имя", РеквизитТЧ.Имя);
ТипЗначения = ТипЗнч(СтрокаТЧ[РеквизитТЧ.Имя]);
Если Не ТипЗначения = Тип("Неопределено") Тогда
ФайлXML.ЗаписатьАтрибут("ИмяТипа", XMLТип(ТипЗначения).ИмяТипа);
ФайлXML.ЗаписатьАтрибут("URI", XMLТип(ТипЗначения).URIПространстваИмен);
КонецЕсли;
ФайлXML.ЗаписатьТекст(XMLСтрока(СтрокаТЧ[РеквизитТЧ.Имя]));
ФайлXML.ЗаписатьКонецЭлемента();
КонецЦикла;
ФайлXML.ЗаписатьКонецЭлемента();
КонецЦикла;
ФайлXML.ЗаписатьКонецЭлемента();
КонецЦикла;
Если Не ФайлXML=Null Тогда
ФайлXML.ЗаписатьКонецЭлемента();
ФайлXML.Закрыть();
КонецЕсли;
КонецПроцедуры
За чтение объекта отвечают процедуры ЗагрузитьРеквизитыИТабличныеЧасти и ЗагрузитьОбъектРекурсивно. Чтобы прочитать объект вызывается первая, ей передаются объект, который необходимо заполнить, и имя файла. Вторая является вспомогательной.
Код 1C v 8.х Процедура ЗагрузитьРеквизитыИТабличныеЧасти(Объект, ИмяФайлаXML=Неопределено) Экспорт
Если Не ИмяФайлаXML = Неопределено Тогда
ФайлXML = Новый ЧтениеXML;
ФайлXML.ОткрытьФайл(ИмяФайлаXML);
Пока ФайлXML.Прочитать() Цикл
Если ФайлXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ЗагрузитьОбъектРекурсивно(ФайлXML, Объект, ФайлXML.Имя);
КонецЕсли
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура ЗагрузитьОбъектРекурсивно(ФайлXML, Объект, знач ИмяУзла)
ИмяТипа = "";
ПространствоИмен = "";
Пока ФайлXML.ПрочитатьАтрибут() Цикл
Если ФайлXML.Имя = "ИмяТипа" Тогда
ИмяТипа = ФайлXML.Значение;
ИначеЕсли ФайлXML.Имя = "URI" Тогда
ПространствоИмен = ФайлXML.Значение;
КонецЕсли;
КонецЦикла;
Пока ФайлXML.Прочитать() Цикл
Если ФайлXML.ТипУзла = ТипУзлаXML.КонецЭлемента И ФайлXML.Имя = ИмяУзла Тогда
Возврат;
ИначеЕсли ФайлXML.ТипУзла = ТипУзлаXML.Текст Тогда
ТипОбъекта = ИзXMLТипа(ИмяТипа, ПространствоИмен);
Если НЕ ТипОбъекта = Неопределено тогда
Объект = XMLЗначение(ТипОбъекта, ФайлXML.Значение);
КонецЕсли;
ИначеЕсли ФайлXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ИмяТекУзла = ФайлXML.Имя;
Если ФайлXML.Имя = "ЭлементКоллекции" Тогда
ЗагрузитьОбъектРекурсивно(ФайлXML, Объект.Добавить(), ИмяТекУзла);
Иначе
Если ФайлXML.ПрочитатьАтрибут() Тогда
ЗагрузитьОбъектРекурсивно(ФайлXML, Объект[ФайлXML.Значение], ИмяТекУзла);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
В приложенном файле -
Скачивать файлы может только зарегистрированный пользователь! - демонстрационная обработка,
позволяющая сохранить ссылочный объект БД в файл и заполнить объект из файла. Заполняемый объект должен быть того же типа, что и сохраненный, а также он должен быть предварительно создан, сохранен в ИБ и выбран в поле "Ссылка".
Категория:
Документы Выгрузка в PDF из 1С (Средствами OpenOffice) Возникла задача отправлять счета почтой. PDFcreator не подошёл поскольку не удалось вместить счёт на одну страницу по ширине. Решил попробовать OpenOffice. Как сохранять в PDF нашёл быстро, а вот как уместить счёт на одну страницу вширь искал долго.
В версии 1С 8.2.232 появилась возможность сохранять табличный документ в xls файл на сервера под линуксом. А вот работать с Опеном офисом из-под линукса пока не получается. Собственно комментари ненужны. Вот весь код. Самое интересное это бодание со стилями страниц в Опене Офисе. Жаль что этот фрагмент работает только на клиенте. На сервере вопрос не решается *08
Код 1C v 8.2 УП Процедура КнопкаВыполнитьНажатие(Кнопка)
Если Письмо.Основание.Пустая() Тогда
Возврат
КонецЕсли;
// Открыть OpenOffice
Попытка
ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager");
Исключение
Возврат // опен офис не установлен :-(
КонецПопытки;
// получим печатную форму и запишем её во временный XLS файл
Заказ = Письмо.Основание.ПолучитьОбъект();
//Получим печатную форму
Расшифровка=Новый Структура;
Расшифровка.Вставить("СсылкаНаВнешнююОбработку",Константы.ПФСчетаДляКлиента.Получить());
Расшифровка.Вставить("ВидПечатнойФормы",Перечисления.ВидыДополнительныхВнешнихОбработок.ПечатнаяФорма);
Расшифровка.Вставить("НомерСтроки",1);
тд = УниверсальныеМеханизмы.НапечататьВнешнююФорму(Заказ, Расшифровка);
ВременныйФайл =ПолучитьИмяВременногоФайла();
ВременныйФайлXLS =ВременныйФайл + ".xls";
ВременныйФайлPDF =ВременныйФайл + ".pdf";
тд.Записать(ВременныйФайлXLS, ТипФайлаТабличногоДокумента.XLS97);
// Преобразовываем временный xls файл В PDF
Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop");
НастройкиОткрытия = Новый COMSafeArray("VT_VARIANT", 1);
PropertyValue = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
PropertyValue.Name = "Hidden";
PropertyValue.Value = Истина;
НастройкиОткрытия.SetValue(0, PropertyValue);
ВременныйФайлXLS_какУРЛ = "file:///" + СтрЗаменить(ВременныйФайлXLS, "\", "/"); // приводим путь к файлу из виндового формата в опен офисный
// Откроем файл в опене офисе
ОпенОфис = Desktop.LoadComponentFromURL(ВременныйФайлXLS_какУРЛ, "_blank", 0, НастройкиОткрытия);
//ПараметрыСтраницы = ОпенОфис.createInstance("com.sun.star.style.PageStyle");
//ПараметрыСтраницы.ScaleToPagesX = 1;
//
// Установим масштаб, чтобы счёт помещался на одной странице вширь
// страниц почему-то много, поэтому устанавливаем масштаб для всех
Стили = ОпенОфис.StyleFamilies.getByName("PageStyles");
Для поз = 0 по Стили.count - 1 Цикл
МойСтиль = Стили.getByIndex(поз);
МойСтиль.ScaleToPagesX = 1; // уместить на одной странице вширь
//МойСтиль.PageScale = 50; // масштаб 50%
КонецЦикла;
НастройкиСохранения = Новый COMSafeArray("VT_VARIANT", 1);
PropertyValue = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
PropertyValue.Name = "FilterName";
PropertyValue.Value = "calc_pdf_Export";
НастройкиСохранения.SetValue(0, PropertyValue);
ВременныйФайлPDF_какУРЛ = "file:///" + СтрЗаменить(ВременныйФайлPDF, "\", "/"); // приводим путь к файлу из виндового формата в опен офисный
ОпенОфис.storeToURL(ВременныйФайлPDF_какУРЛ, НастройкиСохранения); // сохранили PDF файл
ОпенОфис.close(-1);
ОпенОфис = Неопределено;
// С опеном офисом разобрались. Прикрепляем вложение к письму и удаляем временные файлы.
//Файл = Новый Файл(ВременныйФайлPDF);
объектПисьмо = Письмо.ПолучитьОбъект();
стрВложение = объектПисьмо.Вложения.Добавить();
стрВложение.ИмяФайла = "Счёт " + Строка(Заказ.Номер) + ".pdf";
стрВложение.Файл = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ВременныйФайлPDF));
объектПисьмо.Записать();
Попытка
УдалитьФайлы(ВременныйФайлXLS);
УдалитьФайлы(ВременныйФайлPDF);
Исключение
КонецПопытки;
КонецПроцедуры
Автор:
Трактор
Функция
позволяющая выполнить выгрузку табличного документа в PDF средствами OpenOffice
Код 1C v 8.х // Функция превращает табличный документ в PDF документ
// Возвращаемое значение: тип "Строка" - имя созданного PDF файла, 0 - в случае ошибки
// Параметры: ДанныеВыгрузки - Табличный или текстовый документ, который нужно выгрузить в PDF
// ПутьВыгрузки - тип "Строка", путь для сохраниения PDF файла (без имени и расширения файла)
// ИмяФайлаБезРасширения - тип "Строка", имя для вновь сформированного PDF файла
// Тестировалось на OpenOffice 3.x
Функция ВыгрузитьТабличныйДокументВPDF(ДанныеВыгрузки, ПутьВыгрузки, ИмяФайлаБезРасширения)
Если НЕ ЗначениеЗаполнено(ПутьВыгрузки) Тогда
ПутьВыгрузки = КаталогВременныхФайлов();
КонецЕсли;
ПутьВыгрузки = ?(Прав(ПутьВыгрузки, 1) = "\", ПутьВыгрузки, ПутьВыгрузки + "\");
РасширениеXSL = ".xls";
РасширениеPDF = ".pdf";
ПолноеИмяФайлаXLS = ПутьВыгрузки + ИмяФайлаБезРасширения + РасширениеXSL;
//Выгрузка данных печати в файл XLS
#Если Клиент Тогда
Состояние("Создание временного файла...");
#КонецЕсли
Попытка
Если ТипЗнч(ДанныеВыгрузки) = Тип("ТабличныйДокумент") Тогда
ДанныеВыгрузки.Записать(ПолноеИмяФайлаXLS, "XLS");
ИначеЕсли ТипЗнч(ДанныеВыгрузки) = Тип("ТекстовыйДокумент") Тогда
ДанныеВыгрузки.Записать(ПолноеИмяФайлаXLS, "XLS");
Иначе
#Если Клиент Тогда
Сообщить("Данные для выгрузки переданы в неподдерживаемом формате. Дальнейшее выполнение невозможно." + Символы.ПС + ОписаниеОшибки());
#КонецЕсли
Возврат 0;
КонецЕсли;
Исключение
#Если Клиент Тогда
Сообщить("Произошла ошибка при выгрузке временного файла. Возможно ошибка доступа к папке, в которую происходит запись." + Символы.ПС + ОписаниеОшибки());
#КонецЕсли
Возврат 0;
КонецПопытки;
Попытка
#Если Клиент Тогда
Состояние("Открытие компоненты OpenOffice...");
#КонецЕсли
ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager");
Скрипт = Новый COMОбъект("MSScriptControl.ScriptControl");
Скрипт.language = "javascript";
Скрипт.AddObject("OpenOffice", ServiceManager);
//Открытие временного файла без отображения его окна
#Если Клиент Тогда
Состояние("Открытие временного файла...");
#КонецЕсли
Скрипт.eval("Массив=new Array()");
Массив = Скрипт.eval("Массив");
Скрипт.eval("Массив[0] = OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
Скрипт.eval("Массив[0].Name = 'Hidden'");
Скрипт.eval("Массив[0].Value = true");
Скрипт.AddCode("function SetItem(ind,val){Массив[ind]=val}");
Скрипт.AddObject("ServiceManager",ServiceManager);
Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop");
Document = Desktop.LoadComponentFromURL("file:///" + ПолноеИмяФайлаXLS, "_blank", 0, Массив);
//Сохранение в PDF встроенными средствами OpenOffice
#Если Клиент Тогда
Состояние("Запись в PDF...");
#КонецЕсли
Скрипт.eval("Массив2=new Array()");
Массив2 = Скрипт.eval("Массив2");
Скрипт.eval("Массив2[0] = OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
Скрипт.eval("Массив2[0].Name = 'FilterName'");
Скрипт.eval("Массив2[0].Value = 'writer_pdf_Export'");
ПолноеИмяФайлаPDF = "file:///" + СтрЗаменить(ПолноеИмяФайлаXLS, РасширениеXSL, РасширениеPDF);
ПолноеИмяФайлаPDF = СтрЗаменить(ПолноеИмяФайлаPDF, ВРег(РасширениеXSL), РасширениеPDF);
ПолноеИмяФайлаPDF = СтрЗаменить(ПолноеИмяФайлаPDF, "\", "/");
Document.storeToURL(ПолноеИмяФайлаPDF, Массив2);
Document.close(-1); //Закрыть документ
//Контрольная очистка переменных
Document = Неопределено;
Desktop = Неопределено;
//Удаление временного файла
#Если Клиент Тогда
Состояние("Удаление временного файла...");
#КонецЕсли
Попытка
УдалитьФайлы(ПолноеИмяФайлаXLS);
Исключение
#Если Клиент Тогда
Сообщить("Произошла ошибка при удалении временного файла. Возможно, потребуется удалить его вручную." + Символы.ПС + ОписаниеОшибки());
#КонецЕсли
КонецПопытки;
ПолноеИмяФайлаPDF = СтрЗаменить(ПолноеИмяФайлаPDF, "file:///", "");
ПолноеИмяФайлаPDF = СтрЗаменить(ПолноеИмяФайлаPDF, "/", "\");
#Если Клиент Тогда
Состояние("Выгрузка выполнена.");
Предупреждение("Выгрузка выполнена." + Символы.ПС + ПолноеИмяФайлаPDF);
#КонецЕсли
Возврат ПолноеИмяФайлаPDF;
Исключение
Document.close(-1);
#Если Клиент Тогда
Предупреждение(ОписаниеОшибки());
#КонецЕсли
Возврат 0;
КонецПопытки
КонецФункции
Автор:
doom_2001 Категория:
Работа с Microsoft Office и OpenOffice Массовое проведение, удаление документов Универсальная обработка из числа Must Have
позволяющая выбрать установив отбор документы и выполнить действие:ПроведениеОтмена...
Универсальная обработка из числа Must Have позволяющая выбрать установив отбор документы и выполнить действие:
Проведение Отмена проведения Пометка удаления Снять пометку удаления Удаление (Без проверки ссылок) - Пользоваться осторожно! Обработка работает в любой конфигурации, но только под Толстый клиент
Установка отбора:
Нажмите Отобрать , и выберите Вариант обработки над отобранными документами
Выполнить обработку документов
по завершению на закладках Обработанные и Не обработанные можно увидеть результат.
Данная обработка часто помогает в работе и является незаменимым инструментом! - Советую !)
Категория:
Обработки документов