понедельник, 19 октября 2015 г.

Ресурсы в СКД

Заметки: СКД, Сумма по сумме максимумов

Дата публикации: 12.01.2015

Небольшая заметка по использованию ресурсов в СКД.

Как хотелось бы видеть расчет:
ПодразделенияДокУслугиНаименованиеОплаченоСтоимость
По Договору
  
Подраздление1   160016003Сумма по группировке 2
 Док1  150015002Сумма по группировке 1
  Услуга1 100010001Максимум(дет запись)
   Оплата1Услуги17001000 дет запись
   Оплата2Услуги13001000 дет запись
  Услуга2 500500  
   Оплата1Услуги2250500 дет запись
   Оплата2Услуги2250500 дет запись
        
 Док2  100100  
  Услуга3 100100  
   ОплатаУслуги3100100  
Как надо настраивать ресурсы:
В колонке стоимость по договору необходимо вычислять значения в группировках разными способами.
Поэтому несколько раз добавляем один и тот же ресурс "СтоимостьПоДоговору" и указывам:

Для группировки 1:
на закладке ресурсы:
Поле: СтоимостьПоДоговору,
Выражение: Максимум(СтоимостьПоДоговору)
Расчитывать ПО: Услуга
Для группировки 2:
на закладке ресурсы:
Поле: СтоимостьПоДоговору,
Выражение: Сумма(ВЫЧИСЛИТЬВыражениесгруппировкоймассив("Максимум(СтоимостьПоДоговору)","Услуга"))
Расчитывать ПО: Док
Для группировки 3:
нельзя использовать вложенные агрегатные функции, поэтому
на закладке "Вычисляемые поля" добавляем
Поле: СтоимостьПоДоговоруПоДок
Выражение: Сумма(ВЫЧИСЛИТЬВыражениесгруппировкоймассив("Максимум(СтоимостьПоДоговору)","Услуга"))
а на закладке ресурсы:
Поле: СтоимостьПоДоговору,
Выражение: Сумма(ВЫЧИСЛИТЬВыражениесгруппировкоймассив("СтоимостьПоДоговоруПоДок","Док"))
Расчитывать ПО: Подразделение

Источник: http://аутсорсинг1с.рф/blog/236

вторник, 10 апреля 2012 г.

Друкована форма на СКД



Создание печатной формы ТЧ документа с использованием СКД
Создаем макет СКД, там произвольно или с какими-нибудь условиями выбираем в наборе данных поля табличной части, ставим условие на документ владелец,  и задаем оформление. В форме документа добавляем кнопку печать, прописываем в параметрах наш документ и оп-ля - печатная форма готова

Процедура ОсновныеДействияФормыПечать(Кнопка)



 Если 
Ссылка Документы.РасчетЗаказа.ПустаяСсылка() тогда

 
Предупреждение("Документ не записан");

 Возврат;

 Иначе

 
Схема ПолучитьМакет("Макет1");

 
Настройки Схема.НастройкиПоУмолчанию;

 
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных();

 
КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);



 
ПараметрДок = Новый ПараметрКомпоновкиДанных("документ");

 
ЗначениеПараметраДок КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(ПараметрДок);

 
ЗначениеПараметраДок.Значение Ссылка;

 
ЗначениеПараметраДок.Использование = Истина;

 
Настройки КомпоновщикНастроек.Настройки;



 
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

 
МакетКомпоновки КомпоновщикМакета.Выполнить(СхемаНастройки);

 
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;

 
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки);

 
ДокументРезультат = Новый ТабличныйДокумент;

 
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

 
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

 
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);



 
ДокументРезультат.ОтображатьЗаголовки = Ложь;

 
ДокументРезультат.ОтображатьСетку = Ложь;

 
ДокументРезультат.АвтоМасштаб = Истина;

 
ДокументРезультат.Показать();



 КонецЕсли;



КонецПроцедуры


воскресенье, 5 февраля 2012 г.

Запрос к Таблице Значений

Запрос к Таблице Значений

Код 1C v 8.х
 Таблица = Новый ТаблицаЗначений;
//Опишем тип создаваемой колонки
Массив = Новый Массив;
КЧ = Новый КвалификаторыЧисла(10, 2);
Массив.Добавить(Тип("Число"));
ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ,КЧ);
Таблица.Колонки.Добавить("КодУслуги",ОписаниеТиповЧ);

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


Пример Заполнения колонки одной таблицы по колонке другой, по типу ЛЕВОЕ СОЕДИНЕНИЕ
Это удобно когда например надо заполнить колонку не одним фиксированным значением, а в зависимости от значений в других колонках
Код 1C v 8.х
 
   ТЗН1 = Новый ТаблицаЗначений;//Колонки Кол1,кол2,кол3,ИД
   ТЗН2 = Новый ТаблицаЗначений;//Колонки Кол4,кол5,кол6,ИД
 
    Запрос.УстановитьПараметр("ТЗН1",Отправления);
    Запрос.УстановитьПараметр("ТЗН2",ЛотыКСписанию);
    МВТ = Новый МенеджерВременныхТаблиц;
    Запрос.МенеджерВременныхТаблиц = МВТ;
    //Запрос 1 Помещаем ТЗН1 в МенеджерВременныхТаблиц в таблицу ТЗН1
 
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    ТЗН1.Кол1 КАК Кол1,
    |    ТЗН1.Кол2 КАК Кол2,
    |    ТЗН1.Кол3 КАК Кол3,
    |    ТЗН1.ИД   КАК ИД
    |ПОМЕСТИТЬ
    |    ТЗН1
    |ИЗ
    |    &ТЗН1 КАК ТЗН1";
    Запрос.Выполнить();
    //Запрос 2 Помещаем ТЗН2 в МенеджерВременныхТаблиц в таблицу ТЗН2
 
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ТЗН2.Кол1 КАК Кол4,
    |    ТЗН2.Кол2 КАК Кол5,
    |    ТЗН2.Кол3 КАК Кол6,
    |    ТЗН2.ИД   КАК ИД
    |ПОМЕСТИТЬ
    |    ТЗН2
    |ИЗ
    |    &ТЗН2 КАК ТЗН2";
    //Получаем результирующую таблицу
 
    Запрос.Выполнить();
    Запрос.Текст = 
        "ВЫБРАТЬ
    |    ТЗН1.Кол1 КАК Кол1,
    |    ТЗН1.Кол2 КАК Кол2,
    |    ТЗН1.Кол3 КАК Кол3,
    |    ТЗН1.ИД   КАК ИД,
    |    ТЗН2.Кол1 КАК Кол4,
    |    ТЗН2.Кол2 КАК Кол5,
    |    ТЗН2.Кол3 КАК Кол6,
    |ИЗ
    |    ТЗН1 КАК ТЗН1
    |   ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗН2 КАК ТЗН2
    |   ПО ТЗН1.ИД = ТЗН2.ИД";
    тзн3 = Запрос.Выполнить().Выгрузить(); 
 
Взято с http://help1c.com/faq/view/815.html 
 

четверг, 1 декабря 2011 г.

Работа с датами и периодами

//функция проверяет, равен ли месяцу интервал между заданными датами 
Функция ЭтоМесяц(ДатаН,ДатаК) Экспорт
     Если Не(ДатаН=НачМесяца(ДатаН)) Тогда
          Возврат(0);
     ИначеЕсли Не(ДатаК=КонМесяца(ДатаК)) Тогда
          Возврат(0);
     ИначеЕсли ДатаН=НачМесяца(ДатаК) Тогда
          Возврат(1);
     Иначе
          Возврат(0);
     КонецЕсли;
КонецФункции
//функция возвращает количество полных месяцев между датами 
Функция гМесяцев(ДатаН,ДатаК) Экспорт
     Если ДатаН<ДатаК Тогда
          ТекДата=НачМесяца(ДатаН);
          Значение=1;
          Пока ТекДата<НачМесяца(ДатаК) Цикл
               ТекДата=ДобавитьМесяц(ТекДата,1);
               Значение=Значение+1;
          КонецЦикла;
          Возврат(Значение);
     Иначе
          Возврат(0);
     КонецЕсли;
КонецФункции
//функция определяет порядковый номер месяца в квартале
 Функция гМесяцКвартала(ДатаДок) Экспорт
     НачМесяц=ДатаМесяц(НачКвартала(ДатаДок));
     КонМесяц=ДатаМесяц(ДатаДок);
     Возврат(КонМесяц-НачМесяц+1);
КонецФункции
//функция определяет порядковый номер квартала по дате
 Функция гДатаКвартал(аДата) Экспорт
     Возврат ДатаМесяц(КонКвартала(аДата))/3;
КонецФункции

Взято с http://love1c.kiev.ua/code/global.htm#.Tte7ydXzwcs 


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

СледующийДень = ТекущаяДата() + 60 * 60 * 24;
ДобавитьМесяц(Дата(2005, 1, 31), 1);
ДобавитьМесяц(Дата(2005, 2, 28), -1);
КонецМесяца(ДобавитьМесяц(Дата(2005, 2, 28), -1));

Функция ПолучитьДень(ИсходнаяДата, КоличествоПрибавляемыхДней)
    Запрос = НовыйЗапрос("
    |ВЫБРАТЬ
    |    ДОБАВИТЬКДАТЕ(&ИсходнаяДата, ДЕНЬ, &Количество) как Дата";
    Запрос.УстановитьПараметр("ИсходнаяДата", ИсходнаяДата);
    Запрос.УстановитьПараметр("Количество", КоличествоПрибавляемыхДней);
    ВозвратЗапрос.Выполнить().Выгрузить()[0].Дата;
КонецФункции 
 
 
http://www.about1c.ru/?prog77-functions-date

среда, 26 октября 2011 г.

Конструкция Выбор когда

ВЫБРАТЬ
    ДокументыПоКонтрагенту.Ссылка,
    СУММА(ВЫБОР
            КОГДА (НЕ СчетФактураВыданный.Ссылка ЕСТЬ NULL )
                ТОГДА СчетФактураВыданный.СуммаДокумента
           КОГДА (НЕ ПоступлениеТоваровУслугТовары.Ссылка ЕСТЬ NULL )
ТОГДА ПоступлениеТоваровУслугТовары.Сумма
            ИНАЧЕ 0
        КОНЕЦ) КАК СуммаДокумента
ИЗ
    КритерийОтбора.ДокументыПоКонтрагенту КАК ДокументыПоКонтрагенту
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетФактураВыданный КАК СчетФактураВыданный
        ПО ДокументыПоКонтрагенту.Ссылка = СчетФактураВыданный.Ссылка
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
        ПО ДокументыПоКонтрагенту.Ссылка = ПоступлениеТоваровУслугТовары.Ссылка

СГРУППИРОВАТЬ ПО
    ДокументыПоКонтрагенту.Ссылка