Максон @ Сегодня, 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
, Я делал так создавал новый реквизит "ИсторическоеНаименование" в него записывали на определенную дату (до и после переименования) наименования подразделения. Потом во всех документах на печатных формах и т.д. писал
andrew76 @ 25.01.22, 9:30
, У меня была такая задача. Надо было проверить заполнение одного реквизита при изменении другого (заполнена ли статья расходов при изменении суммы), статья расходов на второй вкладки, а сумма на первой вкладке. При изменении суммы осуществляется переход на вторую вкладку
Вот такой код был при изменении суммы:
//============================= Процедура ИзмСумму() Если ПустоеЗначение(СтатьяРасходов) = 1 Тогда Форма.ИспользоватьСлой("Дополнительно",2); Форма.Закладки.ТекущаяСтрока(2); Сообщить("Выберите 'Статью","!"); Возврат; КонецЕсли; КонецПроцедуры
Если Док_Источник.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода) = 1 Тогда Пока Док_Источник.ПолучитьДокумент() = 1 Цикл Объект = БазаОле.ЗначениеВстрокуВнутр(Док_Источник.ТекущийДокумент()); ИдентификаторДокумента = СокрЛП(ПолучитьИД(Объект)); // Для примера Объект возвращает {"O","0","0","3114","0","0"," 258156CB "}, // а ПолучитьИД(объект) = 258156CB КонецЦикла;
Еще посмотрите метод: ЗначениеВСтрокуВнутр(<?>); Синтаксис: ЗначениеВСтрокуВнутр(<Объект>) Назначение: Преобразование значения объекта агрегатного типа в строковое системное представление. Возвращает: представление значения объекта в строковом системном виде. Параметры: <Объект> - значение объекта агрегатного типа данных которое нужно преобразовать.[/code]
4andriy @ Вчера, 22:21
, Андрей, я же Вам скинул картинку. Там на ней есть "длина кода", "длина наименования". Повторяю еще раз код и наименования то стандартный реквизит для всех справочников!!! остальные реквизиты Вы сами добавляете.
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!