Шаблоны 1С


Добавить новый Назад

Удаление строк таблицы по условию

Обратный цикл по таблице значений с удалением строк по условию

Добавил: Ram3
Для Индекс = -ТЗ.Количество()+1 По -1 Цикл
	Стр =ТЗ.Получить(-Индекс);
	Если Найти(Стр.Имя, "ПодстрокаПоиска") > 0 Тогда
		ТЗ.Удалить(Стр);
	КонецЕсли;
КонецЦикла;
Комментарии: 2

Обработка Журнала Регистрации

Работа с журналом регистрации sqlite

Журнал Регистрации sqlite

Добавил: FantomLav
ПараметрыСоединения = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
ПараметрыСоединения.СтрокаСоединения = "DRIVER=SQLite3 ODBC Driver;Database=" + ФайлЖурналаРегистрации + ";BigInt=1;";
ВнешниеИсточникиДанных.ЖурналРегистрации.УстановитьОбщиеПараметрыСоединения(ПараметрыСоединения);
ВнешниеИсточникиДанных.ЖурналРегистрации.УстановитьСоединение();

Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ
               |    ЗаписиЖурнала.Код,
               |    ЗаписиЖурнала.Важность,
               |    ЗаписиЖурнала.Дата,
               |    ЗаписиЖурнала.СтатусТранзакции,
               |    ЗаписиЖурнала.ДатаТранзакции,
               |    ЗаписиЖурнала.ИдентификаторТранзакции,
               |    ЗаписиЖурнала.Пользователь,
               |    ЗаписиЖурнала.Пользователь.Код,
               |    ЗаписиЖурнала.Пользователь.Наименование,
               |    ЗаписиЖурнала.Компьютер.Код,
               |    ЗаписиЖурнала.Компьютер.Наименование,
               |    ЗаписиЖурнала.Приложение.Код,
               |    ЗаписиЖурнала.Приложение.Наименование,
               |    ЗаписиЖурнала.Событие.Код,
               |    ЗаписиЖурнала.Событие.Наименование,
               |    ЗаписиЖурнала.Комментарий,
               |    ЗаписиЖурнала.Данные,
               |    ЗаписиЖурнала.ПредставлениеДанных,
               |    ЗаписиЖурнала.РабочийСервер,
               |    ЗаписиЖурнала.РабочийСервер.Код,
               |    ЗаписиЖурнала.РабочийСервер.Наименование,
               |    ЗаписиЖурнала.ОсновнойПорт,
               |    ЗаписиЖурнала.ВспомогательныйПорт
               |ИЗ
               |    ВнешнийИсточникДанных.ЖурналРегистрации.Таблица.ЗаписиЖурнала КАК ЗаписиЖурнала";
                   
ТаблицаДанных = Запрос.Выполнить().Выгрузить();
ВнешниеИсточникиДанных.ЖурналРегистрации.РазорватьСоединение();

//ОбычнаяДата = '00010101000000' + 635453673444260/10000; //03.09.2014 18:55:44
Добавить комментарий

Пауза, ожидание в коде

Пауза выполнения кода

Пауза ожидание таймер

Добавил: FantomLav
Процедура Ожидание(МСекунды)
	Перем Таймер;
	Таймер     = ТекущаяУниверсальнаяДатаВМиллисекундах() + МСекунды;
	Пока Таймер > ТекущаяУниверсальнаяДатаВМиллисекундах() Цикл
		Состояние(ОКР((Таймер-ТекущаяУниверсальнаяДатаВМиллисекундах())/1000),1);
	КонецЦикла;
КонецПроцедуры
Добавить комментарий

Вывод данных СКД в таблицу значений (дерево)

Вывод данных СКД в таблицу значений (дерево)

СКД

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

Инициализация компоновщика настроек

Инициализация компоновщика настроек, обработка. СКД

СКД

Добавил: acsent
СхемаСКД = ПолучитьМакет("СхемаСКД");
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаСКД));
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаСКД.НастройкиПоУмолчанию);
Добавить комментарий

Вывод данных СКД в табличный документ

Вывод данных СКД в табличный документ

СКД

Добавил: acsent
	ВнешниеНаборыДанных = Новый Структура;
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
		
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки, Истина);
		
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
		
	ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);
Добавить комментарий

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

УФ Отчет СКД

Добавил: acsent
    Настройки = Новый НастройкиКомпоновкиДанных;
    Элемент = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Товар");
    Элемент.ИдентификаторПользовательскойНастройки = "Идентификатор";
    
    ПараметрыФормы = Новый Структура("Вариант", Настройки);
    ОткрытьФорму("Отчет.ОстаткиТоваровНаСкладах.Форма", ПараметрыФормы);
Добавить комментарий

Инициализация компоновщика настроек, упр формы

Инициализация компоновщика настроек, упр формы, обработка, СКД

СКД УФ

Добавил: acsent
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
СхемаСКД = ОбработкаОбъект.ПолучитьМакет("СхемаСКД");
	
АдресСхемы = ПоместитьВоВременноеХранилище(СхемаСКД, УникальныйИдентификатор);
ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы);
	
КомпоновщикНастроек.Инициализировать(ИсточникДоступныхНастроек);
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаСКД.НастройкиПоУмолчанию);
Добавить комментарий

Количество дублей элементов справочника

Запрос позволяет получить количество элементов с разными ссылками, но одинаковым наименованием

запрос дубли

Добавил: eXtend88
ВЫБРАТЬ
        Товары.Наименование КАК Наименование,
        КОЛИЧЕСТВО(Товары.Ссылка) КАК КоличествоДублей
ИЗ
        Справочник.Товары КАК Товары
СГРУППИРОВАТЬ ПО
        Товары.Наименование
ИМЕЮЩИЕ КОЛИЧЕСТВО(Товары.Ссылка) > 1
Добавить комментарий

Распределить Сумму Пропорционально Коэффициентам

Функция РаспределитьСуммуПропорциональноКоэффициентам

Распределить Пропорция Коэффициент

Добавил: x316x
// Выполняет пропорциональное распределение суммы в соответствии
// с заданными коэффициентами распределения.
//
// Параметры:
//  РаспределяемаяСумма - Число - сумма, которую надо распределить;
//  МассивКоэффициентов - Массив - коэффициенты распределения;
//  Точность - Число - точность округления при распределении. Необязателен.
//
// Возвращаемое значение:
//  Массив - массив размерностью равный массиву коэффициентов, содержит
//           суммы в соответствии с весом коэффициента (из массива коэффициентов).
//           В случае если распределить не удалось (сумма = 0, кол-во коэффициентов = 0,
//           или суммарный вес коэффициентов = 0), тогда возвращается значение Неопределено.
//

Функция РаспределитьСуммуПропорциональноКоэффициентам(Знач РаспределяемаяСумма, Коэффициенты, Знач Точность = 2) Экспорт

    Если Коэффициенты.Количество() = 0 или Не ЗначениеЗаполнено(РаспределяемаяСумма) Тогда
        Возврат Неопределено;
    КонецЕсли;
    
    ИндексМаксимальногоКоэффициента = 0;
    МаксимальныйКоэффициент = 0;
    РаспределеннаяСумма = 0;
    СуммаКоэффициентов  = 0;   
    Для Индекс = 0 По Коэффициенты.Количество() - 1 Цикл
        Коэффициент = Коэффициенты[Индекс];       
        АбсолютноеЗначениеКоэффициента = ?(Коэффициент > 0, Коэффициент, -Коэффициент);
        Если МаксимальныйКоэффициент < АбсолютноеЗначениеКоэффициента Тогда
            МаксимальныйКоэффициент = АбсолютноеЗначениеКоэффициента;
            ИндексМаксимальногоКоэффициента = Индекс;
        КонецЕсли;
        СуммаКоэффициентов = СуммаКоэффициентов + Коэффициент;
    КонецЦикла;
    Если СуммаКоэффициентов = 0 Тогда
        Возврат Неопределено;
    КонецЕсли;
    Результат = Новый Массив(Коэффициенты.Количество()); 
    Для Индекс = 0 По Коэффициенты.Количество() - 1 Цикл
        Результат[Индекс] = Окр(РаспределяемаяСумма * Коэффициенты[Индекс] / СуммаКоэффициентов, Точность, 1);
        РаспределеннаяСумма = РаспределеннаяСумма + Результат[Индекс];
    КонецЦикла; 
    // Погрешности округления отнесем на коэффициент с максимальным весом.
    Если Не РаспределеннаяСумма = РаспределяемаяСумма Тогда
        Результат[ИндексМаксимальногоКоэффициента] = Результат[ИндексМаксимальногоКоэффициента] + РаспределяемаяСумма - РаспределеннаяСумма;
    КонецЕсли;    
    Возврат Результат;  
КонецФункции
//в последней строчке делай = общая сумма - уже распределили
Добавить комментарий