9 сент. 2016 г.

Перебрать перечисления 1С

Для н = 0 По  Перечисления.ТипыПроизводства.Количество() - 1 Цикл      
КонецЦикла;

Проверить режим подключения к базе

Процедура КнопкаВыполнитьНажатие(Кнопка)
  Сообщить(РежимЗапуска(СтрокаСоединенияИнформационнойБазы()));
КонецПроцедуры
 
Функция РежимЗапуска(СтрокаСоединения)
 Если Найти(СтрокаСоединения,"File") <> 0 Тогда
  Возврат "Файловый";
 ИначеЕсли Найти(СтрокаСоединения,"Srvr") <> 0 Тогда 
  Возврат "Серверный";
 Иначе 
  Возврат "Неопределено";
 КонецЕсли;
КонецФункции

Узнать имя базы 1С

ИмяБазы = Макс(НСтр(СтрокаСоединенияИнформационнойБазы(),"Ref"),НСтр(СтрокаСоединенияИнформационнойБазы(),"File"))

Индикатор выполнения

В реквизитах формы Добавляем Реквизит типа Число, перемещаем добавленные реквизит на форму и в свойствах перемещенного реквизита на форме в поле Вид выбираем Поле индикатора.
Выборка = РезультатЗапроса.Выбрать(); 
Индикатор = ЭлементыФормы.ИндикаторПеребора; 
Индикатор.МаксимальноеЗначение = Выборка.Количество(); 
Индикатор.Значение = 0; 
Пока Выборка.Следующий() Цикл 
            Индикатор.Значение = Индикатор.Значение + 1; 
КонецЦикла;

Предупредить о закрытии формы 1С Управляемые формы

&НаКлиенте
Перем НужноЗакрыватьФорму ;

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

&НаКлиенте
Процедура ПередЗакрытиемЗавершение(Ответ, ДополнительныеПараметры) Экспорт 
        Если Ответ = КодВозвратаДиалога.Да Тогда 
                НужноЗакрыватьФорму = Истина; 
                Закрыть();
        Иначе 
                НужноЗакрыватьФорму = Неопределено; 
        КонецЕсли; 
КонецПроцедуры

Сохранить восстановить настройки формы

Данная часть кода по событиям с процедурами и функциями даст возможность сохранить настройки (заполненные поля), например внешней обработке при закрытии этой обработки, а так же при открытии восстановить эти же настройки (заполнения поля) в форму обработки.
&НаКлиенте
Перем НужноЗакрыватьФорму; 


// СОХРАНЕНИЕ

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

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

&НаКлиенте
Функция ЗаполнитьНастройки()       
        Настройки = Новый Структура;
        ВсеРеквизиты = ПолучитьВсеРеквизиты();
        Для Каждого Эл Из ВсеРеквизиты Цикл 
                Настройки.Вставить(Эл.Ключ,Элементы.Найти(Эл.Ключ).ТекстРедактирования);
        КонецЦикла;
       
        Возврат Настройки;   
КонецФункции

Процедура СохранитьНастройкиПользователя(Настройки)
        КлючОбъекта  = "OpenCartSQL";
        КлючНастроек = "OpenCartSQL_Настройки";
                               
        ХранилищеОбщихНастроек.Сохранить(КлючОбъекта,КлючНастроек,Настройки,,Пользователи.ТекущийПользователь());
КонецПроцедуры


// ВОССТАНОВЛЕНИЕ 

&НаКлиентеПроцедура 
ПриОткрытии(Отказ)
        ВосстановитьНастройкиПользователя();
КонецПроцедуры

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

Процедура ВосстановитьЗначенияРеквизитов(СтруктураНастроек)
        Для Каждого Эл Из СтруктураНастроек Цикл 
                ЭтаФорма[Эл.Ключ] = Эл.Значение;   
        КонецЦикла;
КонецПроцедуры

Извлечь двоичные данные с макета

В макет сохранил .msi инсталятор компоненты. По кнопке на форме нужно извлечь из макета .msi инсталятор и сохранить на hdd компютера. Компонента в макете под названием "mysqlconnectorodbc".
&НаКлиенте
Процедура ИзвлечьMSQLConnect(Команда)
        Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
       
        Диалог.Заголовок = "Выберите папку для сохранения";
        Диалог.Расширение = ".msi";
        Диалог.Фильтр = "(*.msi;*.msi|*.msi;*.msi|";
       
        Если Диалог.Выбрать() Тогда
                Извлечь(Диалог.ПолноеИмяФайла);
        КонецЕсли;   
КонецПроцедуры

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

Выделить строку в списке Условное оформление

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

Округлить число в большую сторону

Взято с интернета.
Число=1.1;
ЧислоОкр=Окр(Число + 0.5, 0, РежимОкругления.Окр15как10);

Переобразовать строку в дату

 // Процедура СтрокаВДату преобразует строку в дату по шаблону форматной строки//// Параметры//  Строка          - строка, содержащая дату,//  ФорматДаты      - форматная строка вида:// [dd MM yy]// [yy-MM-dd HH:mm]// [dd MM yy HH mm ss]// [dd MM yyyy]// [MM dd, yyyy, HH:mm]// [dd.MM.yy]// [MM, dd, yyyy]// [yyyyMMdd]// [HH-mm-ss, dd-MM-yy]// [dd]// [dd MM HH:mm:ss yyyy]// [HH:mm:ss]// [HH:mm]// [yyyy-MM-dd HH:mm:ss]// [yyyy-MM-dd]// [yyyy/MM/dd]// [dd/MM/yy]// [MM dd yyyy]// [yyyy-MM]// [yyyy]// [MM, dd, yyyy]// [dd-MM-yyyy]// [ddMMyyyy]//
Функция СтрокаВДату(Знач Строка, Знач ФорматДаты) Экспорт
        Ч = Новый Соответствие; 
        Для ё = 1 По СтрДлина(ФорматДаты) + 6 Цикл 
            Ч[Сред(ФорматДаты + "dMyHms", ё, 1)] = 0
        КонецЦикла; 
        Для ё = 1 По СтрДлина(ФорматДаты) Цикл 
            Ч[Сред(ФорматДаты, ё, 1)] = 10 * Ч[Сред(ФорматДаты, ё, 1)] + Найти("123456789", Сред(Строка, ё, 1));
        КонецЦикла; 
        Ч["y"] = Ч["y"] + ?(0 < Ч["y"] И Ч["y"] < 50, 2000, ?(0 < Ч["y"] И Ч["y"] < 100, 1900, 0));
        Возврат Дата(Макс(Ч["y"], 1), Макс(Ч["M"],1), Макс(Ч["d"],1), Ч["H"], Ч["m"], Ч["s"]);
КонецФункции 

Получить фамилию с инициалами

Функция взята с интернета.
Функция ПолучитьФамилиюСИнициалами(знач ФИО)
 
    ФИОСПереносами = СтрЗаменить(ФИО, " ", Символы.ПС);
 
    ЧастиСтроки = Новый Массив;
    Для Индекс = 1 По СтрЧислоСтрок(ФИОСПереносами) Цикл
        Стр = СтрПолучитьСтроку(ФИОСПереносами, Индекс);
        Если ЗначениеЗаполнено(Стр) Тогда
            ЧастиСтроки.Добавить(СокрЛП(Стр));
        КонецЕсли;
    КонецЦикла;
 
    Результат = "";
 
    Если ЧастиСтроки.Количество() > 0 Тогда
        Результат = Результат + ЧастиСтроки[0];
 
        Если ЧастиСтроки.Количество() > 1 Тогда
            Результат = Результат + " " + Лев(ЧастиСтроки[1], 1) + ".";
 
            Если ЧастиСтроки.Количество() > 2 Тогда
                Результат = Результат + " " + Лев(ЧастиСтроки[2], 1) + ".";
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
 
    Возврат Результат;
 
КонецФункции
Отправляем в функцию Иванов Иван Иванович в результате получаем Иванов И.И.

Соединить три макета в одном

Процедура была взята с интернета.
Процедура КнопкаВыполнитьНажатие(Кнопка)
        таб1    = Новый ТабличныйДокумент;
        таб1.Вывести(ПолучитьМакет("Макет1"));
        таб1.Показать();

        таб2    = Новый ТабличныйДокумент;
        таб2.Вывести(ПолучитьМакет("Макет2"));
        таб2.Показать();

        таб     = Новый ТабличныйДокумент;
        выс     = Макс(таб1.ВысотаТаблицы, таб2.ВысотаТаблицы);
       
        обл     = ПолучитьМакет("Макет").ПолучитьОбласть("Область1|Область2");

        обл1= таб1.ПолучитьОбласть(1,1, выс, таб1.ШиринаТаблицы);
        обл2= таб2.ПолучитьОбласть(1,1, выс, таб2.ШиринаТаблицы);
       
        таб.Вывести(обл1);
        таб.Присоединить(обл);
        таб.Присоединить(обл2);
        таб.Показать();
КонецПроцедуры

Выполнить 1С

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

CopyPaste Copyright © 2017 - |- Шаблон создан O Pregador - |- Отредактирован myr4ik07