четверг, 27 июня 2013 г.

Рисование печатных форм....

1. Касаемо вертикальных именованных областей уже готового макета, в которые надо добавить ячейки.
Пусть это лоховство, но лучший путь- раздвинуть ячейки внутри области (не смотря на форматирование!!!!) и уже сюда добавлять информацию.
2. Если стандартные печатные формы не желательно сохранять (к примеру много внешних печатных форм), то в функции модуля ПолучитьСтруктуруПечатныхФорм() комментируем соответствующую строку СтруктураМакетов.Вставить()

четверг, 13 июня 2013 г.

Группировка (Сгруппировать) и Итоги в запросе

Вроде и нет ничего проще,а с четким определением проблема.
Итак.

  Сгруппировать(группировка)- свернуть записи в группу по групповым полям (полям с одинаковым значением).
  Пример. Нам необходимо узнать общее количество товаров на определенном складе (...всего 999 тонн..). В регистр записывается каждое движение и даже элементарный запрос из двух полей (Склад и Количество) сформирует выборку из множества записей с одинаковым значением поля Склад и разными значениями поля Количество.
Свернуть (сгруппировать) остатки по полю Склад- это получить общее количество товара на этом складе.
  Отсюда вытекает необходимость (для нашего примера, но вообщем не обязательно) вычисления агрегатных функций (производят одиночное значение для определенной группы полей таблицы) по групповому полю (в терминах конструктора запросов- Суммируемое поле).
  В нашем примере- групповое поле Склад, а агрегатную функцию вычислим по полю Количество- получим ОБЩЕЕ КОЛИЧЕСТВО всех товаров на складе.
  Т.к. настолько простые запросы очень редки, то во всех иных случаях при применении Группировки, группироваться будут все поля запроса (за исключением Суммируемых) и  выборка будет сокращаться (сворачиваться) только на те записи, у которых все групповые поля одинаковы (одинаковый склад, одинаковый товар, одинаковый размер товара- эти записи свернуться, если хоть что-то разное- нет).

Итоги (т.н. общие)- дополнительные строки в результате запроса, содержащие итоги  по заданным полям и группировкам (т.н. промежуточные итоги).
Общие итоги- строка в результате запроса со значением итогов по всем записям.

Итоги по группировкам- значения агрегатных функций по групповым полям(полям с одинаковым значением).

Отличия запроса с группировками (СГРУППИРОВАТЬ ПО) от запроса с итогами по группировкам.
В первом случае в результат запроса попадут только итоговые строки. В примере групповое поле- номенклатура:

Во втором- итоги и исходные записи. Причина- в определении (итоги не "сворачивают" данные, а добавляют строки)!В примере групповое поле- номенклатура:





Важно! В запросе нет необходимости пользоваться и группировкой и итогами! Все зависит от того, что нам нужно...

Порядок группировок в запросе с итогами по группировкам имеет важное значение, т.к. итоги рассчитываются по порядку.

Итоги по иерархии. Если групповое (группировочное) поле является ссылкой на справочник, то для расчета итогов по группам справочника (или родительским элементам, если справочник без групп) необходимо указать ключевое слово ИЕРАРХИЯ. В этом случае в результат будут добавлены записи с итогами для уровней иерархии справочника.

Важно! В языке запросов допускается совместное использование различных итогов в одном запросе (общих, по группировкам и иерархических).

Синтаксис работы с итогами в выборке из результата запроса

Метод ТипЗаписи()
Пример:
Если Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке Тогда

         Продолжить;
КонецЕсли;



Описание:
Получает тип текущей записи выборки.

Возвращаемое значение:
Тип: ТипЗаписиЗапроса

Описание:
Содержит типы записей выборки результатов запроса.

Значения
ДетальнаяЗапись
Детальная (конечная) запись результата запроса.
ИтогПоГруппировке
Итоговая запись по группировке запроса.
ИтогПоИерархии
Итоговая запись по иерархии запроса.
ОбщийИтог
Общая итоговая запись запроса.

Применение.
В примере- если очередная строка выборки запроса имеет тип ИтогПоГруппировке то передать управление в начало цикла (пропустить эту строку).

понедельник, 3 июня 2013 г.

Поиск дублей в табличном поле (таблице значений)

Суть отсюда (из комментария 19). Отличный код! Причем вполне универсальный (меняем только сам источник и ссылки на него, а изменение данных очень просто!), вопреки утверждению автора!

Мой вариант (небольшая адаптация+ комментарии).

"ВЫБРАТЬ
//Основной запрос пакета- выбираем нужные данные,
//и помещаем их во временную таблицу- Таблица.
//Здесь (до ключевого слова ПОМЕСТИТЬ) добавляем/меняем необходимые нам данные.
//В принципе сюда можно выбрать ВСЕ данные исходной таблицы
| УстановкаМестХраненияНоменклатурыТовары.Номенклатура,
| УстановкаМестХраненияНоменклатурыТовары.Партия,
| УстановкаМестХраненияНоменклатурыТовары.Приоритет,
| УстановкаМестХраненияНоменклатурыТовары.НомерСтроки
|ПОМЕСТИТЬ Таблица
|ИЗ
| Документ.УстановкаМестХраненияНоменклатуры.Товары КАК УстановкаМестХраненияНоменклатурыТовары
|ГДЕ
| УстановкаМестХраненияНоменклатурыТовары.Ссылка = &Ссылка
| И УстановкаМестХраненияНоменклатурыТовары.Номенклатура <> ЗНАЧЕНИЕ(Справочник.МестаХранения.ПустаяСсылка)
| И УстановкаМестХраненияНоменклатурыТовары.Номенклатура.Услуга = ЛОЖЬ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
//Данные по которым нужно произвести сравнение выносим сюда.
//Результатом этого запроса явится "сбор"  элементов с одинаковыми полями 
//( в соответствии с условием  
//КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Таблица.НомерСтроки) > 1, т.е. 
//ТЕ ПОЛЯ (РАЗЛИЧАЮЩИЕСЯ НомеромСтроки) которых >1) 
| Таблица.Номенклатура,
| Таблица.Партия,
| Таблица.Приоритет
|ПОМЕСТИТЬ Дубли
|ИЗ
| Таблица КАК Таблица
|
|СГРУППИРОВАТЬ ПО
| Таблица.Номенклатура,
| Таблица.Партия,
| Таблица.Приоритет
|
|ИМЕЮЩИЕ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Таблица.НомерСтроки) > 1
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
//Здесь укажем данные, нужные нам в выборке из запроса (к примеру в сообщении)
//и установим связи м.у. нашими таблицами
| Таблица.Номенклатура,
| Таблица.Партия,
| Таблица.Приоритет,
 | Таблица.НомерСтроки
 |ИЗ
 | Дубли КАК Дубли
 |  ЛЕВОЕ СОЕДИНЕНИЕ Таблица КАК Таблица
 |  ПО Дубли.Номенклатура = Таблица.Номенклатура
 |  И Дубли.Партия = Таблица.Партия
 |  И Дубли.Приоритет = Таблица.Приоритет";

Суть. Мы сравниваем строки ТЧ Товары документа УстановкаМестХраненияНоменклатуры по полям: Номенклатура, Партия, Приоритет.
Если существуют (две и более) строки где эти поля равны друг-другу- они попадут в выборку из запроса!