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
, Ну ручной операцией можно. Но это только по счетам, а вот по регистрам надо другим документом типа корректировка регистров. Другого ничего не нашел в утп. Надо читать литературу.
Ledi29 @ Вчера, 22:46
, Перечисление "СтавкиНДС". В конфигураторе добавить новое значение перечисления. Но этого мало потом, необходимо еще в общих модулях (или модулях документов) описать расчет ставки НДС.
Максон @ Сегодня, 14:38
, В конфигураторе. Находите свой документ. Открываете его форму и там есть макеты печатных форм. И там уже их правите, как хотите. Но если не сильно ориентируетеся в 1с, лучше обращаться к программистам 1с
MK-61 @ Вчера, 15:59
, Добрый день! Попробовал у себя на конфигурации 1с7.7 "ПУБ" в монополном режиме изменить расчет БИ. Установил расчет бухгалтерских итогов на 4 квартал 2022. Прошло без вопросов. До этого расчет БИ стоял 4 квартал 2030 года.
1С 8.x : Формирование HTML-документа, содержащего ссылки на объекты базы данных В данной статье рассматривается способ программного формирования HTML документа, содержащего ссылки на объекты базы данных 1С, такие как справочники, документы и т.д. Показан пример построения обработчика события OnClick ПоляHTMLДокумента, для обработки клика на html-ссылке.
Предисловие Однажды, дописывая обработку, создающую и модифицирующую, не суть важно какие документы, я подумал, что неплохо было бы вывести для пользователя некое резюме: “Создан документ такой-то” “Изменен документ такой-то” и т.д. От обычного, в таких случаях, вывода информации в окно сообщений я сразу отказался, так как не удобно это, сначала читать в окне сообщений “Создан документ … ” а потом запоминать его номер, открывать соответствующий журнал (или форму списка) и искать там этот документ. А если документов много и пользователь хочет посмотреть все документы?(или выборочно) Насколько это неудобно я убедился при отладке обработки … То, что в форме есть элемент управления именуемый ПолеHTMLДокумента я конечно знал, но вот представилась возможность познакомиться с ним поближе. Было решено реестр обработанных документов выводить в виде html документа содержащего ссылки на эти самые документы, а по клику на ссылке открывать форму соответствующего документа. Здесь мне многие могут возразить: “А почему бы для этих целей не использовать обычный макет, выводимый в табличный документ, а для открытия документов использовать расшифровку? И чем Ваш способ лучше?” Отвечаю: Конечно можно использовать, и мой способ ничем не лучше. Он просто другой. Ведь у хорошего программиста для решения одной задачи должно быть в арсенале несколько инструментов. Итак, перейдем от слов к делу, в рамках данной статьи рассмотрим следующую задачу: Сформировать html-документ, содержащий ссылки на элементы справочника номенклатура, по клику требуется открывать форму соответствующего элемента. Создаем новый отчет, его форму, на форме размещаем элемент управления ПолеHTMLДокумента.
Текст модуля формы: Код 1C v 8.х
Процедура ДобавитьТекстHTML(ТекстHTML, Элемент); // Ссылку будем формировать хитро: // Предполагаем что символ "-" не входит в имена объектов метаданных, // учавствующих в формировании html // Тогда ссылка будет иметь следующий вид: // Номенклатура-d341d377-b3b1-11dc-a100-0011d85708ff // Передавать нашу ссылку будем через атрибут id СсылкаНаЭлемент = Элемент.Метаданные().Имя+"-" +Элемент.Ссылка.УникальныйИдентификатор(); ТекстHTML.ДобавитьСтроку("<A id=""" + СсылкаНаЭлемент + """ href= """ + Элемент + """ >"+Элемент+"</A><BR>"); КонецПроцедуры
Процедура ДействияФормыСформировать(Кнопка) Запрос = Новый Запрос(" |ВЫБРАТЬ | Номенклатура.Ссылка |ИЗ | Справочник.Номенклатура КАК Номенклатура"); ТекстHTML = Новый ТекстовыйДокумент; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ДобавитьТекстHTML(ТекстHTML, Выборка.Ссылка); КонецЦикла; ЭлементыФормы.ПолеHTMLДокумента.УстановитьТекст(ТекстHTML.ПолучитьТекст()); КонецПроцедуры
Ну вот html мы сформировали, теперь чтобы ссылки “ожили” надо написать обработчик события OnClick элемента управления ПолеHTMLДокумента. Код 1C v 8.х
// Функция получает элемент - <A> по данному элементу // Производит поиск элемента <A> среди родительских элементов данного // // Параметры: // Элемент - COMОбъект, элемент HTML документа, // по которому нужно найти ссылку // // Возвращаемое значение: // COMОбъект - если ссылка обнаружена, иначе - Неопределено
Функция НайтиСсылку(Элемент) Врем = Элемент; Пока Врем <> Неопределено Цикл Если НРег(Врем.tagName) = "a" Тогда Возврат Врем; КонецЕсли; Врем = Врем.parentElement; КонецЦикла; Возврат Неопределено; КонецФункции // НайтиСсылку(Элемент)
Процедура ПолеHTMLДокументаonclick(Элемент, pEvtObj) htmlElement = НайтиСсылку(pEvtObj.srcElement); // Анализируем если произошло нажание не ссылку Если htmlElement <> Неопределено Тогда // Если у ссылки есть идентификатор Если СокрЛП(htmlElement.id) <> "" Тогда // Получаем адрес ссылки из атрибута id СсылкаНаЭлемент = htmlElement.id; Разделитель = Найти(СсылкаНаЭлемент,"-"); Если Разделитель > 0 Тогда // Получаем тип элемента ТипЭлемента = Лев(СсылкаНаЭлемент,Разделитель-1); // Получаем УникальныйИдентификатор ГУИД = Сред(СсылкаНаЭлемент,Разделитель+1); Справочники[ТипЭлемента].ПолучитьСсылку( Новый УникальныйИдентификатор(ГУИД)).ПолучитьФорму().Открыть(); КонецЕсли; // Не отработали нажатие pEvtObj.returnValue = Ложь; КонецЕсли; КонецЕсли; КонецПроцедуры
Всё можно пробовать!
Заключение Обратите внимание что ссылку я формировал следующим образом: <ИмяОбъектаМетаданных>-<УникальныйИдентификатор> это сделано для того, чтобы в обработчике onclick можно было определить к какому объекту метаданных относится данный УникальныйИдентификатор, потому что имея ТОЛЬКО УникальныйИдентификатор невозможно определить к какому объекту метаданных он относиться. Точнее возможно, но уж слишком долго и неудобно – путем перебора всех метаданных в цикле, для каждого объекта метаданных выполнять попытку <ОбъектМетаданных>.ПолучитьСсылку(Новый УникальныйИдентификатор(НашУникальныйИдентификатор)) Хотя в нашем примере только один справочник, и указывать его вид было необязательно, и так понятно что это УникальныйИдентификатор элемента справочника Номенклатура, но вдруг Вам потребуется работать с несколькими справочниками, вот тут то мой способ задания ссылки Вам и пригодится. Скачивать файлы может только зарегистрированный пользователь!
P.S. Платформа 8.2 имеет встроенный механизм работы со ссылками на объекты БД и данная задача наверняка упростится, но это уже другая тема.
4andriy @ Сегодня, 15:33
, Для того чтобы исправить данную ошибку в 1С 7.7, достаточно поместить файл без содержимого с названием «OrdNoChk. prm» в папку BIN с установленной программой. Например, если 1С расположена по адресу «C:\Program Files (x86)\1Cv77», то необходимо создать файл в папке «C:\Program Files (x86)\1Cv77\BIN».
alla35 @ Сегодня, 13:05
, Обратиться за помощью к программисту. Как вариант, если хотите сами разобраться,то в инете есть инфа как создавать внешние печатные формы.
andrew76 @ 25.02.22, 9:34
, Я делал так создавал новый реквизит "ИсторическоеНаименование" в него записывали на определенную дату (до и после переименования) наименования подразделения. Потом во всех документах на печатных формах и т.д. писал
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!