Для н = 0 По Перечисления.ТипыПроизводства.Количество() - 1 Цикл КонецЦикла;
9 сент. 2016 г.
Перебрать перечисления 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С
&НаКлиенте Функция ВыполнитьФормулуНаСервере() Экспорт Перем Р; Формула = ""; Для Каждого Ф Из ЗаписатьВМассивФормулу Цикл ТекстФормулы = НайтиШаблон(Ф); Если ЗначениеЗаполнено(ТекстФормулы) Тогда Формула = Формула + ТекстФормулы; Иначе Сообщить("Формулу " + Ф + " в списке шаблонов не найдено"); КонецЕсли; КонецЦикла; Выполнить("Р=" +Формула); Возврат Р; КонецФункции"Секрет" в том, что функция Выполнить() должна возвращать какое то значение,
на то это и функция, а значит нужно определить сначала переменную куда будет
возвращено значения выполненной команды.
Подписаться на:
Сообщения (Atom)