Как свернуть группировки в СКД (система компоновки данных)

По умолчанию в СКД группировки развернуты,
данный код в модуле отчета позволяет свернуть группировки до необходимого уровня YYYYY(0,1,2….)

Структура ~ Перебор элементов Структуры

Запрос с выборкой из запроса

Добавить новый элемент плана видов расчета

Функция месяц прописью

Выборка, перебор документов

Найти и открыть документ

Открыть форму документа

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

Как прибавить к дате день, месяц?

Как сравнить две даты (дни)?

При установке конфигурации 1С:Предприятия 8 под ОС Windows Vista — Ошибка при инсталляции

Для конфигураций на платформе «1С:Предприятие 8» используется цифровая подпись. Для подписанных программ виртуализация защищенных каталогов в Windows Vista отключена, в том числе и для каталога Program Files, в который записываются шаблоны конфигураций по умолчанию. При включенном UAC прав на запись в этот каталог нет, что и вызывает ошибку записи. Для решения проблемы установки необходимо либо отключать UAC, либо устроить каталог шаблонов в другом месте, доступном для записи.

Отключить Контроль учетных записей (User Account Control, UAC) можно в Панели управления, раздел «Учетные записи пользователей (User Accounts)», пункт «Включение или отключение контроля учетных записей (Turn User Account Control off/on)». В появившемся диалоге убрать галку (единственную) около «Используйте контроль учетных записей (use User Account Control…)».
После установки конфигурации значение использования UAC можно восстановить.

Из справки по MS Vista:
Средство контроля учетных записей, обеспечивающее защиту системы путем принудительного запуска программ из стандартной учетной записи даже в том случае, если пользователь работает в системе с правами администратора.

Как проверить дату на пустое значение?

Как указать нужную,конкретную дату?

Значения данного типа содержит дату григорианского календаря (с 01 января 0001 года) и время с точностью до секунды.
Литералы:
Строка цифр, заключенная в одинарные кавычки вида: ‘ГГГГММДДччммсс’, где:
ГГГГ — четыре цифры года (включая тысячелетие и век);
ММ — две цифры месяца:
ДД — две цифры даты;
чч — две цифры часа (в 24-х часовом формате);
мм — две цифры минут;
сс — две цифры секунд;

В литерале типа Дата обязательно должно задаваться значение года, месяца и дня. Для задания даты соответствующей началу отсчета достаточно указать ‘00010101’.
Допускается при указании литералов типа Дата опускать последние символы (секунды, минуты, часы и т.д.). Это означает, что данные параметры будут равны нулю (для времени) или единице (для даты).
В литерале даты допускается использование различных разделителей:

В языке ЗАПРОСов значения типа Дата задаются с помощью ключевого слова ДАТАВРЕМЯ, после которого в скобках последовательно указываются год, месяц, день, час, минута и секунда. Последние три указывать не обязательно:

Как получить день недели прописью?

При разработке часто пользователю хочется видеть на форме день недели словом, например: Вторник , Среда и т.д. Собственно как получить день недели словом?

Через функцию формат:

 ДеньПрописью = Формат(ТекущаяДата(), "ДФ=дддд");

Еще вариант для краткого представления:

  мнстр = "пн
    |вт
    |ср
    |чт
    |пт
    |сб
    |вс";
    ДеньПрописью = СтрПолучитьСтроку(мнстр,ДеньНедели(ТекущаяДата()));

Библиотека кода: Сравнить две таблицы значений



//Сравнивает две таблицы значений
//
Функция ТаблицыЗначенийРавны(ТаблицаЗначений1, ТаблицаЗначений2) Экспорт


    Если ТипЗнч(ТаблицаЗначений1) <> Тип("ТаблицаЗначений") ИЛИ ТипЗнч(ТаблицаЗначений2) <> Тип("ТаблицаЗначений") Тогда
        Возврат Ложь;
    КонецЕсли; 
    
    Если ТаблицаЗначений1.Количество() <> ТаблицаЗначений2.Количество() Тогда
        Возврат Ложь;
    КонецЕсли; 


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



Функция расчет среднемесячного количества часов


// Часто при создании дополнительных расчетов необходимо в расчете это получить
&НаСервере
Функция СреднемесячноеКоличествоЧасов(Год) 
    
    Запрос = Новый Запрос;


    Запрос.УстановитьПараметр("Год",Год);
    Запрос.УстановитьПараметр("РабочийДень", Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий);
    Запрос.УстановитьПараметр("ПредпраздничныйДень", Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный);


    Запрос.Текст =
    "ВЫБРАТЬ
    | СУММА(ВЫБОР
    |   КОГДА РегламентированныйПроизводственныйКалендарь.ВидДня =РабочийДень
    |    ТОГДА 1
    |   ИНАЧЕ 0
    |  КОНЕЦ) КАК ЧислоРабочихДней,
    | СУММА(ВЫБОР
    |   КОГДА РегламентированныйПроизводственныйКалендарь.ВидДня =ПредпраздничныйДень
    |    ТОГДА 1
    |   ИНАЧЕ 0
    |  КОНЕЦ) КАК ЧислоПредпраздничныхДней
    |ИЗ
    | РегистрСведений.ДанныеПроизводственногоКалендаря КАК РегламентированныйПроизводственныйКалендарь
    |ГДЕ
    | РегламентированныйПроизводственныйКалендарь.Год =Год";


    ВыборкаКалендаря = Запрос.Выполнить().Выбрать();
    Если ВыборкаКалендаря.Следующий() тогда
        ЧислоРабочихДнейВГоду = ?(ВыборкаКалендаря.ЧислоРабочихДней = NULL, 0, ВыборкаКалендаря.ЧислоРабочихДней); 
        ЧислоПредпраздничныхДнейВГоду = ?(ВыборкаКалендаря.ЧислоПредпраздничныхДней= NULL, 0, ВыборкаКалендаря.ЧислоПредпраздничныхДней);
    Иначе 
        ЧислоРабочихДнейВГоду = 0;
        ЧислоПредпраздничныхДнейВГоду = 0;
    КонецЕсли;
    
    СреднеМесячное = Окр((ЧислоРабочихДнейВГоду*8+ЧислоПредпраздничныхДнейВГоду*7)/12,2);


    Возврат СреднеМесячное;




КонецФункции

Как удалить движения документа программно?

Потребовалось в УТ быстро удалить все движения по банку, дело вроде легкое — отменить проведение всех поступлений и списаний безналичных денежных средств, но не тут то было…

При попытке отмены проведения выполнялись проверки на условия оплаты по заказу и документ ни как не отменял проведения

Ну не может типовым способом, заставим не типовым: Через запрос делаем выбору необходимых нам документов и в обработке результата пишем:

Готовая функция для использования в своих обработках или общем модуле:

Перемещение товаров между складами.

Есть некий справочник с номенклатурой и Регистр накопления » Товары на складах» с измерениями: Склад,Номенклатура; ресурс: Количество.

Необходимо реализовать механизм перемещения номенклатуры между складами посредством документа «Перемещение товара». Склады определяются в документе с помощью реквизитов «Склад отправитель» и «Склад получатель». Данный документ регистрирует изменение складских остатков и так же в нём должен быть реализован контроль остатков.

Подскажите пожалуйста подробно,как с помощью конструктора запроса в Обработке проведения это реализовать?

1cv8.com