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

Хранилище

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

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



История благодарностей участнику denis84 ::: Спасибо сказали: 144 раз
Дата поста: В теме: За сообщение: Спасибо сказали:
19.10.22, 12:41 Как оформить html-текст для корректного отображения в браузере
kserg2012 @ Сегодня, 11:58 * ,

Вот здесь можно прочитать:

ссылка



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 имеет встроенный механизм работы со ссылками на объекты БД и данная задача наверняка упростится, но это уже другая тема.
kserg2012,
13.10.22, 13:42 Обмін документами через COMСоединение
chernomoretc_cn @ Сегодня, 14:23 * ,
Для "дякую" там, є кнопочка спеціальна
chernomoretc_cn,
13.10.22, 12:33 Обмін документами через COMСоединение
ось у мене такий приклад:

Попытка 
    v8=Коннектор.Connect("Srvr="""+СокрЛП(ИмяСервера)+""";Ref="""+СокрЛП(ИмяБазы)+""";Usr="""+СокрЛП(Логин)+""";Pwd = """ + СокрЛП(Пасворд) + """;");
Исключение
    Предупреждение("База Данных не открыта!!!");
    сообщить(ОписаниеОшибки());
    Возврат;
КонецПопытки;    
    
НовыйДокумент = v8.Документы.МойДокумент.СоздатьДокумент();
НовыйДокумент.Записать(v8.РежимЗаписиДокумента.Проведение);
chernomoretc_cn,
11.10.22, 9:04 Таблица значений не сохраняет ссылку на документ
Вот у меня есть такой пример:

Док=СоздатьОбъект("Документ.Перемещение");
тз.Документ = Док.ТекущийДокумент(); // это будет ссылка на документ.


дайте больше информации
kostya77,
23.09.22, 15:44 Не работает выборка документов
4andriy @ Сегодня, 14:52 * ,
исходя из ошибок, то получается. Что у вас в расходной накладной нет реквизита "СуммаБезНДС" и далее по тексту.
4andriy,
23.09.22, 15:10 запуск 1с на windows xp и 7 паралельно
4andriy @ Сегодня, 15:33 * ,
Для того чтобы исправить данную ошибку в 1С 7.7, достаточно поместить файл без содержимого с названием «OrdNoChk. prm» в папку BIN с установленной программой. Например, если 1С расположена по адресу «C:\Program Files (x86)\1Cv77», то необходимо создать файл в папке «C:\Program Files (x86)\1Cv77\BIN».

Мне помогло, когда то такое
4andriy,
22.09.22, 19:11 ошибка при открытии обработки
4andriy @ Сегодня, 19:31 * ,
Там объявлено как переменная. А обращаетесь как к функции
4andriy,
23.08.22, 13:26 вывести на печать свой реквизит
alla35 @ Сегодня, 13:05 * ,
Обратиться за помощью к программисту. Как вариант, если хотите сами разобраться,то в инете есть инфа как создавать внешние печатные формы.
nik389,
14.07.22, 11:01 УПП 1.3 добавить +380 при добавлении телефона
burza @ Сегодня, 10:42 * ,
Добрый день! Смотри в конфигураторе. В общих модулях, есть модуль "УправлениеКонтактнойИнформацией", а в нем есть функция

В этой фукции есть такая строка:
СтруктураШаблонов = Константы.ШаблоныТелефонныхНомеров.Получить().Получить();


Откройте константы - настройка программы- CRM и там шаблоны телефонов
burza,
25.04.22, 15:28 История значений в табличных частях справочников , в модулях формы документов
andrew76 @ 25.02.22, 9:34 * ,
Я делал так создавал новый реквизит "ИсторическоеНаименование" в него записывали на определенную дату (до и после переименования) наименования подразделения. Потом во всех документах на печатных формах и т.д. писал

Подразделение.ИсторическоеНаименование.Получить(ДатаДок);
One,
15.02.22, 9:34 как вытащить регистратор из виртуальной таблицы остатки обороты
lolmatrix @ Сегодня, 9:09 * ,
Добрый день! Укажите параментры виртуальной таблицы,если я Вас правильно понял:



TipsyKID, Vofka,
02.02.22, 8:40 QR код в 1с77
формекс

себе качал и все заработало
igmig65,
02.02.22, 6:46 QR код в 1с77
igmig65 @ Вчера, 15:29 * ,
Скачайте по тем ссылкам последний формекс. И все будет работать
igmig65,
31.01.22, 14:53 QR код в 1с77 igmig65,
28.01.22, 13:52 Не совсем корректно срабатывает событие при Выборе закладки (1с 7.7.025)
andrew76 @ 25.01.22, 9:30 * ,
У меня была такая задача. Надо было проверить заполнение одного реквизита при изменении другого (заполнена ли статья расходов при изменении суммы), статья расходов на второй вкладки, а сумма на первой вкладке. При изменении суммы осуществляется переход на вторую вкладку

Вот такой код был при изменении суммы:

//=============================
Процедура ИзмСумму()    
    Если ПустоеЗначение(СтатьяРасходов) = 1 Тогда
        Форма.ИспользоватьСлой("Дополнительно",2);
        Форма.Закладки.ТекущаяСтрока(2);
        Сообщить("Выберите 'Статью","!");
        Возврат;
    КонецЕсли;    
КонецПроцедуры


может вам так надо написать при открытии формы:

Процедура ПриОткрытии()
      Форма.ИспользоватьСлой("Основные",1);
      Форма.Закладки.ТекущаяСтрока(1);
КонецПроцедуры
andrew76,
21.01.22, 13:07 Добавление колонки в журнал документов
Disly @ Сегодня, 12:59 * ,
Вам эта ссылка помогла? Тогда нажмите "спасибо", есть такая кнопочка
Disly,
21.01.22, 9:33 Добавление колонки в журнал документов
Disly @ Сегодня, 9:23 * ,
Вот посмотрите эту ссылку - ссылка, похоже это ответ на Ваш вопрос
Disly,
02.12.21, 9:37 Как получить уникальный идентификатор элемента справочника ?
andrew76 @ Сегодня, 9:23 * ,
Добрый день! У меня есть такой код получаю по товару

       Спр = СоздатьОбъект("Справочник.Номенклатура");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент() = 1 Цикл
        ИдСтр = ЗначениеВстрокуВнутр(Спр.ТекущийЭлемент());
        ФТ.Ключ.IDINT = ИдСтр;
        Если ФТ.НайтиПоКлючу(0) = 0 Тогда
            Сообщить("Не найден GUID для товара " + Спр.Наименование, "!");
            Продолжить;
        Иначе
            Сообщить(Спр.Наименование, "i");
            Сообщить(ФТ.GUID, " ");
        КонецЕсли;
    КонецЦикла;


denis84 @ Сегодня, 9:35 * ,
В 1С 7.7 можно получить так

Через v7plus.dll
Код 1C v 7.x
 Инфо = СоздатьОбъект("AddIn.V7SysInfo");
ГлобальноУникальныйИдентификатор = Инфо.СоздатьGUID();


Через WScript
Код 1C v 7.x

 Функция СоздатьGUID()
TypeLib = CreateObject("Scriptlet.TypeLib");
NewGUID = TypeLib.Guid();
TypeLib = "";
Возврат NewGUID;
КонецФункции

//*******************************************
Процедура Сформировать()
g=СоздатьGUID();
Сообщить("Создан GUID: "+g);
КонецПроцедуры



при OLE доступе:
Код 1C v 7.x
 Если Док_Источник.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода) = 1 Тогда
Пока Док_Источник.ПолучитьДокумент() = 1 Цикл
Объект = БазаОле.ЗначениеВстрокуВнутр(Док_Источник.ТекущийДокумент());
ИдентификаторДокумента = СокрЛП(ПолучитьИД(Объект));
// Для примера Объект возвращает {"O","0","0","3114","0","0"," 258156CB "},
// а ПолучитьИД(объект) = 258156CB
КонецЦикла;


Еще посмотрите метод:
ЗначениеВСтрокуВнутр(<?>);
Синтаксис:
ЗначениеВСтрокуВнутр(<Объект>)
Назначение:
Преобразование значения объекта агрегатного типа в строковое системное представление.
Возвращает: представление значения объекта в строковом системном виде.
Параметры:
<Объект> - значение объекта агрегатного типа данных которое нужно преобразовать.[/code]
Vofka,
29.11.21, 14:19 Документ: точность суммы метода Итог(). Можно ли изменить? Или где определяется
boser @ Сегодня, 13:06 * ,
а если после запятой не будет цифры,т.е. все суммы у Вас без копеек, то Вам покажет целое число?

считаете все как есть, а потом формат(Итог("СуммаБезНДС"),"Ч15.2");
boser,
05.10.21, 8:29 изменить колличество символов в сотрудниках
4andriy @ Вчера, 22:21 * ,
Андрей, я же Вам скинул картинку. Там на ней есть "длина кода", "длина наименования". Повторяю еще раз код и наименования то стандартный реквизит для всех справочников!!! остальные реквизиты Вы сами добавляете.
4andriy,
30.09.21, 14:38 цикл для контрагентов
4andriy @ Сегодня, 15:28 * ,
а если так:

Спр.НайтиПоНаименованию(Контрагенты.договор.Наименование,0);


а меняете договора? а зачем записываете справочник контрагентов?
4andriy,
28.08.21, 14:21 возможно ли изменить доступность колонки в текущей строке
lolmatrix @ Сегодня, 6:34 * ,
Если формы управляемые можно попробовать через условное оформление
lolmatrix,
21.08.21, 8:42 Печать Долг клиента в печатной форме Реализация товаров и услуг УТ11 Управляемые формы
seregapplk @ Сегодня, 9:08 * ,
Запрос2 = Новый Запрос(

        "ВЫБРАТЬ
        |    РасчетыСКлиентамиОстаткиИОбороты.СуммаКонечныйОстаток КАК СуммаКонечныйОстаток,
        |    РасчетыСКлиентамиОстаткиИОбороты.АналитикаУчетаПоПартнерам КАК АналитикаУчетаПоПартнерам,
        |    РасчетыСКлиентамиОстаткиИОбороты.Регистратор КАК Регистратор
        |ИЗ
        |    РегистрНакопления.РасчетыСКлиентами.ОстаткиИОбороты(, , Регистратор, Движения, ) КАК РасчетыСКлиентамиОстаткиИОбороты
        |ГДЕ
        |    РасчетыСКлиентамиОстаткиИОбороты.АналитикаУчетаПоПартнерам.Контрагент = &Контрагент
        |    И РасчетыСКлиентамиОстаткиИОбороты.Период = &Регистратор" );
        
        Запрос2.УстановитьПараметр("Контрагент", ДанныеПечати.Получатель);
        Запрос2.УстановитьПараметр("Регистратор", ДанныеПечати.Дата);
        Результат2 = Запрос2.Выполнить();
        
        ВыборкаДетальныеЗаписи2 = Результат2.Выбрать();

        Если ВыборкаДетальныеЗаписи2.Следующий() Тогда
            КонечныйДолг = ВыборкаДетальныеЗаписи2.СуммаКонечныйОстаток;
            Если КонечныйДолг < 0 Тогда
                ОбластьМакета.Параметры.ДолгИнфа = "Предоплата контрагента с учетом этой накладной составляет  " + (-1)*КонечныйДолг + " руб.";
            Иначе
                ОбластьМакета.Параметры.ДолгИнфа = "Задолженность контрагента с учетом этой накладной составляет  " + КонечныйДолг + " руб.";
            КонецЕсли;    
        Иначе
            ОбластьМакета.Параметры.ДолгИнфа = "";
        КонецЕсли;


подправьте под себя и используйте
seregapplk,
20.08.21, 10:50 Как организовать выборку по датам из запроса
vol235 @ Сегодня, 11:41 * ,
а в запросе добавить группировка день? Если правильно понял Вашу задачу
vol235,
26.07.21, 10:38 Запрос СКД по цене ресурсов на дату burza,

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