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; КонецЦикла; Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; #КонецЕсли Возврат Список;
ТЗ.ВыбратьСтроки(); ТекКонтрагент = "Начало"; СуммаКонтрагент = 0; Пока ТЗ.ПолучитьСтроку() = 1 Цикл Сч=Сч+1;
Контрагент = ТЗ.Контрагент; .......... //указываете реквизиты, которые нужны на печати
СуммаВсего = ТЗ.Контрагент.Итог("Сумма");
Если ТекКонтрагент<>ТЗ.Контрагент Тогда Если СуммаКонтрагент<>0 Тогда Таб.ВывестиСекцию("ИтогоКлиент"); КонецЕсли; ТекКонтрагент = ТЗ.Контрагент; СуммаКонтрагент = 0; КонецЕсли;
ПодчДокументы = ""; ДокПодч = СоздатьОбъект("Документ"); Если ДокПодч.ВыбратьПодчиненныеДокументы(,,ВашДокумент) = 1 тогда Пока ДокПодч.ПолучитьДокумент() = 1 Цикл ДокПодч.СнятьПометкуУдаления(); КонецЦикла; КонецЕсли;
зробили перше оновлення з релізу 1.2.54. зберегли конфігурації і так далі... можливо треба ще запускати "підпрємство" кожен раз. я давно не оновлював колнфігураціїї.
kserg2012 @ Сегодня, 12:35
, видел такие ставки, как 500 грн час. Сам я подхожу индивидуально к задаче. Иногда ставлю сумму в целом выполненую задачу, а иногда считаю по часам.
ИТС запрещает использовать ТекущаяДата(), но исчерпывающей информации на вопрос "Почему?" нет ни там, ни на ИС, поэтому написал данную заметку. Тем не менее, совсем не знакомым с темой, стоит прочитать статью на ИТС (по этой ссылке)и бегло статью на ИС "О времени и 1С" (к сожалению, ровно через неделю после моей публикации Юрий Пермитин удалил все свои статьи с инфостарта и ссылка уже не действительна).
Цитаты с ИТС:
2.1. Во всех серверных процедурах и функциях вместо функции ТекущаяДата, которая возвращает дату и время серверного компьютера, следует использовать функцию ТекущаяДатаСеанса, которая приводит время сервера к часовому поясу пользовательского сеанса.
3.1. В клиентском коде использование функции ТекущаяДата также недопустимо. Это требование обусловлено тем, что текущее время, вычисленное в клиентском и серверном коде, не должно различаться.
2.2. В тех случаях, когда требуется «универсальная» отметка времени, не зависящая от часового пояса текущего сеанса пользователя, в контексте которого выполняется серверный вызов, следует использовать функцию УниверсальноеВремя.
А именно остались вопросы:
1. Раз уж по неведомой пока причине, запретили использовать ТекущаяДата(), то почему бы вместо неё не дать возможность всегда использовать ТекущаяДатаСеанса()? Почему в платформе не сделали функцию ТекущаяДатаСеанса() доступной на клиенте? Тем более, что инфа о времени сеанса клиента изначально физически лежит на клиенте.
Потому что ТекущаяДатаСеанса() - согласно СП это серверная дата и время + часовой пояс клиента. А значит мы страхуемся от того, что на клиенте время вообще от балды идёт, например отстаёт на секунду.
2. Хорошо, раз на клиенте недоступна ТекущаяДатаСеанса(), то почему ИТС не разрешает на клиенте вызывать ТекущаяДата()? Ведь ТекущаяДатаСеанса() выполненная на сервере по идее будет равняться ТекущаяДата() выполненная на клиенте. Вместо этого ИТС рекомендует вызывать метод БСП ДатаСеанса(), который как раз и вернёт значение равное ТекущаяДатаСеанса() только при этом не будет делать серверный вызов, за счёт того, что он был сделан однократно в начале сеанса и была вычислена ПоправкаКВремениСеанса = ТекущаяДатаСеанса(вычисленная на сервере) - ТекущаяДата(вычисленная на клиенте).
Ответ на данный вопрос вытекает из предыдущего: серверное и клиентское время время может отличаться не только на часовой пояс, и единственный выход пользоваться одинаковым временем, это брать его с сервера и добавлять клиентские часовые пояса - т.е. ровно то, что и делается в ТекущаяДатаСеанса() и ДатаСеанса()
Второй аргумент подсказал коллега (в достоверности не могу ручаться): ТекущаяДатаСеанса() на сервере и ТекущаяДата() на клиенте могут отличаться во фреше, т.к. это эталонное время для области в которой крутится сеанс и время Кластера соответсвенно.
3. Почему в качестве универсального времени ИТС указывает безальтернативно использовать УниверсальноеВремя()? Почему вместо этого нельзя использовать ТекущаяДата() вычисленное на сервере?
ТекущаяДата() на сервере тоже может меняться - например если сервер переехал. Или серверов может быть несколько. Поэтому УниверсальноеВремя() универсально в отличии от ТекущаяДата().
kostya77 @ Сегодня, 9:16
, Такое реализовано у нас для договоров через обработку прикрепленные файлы. Создан каталог для хранения файлов. Выбераем файл
//1 строка - тип //2 строка - длина //3 строка - точность //4 строка - ИД вида объекта //5 строка - флаг неотр. (?) //6 строка - флаг разделения триад (?) //7 строка - ИД объекта Функция ПолучитьИДобъекта(Объект) Перем Стр; Стр=ЗначениеВСтрокуВнутр(Объект); СЗ=СоздатьОбъект("СписокЗначений"); СЗ.ИзСтрокиСРазделителями(Сред(Стр,2,СтрДлина(Стр)-2)); Для Сч=1 По 7 Цикл Если (Сч=4) или (Сч=7) Тогда ДесИД=СЗ.ПолучитьЗначение(Сч); СЗ.УстановитьЗначение(Сч,_IdToStr(ДесИД)); КонецЕсли; КонецЦикла; Возврат СЗ; КонецФункции
//******************************************* Процедура СоздатьКаталогОбъекта() СЗ=ПолучитьИДобъекта(Объект); //Проверим, существует ли каталог для прикрепляемых файлов КаталогФайлов=КаталогИБ()+"Files\"; // "1MZ" - док.Договор Если СокрЛП(СЗ.ПолучитьЗначение(4)) = "1MZ" Тогда КаталогФайлов=КаталогИБ()+"Files\"; КонецЕсли; Если ФС.СуществуетФайл(КаталогФайлов)=0 Тогда //Если каталога нет, ФС.СоздатьКаталог(КаталогФайлов); //то создадим его. КонецЕсли; //Проверим, существует ли каталог для записи файлов объектов данного типа КаталогТипаОбъекта=КаталогФайлов+СокрЛП(СЗ.ПолучитьЗначение(1))+"\"; Если ФС.СуществуетФайл(КаталогТипаОбъекта)=0 Тогда //Если каталога нет, ФС.СоздатьКаталог(КаталогТипаОбъекта); //то создадим его. КонецЕсли; //Проверим, существует ли каталог для записи файлов объектов данного вида КаталогВидаОбъекта=КаталогТипаОбъекта+СокрЛП(СЗ.ПолучитьЗначение(4))+"\"; Если ФС.СуществуетФайл(КаталогВидаОбъекта)=0 Тогда //Если каталога нет, ФС.СоздатьКаталог(КаталогВидаОбъекта); //то создадим его. КонецЕсли; //Проверим, существует ли каталог для записи файлов этого объекта КаталогОбъекта=КаталогВидаОбъекта+СокрЛП(СЗ.ПолучитьЗначение(7))+"\"; Если ФС.СуществуетФайл(КаталогОбъекта)=0 Тогда //Если каталога нет, ФС.СоздатьКаталог(КаталогОбъекта); //то создадим его. КонецЕсли; КонецПроцедуры
//********************************************* Процедура ВыбратьФайл() ТекКат=""; ИмяФайла=""; ИмяФайла1=""; Если ФС.ВыбратьФайл(0,ИмяФайла,ТекКат,"Выберите файл:",,,120)=1 Тогда Если ФС.СуществуетФайл(КаталогОбъекта)=0 Тогда СоздатьКаталогОбъекта(); КонецЕсли; //Приведём длину имени файла в соответствие... МаксДлИмениФайла=120; ПозРасш=НайтиПослВх(ИмяФайла,"."); РасшФайла=Прав(ИмяФайла,СтрДлина(ИмяФайла)-ПозРасш); НазвФайла=Лев(ИмяФайла,Мин(ПозРасш-1,МаксДлИмениФайла-СтрДлина(РасшФайла)-1)); ИмяФайла1=НазвФайла+"."+РасшФайла; //Проверим, есть ли такой файл в папке... Если ФС.СуществуетФайл(КаталогОбъекта+ИмяФайла)=1 Тогда //Проверим наличие файла с таким же именем в каталоге приёмнике Если Не(Вопрос("Файл с именем "+ИмяФайла+" |в каталоге "+КаталогОбъекта+" уже существует! |Перезаписать файл "+ИмяФайла+"?","Да+Нет+Отмена",30)="Да") Тогда Возврат; КонецЕсли; КонецЕсли; Если ФС.СуществуетФайл(КаталогОбъекта+"files.vtf")=0 Тогда СоздатьКаталогОбъекта(); КонецЕсли; //Копируем файл в папку... ФС.КопироватьФайл(ТекКат+ИмяФайла,КаталогОбъекта+ИмяФайла1,0); Иначе Возврат; КонецЕсли; КонецПроцедуры
Есль такой вариант (но я не проверял): Добавь в док реквизит текстовый и кнопку на форму для выбора файла, при выборе файла в реквизит попадает путь + имя файла , а на кнопку открытия вешай :
Если КонтрагентДляОтбора.Выбран()>0 Тогда УстановитьОтбор("Контрагент", КонтрагентДляОтбора); КонтрагентДляОтбора = КонтрагентДляОтбора.ТекущийЭлемент(); Иначе УстановитьОтбор(""); КонецЕсли;
Если ПустоеЗначение(ВидДокументаДляОтбора) = 1 Тогда ВидДокументаДляОтбора=1; КонецЕсли; УстановитьОтбор(СписокВидовДокументов.ПолучитьЗначение(ВидДокументаДляОтбора), );
Если АвторДляОтбора.Выбран()>0 Тогда УстановитьОтбор("Автор", АвторДляОтбора); АвторДляОтбора = АвторДляОтбора.ТекущийЭлемент(); Иначе УстановитьОтбор(""); КонецЕсли;
Если ФирмаДляОтбора.Выбран()>0 Тогда УстановитьОтбор("Фирма", ФирмаДляОтбора); ФирмаДляОтбора = ФирмаДляОтбора.ТекущийЭлемент(); Иначе УстановитьОтбор(""); КонецЕсли;
Если ВидОтбора.ТекущаяСтрока() = 6 Тогда // нет быстрого отбора Возврат; КонецЕсли;
ЗначениеИзменилось=0;
Если ВидОтбора.ТекущаяСтрока() = 1 Тогда СтароеЗначение=КонтрагентДляОтбора; ВыбЗначение = СоздатьОбъект("Справочник.Контрагенты"); Если ВыбЗначение.Выбрать("Выбор контрагента","Форма списка")=1 Тогда КонтрагентДляОтбора = ВыбЗначение; Если ВыбЗначение<>СтароеЗначение Тогда ЗначениеИзменилось=1; КонецЕсли; КонецЕсли;
ИначеЕсли ВидОтбора.ТекущаяСтрока() = 2 Тогда СтароеЗначение=ВидДокументаДляОтбора; Если ПустоеЗначение(ВидДокументаДляОтбора)>0 Тогда ВыбЗначение = ""; Иначе ВыбЗначение = СписокВидовДокументов.ПолучитьЗначение(ВидДокументаДляОтбора); КонецЕсли; СписокВидовДокументов.ВыбратьЗначение(ВыбЗначение,"Выбор вида документов",,,0); ВидДокументаДляОтбора = СписокВидовДокументов.НайтиЗначение(ВыбЗначение); Если ВидДокументаДляОтбора<>СтароеЗначение Тогда ЗначениеИзменилось=1; КонецЕсли;
ИначеЕсли ВидОтбора.ТекущаяСтрока() = 3 Тогда СтароеЗначение=АвторДляОтбора; ВыбЗначение = СоздатьОбъект("Справочник.Пользователи"); Если ВыбЗначение.Выбрать("Выбор автора","Форма списка")=1 Тогда АвторДляОтбора = ВыбЗначение; Если ВыбЗначение<>СтароеЗначение Тогда ЗначениеИзменилось=1; КонецЕсли; КонецЕсли;
ИначеЕсли ВидОтбора.ТекущаяСтрока() = 4 Тогда СтароеЗначение=ТипДляОтбора; Если ПустоеЗначение(ТипДляОтбора)>0 Тогда ВыбЗначение = ""; Иначе ВыбЗначение = ТипыУчета.ПолучитьЗначение(ТипДляОтбора); КонецЕсли; ТипыУчета.ВыбратьЗначение(ВыбЗначение,"Выбор типа учета",,,0); ТипДляОтбора = ТипыУчета.НайтиЗначение(ВыбЗначение); Если ТипДляОтбора<>СтароеЗначение Тогда ЗначениеИзменилось=1; КонецЕсли;
ИначеЕсли ВидОтбора.ТекущаяСтрока() = 5 Тогда СтароеЗначение=ФирмаДляОтбора; ВыбЗначение = СоздатьОбъект("Справочник.Фирмы"); Если ВыбЗначение.Выбрать("Выбор фирмы","Форма списка")=1 Тогда ФирмаДляОтбора = ВыбЗначение; Если ВыбЗначение<>СтароеЗначение Тогда ЗначениеИзменилось=1; КонецЕсли; КонецЕсли;
КонецЕсли;
Если ЗначениеИзменилось=1 Тогда ПриУстановкеБыстрогоОтбора(); КонецЕсли;
Ниже описан порядок действий для добавления "скрепки" (присоединение файлов) к новому документу "НашНовыйДокумент" (как пример).
1. Копируем справочник с наименованием содержащим на конце словосочетание "ПрисоединенныеФайлы". Например "АвансовыйОтчетПрисоединенныеФайлы".
2. Меняем наименование так, чтобы префикс точно соответствовал наименованию документа, а окончание содержало "ПрисоединенныеФайлы". В нашем случае: "НашНовыйДокументПрисоединенныеФайлы".
3. Меняем ТИП у реквизита "ВладелецФайла" справочника "НашНовыйДокументПрисоединенныеФайлы" на "НашНовыйДокумент".
4. Включаем в состав определяемых типов "ПрисоединенныйФайл" и "ПрисоединенныйФайлОбъект" наш новый справочник "НашНовыйДокументПрисоединенныеФайлы".
5. Расширим состав определяемого типа "ВладелецПрисоединенныхФайлов" нашим документом (ДокументСсылка) "НашНовыйДокумент".
6. Расширим состав типов свойства "Источник" у подписки "ПереопределитьПолучаемуюФормуПрисоединенногоФайла", включив в него справочник "НашНовыйДокументПрисоединенныеФайлы".
7. Расширим состав типов свойства "Источник" подписки УстановитьПометкуУдаленияПрисоединенныхФайловДокументов, включив в него наш новый документ (ДокументОбъект) "НашНовыйДокументПрисоединенныеФайлы".
8. Расширим состав общей команды "ПрисоединенныеФайлы" и "ПрисоединенныеФайлыБП", включив в него наш новый документ (ДокументСсылка).
Xmdrug @ Сегодня, 15:22
, Ну ручной операцией можно. Но это только по счетам, а вот по регистрам надо другим документом типа корректировка регистров. Другого ничего не нашел в утп. Надо читать литературу.
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!