kayfatuch @ Сегодня, 14:23
, Добавьте реквизит в документ "Цена старая", т.к. "цена" периодический реквизит и в ТиС есть такое понятие как "категория цен". То при изменении товара -
спр=СоздатьОбъект("Справочник.Цены"); спр.ИспользоватьВладельца(Товар); Цена = 0; Если спр.НайтиПоРеквизиту("КатегорияЦены",ВыбКатегорияЦен,0)=1 Тогда // пишите например сюда "Учетная" или там какую хотите получать цену ЦенаСтарая=спр.Цена.Получить(ДатаДок); // или например НачМесяца(Датадок) будем получать цену на начало месяца 01/06/2024 и т.д. КонецЕсли;
AnryMc @ Сегодня, 11:20
, вот такой вариант еще нащел:
//Как легко запускать выполнение в фоне, не прибегая к долгому описанию фоновых процедур. //Не буду растекаться мыслью по дереву и тянуть кота за все известные места, так как надеюсь, все согласятся, что фоновое выполнение это хорошо. Есть простой путь запускать любой код в фоне. Специалисты скорее //всего такой способ используют, но что-то в инете я описания не встретил, решил выложить.
//Перво-наперво создаем общий модуль с именем например "ФоновоеВыполнение" с галкой "Сервер". Добавим туда пару процедур:
Функция ЗапуститьФоновоеВыполнение(ТекстПроцедуры,СтруктураПараметров=Неопределено) Экспорт УникальныйИдентификатор = Новый УникальныйИдентификатор; ПараметрыВыполнения = Новый Массив; ПараметрыВыполнения.Добавить(ТекстПроцедуры); ПараметрыВыполнения.Добавить(СтруктураПараметров);
Процедура ФоноваяПроцедура(ТекстМодуля,ПараметрыВыполнения) Экспорт ПолныйТекстМодуля = ""; Для Каждого ТекПараметр Из ПараметрыВыполнения Цикл ПолныйТекстМодуля = ПолныйТекстМодуля+ТекПараметр.Ключ+"=ПараметрыВыполнения."+ТекПараметр.Ключ+";"+Символы.ПС; КонецЦикла; ПолныйТекстМодуля = ПолныйТекстМодуля + ТекстМодуля; Выполнить(ПолныйТекстМодуля); КонецПроцедуры //И готово!
//Теперь для выполнения когда в любой момент мы можем поместить любую процедуру в текстовую переменную:
ТекстФоновойПроцедуры = " |//Тут передаем текст фоновой процедуры, это может быть вызов каких то процедур или полноценный код |//вызов процедур проще, т.к. тупо легче отлаживать, т.к. код в этой процедуре обычной отладке не поддастся, |//а при вызове процедуры или функции мы ставим там точку останова и включаем в отладке автоматическое |//подключение фоновых заданий. Запускать можно любые методы для выполнения на сервере. | |ОбщийМодульСервер.ВыполнитьНужнуюЗадачу(Парметр1,Парметр2);" И вызывать ее выполнение:
AnryMc @ Сегодня, 9:20
, Я делал когда-то обработку в фоновом режиме "корректировка ответственных в документах РТиУ" Может и не то что Вам надо, но делал так и подключал в 1с 8 в фоновых заданиях запуск обработки по времени(получилось, то что надо заказчику;
//Обработка элементов форматированного документа, входящего в состав параграфа, может оказаться полезной в том случае, //если нужно, например, убрать все оформление в виде курсива или полужирного шрифта.
//Пример:
Полужирный = Новый Шрифт(, , Истина); Курсив = Новый Шрифт(, , , Истина); Обычный = Новый Шрифт; Для каждого Элемент Из Параграф.Элементы Цикл Если ТипЗнч(Элемент) = Тип("ПереводСтрокиФорматированногоДокумента") Тогда Продолжить; КонецЕсли; Если Элемент.Шрифт = Полужирный Или Элемент.Шрифт = Курсив Тогда Элемент.Шрифт = Обычный КонецЕсли; КонецЦикла;
AnryMc @ Сегодня, 14:35
, Доброго дня! В 1с 8 нічого не змінював. А ось в 1с:7.7, яка і досі в нас працює на підприємстві, багато чого доробляли але все під забаганки нашоїх бухгалтерії (нові документи, зміна проводок і таке інше).
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)+"]"; //красный фон КонецЕсли; КонецЕсли; Возврат ""; КонецФункции
url_2l @ Сегодня, 13:14
, Доброго дня! Є такий приклад в моїй конфігурації. В документі списання на виробництво - при зміні реквизиту "підрозділ у шапці документу, заповнюємо підрозділ в рядках документу
текОтвет = Вопрос("У документі змінено реквізит підрозділу. Заповнити підрозділ по рядкам документу?","Да+Нет"); Если текОтвет = "Да" Тогда ВыбратьСтроки(); Пока ПолучитьСтроку()=1 Цикл СтрУчасток = Подразделение; КонецЦикла; КонецЕсли;
//або ось так: якщо заповнено реквізит "разрешил" в документі "заказ", то ставимо "да" для "готов к получению" Если ПустоеЗначение(Разрешил)=0 Тогда ГотовКПолучению = Перечисление.ДаНет.Да; Иначе ГотовКПолучению = Перечисление.ДаНет.Нет; КонецЕсли;
Платформа 1с 7.70.027 должна у Вас быть. И попробуй из этого мд-файла в конфигураторе сделать: "загрузить измененную конфигурацию" в меню конфигурация - загрузить измененную конфигурацию. У Вас проблема для некоторых субконто (материалы и что-то еще) изменено "предсталение".
kserg2012 @ Вчера, 14:47
, Доброго дня! Користувався платформою 1С:Предприятие 8.3.13.1513, потім ставив 8.3.16.1148. Все наче було стабільно на різних конфігураціях. Але ніколи "не ганявся" за плаформами, поставив - працює все, що мені треба і ОК,
Вывод картинки (изображения) на печать, в макет (табличный документ) Код 1C v 8.х // 1-й вариант //Как вывести картинку в табличный документ?
ТабДок = Новый ТабличныйДокумент; Макет = ОбработкаОбъект.ПолучитьМакет("Макет"); ОбластьКартинки = Макет.ПолучитьОбласть("ОбластьСКартинкой"); Картинка = Новый Картинка(ПутьККартинке);
// Элемент управления "Логотип" входит в коллекцию картинок области. ОбластьКартинки.Рисунки.Логотип.Картинка = Картинка; ТабДок.Вывести(ОбластьКартинки);
ТабДок.Показать();
// 2-й вариант //Как вывести картинку в табличный документ без изменения макета?
//3-й вариант //ПечатьОрганизации , добавляем в макет картинку с именем Картинка1 в самую нижнюю //область с именем ОбластьПечатьОрганизации ОбластьПечатьОрганизации = Макет.ПолучитьОбласть("ПечатьОрганизации"); Картинка= Новый Картинка("C:\files\img\печатьОрганизации.gif"); ОбластьПечатьОрганизации.Рисунки.Картинка1.Картинка = картинка; ТабДок.Вывести(ОбластьПечатьОрганизации);
//5-й вариант получение картинки из хранилища значений // Выборка.Изображение - выборка из запроса, Изображение реквизит -хранил. значений Попытка Путь = КаталогВременныхФайлов()+ "\1С_Картинка_"+Формат(ТекущаяДата(),"ДФ=yyyyMMddЧЧммсс")+".bmp"; КартинкаВПамяти = Выборка.Изображение.Получить(); КартинкаВПамяти.Записать(Путь); ОбластьСостав.Рисунки.D1.Картинка = Новый Картинка(Путь); Исключение ОбластьСостав.Рисунки.D1.Картинка = Новый Картинка; КонецПопытки;
Печать файла в формате 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 [ [ []]] - распечатать файл на указанном принтере
Иначе Сообщить("Не установлен 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
Табл.Автомасштаб=Истина; Табл.Имяпринтера="Bullzip PDF Printer";
PDFФайл = Новый Файл(PDF_File); Если НЕ PDFФайл.Существует() Тогда Табл.Напечатать(Истина); Пока НЕ PDFФайл.Существует() Цикл ОбработкаПрерыванияПользователя(); //ТаймерЗадержки; КонецЦикла; КонецЕсли;
КонецПроцедуры
Вроде как пишут, что PDF просто так не распечатаешь, нужно устанавливать сторонние программы/компоненты и печатать через них.
&НаКлиенте Процедура Печать(Команда)
// Получаем путь файла ПутьКФайлу = "D:\test.pdf"; // Получаем список доступных принтеров СписокПринтеров = ПолучитьСписокПринтеров(); // выбираем нужный принтер ЗначениеВыбора = СписокПринтеров.ВыбратьЭлемент("Выберите принтер",СписокПринтеров[0]); Если ЗначениеВыбора = Неопределено Тогда Возврат; КонецЕсли;
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");
НаименованиеПринтера = ""; Если ЗначениеЗаполнено(ИмяПринтера) Тогда НаименованиеПринтера = """"+ ИмяПринтера + """"; КонецЕсли;
ЗаданиеДобавлено = Ложь; ТекущееВремя = ТекущаяДата(); Пока Не ЗаданиеДобавлено И ТекущаяДата() < ТекущееВремя + 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; КонецЦикла; Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; #КонецЕсли Возврат Список;
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!