Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Войти | Зарегистрироваться )



История благодарностей участнику denis84 ::: Спасибо сказали: 143 раз
Дата поста: В теме: За сообщение: Спасибо сказали:
14.05.24, 10:10 Руководство пользователя для BAS for small company (Малий бізнес)
barabambler @ Сегодня, 10:49 * ,
а ну спробуйте за цим посиленням: https://turbobita.net/download/folder/23372...domain=turbo.to

перший пункт побачите - "BAS SmallCompany.dokum.zip"
f12,
08.05.24, 10:39 Вызвать фоновое задание с методом в модуле внешней обработки
AnryMc @ Сегодня, 11:20 * ,
вот такой вариант еще нащел:
//Как легко запускать выполнение в фоне, не прибегая к долгому описанию фоновых процедур.
//Не буду растекаться мыслью по дереву и тянуть кота за все известные места, так как надеюсь, все согласятся, что фоновое выполнение это хорошо. Есть простой путь запускать любой код в фоне. Специалисты скорее //всего такой способ используют, но что-то в инете я описания не встретил, решил выложить.

//Перво-наперво создаем общий модуль с именем например "ФоновоеВыполнение" с галкой "Сервер". Добавим туда пару процедур:

Функция ЗапуститьФоновоеВыполнение(ТекстПроцедуры,СтруктураПараметров=Неопределено) Экспорт
    УникальныйИдентификатор = Новый УникальныйИдентификатор;
    ПараметрыВыполнения = Новый Массив;
    ПараметрыВыполнения.Добавить(ТекстПроцедуры);
    ПараметрыВыполнения.Добавить(СтруктураПараметров);
    
    ФоновыеЗадания.Выполнить("ФоновоеВыполнение.ФоноваяПроцедура",ПараметрыВыполнения,УникальныйИдентификатор);
    Возврат УникальныйИдентификатор;
КонецФункции

Процедура ФоноваяПроцедура(ТекстМодуля,ПараметрыВыполнения) Экспорт
    ПолныйТекстМодуля = "";
    Для Каждого ТекПараметр Из ПараметрыВыполнения Цикл
        ПолныйТекстМодуля = ПолныйТекстМодуля+ТекПараметр.Ключ+"=ПараметрыВыполнения."+ТекПараметр.Ключ+";"+Символы.ПС;
    КонецЦикла;
    ПолныйТекстМодуля = ПолныйТекстМодуля + ТекстМодуля;
    Выполнить(ПолныйТекстМодуля);
КонецПроцедуры
//И готово!

//Теперь для выполнения когда в любой момент мы можем поместить любую процедуру в текстовую переменную:

ТекстФоновойПроцедуры = "
|//Тут передаем текст фоновой процедуры, это может быть вызов каких то процедур или полноценный код
|//вызов процедур проще, т.к. тупо легче отлаживать, т.к. код в этой процедуре обычной отладке не поддастся,
|//а при вызове процедуры или функции мы ставим там точку останова и включаем в отладке автоматическое
|//подключение  фоновых заданий. Запускать можно любые методы для выполнения на сервере.
|
|ОбщийМодульСервер.ВыполнитьНужнуюЗадачу(Парметр1,Парметр2);"
И вызывать ее выполнение:

ФоновоеВыполнение.ЗапуститьФоновоеВыполнение(ТекстФоновойПроцедуры,Новый Структура("Параметр1,Параметр2",Параметр1,Параметр2));
AnryMc, kserg2012,
08.05.24, 9:52 Вызвать фоновое задание с методом в модуле внешней обработки
AnryMc @ Сегодня, 9:20 * ,
Я делал когда-то обработку в фоновом режиме "корректировка ответственных в документах РТиУ"
Может и не то что Вам надо, но делал так и подключал в 1с 8 в фоновых заданиях запуск обработки по времени(получилось, то что надо заказчику;
Функция СведенияОВнешнейОбработке() Экспорт
    ВерсияБСП = СтандартныеПодсистемыСервер.ВерсияБиблиотеки();
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(ВерсияБСП);
    ПараметрыРегистрации.Информация = НСтр("Корректировка Ответственных в документах");
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
    ПараметрыРегистрации.Версия = "2.0";
    ПараметрыРегистрации.БезопасныйРежим = Ложь;
    
    Команда = ПараметрыРегистрации.Команды.Добавить();
    Команда.Представление = НСтр("Корректировка Ответственных в документах");
    Команда.Идентификатор = "КорректировкаОтветственныхВДокументах";
    Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    Команда.ПоказыватьОповещение = Ложь;
    Команда.Модификатор = "";
    
    Возврат ПараметрыРегистрации;
КонецФункции

Процедура ВыполнитьКоманду(Идентификатор,ОбъектыНазначения) Экспорт
    Если Идентификатор =   "КорректировкаОтветственныхВДокументах" ТОгда
        КорректировкаОтветственныхВДокументах();
    КонецЕсли;    
КонецПроцедуры

&НаСервере
Процедура КорректировкаОтветственныхВДокументах() Экспорт
              //тут был текст запросов и т.д.
КонецПроцедуры
AnryMc,
02.05.24, 14:08 Как програмно установить шрифт в форматированом документе
kostya77 @ Сегодня, 14:34 * ,
//Обработка элементов форматированного документа, входящего в состав параграфа, может оказаться полезной в том случае, 
//если нужно, например, убрать все оформление в виде курсива или полужирного шрифта.

//Пример:

Полужирный = Новый Шрифт(, , Истина);
Курсив = Новый Шрифт(, , , Истина);
Обычный = Новый Шрифт;
Для каждого Элемент Из Параграф.Элементы Цикл
     Если ТипЗнч(Элемент) = Тип("ПереводСтрокиФорматированногоДокумента") Тогда        
           Продолжить;
     КонецЕсли;
     Если Элемент.Шрифт = Полужирный Или Элемент.Шрифт = Курсив Тогда          
           Элемент.Шрифт = Обычный
     КонецЕсли;
КонецЦикла;
kostya77,
24.04.24, 13:58 Off: Часто ли Вам приходилось переписывать учёт ОС в типовых конфигурациях?
AnryMc @ Сегодня, 14:35 * ,
Доброго дня! В 1с 8 нічого не змінював. А ось в 1с:7.7, яка і досі в нас працює на підприємстві, багато чого доробляли але все під забаганки нашоїх бухгалтерії (нові документи, зміна проводок і таке інше).
AnryMc,
12.04.24, 8:26 УФ после выбора из списка задать вопрос - не работает
AnryMc @ Вчера, 16:35 * ,
Працює - платформа 8.3.16.1148, конфігурація Business automation software for accounting CORP, edition 2.1 (2.1.9.2)
AnryMc,
12.04.24, 7:46 УФ после выбора из списка задать вопрос - не работает
AnryMc @ Вчера, 16:35 * ,


Вам не задавалося питання?
AnryMc,
01.04.24, 9:03 раскраска строки FormEX
4andriy @ Сегодня, 9:05 * ,
Доброго дня, в журналі документів розфарбована ТЧ за ознакою "КонтрольДокументів", якщо контролюємо контрагента:
//==========================================
Функция ПроверитьВид()
    Если ПустоеЗначение(ТекущийДокумент) = 0 Тогда
        //Если ТекущийДокумент.ЗапретРедактирования = 1 Тогда
        //    Возврат "BRUSH["+глПолучитьЦвет(204,204,204)+"]";      //серый фон
        Если ((ТекущийДокумент.Контрагент.КонтрольДокументов = 1) И (ТекущийДокумент.Проверен = 1)) Тогда
            Возврат "FONT["+глПолучитьЦвет(0,0,0)+"] BRUSH["+глПолучитьЦвет(255,255,255)+"]"; //белый  фон
        ИначеЕсли ((ТекущийДокумент.Контрагент.КонтрольДокументов = 1) И (ТекущийДокумент.Проверен = 0)) Тогда
            Возврат "FONT["+глПолучитьЦвет(0,0,0)+"] BRUSH["+глПолучитьЦвет(255, 222, 179)+"]"; //красный  фон
        КонецЕсли;
    КонецЕсли;
    Возврат "";
КонецФункции
4andriy,
28.03.24, 8:52 список элементов без каталогов
4andriy @ Вчера, 17:45 * ,
Если Сотрудники.ЭтоГруппа() = 0 Тогда
       СписокЭлементов.ДобавитьЗначение(Сотрудники.ТекущийЭлемент());
КонецЕсли;
4andriy, takefive,
12.02.24, 20:01 Нумерация документов в зависимости от вида операции
kostya77 @ Сегодня, 18:21 * ,
Описать свой алгоритм. У меня например в 1с 7 была организована нумерация от номера склада.
kostya77,
12.02.24, 14:35 При нажатии на кнопку программно заполнить реквизит Формы
url_2l @ Сегодня, 14:31 * ,
Для "дякую" там є спеціальна кнопочка.
url_2l,
12.02.24, 13:42 При нажатии на кнопку программно заполнить реквизит Формы
url_2l @ Сегодня, 13:14 * ,
Доброго дня! Є такий приклад в моїй конфігурації. В документі списання на виробництво - при зміні реквизиту "підрозділ у шапці документу, заповнюємо підрозділ в рядках документу
    текОтвет = Вопрос("У документі змінено реквізит підрозділу. Заповнити підрозділ по рядкам документу?","Да+Нет");
    Если текОтвет = "Да" Тогда
        ВыбратьСтроки();
        Пока ПолучитьСтроку()=1 Цикл
            СтрУчасток = Подразделение;
        КонецЦикла;
    КонецЕсли;


//або ось так: якщо заповнено реквізит "разрешил" в документі "заказ", то ставимо "да" для "готов к получению"
    Если ПустоеЗначение(Разрешил)=0 Тогда
        ГотовКПолучению = Перечисление.ДаНет.Да;
    Иначе
        ГотовКПолучению = Перечисление.ДаНет.Нет;        
    КонецЕсли;
url_2l,
09.02.24, 13:48 Как в форму выбора справочника передать параметр?
kostya77 @ Сегодня, 12:08 * ,
https://pro1c.org.ua/index.php?showtopic=4042
andrew76, kostya77,
09.02.24, 13:20 Аптечний облік
barokko23 @ Сегодня, 10:52 * ,
Це не до мене! Відкрию Вам секрет,це не я викладав файл!!! Я Вам тільки сказав де взяти пароль

І мене все чудово вдалося розархівувати. Перевірти розкладку клавіатури. пароль вводимо на англ.розкладці клавіатури
barokko23,
08.02.24, 16:49 1Cv7.MD Неисправимая ошибка. Неправильный формат файла
andrew76 @ Сегодня, 16:08 * ,
а счета забалансового учета. Они есть даже в нашем плане счетов

Dmitrij19631025,
07.02.24, 13:24 Аптечний облік
barokko23 @ Сегодня, 11:38 * ,
пароль до архівів описаний в правилах форуму. Він однаковий для всіх архівів
barokko23,
06.02.24, 10:33 1Cv7.MD Неисправимая ошибка. Неправильный формат файла
Платформа 1с 7.70.027 должна у Вас быть. И попробуй из этого мд-файла в конфигураторе сделать: "загрузить измененную конфигурацию" в меню конфигурация - загрузить измененную конфигурацию. У Вас проблема для некоторых субконто (материалы и что-то еще) изменено "предсталение".

https://pro1c.org.ua/topic/1c-7-7-02770-70-...mp;p=29304&

https://pro1c.org.ua/index.php?showtopic=3953
Dmitrij19631025,
05.02.24, 20:03 1Cv7.MD Неисправимая ошибка. Неправильный формат файла
Dmitrij19631025 @ Вчера, 19:50 * ,
Цікаво, завтра гляну Вашу проблему
Dmitrij19631025,
04.02.24, 15:01 Загрузка курсов валют НБУ для 1с 7.7
ArinaBuhgalter @ Сегодня, 13:40 * ,
В правилах форуму є. Цей пароль, для всіх архівів один.
ArinaBuhgalter,
02.02.24, 10:49 УПП 1.3.82.1 какой релиз режима совместимости?
kserg2012 @ Вчера, 14:47 * ,
Доброго дня! Користувався платформою 1С:Предприятие 8.3.13.1513, потім ставив 8.3.16.1148. Все наче було стабільно на різних конфігураціях. Але ніколи "не ганявся" за плаформами, поставив - працює все, що мені треба і ОК,
kserg2012,
15.12.23, 10:51 Установка новой версии платформы 1С. Работоспособность базы.
Talkman @ Сегодня, 10:41 * ,
ну я наче не зустрічав проблем. Що можу сказати треба діяти! Тільки так зможете щось виявити.
Talkman,
06.12.23, 8:08 Создание нового элемента справочника
kostya77 @ Сегодня, 7:44 * ,
Доброго ранку! Через vpn відкрити посилання https://forum.infostart.ru/forum9/topic232203/

або тут https://forum.mista.ru/topic.php?id=749413, https://forum.mista.ru/topic.php?id=856738
kostya77,
31.10.23, 10:49 Как при печати основной печатной формы распечатать еще присоедененный файл?
kostya77 @ Сегодня, 10:14 * ,
Вывод картинки (изображения) на печать, в макет (табличный документ)
Код 1C v 8.х
// 1-й вариант
//Как вывести картинку в табличный документ?

ТабДок = Новый ТабличныйДокумент;
Макет = ОбработкаОбъект.ПолучитьМакет("Макет");
ОбластьКартинки = Макет.ПолучитьОбласть("ОбластьСКартинкой");
Картинка = Новый Картинка(ПутьККартинке);

// Элемент управления "Логотип" входит в коллекцию картинок области.
ОбластьКартинки.Рисунки.Логотип.Картинка = Картинка;
ТабДок.Вывести(ОбластьКартинки);

ТабДок.Показать();

// 2-й вариант
//Как вывести картинку в табличный документ без изменения макета?

Область = Макет.ПолучитьОбласть("Шапка");
Рисунок = Область.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Верх = 5;
Рисунок.Высота = 10;
Рисунок.Ширина = 10;
Рисунок.Лево = 5;
Рисунок.Картинка = Новый Картинка(ПутьККартинке);
Рисунок.РазмерКартинки = РазмерКартинки.РеальныйРазмер;

ТабДок.Вывести(Область);

//3-й вариант
//ПечатьОрганизации , добавляем в макет картинку с именем Картинка1 в самую нижнюю
//область с именем ОбластьПечатьОрганизации
ОбластьПечатьОрганизации = Макет.ПолучитьОбласть("ПечатьОрганизации");
Картинка= Новый Картинка("C:\files\img\печатьОрганизации.gif");
ОбластьПечатьОрганизации.Рисунки.Картинка1.Картинка = картинка;
ТабДок.Вывести(ОбластьПечатьОрганизации);

// 4-й вариант динамически
ОбластьПечатьОрганизации = Макет.ПолучитьОбласть("ПечатьОрганизации");
КартинкаПечатьОрганизации = ОбластьПечатьОрганизации.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
КартинкаПечатьОрганизации.Картинка = БиблиотекаКартинок.ОбщаяКартинка1;
КартинкаПечатьОрганизации.Верх = 0;
КартинкаПечатьОрганизации.Высота = 80;
КартинкаПечатьОрганизации.Ширина = 80;
КартинкаПечатьОрганизации.Лево = 50;
КартинкаПечатьОрганизации.ГраницаСверху = Ложь;
КартинкаПечатьОрганизации.ГраницаСлева = Ложь;
КартинкаПечатьОрганизации.ГраницаСправа = Ложь;
КартинкаПечатьОрганизации.ГраницаСнизу = Ложь;
КартинкаПечатьОрганизации.РазмерКартинки = РазмерКартинки.АвтоРазмер;
ТабДок.Вывести(ОбластьПечатьОрганизации);

//5-й вариант получение картинки из хранилища значений
// Выборка.Изображение - выборка из запроса, Изображение реквизит -хранил. значений  
Попытка
    Путь = КаталогВременныхФайлов()+ "\1С_Картинка_"+Формат(ТекущаяДата(),"ДФ=yyyyMMddЧЧммсс")+".bmp";
    КартинкаВПамяти = Выборка.Изображение.Получить();
    КартинкаВПамяти.Записать(Путь);
    ОбластьСостав.Рисунки.D1.Картинка = Новый Картинка(Путь);
Исключение
    ОбластьСостав.Рисунки.D1.Картинка = Новый Картинка;
КонецПопытки;


Это просто картинку вывести в макет.

А вот нашел на инфостарте https://infostart.ru/1c/articles/1573726/
kostya77,
30.10.23, 16:09 Как при печати основной печатной формы распечатать еще присоедененный файл?
kostya77 @ Сегодня, 11:41 * ,
Печать файла в формате PDF (Пример №1) из 1С 8.3:
Процедура Печать_PDF_Файлов_1С(PDF_File) Экспорт

    // Простая печать средствами 1С, программно распечатать файл в формате PDF из 1С
    // PDF_File - полный путь к файлу ПДФ (например: D:\Temp1C_PDF\INPUT.pdf)
    // Должен быть зарегистрирован предварительный просмотр в системе

    AppShell = Новый COMОбъект("Shell.Application");
    AppShell.ShellExecute(PDF_File, "", "", "print", 0);

КонецПроцедуры
Печать файла в формате PDF (Пример №2) из 1С 8.3:
Процедура Печать_PDF_Файла_Фоновая(МассивФайловPDF, ИмяУстройства = "") Экспорт

    // Процедура печатает pdf-файлы (из списка) в фоновом режиме (без участия пользователя)
    // Параметры процедуры:
    //        МассивФайловPDF - массив элементов типа "Файл" или массив структур с ключами "ПолноеИмя" и "Имя"
    //        ИмяУстройства - имя МФУ или принтера в системе

    WScriptShell  = Новый COMОбъект("WScript.Shell");
    Путь_AdobeReader = WScriptShell .RegRead("HKCR\Software\Adobe\Acrobat\Exe\");
    Если Не ЗначениеЗаполнено(Путь_AdobeReader) Тогда
        Сообщить("Печать pdf-файлов невозможна! Не найдена программа Adobe Reader!", СтатусСообщения.Важное);
        Возврат;
    КонецЕсли;

    WbemScripting = Новый COMОбъект("WbemScripting.SWbemLocator");
    ConnectServer = WbemScripting.ConnectServer("", "", "", ""); //Задания от всех пользователей

    ConnectServer.Security_.impersonationlevel = 3; // Получение нужных прав
    ConnectServer.Security_.Privileges.AddAsString("SeLoadDriverPrivilege");

    Для Каждого ФайлPDF Из МассивФайловPDF Цикл
        WScriptShell .Run(Путь_AdobeReader + " /N /T " + ФайлPDF.ПолноеИмя + ?(ЗначениеЗаполнено(ИмяУстройства), " " + ИмяУстройства, ""), 0);

        ДобавленоЗадание = Ложь;
        ТекущееВремя = ТекущаяДата();
        // 40 секунд на добавление задания см.ОбработкаПрерыванияПользователя
        Пока Не ДобавленоЗадание И ТекущаяДата() < ТекущееВремя + 40 Цикл
            ОбработкаПрерыванияПользователя();
            Для Каждого PrintJob Из ConnectServer.InstancesOf("Win32_PrintJob") Цикл
                ОбработкаПрерыванияПользователя();
                ДобавленоЗадание = PrintJob.Document = ФайлPDF.Имя;
            КонецЦикла;
        КонецЦикла;

        Если Не ДобавленоЗадание Тогда
            Сообщить("Не удалось распечатать файл '" + ФайлPDF.Имя + "'!", СтатусСообщения.Важное);
        КонецЕсли;
    КонецЦикла;

    // Ожидание завершения печати
    Пока ConnectServer.InstancesOf("Win32_PrintJob").Count > 0 Цикл
    КонецЦикла;

    // Получение имени процесса
    НомерСимвола = Найти(Путь_AdobeReader, "\");
    Пока НомерСимвола > 0 Цикл
        Путь_AdobeReader = Сред(Путь_AdobeReader, НомерСимвола + 1);
        НомерСимвола = Найти(Путь_AdobeReader, "\");
    КонецЦикла;

    // Удаление процесса
    WScriptShell.Run("taskkill /f /im " + Путь_AdobeReader, 0);

КонецПроцедуры
Печать файла в формате PDF (Пример №3) из 1С 8.3:
Процедура Печать_PDF_Файла_Acrobat(PDF_File, ИмяУстройства, ОтправитьСразуНаПринтер) Экспорт

    //Параметры процедуры для программной распечатати файла в формате PDF из 1С 8.3 :
    // PDF_File - полный путь к файлу ПДФ (например: D:\Temp1C_PDF\INPUT.pdf)
    // ИмяУстройства - имя МФУ или принтера в системе
    // ОтправитьСразуНаПринтер - булево (истина-на принтер, ложь-открыть для просмотра)

    AdobeAR = Новый Файл("C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe");

    Если AdobeAR.Существует() Тогда

        Если ОтправитьСразуНаПринтер = Истина Тогда
            // Параметры командной строки Acrobat Reader:
            // /o - не открывать диалоговое окно приложения
            // /h - открыть приложение и свернуть на панели задач
            // /p - открыть файл в приложении и сразу перейти к диалоговому окну печати
            // /t [ [ []]] - распечатать файл на указанном принтере

            ЗапуститьПриложение("""" + AdobeAR.ПолноеИмя + """ /o /t """ + PDF_File + """ """ + ИмяУстройства + """");
            // <директория приложения> /o /t <имя файла> <имя принтера>
        Иначе
            ЗапуститьПриложение(PDF_File);//открываем на просмотр средствами ОС
        КонецЕсли;

    Иначе
        Сообщить("Не установлен Acrobat Reader DC! Печать невозможна!");
        ЗапуститьПриложение(PDF_File);//открываем на просмотр средствами ОС
    КонецЕсли;

КонецПроцедуры
Печать файла в формате PDF (Пример №4) из 1С 8.3:
Процедура Печать_PDF_Файла_AcroPDF(PDF_File) Экспорт

    // PDF_File - полный путь к файлу ПДФ (например: D:\Temp1C_PDF\INPUT.pdf)
    AdobeAR = Новый COMОбъект("AcroPDF.PDF.1");
    AdobeAR.Visible = false;
    AdobeAR.LoadFile(PDF_File);
    AdobeAR.printAll();
    //или AdobeAR.printWithDialog();
    AdobeAR.CloseAllDocs();
    AdobeAR.Exit();

КонецПроцедуры
Печать файла в формате PDF (Пример №5) из 1С 8.3:
Процедура Пакетная_печать_PDF_Файлов_из_папки(PDF_Folder) Экспорт

    // PDF_Folder - путь к папке с файлами ПДФ (например: D:\Temp1C_PDF)
    Shell = Новый COMОбъект("Shell.Application");
    Folder = Shell.Namespace(PDF_Folder);
    Folders = Folder.Items;
    Для Каждого Folder0 Из Folders Цикл
        Folder0.InvokeVerbEx("Print");
    КонецЦикла;

КонецПроцедуры
Печать файла в формате PDF (Пример №6) из 1С 8.3:
Процедура Печать_PDF_Файла_Bullzip(Табл, PDF_File)

    // PDF_File - полный путь к файлу ПДФ (например: D:\Temp1C_PDF\INPUT.pdf)
    // Используется сторонняя программа:
    // https://www.bullzip.com/products/pdf/info.php

    ИмяУстройства = Новый ComObject("Bullzip.PDFPrinterSettings");
    ИмяУстройства.SetValue("output", PDF_File);
    ИмяУстройства.SetValue("ShowSaveAS", "never");
    ИмяУстройства.SetValue("ShowProgress", "no");
    ИмяУстройства.SetValue("ShowProgressFinished", "no");
    ИмяУстройства.SetValue("ShowSettings", "never");
    ИмяУстройства.SetValue("ShowPDF", "no");
    ИмяУстройства.SetValue("ConfirmOverwrite","no");
    ИмяУстройства.SetValue("OwnerPassword","Pass4PDF");
    ИмяУстройства.SetValue("Permissions",61636);
    ИмяУстройства.WriteSettings();

    Табл.Автомасштаб=Истина;
    Табл.Имяпринтера="Bullzip PDF Printer";

    PDFФайл = Новый Файл(PDF_File);
    Если НЕ PDFФайл.Существует() Тогда
        Табл.Напечатать(Истина);
        Пока НЕ PDFФайл.Существует() Цикл
            ОбработкаПрерыванияПользователя();
            //ТаймерЗадержки;
        КонецЦикла;
    КонецЕсли;

КонецПроцедуры


Вроде как пишут, что PDF просто так не распечатаешь, нужно устанавливать сторонние программы/компоненты и печатать через них.

&НаКлиенте
Процедура Печать(Команда)
    
    // Получаем путь файла
    ПутьКФайлу = "D:\test.pdf";
    // Получаем список доступных принтеров
    СписокПринтеров = ПолучитьСписокПринтеров();
    // выбираем нужный принтер
    ЗначениеВыбора = СписокПринтеров.ВыбратьЭлемент("Выберите принтер",СписокПринтеров[0]);
    Если ЗначениеВыбора = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    // Печать
    ПечатьPDFФайлов("D:\test.pdf",ЗначениеВыбора.Значение);
    
КонецПроцедуры

&НаКлиенте
Процедура ПечатьPDFФайлов(ПутьКФайлу, ИмяПринтера = "") Экспорт
    
    WshShell = Новый COMОбъект("WScript.Shell");
    ПутьAdobeReader = WshShell.RegRead("HKCR\Software\Adobe\Acrobat\Exe");
    Если Не ЗначениеЗаполнено(ПутьAdobeReader) Тогда
        Сообщить("Не найдена программа Adobe Reader! Печать pdf-файлов невозможна.", СтатусСообщения.Важное);
        Возврат;
    КонецЕсли;
    
    oLocator = Новый COMОбъект("WbemScripting.SWbemLocator");
    oService = oLocator.ConnectServer("", "", "", ""); //Задания от всех пользователей
    
    oService.Security_.impersonationlevel = 3; //получаем необходимые права
    oService.Security_.Privileges.AddAsString("SeLoadDriverPrivilege");
    
    НаименованиеПринтера = "";
    Если ЗначениеЗаполнено(ИмяПринтера) Тогда
        НаименованиеПринтера = """"+ ИмяПринтера + """";
    КонецЕсли;
    
    WshShell.Run(ПутьAdobeReader + " /N /T " + ПутьКФайлу + " " + НаименованиеПринтера, 0);
    
    ЗаданиеДобавлено = Ложь;
    ТекущееВремя = ТекущаяДата();
    Пока Не ЗаданиеДобавлено И ТекущаяДата() < ТекущееВремя + 30 Цикл // 30 секунд на добавление задания
        ОбработкаПрерыванияПользователя();
        Для каждого ЗаданиеПечати Из oService.InstancesOf("Win32_PrintJob") Цикл
            ОбработкаПрерыванияПользователя();
            ЗаданиеДобавлено = ЗаданиеПечати.Document = ПутьКФайлу;
        КонецЦикла;    
    КонецЦикла;
    
    Если Не ЗаданиеДобавлено Тогда
        Сообщить("Не удалось отправить на печать файл '" + ПутьКФайлу + "'.", СтатусСообщения.Важное);
    КонецЕсли;
    
    // Ожидаем завершения печати
    Пока oService.InstancesOf("Win32_PrintJob").Count > 0 Цикл КонецЦикла;
    
    // Получаем имя процесса
    НомерСимвола = Найти(ПутьAdobeReader, "");
    Пока НомерСимвола > 0 Цикл
        ПутьAdobeReader = Сред(ПутьAdobeReader, НомерСимвола + 1);
        НомерСимвола = Найти(ПутьAdobeReader, "");
    КонецЦикла;
    // Убиваем процесс
    WshShell.Run("taskkill /f /im " + ПутьAdobeReader, 0);
    
КонецПроцедуры

&НаКлиенте
Функция ПолучитьСписокПринтеров()
    
    Список = Новый СписокЗначений;
    #Если Клиент Тогда
        Попытка
            КОМОбъект = Новый COMОбъект ("WScript.Network");
            //возвращает массив, в котором на принтер идет два элемента - порт и локальное имя.
            Принтеры = КОМОбъект.EnumPrinterConnections();
            Сч = 0;
            // соответственно нам нужен каждый второй элемент массива
            Пока Сч < Принтеры.Count()-1 Цикл
                Список.Добавить(Принтеры.Item(Сч+1), Принтеры.Item(Сч+1));
                Сч = Сч + 2;
            КонецЦикла;
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;
    #КонецЕсли
    Возврат Список;
    
КонецФункции
AnryMc,
23.10.23, 12:22 Копирование Таблицы значений с отбором
kostya77 @ Сегодня, 11:51 * ,
типа такого кода .
выгрузите ТЧ в таблицу значений, а потом:
    ТЗ.Свернуть("Контрагент,,","");   //указываете реквизиты, которые нужны на печати
    ТЗ.Сортировать("+1");
    
    Сч         = 0;    
    Итого     = 0;
    Состояние("Заполнение выходной таблицы...");
    
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Таб.ВывестиСекцию("Шапка");
    
    ТЗ.ВыбратьСтроки();
    ТекКонтрагент     = "Начало";
    СуммаКонтрагент = 0;    
    Пока ТЗ.ПолучитьСтроку() = 1 Цикл
        Сч=Сч+1;
        
        Контрагент          = ТЗ.Контрагент;
        ..........        
        //указываете реквизиты, которые нужны на печати
        
        СуммаВсего             = ТЗ.Контрагент.Итог("Сумма");

        Если ТекКонтрагент<>ТЗ.Контрагент Тогда
            Если СуммаКонтрагент<>0 Тогда
                Таб.ВывестиСекцию("ИтогоКлиент");
            КонецЕсли;
            ТекКонтрагент = ТЗ.Контрагент;
            СуммаКонтрагент = 0;
        КонецЕсли;

        Итого = Итого + СуммаВсего;
        Таб.ВывестиСекцию("Строка");
        
        СуммаКонтрагент = СуммаКонтрагент + СуммаВсего;
        ТекстВсего = "РАЗОМ ПО контрагенту: " + Контрагент;
    КонецЦикла;
    Таб.ВывестиСекцию("ИтогоКлиент");
    Таб.ВывестиСекцию("Подвал");
    
    Таб.ТолькоПросмотр(1);
        Таб.Показать("Моя таблица", "");


код примерный, может где то и есть ошибка, но идея такая
kostya77,

6 страниц V   1 2 3 > » 
RSS Текстовая версия Сейчас: 22.05.24, 10:04
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!