// Процедура СтрокаВДату преобразует строку в дату по шаблону форматной строки//// Параметры// Строка - строка, содержащая дату,// ФорматДаты - форматная строка вида:// [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"]); КонецФункции
9 сент. 2016 г.
Переобразовать строку в дату
Получить фамилию с инициалами
Функция взята с интернета.
Функция ПолучитьФамилиюСИнициалами(знач ФИО) ФИОСПереносами = СтрЗаменить(ФИО, " ", Символы.ПС); ЧастиСтроки = Новый Массив; Для Индекс = 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С
&НаКлиенте Функция ВыполнитьФормулуНаСервере() Экспорт Перем Р; Формула = ""; Для Каждого Ф Из ЗаписатьВМассивФормулу Цикл ТекстФормулы = НайтиШаблон(Ф); Если ЗначениеЗаполнено(ТекстФормулы) Тогда Формула = Формула + ТекстФормулы; Иначе Сообщить("Формулу " + Ф + " в списке шаблонов не найдено"); КонецЕсли; КонецЦикла; Выполнить("Р=" +Формула); Возврат Р; КонецФункции"Секрет" в том, что функция Выполнить() должна возвращать какое то значение,
на то это и функция, а значит нужно определить сначала переменную куда будет
возвращено значения выполненной команды.
Посмотреть запрос динамического списка
&НаСервере Процедура Команда1НаСервере() //Список - это динамический список на форме списка справочника Схема = Элементы.Список.ПолучитьИсполняемуюСхемуКомпоновкиДанных(); Настройки = Элементы.Список.ПолучитьИсполняемыеНастройкиКомпоновкиДанных(); КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; Макет = КомпоновщикМакета.Выполнить(Схема,Настройки); КонецПроцедуры &НаКлиенте Процедура Команда1(Команда) //посмотреть запрос динамического списка Команда1НаСервере(); КонецПроцедурыСтавим точку останова на Макет, а далее Макет.НаборыДанных.НаборДанныхДинамическогоСписка.Запрос
мы получим запрос, который выбирает данные для динамического списка
Разбить строку
Функция была взята с интернета.
// Функция "расщепляет" строку на подстроки, используя заданный // разделитель. Разделитель может иметь любую длину. // Если в качестве разделителя задан пробел, рядом стоящие пробелы // считаются одним разделителем, а ведущие и хвостовые пробелы параметра Стр // игнорируются. // Например, // РазложитьСтрокуВМассивПодстрок(",ку,,,му", ",") возвратит массив значений из пяти элементов, // три из которых - пустые строки, а // РазложитьСтрокуВМассивПодстрок(" ку му", " ") возвратит массив значений из двух элементов // // Параметры: // Стр - строка, которую необходимо разложить на подстроки. // Параметр передается по значению. // Разделитель - строка-разделитель, по умолчанию - запятая. // // // Возвращаемое значение: // массив значений, элементы которого - подстроки // Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт МассивСтрок = Новый Массив(); Если Разделитель = " " Тогда Стр = СокрЛП(Стр); Пока 1=1 Цикл Поз = Найти(Стр,Разделитель); Если Поз=0 Тогда МассивСтрок.Добавить(Стр); Возврат МассивСтрок; КонецЕсли; МассивСтрок.Добавить(Лев(Стр,Поз-1)); Стр = СокрЛ(Сред(Стр,Поз)); КонецЦикла; Иначе ДлинаРазделителя = СтрДлина(Разделитель); Пока 1=1 Цикл Поз = Найти(Стр,Разделитель); Если Поз=0 Тогда МассивСтрок.Добавить(Стр); Возврат МассивСтрок; КонецЕсли; МассивСтрок.Добавить(Лев(Стр,Поз-1)); Стр = Сред(Стр,Поз+ДлинаРазделителя); КонецЦикла; КонецЕсли; КонецФункции// глРазложить
Передать ТаблицаЗначений из Сервера на Клиент
В результате на клиенте получим не ТЗ, а Структура, если отправим в эту функцию ТЗ.
Функция была взята из интернета.
Функция ТаблицаЗначенийВМассивСтруктур(ТЗ) // Создаем список имен колонок МассивИменКолонок = Новый Массив; Для Каждого ТекКолонка Из ТЗ.Колонки Цикл МассивИменКолонок.Добавить(ТекКолонка.Имя); КонецЦикла; МассивСтруктур = Новый Массив; // перебираем строки ТЗ и обращаемся к колонкам по списку Для Каждого ТекСтр Из ТЗ Цикл СтруктураСтроки = Новый Структура; Для Каждого ТекКол Из МассивИменКолонок Цикл СтруктураСтроки.Вставить(ТекКол, ТЗ[ТекКол]); КонецЦикла; МассивСтруктур.Добавить(СтруктураСтроки); КонецЦикла; Возврат МассивСтруктур; КонецФункции
Проверить номенклатуру в иерархии
Процедура ВхождениеНоменклатурыВОднуИзГруппСписка(Номенклатура) Выборка = Справочники.Группы.Выбрать(); Пока Выборка.Следующий() Цикл Если Номенклатура.ПринадлежитЭлементу(Выборка.Группа) Тогда //Номенклатура входит в группу Иначе //Номенклатура не входит в группу КонецЕсли; КонецЦикла КонецПроцедуры
24 авг. 2016 г.
Создание узла РИБ плана обмена вручную
Надоело мне
ждать пару часов пока создастся образ периферийной базы с центрального узла, да
и не факт, что он создастся удачно, а не покажет многим знакомое окно «Не
достаточно памяти». К тому же, при
создании РИБ база трудиться только над созданием образа, а значит периферийные
узлы находятся без актуальных данных.
Вот способ, нашел его в сети способ, а также обработку, с
помощью которого, буквально за 15 минут мы получим как минимум один рабочий
образ узла РИБ.
В моем случаи есть ЦБ (Центральная база) и нужно создать
образ для ПБ1 (периферийная база 1).
Конфигурация УТП для Украины 1.2. Файловый режим.
- В ЦБ пункт меню - Операции – Планы обмена – Полный – Создаю новый узел ПБ1
- В ЦБ пункт меню - Сервис – Распределенные информационные базы (РИБ) – Настроить узлы РИБ – Добавляю настройку обмена с Узлом ПБ1
- Беру файл базы данных 1Cv8.1CD нашей главной базы ЦБ и копирую его, например, в папку ПБ1 (папка ПБ1 естественно создаю так же)
- Подключаю скопированную базу обычным способом, через запуск 1С Предприятие – Добавить – Добавление в список существующей информационной базы
- Открываю скопированную базу ПБ1 и запускаю обработку СозданиеПодчиненногоУзла83.epf – устанавливаю галку «Очистить объекты, не участвующие в обмене - выбираю ПБ1 узел – нажимаю «Создать образ подчиненного узла»
- В ПБ1 пункт меню - Сервис - Сервис – Распределенные информационные базы (РИБ) – Настроить узлы РИБ – Добавляю настройку обмена с Узлом ЦБ
Все, подведем итог в «двух словах», что мы сделали, а мы
сделали копию центральной базы, запустили в ней обработку, которая очистила
нужные данные для того, чтобы созданная копия стала периферийной.
29 июл. 2016 г.
Не обязательное заполнение параметров в запросе 1С
Есть форма для отчёта. Отчёт будет формироваться с помощью ТабличныйДокумент + Макет.
На форме есть СписокЗначений (ОТК_Несоответствия) для заполнения пользователем параметров. Параметров может быть несколько или вовсе не быть.
При формировании Запроса нужно избежать ошибки "не заполнены параметры".
Я выхожу с данной ситуации вот так:
На форме есть СписокЗначений (ОТК_Несоответствия) для заполнения пользователем параметров. Параметров может быть несколько или вовсе не быть.
При формировании Запроса нужно избежать ошибки "не заполнены параметры".
Я выхожу с данной ситуации вот так:
Запрос = Новый Запрос; //заполнение не обязательных параметров запроса Текст_Список_ОТК_Несоответствия = ""; Если Объект.ОТК_Несоответствия.Количество() <> 0 Тогда Список_ОТК_Несоответствия = Новый Массив; Для Каждого Эл Из Объект.ОТК_Несоответствия Цикл Список_ОТК_Несоответствия.Добавить(Эл.Значение); КонецЦикла; Текст_Список_ОТК_Несоответствия = " И ОтчетПроизводстваЗаСменуНесоответствия.Несоответствие В (&Несоответствие)"; Запрос.УстановитьПараметр("Несоответствие",Список_ОТК_Несоответствия); КонецЕсли; //ЗАПРОС Запрос.Текст = "ВЫБРАТЬ | ОтчетПроизводстваЗаСменуТовары.Ссылка.Ссылка КАК Ссылка, | ОтчетПроизводстваЗаСменуТовары.Номенклатура, | ОтчетПроизводстваЗаСменуГрафикРабот.Ссылка.Номер КАК ОПзС, | ОтчетПроизводстваЗаСменуГрафикРабот.Ссылка.Заказ.НомерЗаказаУТП КАК НомерЗаказа |ИЗ | Документ.ОтчетПроизводстваЗаСмену.ГрафикРабот КАК ОтчетПроизводстваЗаСменуГрафикРабот | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетПроизводстваЗаСмену.Товары КАК ОтчетПроизводстваЗаСменуТовары | ПО ОтчетПроизводстваЗаСменуГрафикРабот.Ссылка.Ссылка = ОтчетПроизводстваЗаСменуТовары.Ссылка.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетПроизводстваЗаСмену.ПричиныОстановки КАК ОтчетПроизводстваЗаСменуПричиныОстановки | ПО ОтчетПроизводстваЗаСменуГрафикРабот.Ссылка.Ссылка = ОтчетПроизводстваЗаСменуПричиныОстановки.Ссылка.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетПроизводстваЗаСмену.Несоответствия КАК ОтчетПроизводстваЗаСменуНесоответствия | ПО ОтчетПроизводстваЗаСменуГрафикРабот.Ссылка.Ссылка = ОтчетПроизводстваЗаСменуНесоответствия.Ссылка.Ссылка |ГДЕ | ОтчетПроизводстваЗаСменуГрафикРабот.Дата МЕЖДУ &ДатаНач И &ДатаКон | И ОтчетПроизводстваЗаСменуГрафикРабот.Операция = &Отгрузка" +Текст_Список_ОТК_Несоответствия+"; //обязательные параметры запроса Запрос.УстановитьПараметр("ДатаКон", КонецДня(Объект.ДатаКонец)); Запрос.УстановитьПараметр("ДатаНач", НачалоДня(Объект.ДатаНачало)); Запрос.УстановитьПараметр("Отгрузка", Константы.ПроизводствоОперацияОтгрузка.Получить()); //обязательные параметры запроса РезультатЗапроса = Запрос.Выполнить();
1 июл. 2016 г.
Обновляется поле ввода ПодключитьОбработчикОжидания
Нужно показывать на форме текущее время, что и делаю
но смысл в том, что есть (на скрине №1) поле ввода, в которое вручную нужно вводить значения и оно каждый раз обработчиком ожидания обновляет значения.
Что бы этого избежать нужно в свойствах элемента формы Поля ввода найти свойство ОбновлениеТекстаРедактирования и установить значение "При изменении значения".
Но разработчики 1С такое не рекомендують делать, а значит, лучше всего будет выводить обработчиком ожидания какое то значение (в моем случае это время) в заголово формы
пишу
Что бы этого избежать нужно в свойствах элемента формы Поля ввода найти свойство ОбновлениеТекстаРедактирования и установить значение "При изменении значения".
Но разработчики 1С такое не рекомендують делать, а значит, лучше всего будет выводить обработчиком ожидания какое то значение (в моем случае это время) в заголово формы
а выглядит это так
Все.
25 июн. 2016 г.
Добавить фото на форму 1С
Нужно было
добавить возможность сохранять фотографии в справочнике Сотрудники.
Добавил в
реквизит объекта реквизит «Фото» с типом «ХранилищеЗначений».
Добавил в
реквизиты формы реквизит «СсылкаНаКартинку» с типом «Строка», с видом «ПолеКартинки».
Естественно,
добавил кнопку «ВыбораФайла».
Теперь приведу
два варианта решение задачи, так как первый вариант будет работать с
платформой, у которой уже появился объект «ОписаниеОповещения», так как в 8.2
такого объекта еще нет.
Для тех, у кого в
свойствах конфигурации отключен «Режим использования модальности» и использует
версию платформы выше 8.2
*(данные способ был полностью скопирован в Павла Чистова)
*(данные способ был полностью скопирован в Павла Чистова)
Для тех, у кого в
свойствах конфигурации включен «Режим использования модальности» и использует
версию платформы ровную 8.2
17 июн. 2016 г.
Результат запроса в одну строку
Пример:
Документ, в нем табличная часть, в ней много значений.
Обычным результатом запроса получается вот такой итог
а мне нужно вот такой итог
для того, что бы добиться выше результата нужно в СКД на вкладке Ресурсы добавить требуемое для вывода в одну строку Поле и в Выражении применить такую функцию
СоединитьСтроки (), у меня вышло СоединитьСтроки (Причина,",",",").
Справку по функции можно найти через Конфигуратор – Справка - Поиск по справке - СоединитьСтроки
Подписаться на:
Сообщения (Atom)