Формирование печатных форм в pdf

03.05.11

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

Делюсь опытом работы с виртуальными принтерами через COM-интерфейс, а также предлагаю альтернативный вариант создания PDF-файлов с помощью внешней компоненты Yoksel.

Возникла задача (и, как показал поиск, не у меня одного) формирования печатных форм в формате pdf для отправки клиентам. Причем процесс этот должен был происходить практически полностью автоматически - в один-два клика. То, что я нашел на эту тему в сети меня не устроило по тем или иным причинам, поэтому пришлось писать свое. Первое с чем я столкнулся - это достаточно скудное количество информации на эту тему, очень мало примеров. Несколько дней разбирался сам, теперь решил поделиться опытом с вами. Америку, я конечно не открыл, но пару интересных решений в процессе написания родилось - возможно кому-то пригодится и сэкономит время.

Публикацию я решил оформить в виде статьи, поскольку написанная мной обработка имеет несколько прикладной характер и заточена под конкретную конфигурацию. Так что поделюсь с вами кодом, и постараюсь прокомментировать его максимально подробно.

Итак, сначала немного предыстории. Изучив вопрос, я остановил свой выбор на бесплатных виртуальных принтерах BullZip PDF Printer и PDFCreator, которые позволяют на выходе получать файлы pdf, а также файлы различных графических форматов. Обе утилиты имеют возможность автосохранения файлов без лишних вопросов пользователю. В принципе, для полуавтоматического создания печатных форм в электронном виде, этого достаточно. Мы можем написать в коде

ТабДок.ИмяПринтера = "PDFCreator"; //"BullZip PDF Printer";
ТабДок.Напечатать();

и в каталогах, указанных в настройках автосохранения, появятся нужные файлы. Но, во-первых, пользователь может что-нибудь в настройках изменить, во-вторых, принтер вообще может оказаться переименован или удален чьими-нибудь шаловливыми ручонками (то есть нам нужно как-то контролировать имя и вообще наличие виртуального принтера в системе), в-третьих, придется настроить автосохранение для каждого пользователя (если принтер не сетевой), в-четвертых, проблематично добиться вменяемого имени файла с помощью настроек. Да и вообще, мы же все хотим делать автоматически, а так пользователю придется самому создать письмо, указать адрес клиента, прикрепить нужные вложения - вероятность ошибки возрастает, ну и лениво конечно. Приходим к выводу, что нужно юзать COM-объект, самому устанавливать необходимые настройки и выполнять нужные действия, чтобы не взрывать потом мозг ни себе, ни пользователю.

Изначально имелось пожелание сохранять файлы в графическом формате, скажем jpeg или png. PDFCreator, по-моему мнению, обладает более гибкими возможностями, но, к сожалению, он не умеет разбивать изображения на страницы, поэтому при сохранении печатных форм в виде картинок, можно наблюдать только первую страницу документа. BullZip же такую функцию имеет, поэтому я начал работать с ним. Но вот его COM-интерфейс оказался довольно скудным, да и плюс ко всему, настройки свои утилита хранит в ini-файле. Соответственно тратится время на их чтение и запись, если мы хотим (а мы хотим!) в них что-то менять. Вобщем, чтобы не извращаться и не придумывать всякую ерунду, было принято решение сохранять печатные формы в pdf и использовать для этих целей PDFCreator. Полностью конечно "ерунды" избежать не удалось, но в целом задача была решена.

Собственно дальше код моей функции для формирования файлов с подробными комментариями в проблемных местах. Функция выдрана из модуля обработки с минимальными изменениями, поэтому имеет "узкие" места в виде привязки к конфигурации и конкретному виду документов. Но общий смысл понятен и при необходимости код легко может быть преобразован для конкретной задачи. 

upd 14.04.2011

Сегодня понадобилось переписать обработку, сделав ее более универсальной. Теперь в главную функцию передается массив готовых табличных документов для конвертации в pdf. Для передачи имен файлов используется свойство табличного документа "ИспользуемоеИмяФайла", которое необходимо заполнить программно до вызова функции конвертации.

upd 03.05.2011

Выявил неявный баг. У табличного документа есть свойство "ИмяПараметровПечати". Оно отвечает за сохранение параметров печати, установленных пользователем, и их восстановление при следующем показе табличного документа. Так вот, если это свойство используется в конфигурации (а в типовых оно, как правило, используется), то при печати в pdf в указанных параметрах будет сохранен наш виртуальный pdf-принтер, и, если в следующий раз табличный документ будет печататься обычным способом, то 1С восстановит именно этот принтер для печати по-умолчанию (не путать с принтером по-умолчанию в Windows). Чтобы этого избежать, после формирования наших файлов, вернем табличному документу его старое имя принтера.

// Функция формирует файлы для отправки по электронной почте с помощью виртуального принтера PDFCreator,
// Возвращаемое значение: тип "Массив" - массив сформированных файлов pdf
// Параметры: ТабличныеДокументы - тип "Массив", массив табличных документов для конвертации
//            Путь - тип "Строка", путь к каталогу, в котором будут создаваться конечные файлы pdf
//
Функция PDFCreator_СформироватьФайлыДляОтправки(ТабличныеДокументы, Путь) Экспорт

   
// Тут все ясно: пробуем создать COM-объект, получилось - хорошо, нет - на нет, как говорится, и суда нет
   
Попытка
       
УтилитаПечати = Новый COMОбъект("PDFCreator.clsPDFCreator");
    Исключение
       
Сообщить("Не установлен драйвер принтера PDFCreator!", СтатусСообщения.Важное);
        Возврат Неопределено;
    КонецПопытки;

   
Состояние("Настройка виртуального принтера ...");

   
// Получим виртуальные принтеры, установленные в системе, если нет ни одного - создадим новый, если есть - будем использовать первый попавшийся
   
ПринтерыPDF = УтилитаПечати.cGetPDFCreatorPrinters();
    Если
ПринтерыPDF.Count() = 0 Тогда
       
УтилитаПечати.cAddPDFCreatorPrinter("PDFCreator");
       
ПринтерыPDF = УтилитаПечати.cGetPDFCreatorPrinters();
    КонецЕсли;
   
ИмяПринтераPDF = ПринтерыPDF.Item(1);

   
// Запустим утилиту, в области уведомлений появится соответствующий значок очереди печати
   
УтилитаПечати.cStart();

   
// PDFCreator позволяет создавать несколько профилей с настройками - это очень удобно: мы не будем менять настройки по умолчанию, а создадим отдельный профиль для печати из 1С и будем его использовать. То есть для "ручной" печати пользователь может настроить принтер как ему вздумается.
    // Проверим, существует ли профиль для печати документов из 1С, если нет - создадим
   
Если Не УтилитаПечати.cProfileExists("Печать 1С") Тогда
       
УтилитаПечати.cAddProfile("Печать 1С", УтилитаПечати.cStandardOptions);
    КонецЕсли;

   
// Поскольку теоретически пользователь может изменить настройки и нашего профиля, а некоторые из них для нас критичны, будем записывать их принудительно каждый раз. Это настройки автосохранения, остальные - пусть меняет, если надо.
    // Запишем настройки профиля, которые не должны меняться
   
НастройкиПоУмолчанию = УтилитаПечати.cReadOptions("Печать 1С");
   
НастройкиПоУмолчанию.UseAutosave = 1;
   
НастройкиПоУмолчанию.UseAutosaveDirectory = 1;
   
НастройкиПоУмолчанию.UseCreationDateNow = 1;
   
НастройкиПоУмолчанию.AutosaveDirectory = Путь;

   
// Подробно на каждой опции останавливаться не буду, думаю и так понятно. Поясню только принципиальный момент, на котором строится дальнейшая логика работы функции.
    // Я долго пытался добиться более менее вменяемого и при этом уникального имени файла стандартными настройками - это оказалось довольно проблематично. В итоге я пришел к такой схеме: в качестве имени файла автосохранения используем предопределенную настройку Title - заголовок нашего документа. Поскольку табличный документ мы создаем программно, средствами 1С изменить его не удастся (есть лишь возможность задать его при выводе на экран, указав в качестве первого параметра метода Показать()). Соответственно, используя такую настройку, мы всегда будем получать файл вида "Табличный документ.pdf". Что ж, значит, придется переименовать его после. Если бы мы печатали один файл, можно было задать его имя сразу в настройках, но мы-то хотим печатать много и сразу, а в этом случае опции просто не будут успевать сохраняться. Короче говоря, экспериментальным путем я пришел именно к такому варианту.
   
НастройкиПоУмолчанию.AutosaveFileName = "Title"; // Здесь Title должно быть в угловых скобках, но редактор HTML воспринимает это как тег и сбивает разметку

   
НастройкиПоУмолчанию.AutosaveFormat = 0; // 0 = PDF, 1 = PNG, 2 = JPEG, 3 = BMP, 4 = PCX, 5 = TIFF, 6 = PS, 7 = EPS, 8 = TXT, 9 = PDF/A-1b, 10 = PDF/X, 11 = PSD, 12 = PCL, 13 = RAW
   
НастройкиПоУмолчанию.AutosaveStartStandardProgram = 0;
   
УтилитаПечати.cSaveOptions(НастройкиПоУмолчанию, "Печать 1С");

   
Состояние("Создание файлов ...");

   
// Делаем наши настройки текущими. Возможно как-то можно сделать активным конкретный профиль программно, но мне это не удалось, а так - заработало и ладно. По сути здесь мы подменяем настройки по умолчанию своими.
   
УтилитаПечати.cOptionsProfile = "Печать 1С"; // эта строка, по-моему, не работает, но так "красивше" =)
   
УтилитаПечати.cOptions = НастройкиПоУмолчанию;

   
// Собственно, начинаем штамповать наши файлы
   
МассивФайлов = Новый Массив;
    
Для Индекс = 0 По ТабличныеДокументы.Количество() - 1 Цикл
        // Получаем табличный документ по индексу из массива. Цикл Для ... По ... используем для того, чтобы иметь возможность сразу получать индекс элемента из счетчика без применения метода Найти(). 
       
ТабДок = ТабличныеДокументы[Индекс];

        // Запоминаем старое имя принтера, т.к. при использовании параметров печати, они будут сохраняться с нашим pdf-принтером
       
СтароеИмяПринтера = ТабДок.ИмяПринтера;        

        // Далее уже знакомый нам кусок кода. Все настройки сделаны - можем смело печатать.
        
ТабДок.ИмяПринтера = ИмяПринтераPDF;
        
ТабДок.Напечатать();

        
// Здесь одна особенность, которую я победил не очень хорошим способом. Помните, что у нас все файлы называются "Табличный документ.pdf"? Это нас не устраивает - надо переименовать, но поскольку принтер работает не мгновенно, необходимо сначала дождаться, пока файл сформируется и запишется на диск. Так что запускаем цикл и ждем пока файл появится. Да, грузится проц, но что поделать - это ненадолго.
        
// На случай, если что-то пойдет не так, ставим ограничение в 30 секунд, по истечении которых цикл прерываем принудительно
        
ФайлСформирован = Истина;
        
ФайлPDF = Новый Файл(Путь + "Табличный документ.pdf");
        
Порог   = ТекущаяДата() + 30;
        Пока Не
ФайлPDF.Существует() И ФайлСформирован Цикл
            
ОбработкаПрерыванияПользователя();

            Если
ТекущаяДата() >= Порог Тогда
                
ФайлСформирован = Ложь;
            КонецЕсли;
        КонецЦикла;
        
// Наш файл уже существует, но еще не записан - ждем еще, но не более 30 секунд
        
Порог = ТекущаяДата() + 30;
        Пока
ФайлPDF.Размер() = 0 И ФайлСформирован Цикл
            
ОбработкаПрерыванияПользователя();

            Если
ТекущаяДата() >= Порог Тогда
                
ФайлСформирован = Ложь;
            КонецЕсли;
        КонецЦикла;

        
// Произошла исключительная ситуация - файл не был создан в течение длительного времени
        
Если Не ФайлСформирован Тогда
            
Сообщить("Ожидание отклика завершено. Файл не создан!", СтатусСообщения.Важное);

            Попытка
                
УтилитаПечати.cClose();
            Исключение
                
Сообщить("Нормальное завершение процесса печати невозможно!", СтатусСообщения.ОченьВажное);
            КонецПопытки;
            
УтилитаПечати        = Неопределено;
            
НастройкиПоУмолчанию = Неопределено;

            
Состояние();

            Возврат Неопределено;
        КонецЕсли;

        
// Вот теперь переименуем его. Используем свойство табличного документа "ИспользуемоеИмяФайла" (должно быть заполнено программно до вызова процедуры, предполагается, что имя файла указано без расширения), либо, если оно не заполнено, просто порядковый номер элемента.
        
НовоеПолноеИмя = Путь + ?(ЗначениеЗаполнено(ТабДок.ИспользуемоеИмяФайла), ТабДок.ИспользуемоеИмяФайла, "Табличный документ " + Строка(Индекс + 1)) + ".pdf";
       
ПереместитьФайл(ФайлPDF.ПолноеИмя, НовоеПолноеИмя) ;
         

        
// Добавим в массив вложений, который вернет в итоге наша функция
        
ФайлPDF = Новый Файл(НовоеПолноеИмя);
        
МассивФайлов.Добавить(ФайлPDF);

        // Возвращаем старое имя принтера, чтобы не менялись параметры печати по-умолчанию
        
ТабДок.ИмяПринтера СтароеИмяПринтера;
    КонецЦикла;

   
// Закрываем утилиту - иконка в трее пропала. Что примечательно, закрывать раньше времени очередь печати нельзя, а то пропадут все задания, но так как мы с нетерпением ждем появления каждого файла и в этот момент уже дождались, то тут все ок.
   
УтилитаПечати.cClose();
   
УтилитаПечати        = Неопределено;
   
НастройкиПоУмолчанию = Неопределено;

   
Состояние();

    Возврат
МассивФайлов;

Конецфункции

Ну а дальше уже дело техники, что с этими файлами делать... Я, например, использую встроенный в УТ почтовый клиент, создаю новое письмо, заполняю адрес из контактной информации контрагента, добавляю туда вложения и открываю письмо пользователю для просмотра и принятия решения об отправке, а pdf-ки с диска удаляю.

Естественно, мой код не претендует на истину в последней инстанции - может где и коряво получилось, но вобщем-то он работает и свою задачу выполняет. Более элегантного решения я во всяком случае не нашел. Принимаю конструктивную критику и предложения

upd 08.10.2010

Создал аналогичную функцию с использованием внешней компоненты Yoksel. Код проще и прозрачнее, файлы формируются намного быстрее, нет заморочек с искусственными задержками времени, но печатная форма добавляется в документ картинкой, причем не очень хорошего качества, плюс требуется создание временного файла на диске для последующей конвертации.

// Функция формирует файлы для отправки по электронной почте с помощью внешней компоненты Yoksel.dll
//
Функция Йоксель_СформироватьФайлыДляОтправки(ТабличныеДокументы, Путь)

    Попытка
       
ЗагрузитьВнешнююКомпоненту(КаталогПрограммы() + "Yoksel.dll");

       
Йоксель      = ПолучитьCOMОбъект("","Йоксель");
       
КонвертерPDF = Йоксель.СоздатьГрафическийКонвертерPDF();
    Исключение
       
Предупреждение("Не удалось загрузить внешнюю компоненту Yoksel! Сообщите администратору системы!", 20);
        Возврат Неопределено;
    КонецПопытки;

   
МассивФайлов = Новый Массив;

   
Состояние("Создание файлов ...");

    
Для Индекс = 0 По ТабличныеДокументы.Количество() - 1 Цикл 
        
// Получаем табличный документ
        
ТабДок = ТабличныеДокументы[Индекс];

        
// Формируем временный файл xls
        
ИмяФайлаБезРасширения = ?(ЗначениеЗаполнено(ТабДок.ИспользуемоеИмяФайла), ТабДок.ИспользуемоеИмяФайла, "Табличный документ " + Строка(Индекс + 1));
        
ТабДок.Записать(Путь + ИмяФайлаБезРасширения + ".xls", ТипФайлаТабличногоДокумента.XLS97);

        
// Конвертируем временный файл в формат pdf
        
Попытка
            
Таб = Йоксель.СоздатьТабличныйДокумент();
            
Таб.Открыть(Путь + ИмяФайлаБезРасширения + ".xls", "2");
            
КонвертерPDF.Документ = Таб;
            
КонвертерPDF.КоличествоБитНаПиксел = 24; //1, 4, 8, 24
            
КонвертерPDF.ПолеСлева = 1134; // в твипах (1 твип = 1/567 см)
            
КонвертерPDF.ЗаписатьВФайл(Путь + ИмяФайлаБезРасширения + ".pdf");
        Исключение
            
УдалитьФайлы(Путь + ИмяФайлаБезРасширения + ".xls");
            
Сообщить(ОписаниеОшибки(), СтатусСообщения.Важное);
            Возврат Неопределено;
        КонецПопытки;

        
// Удаляем временный файл xls
        
УдалитьФайлы(Путь + ИмяФайлаБезРасширения + ".xls");

        
// Добавляем в массив вложений
        
ФайлPDF = Новый Файл(Путь + ИмяФайлаБезРасширения + ".pdf");
        
МассивФайлов.Добавить(ФайлPDF);
    КонецЦикла;

   
Йоксель = Неопределено;

   
Состояние();

    Возврат
МассивФайлов;

КонецФункции

См. также

SALE! 15%

[ED3] Обмен для ERP 2.5, КА 2.5, УТ 11.5 БП 3.0, Розница, УНФ и других с EnterpriseData (универсальный формат обмена), правила обмена

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

25080 руб.

12.06.2017    135531    730    291    

391

Перенос данных из УПП 1.3 в БП 3.0. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.226.x) и БП 3.0 (3.0.151.x). Правила подходят для версии ПРОФ и КОРП.

28000 руб.

15.12.2021    20601    137    38    

94

SALE! 10%

Перенос данных из ERP 2 / КА 2 / УТ 11 в БП 3.0. Переносятся документы, начальные остатки и справочники

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | В продаже с 2019г. | Воспользовались более 176 предприятий! | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой, обращайтесь!

38500 34650 руб.

15.04.2019    68820    179    139    

111

Перенос данных из УТ 10.3 в УТ 11.5. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 1С:Управление торговлей 11 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.87.x) и УТ 11.5 (11.5.16.x).

28000 руб.

23.07.2020    46750    199    64    

162

SALE! 10%

Перенос данных из БП 3.0 в УНФ 3.0 / УНФ 1.6. Переносятся остатки, документы и справочная информация

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

В продаже с 2018г. | Воспользовались более 41 предприятия! | Правила конвертации (КД 2) для переноса данных из БП 3 в УНФ | Переносятся все виды документов, начальные остатки и вся возможная справочная информация | Есть фильтр по организациям | Оперативно обновляем на новые релизы | Оказываем техподдержку | В комплект файлов входит инструкция, авторская версия обработки "Универсальный обмен...", актуальные правила переноса данных и архив старых версий переноса | Учет в БП 3 должен быть корректным, некорректные данные не переносятся | Можно бесплатно проверить на вашем сервере до покупки!

50722 руб.

10.07.2018    67742    41    123    

46

SALE! 10%

Перенос данных из ERP 2 / КА 2 в ЗУП 3. Переносятся остатки, документы и справочники

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Воспользовались более 79 предприятий! | Предлагаем приобрести готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | В продаже с 2020г. | Оперативно обновляем правила до актуальных релизов 1С | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

48278 43450 руб.

03.12.2020    34411    81    58    

78

Перенос данных из Парус 10 в ЗГУ ред.3

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9303    9    8    

11

Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 09.04.2024, версия 9.9 - 9.10)

14400 руб.

20.11.2015    151372    367    376    

502
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
102. cool.vlad4 2 03.02.16 02:21 Сейчас в теме
(98) ironn, может когда-нибудь дойдут руки и желание доделать свою Native ВК, которая рендерит из pdf в jpg/png . просто стыдно пока выкладывать. знания плюсов у меня так себе. это интересно кому-нибудь?
+
100. CheBurator 3119 20.01.16 20:16 Сейчас в теме
печформы лучше всего сохранять в png - жжмутся лучше чем джпег и без искажений
cool.vlad4; +1
101. ironn 5 02.02.16 21:48 Сейчас в теме
(100) CheBurator, в курсе, что png современнее и намного лучше, но есть еще такая штука, как привычка пользователей...
+
103. cool.vlad4 2 03.02.16 02:22 Сейчас в теме
(100) точно. только реально встречаются в переписках динозавры , у которых не открывается png (я хз почему . их единицы, но тем не менее. просто меня самого это удивило как-то)
ps только сейчас кстати додумался. стопудово у них почтовые клиенты картинки режут, а они не знают как их включить)))
Прикрепленные файлы:
+
104. milov.aleksey 398 10.01.18 17:18 Сейчас в теме
Коллеги, раз у типивых печатных форм есть возможность сохранения сразу в PDF, пробовали сохранить сразу средствами платформы?
ТабДок.Защита=Истина;
ВремФайл=ПолучитьИмяВременногоФайла("pdf");
ТабДок.Записать(ВремФайл,ТипФайлаТабличногоДокумента.PDF);
ЗапуститьПриложение(ВремФайл);
+
105. Spartan 365 11.01.18 08:20 Сейчас в теме
(104) Этой публикации 8 лет: (75).
+
Оставьте свое сообщение