Общее·количество·просмотров·страницы

Показаны сообщения с ярлыком . Показать все сообщения
Показаны сообщения с ярлыком . Показать все сообщения

вторник, 13 июля 2021 г.

Как проверить относится ли объект к ссылочному типу данных

 В БСП, есть специальная функция ЗначениеСсылочногоТипа(), она экспортная находится в модуле ОбщегоНазначения. 

Пример вызова

Если ОбщегоНазначения.ЗначениеСсылочногоТипа(Заказы) Тогда

...

На примере базы ЕРП 2.4

вторник, 16 марта 2021 г.

1С, СКД. Программно получить значение параметров отчета из пользовательских настроек.

 Разберем пример получение значения из пользовательских параметров отчета СКД. 

Добавим параметр Валюта в схему компоновки данных, получаем его не из условий запроса а вводим вручную.

     

 Добавим вывод в пользовательские настройки.

 

 Далее в модуле объекта отчета, опишем получение параметра в процедуре ПриКомпоновкеРезультата, она вызывается в момент формирования отчета.

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    УстановитьПривилегированныйРежим(Истина);
    НастройкиПользователя = ПолучитьНастройкиПользователяФранчайзи();
    
    ПараметрКомпоновки = Новый ПараметрКомпоновкиДанных("Валюта");
    ПараметрСКД = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(ПараметрКомпоновки);
    
    Если ПараметрСКД <> Неопределено Тогда
    
        ПользовательскийПараметрВалюты = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ПараметрСКД.ИдентификаторПользовательскойНастройки);   
        Если ПользовательскийПараметрВалюты <> Неопределено Тогда
       
            ВалютаВНастройках  = ПользовательскийПараметрВалюты.Значение;
       
        КонецЕсли;
    
    КонецЕсли; 

 

Кратко поясню, ПараметрКомпоновки создаем новый объект и даем ему наименование сходное с нашим параметром "Валюта". Затем получаем параметр из компоновщика настроек.

И по уникальному идентификатору выполняем поиск в пользовательских настройках компоновщика данных.
 


понедельник, 16 марта 2020 г.

Программная обработка выделенных строк динамического списка.

Как обработать выделенные строки динамического списка.


ВыделенныеСтроки = Элементы.Список.ВыделенныеСтроки; 

Для Каждого Строка Из ВыделенныеСтроки Цикл 

  Элементы.Список.ДанныеСтроки(Строка).ТвойРеквизит;

КонецЦикла;

вторник, 11 февраля 2020 г.

1С. Программная работа с буфером обмена.

Две функции для записи в буфер обмена и получения из него.


&НаКлиенте
Функция ПолучитьТекстБуфераОбмена() Экспорт 


#Если Клиент Тогда 


Объект = Новый COMОбъект("htmlfile"); 


Возврат Объект.ParentWindow.ClipboardData.Getdata("Text"); 


#КонецЕсли 


КонецФункции 




&НаКлиенте
Функция УстановитьТекстВБуферОбмена(Текст) Экспорт 


#Если Клиент Тогда 


Объект = Новый COMОбъект("htmlfile"); 


Объект.ParentWindow.ClipboardData.Setdata("Text", Текст); 


Возврат Текст; 


#КонецЕсли 


КонецФункции 


Через COM объект.

понедельник, 10 февраля 2020 г.

1С. Как в контексте формы проверить открыта форма нового документа или существующего

Простой пример на проверку открытия документа/спр/ и.т. п.:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

 Если Параметры.Ключ = Документы.Задача.ПустаяСсылка() Тогда
 
Объект.Статус = Перечисления.Статус_Задачи.ВПроцессе;  
   
 КонецЕсли;

КонецПроцедуры


Проверку выполняем в событии при создании на сервере, сравниваем с пустой ссылкой на искомый документ.

суббота, 8 февраля 2020 г.

1С. Как понять открылась ли форма подчиненного справочника от владельца или нет.

В ситуации когда необходимо проверить каким образом была вызвана форма подчиненного объекта от владельца или просто открыта списком, использую подобную конструкцию, в событии "ПриСозданииНаСервере":


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   
    Если Параметры.Отбор.Свойство("Владелец") Тогда
   
        Элементы.Код.Видимость = Ложь;
   
    КонецЕсли;
   
КонецПроцедуры


Все просто проверяем структуру отбор на наличие свойства "Владелец".



понедельник, 2 декабря 2019 г.

HelpDesk on VNC для 1С. Удаленное управление без установки ПО, групповых политик, изменения конфигурации и сложной настройки, через внешнюю обработку

1С управляемое приложение обратиться из формы обработки к модулю обработки

Как обратится из модуля формы обработки к модулю объекта. Пример:
&НаСервере
Функция ОбратитсяКМодулюОбъектаОбработки()

ОбъектОбработки = РеквизитФормыВЗначение("Объект");
ОбъектОбработки.ПроцедураМодуляОбъекта();

КонецФункции // ПолучитьКлиентПутьКлиентаHelpDesk()


1С определить тип клиента запущенного приложения программно

Функция возвращает тип клиента запущенного у пользователя.

&НаКлиенте
Функция ПолучитьТекущуюСредуВыполнения() Экспорт
 
    #Если ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда

     
        Возврат "Толстый клиент";
     
    #ИначеЕсли Сервер Тогда

     
        Возврат "Сервер";
     
    #ИначеЕсли ВнешнееСоединение Тогда

     
        Возврат "Внешнее соединение";
     
    #ИначеЕсли ТонкийКлиент Тогда

     
        Возврат "Тонкий клиент";
     
    #ИначеЕсли ВебКлиент Тогда

     
        Возврат "Веб-клиент";
     
    #Иначе

     
        Возврат "Ошибка определения среды выполнения";
     
    #КонецЕсли

 
КонецФункции   //ПолучитьТекущуюСредуВыполнения


воскресенье, 1 декабря 2019 г.

1С работа с переменными среды Windows

Для получения значений переменных среды Windows в 1С используется следующая конструкция:

Shell = Новый COMОбъект("WScript.Shell");
LOCALAPPDATA = Shell.ExpandEnvironmentStrings("%LOCALAPPDATA%");
КаталогКэша = LOCALAPPDATA + "\Microsoft\Windows\Temporary Internet Files";

пятница, 29 ноября 2019 г.

вторник, 26 ноября 2019 г.

1С, программное создание и заполнение документов "Перенос данных" и "Корректировка регистров"

В типовых конфигурациях присутствуют документы корректировки регистров, такие как "Перенос данных" и "Корректировка регистров", разберем программное создание и заполнение документов. На примере конфигурации ЗУП 3.1 и документа "Перенос данных", документ "Корректировка регистров" можно сделать по аналогии. Необходимо заполнить регистр накопления "ВзаиморасчетыСДепонентами"

НовыйПереносДанных = Документы.ПереносДанных.СоздатьДокумент();
НовыйПереносДанных.Дата = ТекущаяДата();

//выберем движения по документу
ДвиженияПереносДанных = НовыйПереносДанных.Движения; 

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

//выбираем движения по регистру
ВзаиморасчетыСДепонентами = ДвиженияПереносДанных.ВзаиморасчетыСДепонентами;
НовыйПереносДанных.Записать(); //обязательно записываем документ т.к. нужна ссылка на регистратор


Строка = ВзаиморасчетыСДепонентами.Добавить(); //добавляем движения
Строка.Период = ДатаРегистрацииДвижений;
Строка.Регистратор = НовыйПереносДанных.Ссылка;
Строка.ВидДвижения = ВидДвиженияНакопления.Приход;
Строка.Ведомость = ВедомостьНаВыплатуЗарплатыВКассу;
Строка.Активность = Истина;
Строка.Организация = ОрганизацияДляДвижения;
Строка.ФизическоеЛицо = ФизЛицоДляДвижения;
Строка.Сумма = Сумма;

//записываем сначала движения затем документ
ВзаиморасчетыСДепонентами.Записать();
НовыйПереносДанных.Записать();





понедельник, 25 ноября 2019 г.

1С отладка фоновых заданий.

Во многих современных типовых конфигурациях, разработчики перешли к активному использованию фоновых заданий. Настройка отладки выполняется следующим образом:
Возьмем к примеру конфигурацию ЗУП 3.1, общий модуль "ДлительныеОперации", функцию "ВыполнитьВФоне", фрагмент функции:

// Выполнить в фоне.
Попытка
Задание = ЗапуститьФоновоеЗаданиеСКонтекстомКлиента(ИмяПроцедуры, ПараметрыВыполнения, ПараметрыЭкспортнойПроцедуры);
Исключение
Результат.Статус = "Ошибка";
Если Задание <> Неопределено И Задание.ИнформацияОбОшибке <> Неопределено Тогда
Результат.КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(Задание.ИнформацияОбОшибке);
Результат.ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(Задание.ИнформацияОбОшибке);
Иначе
Результат.КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
Результат.ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
КонецЕсли;
Возврат Результат;
КонецПопытки;



При установке точки останова в разделе попытки, шагнуть внутрь процедуры не получится т.к. она выполняется фоновым заданием. Для работы необходима следующая настройка.
[Отладка] - [Подключение...]

Команда "Автоматическое подключение" - и устанавливаем отметки на: Клиентские и внешние соединения, Фоновые задания. Перезапускаем отладку.


Как программно узнать под какой ОС запущена 1С

Есть типовая функция:

// Возвращает Истина, если текущий сеанс выполняется на сервере, работающем под управлением ОС Linux.
//
// Возвращаемое значение:
//  Булево - Истина, если сервер работает под управлением ОС Linux.
//
Функция ЭтоLinuxСервер() Экспорт

СистемнаяИнформация = Новый СистемнаяИнформация;
Возврат СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 
Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64;

КонецФункции

ЗУП 3.1. Общий модуль "ОбщегоНазначения"

Как программно получить версию ComConnector

Пример функции:

Функция ИмяCOMСоединителя() Экспорт
СистемнаяИнфо = Новый СистемнаяИнформация;
ПодстрокиВерсии = СтрРазделить(СистемнаяИнфо.ВерсияПриложения, ".");
Возврат "v" + ПодстрокиВерсии[0] + ПодстрокиВерсии[1] + ".COMConnector";
КонецФункции

Функция типовая. Для конфигурации ЗУП 3.1 на момент написания заметки находилась в общем модуле "ОбщегоНазначенияКлиентСервер".

Как обратиться к общим картинкам программно?

Пример обращения к общим картинкам:

Состояние("Выполняется подключение к ИБ",,,БиблиотекаКартинок.СинхронизацияДанныхДлительнаяОперация48);

воскресенье, 24 ноября 2019 г.

Регистрация V83.COMConnector

Как зарегистрировать компоненту?

Открываем командную строку. Win+R "cmd", от имени Администратора.

V83.COMConnector, пример строки регистрации (измените путь на нужную версию):
32 разрядная платформа
regsvr32 “C:\Program Files (x86)\1cv8\8.3.6.2152\bin\comcntr.dll”
64 разрядная платформа
regsvr32 “C:\Program Files\1cv8\8.3.6.2152\bin\comcntr.dll”

среда, 10 апреля 2019 г.

1С. Функция проверки существования реквизита.

В типовых конфигурациях есть функция "ЕстьРеквизитИлиСвойствоОбъекта". Простой пример из конвертации данных.
Событие "Перед выгрузкой объекта".

Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Объект, "Дата") Тогда
   
    Если НЕ Объект.Проведен Тогда
          Отказ = Истина;
    КонецЕсли;
   
КонецЕсли;

среда, 4 октября 2017 г.

Конвертация данных 2.0. Изменение вида иерархии в справочнике.

Давненько не писал ничего про 1С. Вот осваиваю конвертацию 2.0 и небольшие заметки на эту тему.
Как при конвертации изменить вид иерархии? Дано в базе источник иерархия элементов в базе приемника иерархия групп и элементов. Простое решение задачи. В базе приемника добавляем конвертацию свойства ЭтоГруппа. Поле свойства у источника соответственно пустое.

 
 
Далее в обработчике этого свойства «Перед выгрузкой», обрабатываем и алгоритмически заполняем переменную значение. Например,


Значение = Источник.Родитель.Пустая();

По коду... Если у элемента не заполнен родитель, и мы договорились что все элементы расположенные сверху иерархии в базе источника должны являться группами в базе приемника то соответственно в базе приемника будет создан групповой элемент.
Примечание по поводу переменной Значение, из справки обработчика:

Значение - Неопределено. Конвертируемое значение свойства. Если значение определить в теле обработчика, то стандартная процедура получения значения не будет происходить.

Здесь приведен простой способ определения свойства ЭтоГруппа, можно применять более сложные алгоритмы которые включают запросы.