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С такое не рекомендують делать, а значит, лучше всего будет выводить обработчиком ожидания какое то значение (в моем случае это время) в заголово формы


а выглядит это так


Все.

25 июн. 2016 г.

Добавить фото на форму 1С

Нужно было добавить возможность сохранять фотографии в справочнике Сотрудники.
Добавил в реквизит объекта реквизит «Фото» с типом «ХранилищеЗначений».
Добавил в реквизиты формы реквизит «СсылкаНаКартинку» с типом «Строка», с видом «ПолеКартинки».
Естественно, добавил кнопку «ВыбораФайла».

Теперь приведу два варианта решение задачи, так как первый вариант будет работать с платформой, у которой уже появился объект «ОписаниеОповещения», так как в 8.2 такого объекта еще нет.

Для тех, у кого в свойствах конфигурации отключен «Режим использования модальности» и использует версию платформы выше 8.2

*(данные способ был полностью скопирован в Павла Чистова)




Для тех, у кого в свойствах конфигурации включен «Режим использования модальности» и использует версию платформы ровную 8.2


17 июн. 2016 г.

Результат запроса в одну строку

Пример:

Документ, в нем табличная часть, в ней много значений.

Обычным результатом запроса получается вот такой итог

1

а мне нужно вот такой итог

3

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

2

СоединитьСтроки (), у меня вышло СоединитьСтроки (Причина,",",",").

Справку по функции можно найти через Конфигуратор – Справка - Поиск по справке - СоединитьСтроки

13 июн. 2016 г.

Не срабатывает внешнее событие 1С

Пустая конфигурация (Управляемые формы), создаю внешнюю обработку, хочу, что бы при считывании Считывателем магнтных карт (СМК) данные попадали в форму, но, при остановке события на процедуре Формы ВнешнееСобытие() остановка не происходит.
Толстый клиент Управляемое приложение

&НаКлиенте        
Перем ДемоКомп;

&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
        Сообщить(Данные);
КонецПроцедуры

&НаКлиенте
Процедура Команда1(Команда)
        DevId = Неопределено;
        ПодключитьВнешнююКомпоненту("C:\ZR1C.dll", "Comp", ТипВнешнейКомпоненты.Native);
        ДемоКомп  = Новый("AddIn.Comp.ZR1CExtension");
        ДемоКомп.Порт = "Com3";                 
        ДемоКомп.Подключить(DevId);     
КонецПроцедуры
Толстый клиент Обычное приложение
//Создаем Реквизит объекта с типом Произвольный
Процедура КнопкаВыполнитьНажатие(Кнопка)
  DevId = Неопределено;
  ПодключитьВнешнююКомпоненту("C:\ZR1C.dll", "Comp", ТипВнешнейКомпоненты.Native);
 Реквизит1  = Новый("AddIn.Comp.ZR1CExtension");
        Реквизит1.Порт = "Com3";                        
        Реквизит1.Подключить(DevId);    
КонецПроцедуры

Процедура ВнешнееСобытие(Источник, Событие, Данные)
   Сообщить(Данные);
КонецПроцедуры
Выше был вариант подключения считывателя магнтных карт для самописной конфигурации, а вот ниже для этой же самописной конфигурации код подключения сканера штрих кода используя .dll компоненту от АТОЛ.
&НаКлиенте        
Перем ДемоКомп;

&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
 Сообщить(Данные);
КонецПроцедуры


&НаКлиенте
Процедура Команда1(Команда)
 Попытка
  ЗагрузитьВнешнююКомпоненту( "C:\Scaner1C.dll");  
  ДемоКомп = Новый("AddIn.Scaner45");
 Исключение
  Сообщить(ОписаниеОшибки());
 КонецПопытки;
КонецПроцедуры

24 мая 2016 г.

Добавить номер телефона в КонтактнаяИнформация Контрагента УТ 3.0

Что бы добавить программно свою запись номера телефона в табличную часть КонтактнаяИнформация справочника.Контрагенты нужно, сначала записать объект.контрагент, а потом получить этот же объект, добавить свою строку с номером телефона в табличную часть и еще раз записать отредактированный объект. Этим самым все прекрасно запишеться и не нужно лезть в дебри общиих модулей.
Весь код, выглядит так:
…………………………
НовыйНомерТелефона = “+380(11)-111-11-11”;
Контрагент.Записать();
КонтрагентОбъект = Контрагент.Ссылка.ПолучитьОбъект();
НовСтрока = КонтрагентОбъект.КонтактнаяИнформация.Добавить();
НовСтрока.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон;
НовСтрока.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонПартнера;
НовСтрока.Представление = НовыйНомерТелефона;
КонтрагентОбъект.ОбменДанными.Загрузка = Истина;
КонтрагентОбъект.Записать();

 

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