its03_metodich_podderzka_1211_htm_

Методика. ПРИМЕРЫ.

 

 

1 Общая схема выполнения запросов.

2 Периодические регистры сведений.

3 Предложение ВЫБРАТЬ (SELECT) в языке запросов 1С:Предприятия 8.

4 Предложение ИЗ (FROM) в языке запросов 1С:Предприятия 8.

 

Формы.

5 Значения ячеек и элементы управления в табличном документе.

6 Зачем нужны модули менеджеров прикладных объектов?

7. Как добавить новый объект и открыть его основную форму?

8. Как открыть форму списка подчиненного справочника с отбором по владельцу?

9. Есть форма, содержащая динамический список с произвольным запросом. Как при открытии формы установить нужные параметры в этом запросе?

10. Как программно запустить отчет, передав в него значения отбора?

11. Как добавить произвольные колонки в динамический список?

12. Как рассчитать сумму в строке табличной части справочника или документа?

13. Как предоставить возможность быстрого отбора по нескольким полям в списке?

14. Как с помощью команды выполнить отчет с некоторыми параметрами?

15. Как открыть неосновную форму текущего элемента формы списка?

 

Прикладные объекты в форме.

16. Как при открытии формы определить, что создается новый элемент?

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

18. Где описать собственный алгоритм заполнения реквизитов нового документа?

19. Как выполнить ввод на основании программно?

20. Как самому вывести сообщение, чтобы оно указывало на поле формы, в котором ошибка?

21. Как программно открыть внешнюю обработку?

22. Типичные причины неоптимальной работы запросов и методы оптимизации.

23. Типичные причины избыточных блокировок и методы оптимизации.

24. Анализ типов значений.

25. Особенности использования значений типа Дата и МоментВремени.

 

Язык запросов.

26. Особенности использования предложения СГРУППИРОВАТЬ ПО.

27. Содержимое полей справочника.

28. Использование предложения "ДЛЯ ИЗМЕНЕНИЯ" в языке запросов.

29. Использование отборов в запросах с виртуальными таблицами.

30. Использование произвольных выражений в итогах языка запроса.

31. Использование функции ЕСТЬNULL().

32. Использование упорядочивания во вложенных запросах.

33. Вывод ссылочных полей.

34. Особенности связи с виртуальной таблицей остатков.

35. Выборка из результата запроса всех вошедших в него значений группировок.

36. Примеры запросов для работы с иерархическими справочниками.

37. Дополнение результата запроса датами в установленном периоде.

38. Особенности упорядочивания по ссылочным полям.

39. Получение полей через точку от других полей.

40. Особенности работы с виртуальной таблицей данных графика регистра расчета.

41. Расчет итогов по полям остатка.

42. Особенность выполнения функции ПОДСТРОКА() языка запросов.

43. Особенности использования группового оператора вхождения.

 

№№

 

 

1

1 Общая схема выполнения запросов.

НашЗапрос = Новый Запрос;

                НашЗапрос.Текст = "

                | ВЫБРАТЬ Ссылка, Наименование, Родитель КАК Группа

                | ИЗ Справочник.Номенклатура

                | ГДЕ Ссылка В ИЕРАРХИИ (&ВыбГруппа)";

 

2

 

НашЗапрос = Новый Запрос ("ВЫБРАТЬ * ИЗ Справочник.Номенклатура");

 

3

 

//здесь: "ВыбГруппа" - параметр запроса,

// а "ВыбраннаяГруппаТоваров" - переменная, содержащая ссылку на группу справочника "Номенклатура".

НашЗапрос.УстановитьПараметр("ВыбГруппа", ВыбраннаяГруппаТоваров);

 

4

 

РезультатЗапроса = НашЗапрос.Выполнить();

 

5

 

Выборка = РезультатЗапроса.Выбрать(); //по умолчанию применяется прямой тип обхода

//обход записей в выборке

Пока Выборка.Следующий() Цикл

                //обращение к полям

                Сообщить(Выборка.Наименование);

КонецЦикла;

 

6

 

ТабЗнач = РезультатЗапроса.Выгрузить(); //по умолчанию прямой тип обхода

ДеревоЗнач = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);

 

7

 

ТД = ЭлементыФормы.ПолеТабличногоДокумента1;

СводнаяТаблица = ТД.ВстроенныеТаблицы.СводнаяТаблица1;

СводнаяТаблица.ИсточникДанных = РезультатЗапроса;  //<= вот здесь самое важное!

СводнаяТаблица.ОтображатьПоля = Истина;

 

8

 

 

9

 

ТабДок = ЭлементыФормы.ПолеТабличногоДокумента;

НашаСводнаяТаблица = ТабДок.ВстроенныеТаблицы.Добавить(Тип("СводнаяТаблица"));

 

10

 

ТабДок = ЭлементыФормы.ПолеТабличногоДокумента;

НашаСводнаяТаблица = ТабДок.ВстроенныеТаблицы.СводнаяТаблица1;

 

11

 

Запрос = Новый Запрос ("

| ВЫБРАТЬ

|      Номенклатура,

|      ПодразделениеКомпании,

|      СуммаПродажи

| ИЗ

|      РегистрНакопления.ПродажиКомпании

|

| ИТОГИ СУММА(СуммаПродажи) ПО

|      Номенклатура ИЕРАРХИЯ,

|      ПодразделениеКомпании ИЕРАРХИЯ

| ");

 

РезультатЗапроса = Запрос.Выполнить();

 

ТабДок = ЭлементыФормы.ПолеТабличногоДокумента1;

СводТаб = ТабДок.ВстроенныеТаблицы.СводнаяТаблица1;

СводТаб.ИсточникДанных = РезультатЗапроса; //самое важное!

СводТаб.ОтображатьПоля = Истина;

 

12

 

СводТаб.Строки.Добавить(СводТаб.Поля.Номенклатура);

СводТаб.Колонки.Добавить(СводТаб.Поля.ПодразделениеКомпании);

СводТаб.Данные.Добавить(СводТаб.Поля.СуммаПродажи);

 

13

 

СводТаб.Обновление = Ложь;

СводТаб.Строки.Добавить(СводТаб.Поля.ПодразделениеКомпании);

СводТаб.Строки.Добавить(СводТаб.Поля.Номенклатура);

СводТаб.Данные.Добавить(СводТаб.Поля.СуммаПродажи);

СводТаб.Обновление = Истина;

 

14

 

СтруктураДанных = СводТаб.ПолучитьЗначения(ТабДок.Область("R4C3:R4C3"));

 

15

 

 

16

2 Периодические регистры сведений

ВалютаОтбор = Новый Структура("Валюта", ВыбВалюта);

СтруктураКурсКратность = РегистрыСведений.КурсыВалют.Получить(ВыбДата, ВалютаОтбор);

Если СтруктураКурсКратность.Курс = 0 Тогда

     Сообщить("Курс точно на эту дату не указан!");

Иначе

     Сообщить("Курс валюты:" + СокрЛП(СтруктураКурсКратность.Курс) + ", кратность: " + СокрЛП(СтруктураКурсКратность.Кратность));

КонецЕсли;

 

17

 

ВалютаОтбор = Новый Структура("Валюта", ВыбВалюта);

СтруктураКурсКратность = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(ВыбДата, ВалютаОтбор);

Сообщить("Актуальный курс на заданную дату: " + СтруктураКурсКратность.Курс);

 

18

 

тзДанные = РегистрыСведений.КурсыВалют.СрезПоследних(ВыбДата, );

Для Каждого Стр Из тзДанные Цикл

      Сообщить("Для валюты " + Строка(Стр.Валюта) + " курс на заданную дату: " + Строка(Стр.Курс) + ", кратность: " + Строка(Стр.Кратность));    

КонецЦикла;

 

19

 

ОтборТипЦен = Новый Структура("ТипЦен", Перечисления.ТипыЦен.Оптовая);

тзДанные = РегистрыСведений.ЦеныКомпании.СрезПоследних(ВыбДата, ОтборТипЦен);

Для Каждого Стр Из тзДанные Цикл

      Сообщить("Для номенклатуры " + Строка(Стр.Номенклатура) + " оптовая цена: " + Строка(Стр.Цена));    

КонецЦикла;

 

20

 

 

21

 

ВЫБРАТЬ * ИЗ РегистрСведений.КурсыВалют

 

22

 

ВЫБРАТЬ Валюта, Курс

ИЗ РегистрСведений.КурсыВалют.СрезПоследних(&ВыбДата, Валюта = &ВыбВалюта);

 

23

 

ВЫБРАТЬ Валюта, Курс

ИЗ РегистрСведений.КурсыВалют.СрезПоследних(&ВыбДата);

 

24

 

ВЫБРАТЬ Номенклатура, Цена

ИЗ РегистрСведений.ЦеныКомпании.СрезПоследних(&ВыбДата, ТипЦен=&ВыбТипЦен);

 

25

 

 

26

3 Предложение ВЫБРАТЬ (SELECT) в языке запросов 1С:Предприятия 8

//обращение к таблице справочника

ВЫБРАТЬ * ИЗ Справочник.Номенклатура

 

//обращение к таблице документа

ВЫБРАТЬ * ИЗ Документ.РасходныйКассовыйОрдер

 

//обращение к основной таблице регистра накопления

ВЫБРАТЬ * ИЗ РегистрНакопления.ПродажиКомпании

 

//обращение к виртуальной таблице регистра накопления

ВЫБРАТЬ * ИЗ РегистрНакопления.ПродажиКомпании.Обороты

 

27

 

//выборка всех невиртуальных полей из таблицы справочника

ВЫБРАТЬ Справочник.Номенклатура.*

 

//выборка определенных полей из таблицы справочника

ВЫБРАТЬ

     Справочник.Номенклатура.Код,

     Справочник.Номенклатура.Наименование,

     Справочник.Номенклатура.Представление //виртуальное поле

 

28

 

//обращение к таблице справочника

ВЫБРАТЬ Код, Наименование, Артикул, СтранаПроисхождения

ИЗ Справочник.Номенклатура

 

//обращение к таблице документа

ВЫБРАТЬ Номер, Дата, ПодразделениеКомпании, СуммаДокумента

ИЗ Документ.РасходныйКассовыйОрдер

 

29

 

//обращение к таблице справочника (выбрать два обычных поля и одно виртуальное)

ВЫБРАТЬ Код, Наименование, Представление

ИЗ Справочник.Номенклатура

 

//обращение к таблице документа (выбрать все невиртуальные поля и два виртуальных)

ВЫБРАТЬ *, Представление, МоментВремени

ИЗ Документ.РасходныйКассовыйОрдер

 

30

 

//обращение к свойству объекта через одну точку

ВЫБРАТЬ

      Ссылка,

      ЮрФизЛицоКонтрагента.ИНН,

      ПодразделениеКомпании.Код

ИЗ Документ.РасходныйКассовыйОрдер

 

//обращение к свойствам объектов через несколько точек

ВЫБРАТЬ

      Ссылка,

      Ответственный.ОсновнойБанковскийСчет.Банк.КоррСчет

ИЗ Документ.АвансовыйОтчет

 

31

 

ВЫБРАТЬ

      Ссылка КАК Документ,

      Ответственный КАК МатериальноОтветственный

ИЗ Документ.АвансовыйОтчет

УПОРЯДОЧИТЬ ПО МатериальноОтветственный

 

32

 

ВЫБРАТЬ

      Ссылка Документ,

      Ответственный МатериальноОтветственный

ИЗ Документ.АвансовыйОтчет

 

33

 

//получение табличной части как вложенной таблицы результата запроса

ВЫБРАТЬ Номер, Дата, Товары

ИЗ Документ.АвансовыйОтчет

 

//получение нескольких колонок табличной части как вложенной таблицы

ВЫБРАТЬ Номер, Дата, Товары.(Номенклатура, Количество)

ИЗ Документ.АвансовыйОтчет

 

34

 

ВЫБРАТЬ Номер, Дата, Товары.Номенклатура, Товары.Количество

ИЗ Документ.АвансовыйОтчет

 

35

 

//выборка всех полей из табличной части

ВЫБРАТЬ * ИЗ Документ.АвансовыйОтчет.Товары

 

// выборка определенных полей из табличной части

ВЫБРАТЬ Номенклатура, Количество, Цена, Сумма

ИЗ Документ.АвансовыйОтчет.Товары

 

//задание псевдонимов для полей табличной части

ВЫБРАТЬ Документ.АвансовыйОтчет.Товары.(Номенклатура, Сумма КАК СуммаПоСтроке)

 

 

//обращение к реквизитам документа и реквизитам табличной части (поле Ссылка)

ВЫБРАТЬ

      Ссылка.Номер, Ссылка.Дата, Ссылка.Ответственный, //реквизиты документа

      Номенклатура, Количество, Цена, Сумма //реквизиты табличной части

ИЗ Документ.АвансовыйОтчет.Товары

 

36

 

ВЫБРАТЬ РАЗЛИЧНЫЕ Ответственный

ИЗ Документ.АвансовыйОтчет

 

37

 

ВЫБРАТЬ ПЕРВЫЕ 10 Номер, Дата, СуммаДокумента

ИЗ Документ.АвансовыйОтчет

УПОРЯДОЧИТЬ ПО СуммаДокумента УБЫВ

 

38

 

//арифметические операции

ВЫБРАТЬ

       Номенклатура,

       Количество * Цена КАК РасчСумма1,

       Сумма / Количество КАК РасчСумма2

ИЗ Документ.АвансовыйОтчет.Товары

 

//литералы типа "булево", "число", "строка", "дата"

ВЫБРАТЬ Истина, Ложь, 10.5, "Текст", ДАТАВРЕМЯ(2003,12,25)

 

//конкатенация строк

ВЫБРАТЬ "Сотрудник " + Ответственный.Наименование

ИЗ Документ.АвансовыйОтчет

 

//агрегатные функции

ВЫБРАТЬ

       ПодразделениеКомпании,

       СУММА(СуммаДокумента),

       МАКСИМУМ(СуммаДокумента),

       МИНИМУМ(СуммаДокумента),

       СРЕДНЕЕ(СуммаДокумента),

       КОЛИЧЕСТВО(*)

ИЗ Документ.АвансовыйОтчет

СГРУППИРОВАТЬ ПО ПодразделениеКомпании

 

//операция выбора

ВЫБРАТЬ Наименование,

     ВЫБОР

        КОГДА СтранаПроисхождения.Наименование = "КИТАЙ" ТОГДА "Азия"

        КОГДА СтранаПроисхождения.Наименование = "ТАЙВАНЬ" ТОГДА "Азия"

        КОГДА СтранаПроисхождения.Наименование = "США" ТОГДА "Америка"

        КОГДА СтранаПроисхождения.Наименование = "КАНАДА" ТОГДА "Америка"

        ИНАЧЕ "Другое"

    КОНЕЦ КАК Страна

ИЗ Справочник.Номенклатура

 

//операция приведения типов

ВЫБРАТЬ

       Ссылка,      

       Номенклатура,

       ВЫРАЗИТЬ(Сумма / 3 КАК Число(5,2)) КАК ТретьСуммы

ИЗ Документ.АвансовыйОтчет.Товары

 

39

 

 

40

4 Предложение ИЗ (FROM) в языке запросов 1С:Предприятия 8

ВЫБРАТЬ *, Представление ИЗ Справочник.Номенклатура

41

 

ВЫБРАТЬ Ссылка, Номер, Дата, Представление

ИЗ Документ.АвансовыйОтчет

 

42

 

ВЫБРАТЬ Ссылка, Номер, Дата

ИЗ ЖурналДокументов.СкладскиеДокументы

ГДЕ Проведен = Истина

 

43

 

ВЫБРАТЬ Номенклатура, ПодразделениеКомпании, СуммаПродажи

ИЗ РегистрНакопления.ПродажиКомпании

ГДЕ Активность = Истина

 

44

 

//обращение к табличной части документа

ВЫБРАТЬ Номенклатура, Количество

ИЗ Документ.АвансовыйОтчет.Товары

 

45

 

ВЫБРАТЬ Ссылка.Номер, Ссылка.Дата, Номенклатура, Количество

ИЗ Документ.АвансовыйОтчет.Товары

 

46

 

//обращение к виртуальной таблице регистра накопления (вызов без параметров)

ВЫБРАТЬ * ИЗ РегистрНакопления.ПродажиКомпании.Обороты

 

//выборка оборотов за период

ВЫБРАТЬ * ИЗ РегистрНакопления.ПродажиКомпании.Обороты(&Нач, &Кон,,)

 

//выборка оборотов по конкретному товару

ВЫБРАТЬ * ИЗ РегистрНакопления.ПродажиКомпании.Обороты(,,,Номенклатура = &ВыбТовар)

 

//остатки товаров на определенную дату

ВЫБРАТЬ * ИЗ РегистрНакопления.ОстаткиТоваровКомпании.Остатки(&ВыбДата,)

 

47

 

ВЫБРАТЬ Продажи.Номенклатура,

                   Продажи.ПодразделениеКомпании,

                   Продажи.СуммаПродажи

ИЗ РегистрНакопления.ПродажиКомпании КАК Продажи

ГДЕ Активность = Истина

 

48

 

ВЫБРАТЬ

Товары.Номенклатура КАК Товар,

Товары.Номенклатура.Артикул

ИЗ

(

       ВЫБРАТЬ Номенклатура ИЗ Документ.ВнутреннийЗаказ.Товары

       ОБЪЕДИНИТЬ

       ВЫБРАТЬ Номенклатура ИЗ Документ.ЗаказПокупателя.Товары

) КАК Товары

 

49

 

ВЫБРАТЬ Спр.Ссылка, ДокТовары.Номенклатура

ИЗ Справочник.Номенклатура КАК Спр, Документ.АвансовыйОтчет.Товары КАК ДокТовары

 

50

 

ВЫБРАТЬ ДокТовары.Номенклатура, Спр.Артикул, ДокТовары.Количество, ДокТовары.Сумма

ИЗ Справочник.Номенклатура КАК Спр

   СОЕДИНЕНИЕ Документ.АвансовыйОтчет.Товары КАК ДокТовары

      ПО Спр.Ссылка = ДокТовары.Номенклатура

 

51

 

ВЫБРАТЬ Спр.Наименование КАК Валюта, Рег.Курс

ИЗ Справочник.Валюты КАК Спр

 ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних КАК Рег

       ПО Спр.Ссылка = Рег.Валюта

 

52

 

ВЫБРАТЬ Спр.Наименование КАК Валюта, Рег.Курс

ИЗ РегистрСведений.КурсыВалют.СрезПоследних() КАК Рег

   ПРАВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ Справочник.Валюты КАК Спр

      ПО Спр.Ссылка = Рег.Валюта

 

53

 

 

54

 

ВЫБРАТЬ

    ОстатокСумма

ИЗ

        РегистрНакопления.Запасы.Остатки()

ГДЕ

        Товар = &Товар      

 

55

 

ВЫБРАТЬ

    ОстатокСумма

ИЗ

        РегистрНакопления.Запасы.Остатки(, Товар = &Товар)

 

56

 

ВЫБРАТЬ

        Валюта, Курс

ИЗ

        РегистрСведений.КурсыВалют.СрезПоследних()

ГДЕ

        Источник = &Источник

 

57

 

ВЫБРАТЬ

    Валюта, Курс

ИЗ

        РегистрСведений.КурсыВалют.СрезПоследних(, Источник = &Источник)

 

58

 

 

59

5 Значения ячеек и элементы управления в табличном документе

ПолеТабДок = ЭлементыФормы.тдПолеТабличногоДокумента;

ПолеТабДок.Область("R1C2").Текст = спрНоменклатура.Наименование;

ПолеТабДок.Область("R2C2").Текст = "Это Строка"; //указываем явно литерал строки

 

60

 

//задаем нужный тип с помощью объекта "ОписаниеТипов"

МассивБулево = Новый Массив;

МассивБулево.Добавить(Тип("Булево"));

ОписаниеТиповБулево = Новый ОписаниеТипов(МассивБулево);

//...

ПолеТабДок = ЭлементыФормы.тдПолеТабличногоДокумента;

ПолеТабДок.Область("R3C3").СодержитЗначение = Истина; //указываем, что в ячейке будет значение

ПолеТабДок.Область("R3C3").ТипЗначения = ОписаниеТиповБулево; //указываем тип значения

ПолеТабДок.Область("R3C3").Значение = СпрНоменклатура.Услуга; //значение типа "Булево" из справочника

 

61

 

ПолеТабДок = ЭлементыФормы.тдПолеТабличногоДокумента;

ПолеТабДок.Область("R4C3").ТипЗначения = ОписаниеТиповДата; //указываем тип, ранее заданный для Даты

ПолеТабДок.Область("R4C3").Значение = ТекущаяДата();

//указываем форматную строку

//будет выглядеть как "[031120-2315]-", если текущая дата '20-11-2003 23:15:00')

ПолеТабДок.Область("R4C3").Формат = "ДФ=[ггММдд-ЧЧмм]-";

 

62

 

//задаем нужный тип с помощью объекта "ОписаниеТипов"

МассивБулево = Новый Массив;

МассивБулево.Добавить(Тип("Булево"));

ОписаниеТиповБулево = Новый ОписаниеТипов(МассивБулево);

...

ПолеТабДок = ЭлементыФормы.тдПолеТабличногоДокумента;

ПолеТабДок.Область("R5C3").СодержитЗначение = Истина; //указываем, что в ячейке будет значение

ПолеТабДок.Область("R5C3").ТипЗначения = ОписаниеТиповБулево; //указываем ранее заданный тип

ПолеТабДок.Область("R5C3").Значение = СпрНоменклатура.Услуга; //значение типа "Булево" из справочника

//а теперь указываем, что в ячейке будет отображаться флажок

ПолеТабДок.Область("R5C3").УстановитьЭлементУправления(Тип("Флажок"));

 

63

 

Перем ПолеТабДок;

 

Процедура УстановитьЭУ(тдОбл, n, ЗначениеЯчейки=Неопределено) //устанавливает элемент управления

 

    ЭлементыФормы.Добавить(Тип("Флажок"), n, Истина, ПолеТабДок);

    ЭлементыФормы[n].Заголовок = "флажок"+n; //можно задать заголовок элемента управления

    ЭлементыФормы[n].Значение = ?(ЗначениеЯчейки=Неопределено, Ложь, ЗначениеЯчейки); //задаем значение ячейки

    ЭлементыФормы[n].ИзменяетДанные = Истина; //устанавливаем различные свойства элемента управления

    ЭлементыФормы[n].ПрозрачныйФон = Истина;

    ЭлементыФормы[n].Расположить(тдОбл); //привязываем элемент управления к ячейке

 

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

// ...

Процедура ЗаполнитьТаблДок() //процедура, заполняющая табличный документ

 

n = 1;

СпрНоменклатура = Справочники.Номенклатура.Выбрать();

Пока СпрНоменклатура.Следующий() Цикл

    // ...

    УстановитьЭУ(ПолеТабДок.Область("R" + n + "C3"), n, СпрНоменклатура.Услуга);

    // ...

    n = n + 1;

КонецЦикла;

 

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

 

ПолеТабДок = ЭлементыФормы.тдПолеТабличногоДокумента;

 

64

 

ПолеТабДок = ЭлементыФормы.тдПолеТабличногоДокумента;

ПолеТабДок.Область("R4C3").Защита = Истина;

 

65

 

 

66

6 Зачем нужны модули менеджеров прикладных объектов?

Функция ПолучитьСписокДебиторов()   .....КонецФункции

67

 

Дебиторы = Справочники.Контрагенты.ПолучитьСписокДебиторов();

 

68

 

 

69

7. Как добавить новый объект и открыть его основную форму?

ОткрытьФорму("Справочник.Товары.ФормаОбъекта");

 

70

 

ОткрытьФорму("ОбщаяФорма.ФормаКонстант");

 

71

 

ПараметрыФормы = Новый Структура("ЭтоГруппа", Истина);

ОткрытьФорму("Справочник.Товары.ФормаГруппы", ПараметрыФормы);

 

72

 

ОткрытьФорму("ОбщаяФорма.МояОбщаяФорма");

 

73

 

ОткрытьФорму("Справочник.Товары.ФормаСписка");

ОткрытьФорму("Справочник.Товары.ФормаВыбора");

ОткрытьФорму("Справочник.Товары.ФормаВыбораГруппы");

 

74

 

ОткрытьФорму("Справочник.Товары.Форма.СписокСОстатками");

ОткрытьФорму("Справочник.Товары.Форма.ФормаУниверсальногоПодбора");

 

75

 

СсылкаНаЭлементСправочника = Элементы.Список.ТекущаяСтрока;

ПараметрыФормы = Новый Структура("Ключ", СсылкаНаЭлементСправочника);

ОткрытьФорму("Справочник.Организации.ФормаОбъекта", ПараметрыФормы);

 

76

 

СсылкаНаЭлементСправочника = Элементы.Список.ТекущаяСтрока;

ПараметрыФормы = Новый Структура("Ключ", СсылкаНаЭлементСправочника);

ОткрытьФорму("Справочник.Организации.Форма.УниверсальнаяФормаОбъекта", ПараметрыФормы);

 

77

 

ОткрытьЗначение(Элементы.Список.ТекущаяСтрока);

 

78

 

ФормаОбработки = ПолучитьФорму("Обработка.РасчетДанных.Форма.Форма2");     

 

79

 

ОсновнаяФормаОбработки = ПолучитьФорму("Обработка.РасчетДанных.Форма");

 

80

 

ПараметрыФормы = Новый Структура("ТекущаяСтрока", Объект.Ссылка);

ОткрытьФорму("Справочник.Товары.ФормаСписка", ПараметрыФормы);

 

81

 

 

82

8. Как открыть форму списка подчиненного справочника с отбором по владельцу?

ЗначениеОтбора = Новый Структура("Владелец", Объект.Ссылка);

 

ПараметрыФормы = Новый Структура("Отбор", ЗначениеОтбора);

 

ОткрытьФорму("Справочник.ДоговорыВзаиморасчетов.ФормаСписка", ПараметрыФормы);

 

83

 

ЗначениеОтбора = Новый Структура("Владелец", Элементы.Список.ТекущаяСтрока);

 

ПараметрыФормы = Новый Структура("Отбор", ЗначениеОтбора);

 

ОткрытьФорму("Справочник.ДоговорыВзаиморасчетов.ФормаСписка", ПараметрыФормы);

 

84

 

ЗначениеОтбора = Новый Структура("Номер", "333");

ПараметрыВыбора = Новый Структура("Отбор", ЗначениеОтбора);

 

ОткрытьФорму("Документ.ПриходнаяНакладная.ФормаСписка",ПараметрыВыбора);

 

85

 

ОткрытьФорму("Документ.ПриходнаяНакладная.ФормаСписка");

 

86

 

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

 

    ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номер");

    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;

    ЭлементОтбора.Использование = Истина;

    ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;

    ЭлементОтбора.ПравоеЗначение = "000000001";

 

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

 

87

 

&НаКлиенте

Процедура ПриходныеНакладные(Команда)

 

   ФормаСписка = ПолучитьФорму("Документ.ПриходнаяНакладная.ФормаСписка");

   ФормаСписка.ФильтрПоТовару = Элементы.Список.ТекущаяСтрока;

   ФормаСписка.Открыть();

 

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

 

88

 

ВЫБРАТЬ    ДокументПриходнаяНакладная.Номер,    ДокументПриходнаяНакладная.ДатаИЗ    Документ.ПриходнаяНакладная КАК ДокументПриходнаяНакладнаяГДЕ    ДокументПриходнаяНакладная.Товары.Товар = &Товар

 

89

 

&НаКлиенте

Процедура ПриОткрытии(Отказ)

 

   Список.Параметры.УстановитьЗначениеПараметра("Товар", ФильтрПоТовару);

 

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

 

90

 

 

91

9. Есть форма, содержащая динамический список с произвольным запросом. Как при открытии формы установить нужные параметры в этом запросе?

ПараметрыФормы = Новый Структура("НачалоПериода, КонецПериода, Товар", '20091201000000', '20091231235959', Объект.Ссылка);

ОткрытьФорму("РегистрСведений.ЦеныТоваров.Форма.ФормаСписка", ПараметрыФормы);

92

 

Результат = ОткрытьФормуМодально("Обработка.ЗаполнениеДанных.Форма.ПараметрыЗаполнения");

               

Если Результат = КодВозвратаДиалога.ОК Тогда

     // Действия в случае ввода данных

 

ИначеЕсли Результат = КодВозвратаДиалога.Пропустить Тогда

     // Действия в случае пропуска экрана; например, переход к следующему шагу мастера

 

ИначеЕсли Результат = КодВозвратаДиалога.Отмена Тогда

     // Действия в случае отказа от ввода данных

 

Иначе 

     // Действия во всех остальных случаях

 

КонецЕсли;   

 

93

 

 

94

10. Как программно запустить отчет, передав в него значения отбора?

УсловияОтбора = Новый Структура("Товар", Элементы.Список.ТекущаяСтрока);

ПараметрыФормы = Новый Структура("Отбор, СформироватьПриОткрытии", УсловияОтбора, Истина);

ОткрытьФорму("Отчет.ЦеныТоваров.ФормаОбъекта", ПараметрыФормы);

 

95

 

&НаКлиенте

Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

 

   ПараметрыФормы = Новый Структура("Отбор,КлючНазначенияИспользования,СформироватьПриОткрытии",

                                    Новый Структура("Товар", ПараметрКоманды),

                                    "ОстаткиПоТовару",

                                    Истина);

   ОткрытьФорму("Отчет.ОстаткиТоваровНаСкладах.Форма",

                ПараметрыФормы,

                ПараметрыВыполненияКоманды.Источник,

                ПараметрыВыполненияКоманды.Уникальность,

                ПараметрыВыполненияКоманды.Окно);

 

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

 

96

 

 

97

11. Как добавить произвольные колонки в динамический список?

ВЫБРАТЬ

   СправочникНоменклатура.Код,

   СправочникНоменклатура.Наименование,

   ЦеныСрезПоследних.Цена

ИЗ

   Справочник.Номенклатура КАК СправочникНоменклатура

      ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних КАК ЦеныСрезПоследних

      ПО ЦеныСрезПоследних.Номенклатура = СправочникНоменклатура.Ссылка

 

98

 

 

99

12. Как рассчитать сумму в строке табличной части справочника или документа?

&НаКлиенте

Процедура МатериалыКоличествоПриИзменении(Элемент)

   СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;

   СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;

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

 

&НаКлиенте

Процедура МатериалыЦенаПриИзменении(Элемент)

   СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;

   СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;

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

 

100

 

Процедура РассчитатьСумму(СтрокаТабличнойЧасти) Экспорт

    СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;

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

 

101

 

&НаКлиенте

Процедура МатериалыКоличествоПриИзменении(Элемент)

    СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;

    РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);

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

 

&НаКлиенте

Процедура МатериалыЦенаПриИзменении(Элемент)

    СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;

    РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);

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

 

102

 

 

103

13. Как предоставить возможность быстрого отбора по нескольким полям в списке?

&НаКлиенте

Процедура Отфильтровать(Команда)

 

    Для Каждого ЭлементОтбора Из Список.Отбор.Элементы Цикл

        Если ЭлементОтбора.Представление = "Программный отбор" Тогда

           Список.Отбор.Элементы.Удалить(ЭлементОтбора);

        КонецЕсли;

    КонецЦикла;

 

    ГруппаОтбора =  Список.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));

    ГруппаОтбора.Использование = Истина;

    ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;

    ГруппаОтбора.Представление = "Программный отбор";

 

    Если НЕ Производитель.Пустая() Тогда

        ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

        ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Производитель");

        ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;

        ЭлементОтбора.Использование = Истина;

        ЭлементОтбора.ПравоеЗначение = Производитель;

        ЭлементОтбора.Представление = "Программный отбор";

    КонецЕсли;

 

    Если НЕ Поставщик.Пустая() Тогда

        ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

        ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Поставщик");

        ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;

        ЭлементОтбора.Использование = Истина;

        ЭлементОтбора.ПравоеЗначение = Поставщик;

        ЭлементОтбора.Представление = "Программный отбор";

    КонецЕсли;

 

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

 

104

 

 

105

14. Как с помощью команды выполнить отчет с некоторыми параметрами?

&НаКлиенте

Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

 

   ПараметрыФормы = Новый Структура("Отбор,КлючНазначенияИспользования,СформироватьПриОткрытии",

                                    Новый Структура("Товар", ПараметрКоманды),

                                    "ОстаткиПоТовару",

                                    Истина);

   ОткрытьФорму("Отчет.ОстаткиТоваровНаСкладах.Форма",

                ПараметрыФормы,

                ПараметрыВыполненияКоманды.Источник,

                ПараметрыВыполненияКоманды.Уникальность,

                ПараметрыВыполненияКоманды.Окно);

 

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

 

106

 

 

107

15. Как открыть неосновную форму текущего элемента формы списка?

&НаКлиенте

Процедура ОткрытьФормуЭлемента(Команда)

 

   ПараметрыФормы = Новый Структура("Ключ", Элементы.Список.ТекущаяСтрока);

   ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаЭлемента1", ПараметрыФормы);

 

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

 

108

 

 

109

Прикладные объекты в форме.

 

110

 

ПоставщикДокумента = Объект.Поставщик;

 

111

 

&НаСервереБезКонтекста

Функция ПолучитьИНННаСервере(СсылкаНаПоставщика)

               

     Возврат СсылкаНаПоставщика.ИНН;

               

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

 

112

 

&НаКлиенте

Процедура ПересчитатьЦеныДокумента(Команда)

               

     ПересчитатьЦеныНаСервере();

                

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

 

+

&НаСервере

Процедура ПересчитатьЦеныНаСервере()

               

     ОбъектДокумента = РеквизитФормыВЗначение("Объект", Тип("ДокументОбъект.Накладная"));

     ОбъектДокумента.НачислитьСкидку(10);

     ЗначениеВРеквизитФормы(ОбъектДокумента, "Объект");

               

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

 

113

 

ОткрытьФорму("Документ.ПриходнаяНакладная.ФормаОбъекта");

 

+

&НаКлиенте

Процедура ПриходнаяНакладная(Команда)

 

    СсылкаНаДокумент = СоздатьНовыйДокумент();

    ОткрытьЗначение(СсылкаНаДокумент);

 

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

&НаСервереФункция СоздатьНовыйДокумент()   НовыйДокумент = Документы.ПриходнаяНакладная.СоздатьДокумент();   НовыйДокумент.Номер = "111";   НовыйДокумент.Дата = ТекущаяДата();   НовыйДокумент.Записать();   Возврат НовыйДокумент.Ссылка;КонецФункции

 

114

16. Как при открытии формы определить, что создается новый элемент?

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

 

    Если Параметры.Ключ.Пустая() Тогда

 

      Сообщить("Создается новый объект");

 

    КонецЕсли;

 

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

 

115

 

ЭлементыОтбора = Новый Структура("Поставщик, Склад", СсылкаНаПоставщика, СсылкаНаСклад);

ПараметрыФормы = Новый Структура("ЗначенияЗаполнения", ЭлементыОтбора);

ОткрытьФорму("Документ.Накладная.ФормаОбъекта", ПараметрыФормы);

 

116

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

ЭлементыОтбора = Новый Структура("Поставщик, Склад", СсылкаНаПоставщика, СсылкаНаСклад);

 

ОбъектНакладной = Документы.Накладная.СоздатьДокумент();

ОбъектНакладной.Заполнить(ЭлементыОтбора);

 

 

 

// Действия, имитирующие интерактивный ввод данных пользователем

ОбъектНакладной.Дата = ТекущаяДатаСеанса();

     ...

ОбъектНакладной.Записать();

 

117

18. Где описать собственный алгоритм заполнения реквизитов нового документа?

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)

               

     Если ДанныеЗаполнения = Неопределено Тогда

          // "Простой" ввод нового объекта

                              

     ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Поставщики") Тогда

          // Новый объект вводится на основании другого объекта.

          // В этом случае в данные заполнения передается ссылка на объект, являющийся основанием.

          // В данном случае обрабатывается ввод на основании элемента справочника Поставщики.

                              

     ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда

          // Новый объект вводится командой из отобранного списка.

          // В данных заполнения будет структура, содержащая значения отбора. Например:

          // "Поставщик" - СсылкаНаПоставщика

          // "Склад" - СсылкаНаСклад

                              

     КонецЕсли;

                              

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

 

118

19. Как выполнить ввод на основании программно?

ПараметрыФормы = Новый Структура("Основание", Объект.Ссылка);

ОткрытьФорму("Документ.ПриходТовара.ФормаОбъекта", ПараметрыФормы);

 

119

 

НовыйДокумент = Документы.РасходнаяНакладная.СоздатьДокумент();

НовыйДокумент.Заполнить(ВыбранныйКлиент);

 

120

 

Если Поставщик = Справочники.Поставщики.ПустаяСсылка() Тогда

 

     Сообщение = Новый СообщениеПользователю;

     Сообщение.Текст = "Необходимо заполнить поставщика!";

     Сообщение.Поле = "Поставщик";

     Сообщение.УстановитьДанные(ЭтотОбъект);

     Сообщение.Сообщить();

                              

     Отказ = Истина;

 

КонецЕсли;

               

// Проверка остальных реквизитов

// ...

               

// Очистить массив проверяемых реквизитов, чтобы платформа

// не выполняла их автоматическую проверку.

ПроверяемыеРеквизиты.Очистить();

 

121

 

Если Поставщик = Справочники.Поставщики.ПустаяСсылка() Тогда

                

     Сообщение = Новый СообщениеПользователю;

     Сообщение.Текст = "Необходимо заполнить поставщика!";

     Сообщение.Поле = "Поставщик";

     Сообщение.УстановитьДанные(ЭтотОбъект);

     Сообщение.Сообщить();

                

     Отказ = Истина;

                 

     // Удалить поставщика из массива проверяемых реквизитов.

     ИндексПоляПоставщик = ПроверяемыеРеквизиты.Найти("Поставщик");

                

     Если ИндексПоляПоставщик <> Неопределено Тогда

 

          ПроверяемыеРеквизиты.Удалить(ИндексПоляПоставщик);

 

     КонецЕсли;

                

КонецЕсли;

 

122

 

ПроверяемыеРеквизиты.Добавить("Комментарий");

 

123

 

ПроверяемыеРеквизиты.Очистить();

 

124

20. Как самому вывести сообщение, чтобы оно указывало на поле формы, в котором ошибка?

Если СокрЛП(Комментарий) = "" Тогда

 

     Сообщение = Новый СообщениеПользователю;

     Сообщение.Поле = "Комментарий";

     Сообщение.Текст = "Нужно написать комментарий.";

     Сообщение.Сообщить();

 

КонецЕсли;

 

125

 

 

126

21. Как программно открыть внешнюю обработку?

&НаКлиенте

Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

 

    //Помещаем обработку во временном хранилище

    АдресХранилища = "";

    Результат = ПоместитьФайл(АдресХранилища, "C:\ВнешняяОбработка.epf", , Ложь);          

    ИмяОбработки = ПодключитьВнешнююОбработку(АдресХранилища);

   

    // Откроем форму подключенной внешней обработки

    ОткрытьФорму("ВнешняяОбработка."+ ИмяОбработки +".Форма");

 

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

 

&НаСервере

Функция ПодключитьВнешнююОбработку(АдресХранилища)

 

    Возврат ВнешниеОбработки.Подключить(АдресХранилища);

 

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

 

127

 

 

128

22. Типичные причины неоптимальной работы запросов и методы оптимизации

-

ВЫБРАТЬ ...ИЗ Документ.РеализацияТоваровУслугЛЕВОЕ СОЕДИНЕНИЕ (   ВЫБРАТЬ ИЗ РегистрСведений.Лимиты   ГДЕ ...   СГРУППИРОВАТЬ ПО ...) ПО ...

 

129

 

+
// Создать менеджер временных таблиц

МенеджерВТ = Новый МенеджерВременныхТаблиц;

Запрос = Новый Запрос;

Запрос.МенеджерВременныхТаблиц = МенеджерВТ;

// Текст пакетного запроса

Запрос.Текст = "

 // Заполняем временную таблицу. Запрос к регистру лимитов.

 | ВЫБРАТЬ ...

 | ПОМЕСТИТЬ Лимиты

 | ИЗ РегистрСведений.Лимиты

 | ГДЕ ...

 | СГРУППИРОВАТЬ ПО ...

 | ИНДЕКСИРОВАТЬ ПО ...;

 

 // Выполняем основной запрос с использованием временной таблицы

 ВЫБРАТЬ ...

 ИЗ Документ.РеализацияТоваровУслуг

 ЛЕВОЕ СОЕДИНЕНИЕ Лимиты

 ПО ...;"

 

130

 

-

Запрос.Текст = "ВЫБРАТЬ|           ТоварыНаСкладахОстатки.Склад,|                ТоварыНаСкладахОстатки.Номенклатура,|                ТоварыНаСкладахОстатки.Качество|ИЗ|                РегистрНакопления.ТоварыНаСкладах.Остатки(,Номенклатура = &Номенклатура) КАК ТоварыНаСкладахОстатки";

 

131

 

-+

Запрос.Текст = "ВЫБРАТЬ

| ТоварыНаСкладахОстатки.Склад,

| ТоварыНаСкладахОстатки.Номенклатура,

| ТоварыНаСкладахОстатки.Качество

|ИЗ

| РегистрНакопления.ТоварыНаСкладах.Остатки(

| ,

| Качество = &Качество

| И Склад = &Склад) КАК ТоварыНаСкладахОстатки";

 

132

 

+

Запрос.Текст = "ВЫБРАТЬ

| ТоварыНаСкладахОстатки.Склад,

| ТоварыНаСкладахОстатки.Номенклатура,

| ТоварыНаСкладахОстатки.Качество,

| ТоварыНаСкладахОстатки.КоличествоОстаток

|ИЗ

| РегистрНакопления.ТоварыНаСкладах.Остатки(

| ,

| Номенклатура = &Номенклатура

| И Склад = &Склад) КАК ТоварыНаСкладахОстатки";

 

133

 

-

Запрос.Текст = "ВЫБРАТЬ   | ОстаткиТоваров.Номенклатура КАК Номенклатура,   | Цены.Цена КАК ЦенаПрошлогоМесяца   |ИЗ   | РегистрНакопления.ТоварыНаСкладах.Остатки(...) КАК ОстаткиТоваров   | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цена КАК Цены   | ПО Цены.Номенклатура = ОстаткиТоваров.Номенклатура И   | Цены.Период В (   | ВЫБРАТЬ МАКСИМУМ(ЦеныПрошлогоМесяца.Период)   | ИЗ РегистрСведений.Цена КАК ЦеныПрошлогоМесяца   | ГДЕ ЦеныПрошлогоМесяца.Период < НАЧАЛОПЕРИОДА(ОстаткиТоваров.Период, МЕСЯЦ)   | И ЦеныПрошлогоМесяца.Номенклатура = ОстаткиТоваров.Номенклатура   | )   | ГДЕ ОстаткиТоваров.Склад = &Склад">;

 

134

 

+

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

 

135

 

-

Запрос.Текст = "ВЫБРАТЬ| Продажи.Регистратор.Номер,| Продажи.Регистратор.Дата,| Продажи.Контрагент,| Продажи.Количество,| Продажи.Стоимость|ИЗ| РегистрНакопления.Продажи КАК Продажи|ГДЕ ...

 

136

 

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

 

137

 

-

Запрос.Текст = "ВЫБРАТЬ | Номенклатура |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки() |ГДЕ | Склад = &Склад";

 

138

 

Запрос.Текст = "ВЫБРАТЬ| Номенклатура|ИЗ| РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад)";

 

139

 

 

140

23. Типичные причины избыточных блокировок и методы оптимизации

Константы.КоличествоДокументов.Установить(Константы.КоличествоДокументов.Получить() + 1);

 

141

 

Запрос.Текст = "ВЫБРАТЬ

  |             СуммаОстаток,

  |             СуммаОстатокДт,

  |             СуммаОстатокКт

  |ИЗ

  |             РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, &Счет, , Организация = &Организация)";

 

142

 

 

143

24. Анализ типов значений

ТипЗнч(ТекущаяДата()) = Тип("Дата")

 

144

 

Тип = ТипЗнч(Константы.ОсновнойСклад.Получить());

Мд = Метаданные.НайтиПоТипу(Тип);

Сообщить(Метаданные.Справочники.Индекс(Мд) > 0);

 

145

 

Тип = ТипЗнч(Константы.ОсновнойСклад.Получить());

Сообщить(Справочники.ТипВсеСсылки().СодержитТип(Тип));

 

146

25. Особенности использования значений типа Дата и МоментВремени

Обороты = РегистрыНакопления.ДенежныеСредстваКомпании.Обороты(Дата(2003, 1, 1), КонецДня(Дата(2003, 1, 31)));

 

147

 

Остатки = РегистрыНакопления.ДенежныеСредстваКомпании.Остатки(Документ.МоментВремени());

 

148

 

Остатки = РегистрыНакопления.ДенежныеСредстваКомпании.Остатки(Новый МоментВрмени(Документ.Дата, Документ));

 

149

 

Функция ДатаНеЗаполнена(ПереданноеЗначение)

   Если ПереданноеЗначение = Дата('00010101') Тогда

      Возврат Истина;

   КонецЕсли;

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

 

150

 

 

151

Язык запросов.

 

 

152

26. Особенности использования предложения СГРУППИРОВАТЬ ПО

ВЫБРАТЬ           ЗаказПокупателя.Контрагент,       ЗаказПокупателя.Контрагент.Код,                 ЗаказПокупателя.Контрагент.Наименование,                 СУММА(ЗаказПокупателя.СуммаДокумента) КАК СуммаДокумента ИЗ                 Документ.ЗаказПокупателя КАК ЗаказПокупателяСГРУППИРОВАТЬ ПО                 ЗаказПокупателя.Контрагент

 

153

27. Содержимое полей справочника

ВЫБРАТЬ           Номенклатура.Наименование,       Номенклатура.ЭтоГруппа,                 Номенклатура.Артикул, ВЫБОР                                КОГДА (Номенклатура.Артикул) ЕСТЬ NULL                                       ТОГДА "NULL"                                ИНАЧЕ "NOT NULL"                 КОНЕЦ ИЗ           Справочник.Номенклатура КАК Номенклатура

 

154

28. Использование предложения "ДЛЯ ИЗМЕНЕНИЯ" в языке запросов

ВЫБРАТЬ

   Док.Дата,

   Док.Ссылка,

   Док.ВидОперации,

   Док.Организация,

   Док.ОтражатьВРегламентированномУчете,

   Док.ОтражатьВУправленческомУчете,

   Док.ПодразделениеКомпании,

   Док.Контрагент,

   Док.ДоговорВзаиморасчетов,

   Док.СкладКомпании,

   Док.Сделка,

   Док.Сделка.ВидОперации КАК ВидЗаказаПокупателя,

   Док.КурсДокумента,

   Док.КратностьДокумента,

   Док.ВалютаДокумента,

   Док.СуммаДокумента,

   Док.КурсВзаиморасчетов,

   Док.КратностьВзаиморасчетов,

   Док.СкладКомпании.Розничный КАК СкладКомпанииРозничный,

   Док.ДоговорВзаиморасчетов.ВалютаВзаиморасчетов КАК ВалютаВзаиморасчетов,

   Док.ДоговорВзаиморасчетов.ВедениеВзаиморасчетов КАК ВедениеВзаиморасчетов,

   Док.ДоговорВзаиморасчетов.КонтролироватьЧислоДнейЗадолженности

       КАК КонтролироватьЧислоДнейЗадолженности,

   Док.ДоговорВзаиморасчетов.ДопустимоеЧислоДнейЗадолженности

       КАК ДопустимоеЧислоДнейЗадолженности,

   Док.ДоговорВзаиморасчетов.КонтролироватьСуммуЗадолженности

       КАК КонтролироватьСуммуЗадолженности,

   Док.ДоговорВзаиморасчетов.ДопустимаяСуммаЗадолженности

       КАК ДопустимаяСуммаЗадолженности,

   Док.ДоговорВзаиморасчетов.ПроцентПредоплаты КАК ПроцентПредоплаты,

   Док.УчитыватьНДС,

   Док.УчитыватьНП,

   Док.СуммаВключаетНДС,

   Док.СуммаВключаетНП,

   Константы.ВалютаУправленческогоУчетаКомпании КАК ВалютаУправленческогоУчета,

   КурсыВалютСрезПоследних.Курс КАК КурсВалютыУпрУчета,

   КурсыВалютСрезПоследних.Кратность КАК КратностьВалютыУпрУчета,

   ВзаиморасчетыПоДоговору.СуммаВалОстаток КАК СуммаВалОстатокПоДоговору,

   ВзаиморасчетыПоСделке.СуммаВалОстаток КАК СуммаВалОстатокПоСделке,

   ПерваяСделка.ДатаПервойСделки,

   СуммыЗаказов.СуммаЗаказаОборот,

   СуммыЗаказов.СуммаОплатыОборот

ИЗ

   Документ.РеализацияТоваров Док,

   Константы

      ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&ДатаДокумента,)

            КАК КурсыВалютСрезПоследних

      ПО Константы.ВалютаУправленческогоУчетаКомпании = КурсыВалютСрезПоследних.Валюта

 

ЛЕВОЕ СОЕДИНЕНИЕ // Для контроля суммы задолженности по договору

                 // (ведение взаиморасчетов - любое) и числа дней задолженности по договору

                 // (ведение взаиморасчетов - по расчетным документам)

   РегистрНакопления.КонтрагентыВзаиморасчетыКомпании.Остатки(,

             ДоговорВзаиморасчетов = &ДоговорВзаиморасчетов)

      КАК ВзаиморасчетыПоДоговору

   ПО Истина

 

ЛЕВОЕ СОЕДИНЕНИЕ

   (ВЫБРАТЬ // Выбирает даты самых ранних сделок по договорам, указанным в т.ч.

        МИНИМУМ(Сделка.Дата) КАК ДатаПервойСделки,

        ДоговорВзаиморасчетов

    ИЗ РегистрНакопления.КонтрагентыВзаиморасчетыКомпании.Остатки(,

         ДоговорВзаиморасчетов = &ДоговорВзаиморасчетов)

    ГДЕ СуммаВалОстаток > 0 // Дебиторская задолженность больше 0

        И ДоговорВзаиморасчетов.ВедениеВзаиморасчетов = &ПоРасчетнымДокументам

        И ДоговорВзаиморасчетов.КонтролироватьЧислоДнейЗадолженности

    СГРУППИРОВАТЬ ПО ДоговорВзаиморасчетов) КАК ПерваяСделка

   ПО Истина

 

ЛЕВОЕ СОЕДИНЕНИЕ // Для контроля суммы задолженности по расчетному документу

                 //(ведение взаиморасчетов - по расчетным документам)

   РегистрНакопления.КонтрагентыВзаиморасчетыКомпании.Остатки(,

   ДоговорВзаиморасчетов = &ДоговорВзаиморасчетов

   И Сделка = &Сделка

   ) КАК ВзаиморасчетыПоСделке

   ПО Истина

 

ЛЕВОЕ СОЕДИНЕНИЕ

   РегистрНакопления.СуммыЗаказов.Обороты(,,, Заказ = &Сделка) КАК СуммыЗаказов

   ПО Истина

ГДЕ

   Док.Ссылка = &ДокументСсылка

ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.КонтрагентыВзаиморасчетыКомпании.Остатки

                           // Блокирующие чтение таблицы остатков регистра для разрешения

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

 

155

29. Использование отборов в запросах с виртуальными таблицами

ВЫБРАТЬ

    ОстатокСумма

ИЗ

        РегистрНакопления.Запасы.Остатки()

ГДЕ

        Товар = &Товар      

 

156

 

ВЫБРАТЬ

    ОстатокСумма

ИЗ

        РегистрНакопления.Запасы.Остатки(, Товар = &Товар)

 

157

 

ВЫБРАТЬ

        Валюта, Курс

ИЗ

        РегистрСведений.КурсыВалют.СрезПоследних()

ГДЕ

        Источник = &Источник

 

158

 

ВЫБРАТЬ

    Валюта, Курс

ИЗ

        РегистрСведений.КурсыВалют.СрезПоследних(, Источник = &Источник)

 

159

30. Использование произвольных выражений в итогах языка запроса

ИТОГИ

    100 * Сумма(Прибыль) / СУММА(Оборот) КАК ПроцентПрибыли

 

160

 

ИТОГИ

    Номенклатура КАК Номенклатура,// Правильно, т.к. поле присутствует в списке группировок итогов

    СуммаОборот КАК СуммаОборот, // Неправильно, т.к. поле отсутствует в списке группировок итогов

    Сумма(КоличествоОборот) КАК КоличествоОборот // Правильно, т.к. поле используется в агрегатной функции

ПО

    Номенклатура,

    Контрагент

 

161

 

ВЫБРАТЬ

    Номенклатура,

    СуммаОборот КАК Оборот,

    СуммаПрибыль КАК Прибыль,

    100 * СуммаПрибыль / СуммаОборот КАК ПроцентПрибыли

ИЗ

    РегистрНакопления.УчетПрибыли.Обороты

ИТОГИ

    СУММА(Оборот),

    СУММА(Прибыль),

    100 * СУММА(Прибыль) / СУММА(Оборот) КАК ПроцентПрибыли

ПО

    Номенклатура ИЕРАРХИЯ

 

162

 

ВЫБРАТЬ

    ОсновнойОстатки.Счет КАК Счет,

    ОсновнойОстатки.Валюта КАК Валюта,

    ОсновнойОстатки.СуммаОстаток КАК СуммаОстаток,

    ОсновнойОстатки.ВалютнаяСуммаОстаток КАК ВалютнаяСуммаОстаток

ИЗ

    РегистрБухгалтерии.Основной.Остатки КАК ОсновнойОстатки

ИТОГИ

    СУММА(СуммаОстаток),

    ВЫБОР

        КОГДА Валюта ЕСТЬ НЕ NULL

            ТОГДА СУММА(ВалютнаяСуммаОстаток)

    КОНЕЦ КАК ВалютнаяСуммаОстаток

ПО

    Счет,

    Валюта

 

163

 

ВЫБРАТЬ

    ОсновнойОстатки.Счет КАК Счет,

    ОсновнойОстатки.Валюта КАК Валюта,

    ОсновнойОстатки.СуммаОстаток КАК СуммаОстаток,

    ОсновнойОстатки.ВалютнаяСуммаОстаток КАК ВалютнаяСуммаОстаток

ИЗ

    РегистрБухгалтерии.Основной.Остатки КАК ОсновнойОстатки

ИТОГИ

    СУММА(СуммаОстаток),

    ВЫБОР

        КОГДА КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Валюта) = 1

            ТОГДА СУММА(ВалютнаяСуммаОстаток)

    КОНЕЦ КАК ВалютнаяСуммаОстаток

ПО

    Счет,

    Валюта

 

164

 

ВЫБРАТЬ

    ПродажиОбороты.Номенклатура КАК Номенклатура,

    ПродажиОбороты.Номенклатура.Код КАК НоменклатураКод,

    ПРЕДСТАВЛЕНИЕ(ПродажиОбороты.Номенклатура) КАК НоменклатураПредставление,

    ПродажиОбороты.КоличествоОборот КАК КоличествоОборот,

    ПродажиОбороты.СуммаОборот КАК СуммаОборот

ИЗ

    РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты

ИТОГИ

    НоменклатураКод + ") " + НоменклатураПредставление КАК НоменклатураПредставление,

    СУММА(КоличествоОборот),

    СУММА(СуммаОборот)

ПО

    Номенклатура

 

165

31. Использование функции ЕСТЬNULL()

ВЫБРАТЬ

    СправочникНоменклатуры.Наименование,

    ЕСТЬNULL(УчетНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток

ИЗ

    Справочник.Номенклатура КАК СправочникНоменклатуры

        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.УчетНоменклатуры.Остатки КАК УчетНоменклатурыОстатки

        ПО УчетНоменклатурыОстатки.Номенклатура = СправочникНоменклатуры.Ссылка

ГДЕ

    СправочникНоменклатуры.ЭтоГруппа = ЛОЖЬ

 

166

 

ВЫБРАТЬ

    СправочникНоменклатуры.Наименование,

    ВЫБОР КОГДА УчетНоменклатурыОстатки.КоличествоОстаток ЕСТЬ NULL ТОГДА 0 ИНАЧЕ УчетНоменклатурыОстатки.КоличествоОстаток КАК КоличествоОстаток

ИЗ

    Справочник.Номенклатура КАК СправочникНоменклатуры

        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.УчетНоменклатуры.Остатки КАК УчетНоменклатурыОстатки

        ПО УчетНоменклатурыОстатки.Номенклатура = СправочникНоменклатуры.Ссылка

ГДЕ

    СправочникНоменклатуры.ЭтоГруппа = ЛОЖЬ

 

167

32. Использование упорядочивания во вложенных запросах

ВЫБРАТЬ

    ВложенныйЗапрос.Ссылка,

    ПродажиОбороты.КоличествоОборот,

    ПродажиОбороты.СуммаОборот

ИЗ

    (ВЫБРАТЬ ПЕРВЫЕ 5

        Номенклатура.Ссылка КАК Ссылка

    ИЗ

        Справочник.Номенклатура КАК Номенклатура

   

    УПОРЯДОЧИТЬ ПО

        Номенклатура.ЗакупочнаяЦена УБЫВ) КАК ВложенныйЗапрос

        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(,,,

            Номенклатура В

                (ВЫБРАТЬ ПЕРВЫЕ 5

                    Номенклатура.Ссылка КАК Ссылка

                ИЗ

                    Справочник.Номенклатура КАК Номенклатура

                УПОРЯДОЧИТЬ ПО

                    Номенклатура.ЗакупочнаяЦена УБЫВ)) КАК ПродажиОбороты

        ПО ВложенныйЗапрос.Ссылка = ПродажиОбороты.Номенклатура

 

168

33. Вывод ссылочных полей

ВЫБРАТЬ

    ПродажиКомпанииОбороты.Номенклатура КАК Номенклатура, 

    ПродажиКомпанииОбороты.ДокументПродажи.Контрагент КАК ДокументПродажиКонтрагент, 

    ПродажиКомпанииОбороты.КоличествоОборот КАК КоличествоОборот, 

    ПродажиКомпанииОбороты.СуммаПродажиОборот КАК СуммаПродажиОборот 

ИЗ 

    РегистрНакопления.ПродажиКомпании.Обороты КАК ПродажиКомпанииОбороты 

ИТОГИ СУММА(КоличествоОборот), СУММА(СуммаПродажиОборот) 

ПО

    ОБЩИЕ, 

    Номенклатура, 

    ДокументПродажиКонтрагент

 

169

 

ВЫБРАТЬ  

    ПродажиКомпанииОбороты.Номенклатура КАК Номенклатура, 

    ПродажиКомпанииОбороты.Номенклатура.Представление КАК НоменклатураПредставление, 

    ПродажиКомпанииОбороты.ДокументПродажи.Контрагент КАК ДокументПродажиКонтрагент,

    ПродажиКомпанииОбороты.ДокументПродажи.Контрагент.Представление КАК КонтрагентПредставление, 

    ПродажиКомпанииОбороты.КоличествоОборот КАК КоличествоОборот, 

    ПродажиКомпанииОбороты.СуммаПродажиОборот КАК СуммаПродажиОборот

ИЗ 

    РегистрНакопления.ПродажиКомпании.Обороты КАК ПродажиКомпанииОбороты

ИТОГИ СУММА(КоличествоОборот), СУММА(СуммаПродажиОборот)

ПО 

    ОБЩИЕ, 

    Номенклатура, 

    ДокументПродажиКонтрагент

 

170

 

ВЫБРАТЬ 

    ПродажиКомпанииОбороты.Номенклатура КАК Номенклатура, 

    ПродажиКомпанииОбороты.Номенклатура.Представление КАК НоменклатураПредставление, 

    ПродажиКомпанииОбороты.ДокументПродажи.Контрагент КАК ДокументПродажиКонтрагент,

    ПродажиКомпанииОбороты.ДокументПродажи.Контрагент.Представление КАК КонтрагентПредставление, 

    ПродажиКомпанииОбороты.КоличествоОборот КАК КоличествоОборот, 

    ПродажиКомпанииОбороты.СуммаПродажиОборот КАК СуммаПродажиОборот

ИЗ 

    РегистрНакопления.ПродажиКомпании.Обороты КАК ПродажиКомпанииОбороты

ИТОГИ СУММА(КоличествоОборот), СУММА(СуммаПродажиОборот)

ПО 

    ОБЩИЕ, 

    Номенклатура, 

    ДокументПродажиКонтрагент

 

171

 

ВЫБРАТЬ 

    ПродажиКомпанииОбороты.Номенклатура КАК Номенклатура, 

    ПродажиКомпанииОбороты.Номенклатура.Представление КАК НоменклатураПредставление, 

    ПродажиКомпанииОбороты.Номенклатура.Код КАК НоменклатураКод, 

    ПродажиКомпанииОбороты.ДокументПродажи.Контрагент КАК ДокументПродажиКонтрагент,

    ПродажиКомпанииОбороты.ДокументПродажи.Контрагент.Представление КАК КонтрагентПредставление, 

    ПродажиКомпанииОбороты.КоличествоОборот КАК КоличествоОборот, 

    ПродажиКомпанииОбороты.СуммаПродажиОборот КАК СуммаПродажиОборот

ИЗ 

    РегистрНакопления.ПродажиКомпании.Обороты КАК ПродажиКомпанииОбороты

ИТОГИ СУММА(КоличествоОборот), СУММА(СуммаПродажиОборот)

ПО 

    ОБЩИЕ, 

    Номенклатура, 

    ДокументПродажиКонтрагент

 

172

 

ВЫБРАТЬ

    ПродажиКомпанииОбороты.Номенклатура КАК Номенклатура, 

    ПродажиКомпанииОбороты.ДокументПродажи.Контрагент КАК ДокументПродажиКонтрагент, 

    ПродажиКомпанииОбороты.КоличествоОборот КАК КоличествоОборот, 

    ПродажиКомпанииОбороты.СуммаПродажиОборот КАК СуммаПродажиОборот 

ИЗ 

    РегистрНакопления.ПродажиКомпании.Обороты КАК ПродажиКомпанииОбороты 

ИТОГИ СУММА(КоличествоОборот), СУММА(СуммаПродажиОборот) 

ПО

    ОБЩИЕ, 

    Номенклатура, 

    ДокументПродажиКонтрагент

 

173

 

ВЫБРАТЬ 

    ПродажиКомпанииОбороты.Номенклатура КАК Номенклатура, 

    ПродажиКомпанииОбороты.Номенклатура.Представление, 

    ПродажиКомпанииОбороты.ДокументПродажи.Контрагент КАК ДокументПродажиКонтрагент,

    ПродажиКомпанииОбороты.ДокументПродажи.Контрагент.Представление, 

    ПродажиКомпанииОбороты.КоличествоОборот КАК КоличествоОборот, 

    ПродажиКомпанииОбороты.СуммаПродажиОборот КАК СуммаПродажиОборот

ИЗ 

    РегистрНакопления.ПродажиКомпании.Обороты КАК ПродажиКомпанииОбороты

ИТОГИ СУММА(КоличествоОборот), СУММА(СуммаПродажиОборот)

ПО 

    ОБЩИЕ, 

    Номенклатура, 

    ДокументПродажиКонтрагент

 

174

34. Особенности связи с виртуальной таблицей остатков

ВЫБРАТЬ

    РасходнаяНакладнаяСостав.Номенклатура,

    УчетНоменклатурыОстатки.КоличествоОстаток

ИЗ

    Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав

        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.УчетНоменклатуры.Остатки КАК УчетНоменклатурыОстатки

        ПО УчетНоменклатурыОстатки.Номенклатура = РасходнаяНакладнаяСостав.Номенклатура

ГДЕ

    РасходнаяНакладнаяСостав.Ссылка = &Документ

 

175

 

ВЫБРАТЬ

    РасходнаяНакладнаяСостав.Номенклатура,

    УчетНоменклатурыОстатки.КоличествоОстаток

ИЗ

    Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав

        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.УчетНоменклатуры.Остатки КАК УчетНоменклатурыОстатки

        ПО УчетНоменклатурыОстатки.Номенклатура = РасходнаяНакладнаяСостав.Номенклатура

ГДЕ

    РасходнаяНакладнаяСостав.Ссылка = &Документ И

    (УчетНоменклатурыОстатки.КоличествоОстаток < РасходнаяНакладнаяСостав.Количество ИЛИ

        УчетНоменклатурыОстатки.КоличествоОстаток ЕСТЬ NULL)

 

176

 

ВЫБРАТЬ

    РасходнаяНакладнаяСостав.Номенклатура,

    УчетНоменклатурыОстатки.КоличествоОстаток

ИЗ

    Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав

        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.УчетНоменклатуры.Остатки(,

                             Номенклатура В (

                                   ВЫБРАТЬ Номенклатура

                                   ИЗ Документ.РасходнаяНакладная.Состав

                                   ГДЕ Ссылка = &Документ)) КАК УчетНоменклатурыОстатки

        ПО УчетНоменклатурыОстатки.Номенклатура = РасходнаяНакладнаяСостав.Номенклатура

ГДЕ

    РасходнаяНакладнаяСостав.Ссылка = &Документ И

    (УчетНоменклатурыОстатки.КоличествоОстаток < РасходнаяНакладнаяСостав.Количество ИЛИ

        УчетНоменклатурыОстатки.КоличествоОстаток ЕСТЬ NULL)

 

177

 

ВЫБРАТЬ

    Состав.Номенклатура,

    Состав.Количество,

    УчетНоменклатурыОстатки.КоличествоОстаток

ИЗ

    (ВЫБРАТЬ

             РасходнаяНакладнаяСостав.Номенклатура КАК Номенклатура,

             СУММА(РасходнаяНакладнаяСостав.Количество) КАК Количество

         ИЗ

             Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав

         ГДЕ РасходнаяНакладнаяСостав.Ссылка = &Документ

         СГРУППИРОВАТЬ ПО РасходнаяНакладнаяСостав.Номенклатура) КАК Состав

     ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.УчетНоменклатуры.Остатки(,

                                                   Номенклатура В (

                                                        ВЫБРАТЬ

                                                            Документ.РасходнаяНакладная.Состав.Номенклатура

                                                        ИЗ

                                                            Документ.РасходнаяНакладная.Состав

                                                        ГДЕ

                                                            Документ.РасходнаяНакладная.Состав.Ссылка = &Документ)

                                                   ) КАК УчетНоменклатурыОстатки

         ПО УчетНоменклатурыОстатки.Номенклатура = Состав.Номенклатура

ГДЕ

    (УчетНоменклатурыОстатки.КоличествоОстаток < Состав.Количество

     ИЛИ (УчетНоменклатурыОстатки.КоличествоОстаток) ЕСТЬ NULL )

 

178

 

ВЫБРАТЬ

    Состав.Номенклатура,

    Состав.Номенклатура.Представление КАК Представление,

    Состав.Количество,

    УчетНоменклатурыОстатки.КоличествоОстаток

ИЗ

    (ВЫБРАТЬ

             РасходнаяНакладнаяСостав.Номенклатура КАК Номенклатура,

             СУММА(РасходнаяНакладнаяСостав.Количество) КАК Количество

         ИЗ

             Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав

         ГДЕ РасходнаяНакладнаяСостав.Ссылка = &Документ

         СГРУППИРОВАТЬ ПО РасходнаяНакладнаяСостав.Номенклатура) КАК Состав

     ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.УчетНоменклатуры.Остатки(,

                                                   Номенклатура В (

                                                        ВЫБРАТЬ

                                                            Документ.РасходнаяНакладная.Состав.Номенклатура

                                                        ИЗ

                                                            Документ.РасходнаяНакладная.Состав

                                                        ГДЕ

                                                            Документ.РасходнаяНакладная.Состав.Ссылка = &Документ)

                                                   ) КАК УчетНоменклатурыОстатки

         ПО УчетНоменклатурыОстатки.Номенклатура = Состав.Номенклатура

ГДЕ

    (УчетНоменклатурыОстатки.КоличествоОстаток < Состав.Количество

     ИЛИ (УчетНоменклатурыОстатки.КоличествоОстаток) ЕСТЬ NULL )

 

179

 

Результат = Запрос.Выполнить();

Если Не Результат.Пустой() Тогда

    Сообщить("Обнаружены товары в недостаточном количестве:");

    Выборка = Результат.Выбрать();

    Пока Выборка.Следующий() Цикл

        Сообщить(Выборка.Представление + ": требуется " + Строка(Выборка.Количество)

                  + " остаток: " + Строка(Выборка.КоличествоОстаток));

    КонецЦикла;

КонецЕсли;

 

180

35. Выборка из результата запроса всех вошедших в него значений группировок

ВЫБРАТЬ

    УчетНоменклатурыОстатки.Номенклатура КАК Номенклатура,

    УчетНоменклатурыОстатки.Номенклатура.Представление,

    УчетНоменклатурыОстатки.Склад КАК Склад,

    УчетНоменклатурыОстатки.Склад.Представление,

    УчетНоменклатурыОстатки.КоличествоОстаток КАК КоличествоОстаток

ИЗ

    РегистрНакопления.УчетНоменклатуры.Остатки КАК УчетНоменклатурыОстатки

ИТОГИ СУММА(КоличествоОстаток) ПО

    ОБЩИЕ,

    Номенклатура,

    Склад

 

181

 

ВыборкаНоменклатура = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Номенклатура");

Пока ВыборкаНоменклатура.Следующий() Цикл

    ОбластьНоменклатура.Параметры.Заполнить(ВыборкаНоменклатура);

    ТабДок.Вывести(ОбластьНоменклатура);

 

182

 

ВыборкаСклад = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Склад", "ВСЕ");

Пока ВыборкаСклад.Следующий() Цикл

    ОбластьСклад.Параметры.Заполнить(ВыборкаСклад);

    ТабДок.Присоединить(ОбластьСклад);

КонецЦикла;

 

183

 

ВыборкаСклад = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Склад", "Организация");»

 

184

36. Примеры запросов для работы с иерархическими справочниками

ВЫБРАТЬ

    Номенклатура.Код,

    Номенклатура.Наименование КАК Наименование,

    Номенклатура.ЗакупочнаяЦена

ИЗ

    Справочник.Номенклатура КАК Номенклатура

 

ГДЕ

    Номенклатура.Ссылка В ИЕРАРХИИ(&Группа)

 

185

 

ВЫБРАТЬ

    Номенклатура.Код,

    Номенклатура.Наименование КАК Наименование,

    Номенклатура.ЗакупочнаяЦена

ИЗ

    Справочник.Номенклатура КАК Номенклатура

 

ГДЕ

    Номенклатура.Родитель = &Группа

 

186

 

ВЫБРАТЬ ПЕРВЫЕ 1

    Номенклатура.Ссылка

ИЗ

    Справочник.Номенклатура КАК Номенклатура

ГДЕ

    Номенклатура.Родитель = &Родитель

 

187

 

Если Запрос.Выполнить().Пустой() Тогда

    Сообщить("Зписей нет");

Иначе

    Сообщить("Записи есть");

КонецЕсли;

 

188

 

ТекущийЭлементНоменклатуры = ЭлементНоменклатура;

 

Запрос = Новый Запрос("ВЫБРАТЬ

                      | Номенклатура.Родитель,

                      | Номенклатура.Родитель.Родитель,

                      | Номенклатура.Родитель.Родитель.Родитель,

                      | Номенклатура.Родитель.Родитель.Родитель.Родитель,

                      | Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель

                      |ИЗ

                      | Справочник.Номенклатура КАК Номенклатура

                      |

                      |ГДЕ

                      | Номенклатура.Ссылка = &ТекущийЭлементНоменклатуры";

 

Пока Истина Цикл

    Запрос.УстановитьПараметр("ТекущийЭлементНоменклатуры", ТекущийЭлементНоменклатуры);

    Результат = Запрос.Выполнить();

    Если Результат.Пустой() Тогда

        Прервать;

    КонецЕсли;

    Выборка = Результат.Выбрать();

    Выборка.Следующий();

    Для НомерКолонки = 0 По Результат.Колонки.Количество() - 1 Цикл

        ТекущийЭлементНоменклатуры = Выборка[НомерКолонки];

        Если ТекущийЭлементНоменклатуры = Справочники.Номенклатура.ПустаяСсылка() Тогда

            Прервать;

        Иначе

            Сообщить(ТекущийЭлементНоменклатуры);

        КонецЕсли;

    КонецЦикла;

 

    Если ТекущийЭлементНоменклатуры = Справочники.Номенклатура.ПустаяСсылка() Тогда

        Прервать;

    КонецЕсли;

КонецЦикла;

 

189

 

ВЫБРАТЬ

    Номенклатура.Код,

    Номенклатура.Наименование КАК Наименование,

    Номенклатура.ЗакупочнаяЦена

ИЗ

    Справочник.Номенклатура КАК Номенклатура

УПОРЯДОЧИТЬ ПО

    Наименование ИЕРАРХИЯ

 

190

 

УПОРЯДОЧИТЬ ПО

    Номенклатура.ЭтоГруппа ИЕРАРХИЯ,

    Наименование

 

191

 

ВЫБРАТЬ

    Номенклатура.Код,

    Номенклатура.Наименование КАК Наименование,

    Номенклатура.ЗакупочнаяЦена

 

ИЗ Справочник.Номенклатура КАК Номенклатура

 

ГДЕ

    (Номенклатура.ЭтоГруппа = ЛОЖЬ)

 

УПОРЯДОЧИТЬ ПО Наименование

 

ИТОГИ ПО Номенклатура.Ссылка ТОЛЬКО ИЕРАРХИЯ

 

192

 

ВЫБРАТЬ

    УчетНоменклатурыОбороты.Номенклатура КАК Номенклатура,

    УчетНоменклатурыОбороты.Номенклатура.Представление,

    УчетНоменклатурыОбороты.КоличествоОборот КАК КоличествоОборот

ИЗ

    РегистрНакопления.УчетНоменклатуры.Обороты КАК УчетНоменклатурыОбороты

ИТОГИ СУММА(КоличествоОборот) ПО

   Номенклатура ИЕРАРХИЯ

 

193

 

ВЫБРАТЬ

    УчетНоменклатурыОбороты.Номенклатура КАК Номенклатура,

    УчетНоменклатурыОбороты.Номенклатура.Представление,

    УчетНоменклатурыОбороты.КоличествоОборот КАК КоличествоОборот

ИЗ

    РегистрНакопления.УчетНоменклатуры.Обороты КАК УчетНоменклатурыОбороты

ИТОГИ СУММА(КоличествоОборот) ПО

   Номенклатура ТОЛЬКО ИЕРАРХИЯ

 

194

37. Дополнение результата запроса датами в установленном периоде

ВЫБРАТЬ

    УчетНоменклатурыОбороты.Период КАК Период,

    УчетНоменклатурыОбороты.КоличествоОборот КАК КоличествоОборот

ИЗ

    РегистрНакопления.УчетНоменклатуры.Обороты(, , Неделя, ) КАК УчетНоменклатурыОбороты

 

УПОРЯДОЧИТЬ ПО

    Период

 

ИТОГИ СУММА(КоличествоОборот) ПО

    Период ПЕРИОДАМИ(НЕДЕЛЯ,,)

 

195

 

ВыборкаПериод = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Период", "ВСЕ");

Пока ВыборкаПериод.Следующий() Цикл

    ОбластьПериод.Параметры.Заполнить(ВыборкаПериод);

    ТабДок.Вывести(ОбластьПериод, ВыборкаПериод.Уровень());

КонецЦикла;

 

196

38. Особенности упорядочивания по ссылочным полям

-

ВЫБРАТЬ

    Номенклатура.Код,

    Номенклатура.Наименование,

    Номенклатура.ЗакупочнаяЦена

ИЗ

    Справочник.Номенклатура КАК Номенклатура

 

ГДЕ

    Номенклатура.ЭтоГруппа = ЛОЖЬ

 

УПОРЯДОЧИТЬ ПО

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

 

197

 

+

ВЫБРАТЬ

    Номенклатура.Код,

    Номенклатура.Наименование,

    Номенклатура.ЗакупочнаяЦена

ИЗ

    Справочник.Номенклатура КАК Номенклатура

 

ГДЕ

    Номенклатура.ЭтоГруппа = ЛОЖЬ

 

УПОРЯДОЧИТЬ ПО

    Номенклатура.Ссылка

АВТОУПОРЯДОЧИВАНИЕ

 

198

39. Получение полей через точку от других полей

ВЫБРАТЬ

    Номенклатура.Наименование,

    КоличествоОборот

ИЗ

    РегистрНакопления.УчетНоменклатуры.Обороты КАК УчетНоменклатурыОбороты

 

199

 

ВЫБРАТЬ

    СправочникНоменклатура.Наименование,

    КоличествоОборот

ИЗ

    РегистрНакопления.УчетНоменклатуры.Обороты КАК УчетНоменклатурыОбороты

    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура

    ПО УчетНоменклатурыОбороты.Номенклатура = СправочникНоменклатура.Ссылка

 

200

 

ВЫБРАТЬ

    РасходнаяНакладная.Дата,

    РасходнаяНакладная.Номер

ИЗ

    Документ.РасходнаяНакладная КАК РасходнаяНакладная

ГДЕ

    РасходнаяНакладная.Контрагент.Ссылка = &Контрагент

 

201

 

ВЫБРАТЬ

    УчетНоменклатуры.Регистратор.Номер,

    УчетНоменклатуры.Количество

ИЗ

    РегистрНакопления.УчетНоменклатуры КАК УчетНоменклатуры

 

202

 

ВЫБРАТЬ

    ВЫБОР

        КОГДА УчетНоменклатуры.Регистратор ССЫЛКА Документ.ПриходнаяНакладная

            ТОГДА ПриходнаяНакладная.Номер

        КОГДА УчетНоменклатуры.Регистратор ССЫЛКА Документ.РасходнаяНакладная

            ТОГДА РасходнаяНакладная.Номер

    КОНЕЦ,

    УчетНоменклатуры.Количество

ИЗ

    РегистрНакопления.УчетНоменклатуры КАК УчетНоменклатуры

        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриходнаяНакладная КАК ПриходнаяНакладная

        ПО УчетНоменклатуры.Регистратор = ПриходнаяНакладная.Ссылка

        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК РасходнаяНакладная

        ПО УчетНоменклатуры.Регистратор = РасходнаяНакладная.Ссылка

 

203

 

ВЫБРАТЬ

    УчетНоменклатуры.Регистратор.Номер,

    УчетНоменклатуры.Количество

ИЗ

    РегистрНакопления.УчетНоменклатуры КАК УчетНоменклатуры

ГДЕ

    УчетНоменклатуры.Регистратор ССЫЛКА Документ.РасходнаяНакладная

 

204

 

ВЫБРАТЬ

    ВЫРАЗИТЬ(УчетНоменклатуры.Регистратор КАК Документ.РасходнаяНакладная).Номер,

    УчетНоменклатуры.Количество

ИЗ

    РегистрНакопления.УчетНоменклатуры КАК УчетНоменклатуры

ГДЕ

    УчетНоменклатуры.Регистратор ССЫЛКА Документ.РасходнаяНакладная

 

205

40. Особенности работы с виртуальной таблицей данных графика регистра расчета

ВЫБРАТЬ           ЧислоДнейПериодРегистрацииИЗ                 РегистрРасчета.Зарплата.ДанныеГрафика(Организация = &Организация)

 

206

 

ВЫБРАТЬ           ЧислоДнейПериодРегистрации,     ЧислоЧасовПериодРегистрацииИЗ                 РегистрРасчета.Зарплата.ДанныеГрафика(Организация = &Организация)

 

207

 

ВЫБРАТЬ           ЧислоДнейПериодРегистрации,     ЧислоЧасовПериодДействияИЗ                 РегистрРасчета.Зарплата.ДанныеГрафика(Организация = &Организация)

 

208

41. Расчет итогов по полям остатка

ВЫБРАТЬ

    Склад КАК Склад,

    Номенклатура КАК Номенклатура,

    Период КАК Период,

    КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,

    КоличествоОборот КАК КоличествоОборот,

    КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток

ИЗ

    РегистрНакопления.УчетНоменклатуры.ОстаткиИОбороты(, , Неделя, , ) КАК УчетНоменклатурыОстаткиИОбороты

ИТОГИ

    СУММА(КоличествоНачальныйОстаток), СУММА(КоличествоОборот), СУММА(КоличествоКонечныйОстаток)

ПО

    Склад,

    Период,

    Номенклатура

 

209

 

ВЫБРАТЬ

    Склад КАК Склад,

    Номенклатура КАК Номенклатура,

    Период КАК Период,

    КоличествоНачальныйОстаток * Номенклатура.ЗакупочнаяЦена КАК КоличествоНачальныйОстаток,

    КоличествоОборот * Номенклатура.ЗакупочнаяЦена КАК КоличествоОборот,

    КоличествоКонечныйОстаток * Номенклатура.ЗакупочнаяЦена КАК КоличествоКонечныйОстаток

ИЗ

    РегистрНакопления.УчетНоменклатуры.ОстаткиИОбороты(, , Неделя, , ) КАК УчетНоменклатурыОстаткиИОбороты

ИТОГИ

    СУММА(КоличествоНачальныйОстаток), СУММА(КоличествоОборот), СУММА(КоличествоКонечныйОстаток)

ПО

    Склад,

    Период,

    Номенклатура

 

210

42. Особенность выполнения функции ПОДСТРОКА() языка запросов

ВЫБРАТЬ

    ВЫБОР

        КОГДА Вид = &ЮрАдресФизЛица

        ТОГДА ПОДСТРОКА(Представление, 0, 200)

        ИНАЧЕ NULL

    КОНЕЦ КАК Представление,

    ВЫБОР

        КОГДА Вид = &ЮрАдресФизЛица

        ТОГДА ПОДСТРОКА(Представление, 0, 200)

        ИНАЧЕ NULL

    КОНЕЦ КАК Представление1

ИЗ

    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация

УПОРЯДОЧИТЬ ПО

    Представление,

    Представление1

 

211

 

ВЫБОР

    КОГДА Вид = &ЮрАдресФизЛица

    ТОГДА ПОДСТРОКА(Представление, 0, 200)

    ИНАЧЕ NULL

КОНЕЦ КАК Представление,

 

212

 

ВЫБРАТЬ

    ВЫБОР

        КОГДА Вид = &ЮрАдресФизЛица

        ТОГДА ВЫРАЗИТЬ(Представление КАК Строка(200))

        ИНАЧЕ NULL

    КОНЕЦ КАК Представление,

    ВЫБОР

        КОГДА Вид = &ЮрАдресФизЛица

        ТОГДА ВЫРАЗИТЬ(Представление КАК Строка(200))

        ИНАЧЕ NULL

    КОНЕЦ КАК Представление1

ИЗ

    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация

УПОРЯДОЧИТЬ ПО

    Представление,

    Представление1

 

213

43. Особенности использования группового оператора вхождения

<Выражение> В (<Список значений>)

214

 

(<Выражение 1>, ..., <Выражение N>) В (<Вложенный запрос>)

215

 

(1, 2, 3)

216

 

1, 1, 1

2, 2, 2

2, 2, 3

217

 

1, 1, 1

1, 2, 3

2, 2, 3

218

 

(<Выражение 1>, ..., <Выражение N>) В (

    ВЫБРАТЬ <Колонка 1>, ..., <Колонка N>

    ИЗ <Источники>

    ГДЕ <Условие>

)

 

219

 

EXISTS(

    SELECT 1

    FROM <Источники>

    WHERE (<Условие>) AND <Выражение 1> = <Колонка 1> AND ... AND <Выражение N> = <Колонка N>

)

 

220

 

(<Выражение 1>, ..., <Выражение N>) В (

    ВЫБРАТЬ <Колонка 1>, ..., <Колонка N>

    ИЗ <Источники>

    ГДЕ <Условие 1>

    СГРУППИРОВАТЬ ПО <Список группировки>

    ИМЕЮЩИЕ <Условие 2>

)

 

221

 

EXISTS(

    SELECT 1

    FROM <Источники>

    WHERE <Условие 1>

    GROUP BY <Список группировки>

    HAVING (<Условие 2>) AND <Выражение 1> = <Колонка 1> AND ... AND <Выражение N> = <Колонка N>

)

 

222

 

ВЫБРАТЬ

Док.Номенклатура.Представление КАК НоменклатураПредставление,

Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление,

Док.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,

Док.СерияНоменклатуры КАК СерияНоменклатуры,

Док.Качество КАК Качество,

СУММА(ВЫРАЗИТЬ(Док.Количество * Док.Коэффициент / Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК ЧИСЛО(15,3))) КАК ДокументКоличество,

ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0) КАК ОстатокКоличество

ИЗ

Документ.РасходныйОрдерНаТовары.Товары КАК Док

ЛЕВОЕ СОЕДИНЕНИЕ

РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(,

  Склад = &Склад И (Номенклатура, ХарактеристикаНоменклатуры, Качество) В (

    ВЫБРАТЬ

    Док.Номенклатура, Док.ХарактеристикаНоменклатуры, Док.Качество

    ИЗ

    Документ.РасходныйОрдерНаТовары.Товары КАК Док

    ГДЕ

    Док.Ссылка = &ДокументСсылка

    И НЕ Док.Номенклатура.Комплект

  ) И &ДокументПередачи = ДокументПередачи) КАК Остатки

ПО

Док.Номенклатура = Остатки.Номенклатура

И Док.ХарактеристикаНоменклатуры = Остатки.ХарактеристикаНоменклатуры

И Док.Качество = Остатки.Качество

И ((НЕ Док.СерияУказываетсяПриОтпускеСоСклада И Остатки.СерияНоменклатуры = Док.СерияНоменклатуры) ИЛИ

   (Док.СерияУказываетсяПриОтпускеСоСклада И Остатки.СерияНоменклатуры = &ПустаяСерия))

ГДЕ

Док.Ссылка = &ДокументСсылка

СГРУППИРОВАТЬ ПО

Док.Номенклатура,

Док.ХарактеристикаНоменклатуры,

Док.СерияНоменклатуры,

Док.Качество,

&ДокументПередачи

ИМЕЮЩИЕ

ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0) < СУММА(ВЫРАЗИТЬ(Док.Количество * Док.Коэффициент / Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК ЧИСЛО(15,3)))

 

223

 

+

ВЫБРАТЬ

Док.Номенклатура.Представление КАК НоменклатураПредставление,

Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление,

Док.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,

Док.СерияНоменклатуры КАК СерияНоменклатуры,

Док.Качество КАК Качество,

СУММА(ВЫРАЗИТЬ(Док.Количество * Док.Коэффициент / Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК ЧИСЛО(15,3))) КАК ДокументКоличество,

ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0) КАК ОстатокКоличество

ИЗ

Документ.РасходныйОрдерНаТовары.Товары КАК Док

ЛЕВОЕ СОЕДИНЕНИЕ

РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(,

  (Склад, Номенклатура, Качество, ХарактеристикаНоменклатуры) В (

    ВЫБРАТЬ

    Док.Ссылка.Склад, Док.Номенклатура, Док.Качество, Док.ХарактеристикаНоменклатуры

    ИЗ

    Документ.РасходныйОрдерНаТовары.Товары КАК Док

    ГДЕ

    Док.Ссылка = &ДокументСсылка

    И НЕ Док.Номенклатура.Комплект         

  ) И &ДокументПередачи = ДокументПередачи) КАК Остатки

ПО

Док.Ссылка.Склад = Остатки.Склад

И Док.Номенклатура = Остатки.Номенклатура

И Док.Качество = Остатки.Качество

И Док.ХарактеристикаНоменклатуры = Остатки.ХарактеристикаНоменклатуры

И ((НЕ Док.СерияУказываетсяПриОтпускеСоСклада И Остатки.СерияНоменклатуры = Док.СерияНоменклатуры) ИЛИ

   (Док.СерияУказываетсяПриОтпускеСоСклада И Остатки.СерияНоменклатуры = &ПустаяСерия))

ГДЕ

Док.Ссылка = &ДокументСсылка

СГРУППИРОВАТЬ ПО

Док.Номенклатура,

Док.ХарактеристикаНоменклатуры,

Док.СерияНоменклатуры,

Док.Качество,

&ДокументПередачи

ИМЕЮЩИЕ

ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0) < СУММА(ВЫРАЗИТЬ(Док.Количество * Док.Коэффициент / Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК ЧИСЛО(15,3)))

 

 

 

 

Язык запросов.

 

 

 

 

 

№№

 

 

1

Особенности использования предложения СГРУППИРОВАТЬ ПО.

 

ВЫБРАТЬ

                ОказаниеУслуги.Мастер,

                ОказаниеУслуги.Клиент,

                ОказаниеУслуги.Склад,

                ОказаниеУслуги.Дата,

                ОказаниеУслуги.Представление,

                ОказаниеУслуги.Мастер.ТрудоваяДеятельность.(

                               Должность КАК Поле1

                ) КАК Мастер1

ИЗ

                Документ.ОказаниеУслуги КАК ОказаниеУслуги

 

 

ВЫБРАТЬ

                ОказаниеУслуги.Мастер,

                ОказаниеУслуги.Клиент,

                ОказаниеУслуги.Склад,

                ОказаниеУслуги.Дата,

                ОказаниеУслуги.Представление

ИЗ

                Документ.ОказаниеУслуги КАК ОказаниеУслуги

 

СГРУППИРОВАТЬ ПО

                ОказаниеУслуги.Мастер,

                ОказаниеУслуги.Клиент,

                ОказаниеУслуги.Склад,

                ОказаниеУслуги.Дата,

                ОказаниеУслуги.Представление

 

№ п/п

Мастер

Мастер1.Должность

Клиент

Дата

Склад

Представление

1

Деловой Иван Сергеевич

Инженер

Иванов Михаил Юрьевич

13.07.2009 0:00:00

Основной

Оказание услуги 000000001 от 13.07.2009 0:00:00

2

Деловой Иван Сергеевич

Начальник производства

Иванов Михаил Юрьевич

13.07.2009 0:00:00

Основной

Оказание услуги 000000001 от 13.07.2009 0:00:00

3

Гусаков Николай Дмитриевич

Ведущий специалист

Спиридонова Галина

14.07.2009 21:24:08

Основной

Оказание услуги 000000002 от 14.07.2009 21:24:08

4

Симонов Валерий Михайлович

Прораб

Роман

14.07.2009 21:29:38

Основной

Оказание услуги 000000003 от 14.07.2009 21:29:38

5

новый сотрудник

Роман

28.07.2009 22:53:39

Основной

Оказание услуги ЦБ000000001 от 28.07.2009 22:53:39

6

новый сотрудник

Роман

28.07.2009 22:54:26

Основной

Оказание услуги ЦБ000000002 от 28.07.2009 22:54:26

2

27. Содержимое полей справочника.

 

ВЫБРАТЬ

                Номенклатура.Наименование,

                Номенклатура.ЭтоГруппа,

                Номенклатура.ВерсияДанных,

                Номенклатура.Родитель.Ссылка,

                Номенклатура.Родитель.ВидНоменклатуры.Ссылка

ИЗ

                Справочник.Номенклатура КАК Номенклатура

ГДЕ

                Номенклатура.ЭтоГруппа = ЛОЖЬ

 

 

Наименование

Это группа

Группа номенклатуры.Ссылка

Ремонт импортного телевизора

Нет

Телевизоры

Подключение воды

Нет

Стиральные машины

Ремонт отечественного телевизора

Нет

Телевизоры

Транзистор Philips 2N2369

Нет

Радиодетали

Подключение электричества

Нет

Стиральные машины

Шланг резиновый

Нет

Прочее

Строчный трансформатор Samsung

Нет

Радиодетали

Кабель электрический

Нет

Прочее

Диагностика

Нет

Телевизоры

Строчный трансформатор GoldStar

Нет

Радиодетали

 

 

 

 

3

Использование отборов в запросах с виртуальными таблицами.

 

ВЫБРАТЬ

                СтоимостьМатериаловОстатки.Материал.Наименование,

                СтоимостьМатериаловОстатки.СтоимостьОстаток

ИЗ

                РегистрНакопления.СтоимостьМатериалов.Остатки(&Материал, ) КАК СтоимостьМатериаловОстатки

 

 

№ п/п

Материал.Наименование

Стоимость Остаток

1

Строчный трансформатор Samsung

5 400,00

2

Строчный трансформатор GoldStar

2 430,00

3

Транзистор Philips 2N2369

21,00

4

Шланг резиновый

200,00

5

Кабель электрический

80,00

 

 

№ п/п

Материал.Наименование

Параметры.Материал

Стоимость Остаток

1

Строчный трансформатор Samsung

Прочее

5 400,00

2

Строчный трансформатор GoldStar

Прочее

2 430,00

3

Транзистор Philips 2N2369

Прочее

21,00

4

Шланг резиновый

Прочее

200,00

5

Кабель электрический

Прочее

80,00

Итого

8 131,00

 

 

 

 

4

Использование функции ЕСТЬNULL().

 

ВЫБРАТЬ

                ОстаткиМатериаловОстатки.Материал КАК Материал,

                СУММА(ОстаткиМатериаловОстатки.КоличествоОстаток) КАК КоличествоОстаток,

                Номенклатура.Ссылка

{ВЫБРАТЬ

                Материал.*,

                КоличествоОстаток}

ИЗ

                Справочник.Номенклатура КАК Номенклатура

                               ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки КАК ОстаткиМатериаловОстатки

                               ПО ОстаткиМатериаловОстатки.Материал = Номенклатура.Ссылка

ГДЕ

                ОстаткиМатериаловОстатки.Материал <> &ЕстьNull

                И Номенклатура.ЭтоГруппа = ЛОЖЬ

{ГДЕ

                ОстаткиМатериаловОстатки.КоличествоОстаток}

 

СГРУППИРОВАТЬ ПО

                ОстаткиМатериаловОстатки.Материал,

                Номенклатура.Ссылка

 

 

№ п/п

Параметры.Период

Материал

Количество Остаток

1

01.01.2012 0:00:00

Транзистор Philips 2N2369

7,000

2

01.01.2012 0:00:00

3

01.01.2012 0:00:00

Шланг резиновый

129,000

4

01.01.2012 0:00:00

Строчный трансформатор Samsung

9,000

5

01.01.2012 0:00:00

Кабель электрический

39,000

6

01.01.2012 0:00:00

Строчный трансформатор GoldStar

9,000

 

 

 

№ п/п

Параметры.Период

Материал

Количество Остаток

1

01.01.2012 0:00:00

Транзистор Philips 2N2369

7,000

2

01.01.2012 0:00:00

Шланг резиновый

129,000

3

01.01.2012 0:00:00

Строчный трансформатор Samsung

9,000

4

01.01.2012 0:00:00

Кабель электрический

39,000

5

01.01.2012 0:00:00

Строчный трансформатор GoldStar

9,000

Итого

193,000

5

Вывод ссылочных полей.

 

ВЫБРАТЬ

                ОстаткиМатериаловОстаткиИОбороты.Материал КАК Материал1,

                ОстаткиМатериаловОстаткиИОбороты.Склад КАК Склад1,

                ОстаткиМатериаловОстаткиИОбороты.Период,

                ОстаткиМатериаловОстаткиИОбороты.КоличествоПриход КАК КоличествоПриход1,

                ОстаткиМатериаловОстаткиИОбороты.КоличествоРасход КАК КоличествоРасход1,

                ОстаткиМатериаловОстаткиИОбороты.КоличествоОборот КАК КоличествоОборот1,

                ОстаткиМатериаловОстаткиИОбороты.Материал.Представление КАК МатериалПредставление1,

                ОстаткиМатериаловОстаткиИОбороты.Склад.Представление КАК СкладПредставление1

ИЗ

                РегистрНакопления.ОстаткиМатериалов.ОстаткиИОбороты(, , День, Движения, ) КАК ОстаткиМатериаловОстаткиИОбороты

 

№ п/п

Период

Количество оборот1

Количество приход1

Количество расход1

Материал1

Склад1

1

09.07.2009 0:00:00

10,000

10,000

Транзистор Philips 2N2369

Основной

2

09.07.2009 0:00:00

5,000

5,000

Шланг резиновый

Основной

3

09.07.2009 0:00:00

5,000

5,000

Кабель электрический

Основной

4

14.07.2009 0:00:00

-1,000

1,000

Строчный трансформатор Samsung

Основной

5

14.07.2009 0:00:00

-1,000

1,000

Строчный трансформатор GoldStar

Основной

6

14.07.2009 0:00:00

-2,000

2,000

Транзистор Philips 2N2369

Основной

7

14.07.2009 0:00:00

-2,000

2,000

Шланг резиновый

Основной

8

14.07.2009 0:00:00

-1,000

1,000

Кабель электрический

Основной

9

13.07.2009 0:00:00

-1,000

1,000

Шланг резиновый

Основной

10

28.07.2009 0:00:00

-1,000

1,000

Транзистор Philips 2N2369

Основной

11

01.05.2009 0:00:00

127,000

127,000

Шланг резиновый

Основной

12

01.05.2009 0:00:00

35,000

35,000

Кабель электрический

Основной

13

09.07.2009 0:00:00

10,000

10,000

Строчный трансформатор Samsung

Основной

14

09.07.2009 0:00:00

10,000

10,000

Строчный трансформатор GoldStar

Основной

 

 

6

Особенности связи с виртуальной таблицей остатков.

 

ВЫБРАТЬ

                ОказаниеУслуги.ПереченьНоменклатуры.(

                               Номенклатура,

                               Количество

                ),

                ОстаткиМатериаловОстатки.Материал.Наименование,

                ОстаткиМатериаловОстатки.КоличествоОстаток

ИЗ

                Документ.ОказаниеУслуги КАК ОказаниеУслуги

                               ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки КАК ОстаткиМатериаловОстатки

                               ПО ОказаниеУслуги.ПереченьНоменклатуры.Количество >= ОстаткиМатериаловОстатки.КоличествоОстаток

 

№ п/п

Перечень номенклатуры.Номенклатура.Наименование

Перечень номенклатуры.Количество

1

Подключение воды

1,000

2

Шланг резиновый

1,000

3

Ремонт импортного телевизора

1,000

4

Строчный трансформатор Samsung

1,000

5

Подключение электричества

1,000

6

Шланг резиновый

2,000

7

Кабель электрический

1,000

8

Ремонт отечественного телевизора

1,000

9

Строчный трансформатор GoldStar

1,000

10

Транзистор Philips 2N2369

2,000

11

Диагностика

1,000

12

Транзистор Philips 2N2369

1,000

13

Подключение воды

1,000

 

 

7

Примеры запросов для работы с иерархическими справочниками.

 

ВЫБРАТЬ

                Номенклатура.Ссылка,

                КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Номенклатура.ЭтоГруппа) КАК ЭтоГруппа,

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

ИЗ

                Справочник.Номенклатура КАК Номенклатура

 

СГРУППИРОВАТЬ ПО

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

                Номенклатура.Ссылка

 

№ п/п

Ссылка.Наименование

Это группа

1

Шланг резиновый

1

2

Кабель электрический

1

3

Подключение воды

1

4

Прочее

1

5

Телевизоры

1

6

Ремонт отечественного телевизора

1

7

Подключение электричества

1

8

Ремонт импортного телевизора

1

9

Строчный трансформатор Samsung

1

10

Строчный трансформатор GoldStar

1

11

Стиральные машины

1

12

Материалы

1

13

Диагностика

1

14

Радиодетали

1

15

Услуги

1

16

Транзистор Philips 2N2369

1

Итого

16

 

 

8

Дополнение результата запроса датами в установленном периоде.

 

ВЫБРАТЬ

                ОстаткиМатериаловОбороты.Период,

                СУММА(ОстаткиМатериаловОбороты.КоличествоОборот) КАК КоличествоОборот,

                ОстаткиМатериаловОбороты.Материал.Ссылка

ИЗ

                РегистрНакопления.ОстаткиМатериалов.Обороты(, , День, ) КАК ОстаткиМатериаловОбороты

 

СГРУППИРОВАТЬ ПО

                ОстаткиМатериаловОбороты.Период,

                ОстаткиМатериаловОбороты.Материал.Ссылка

№ п/п

Период

Количество Оборот

Материал.Ссылка

1

09.07.2009 0:00:00

5,000

Шланг резиновый

2

09.07.2009 0:00:00

5,000

Кабель электрический

3

14.07.2009 0:00:00

-1,000

Строчный трансформатор Samsung

4

14.07.2009 0:00:00

-1,000

Строчный трансформатор GoldStar

5

09.07.2009 0:00:00

10,000

Строчный трансформатор Samsung

6

13.07.2009 0:00:00

-1,000

Шланг резиновый

7

09.07.2009 0:00:00

10,000

Строчный трансформатор GoldStar

8

28.07.2009 0:00:00

-1,000

Транзистор Philips 2N2369

9

14.07.2009 0:00:00

-2,000

Транзистор Philips 2N2369

10

01.05.2009 0:00:00

127,000

Шланг резиновый

11

09.07.2009 0:00:00

10,000

Транзистор Philips 2N2369

12

14.07.2009 0:00:00

-2,000

Шланг резиновый

13

01.05.2009 0:00:00

35,000

Кабель электрический

14

14.07.2009 0:00:00

-1,000

Кабель электрический

 

 

9

Особенности упорядочивания по ссылочным полям.

 

ВЫБРАТЬ

                Номенклатура.Код,

                Номенклатура.Наименование,

                Номенклатура.Ссылка КАК Ссылка

ИЗ

                Справочник.Номенклатура КАК Номенклатура

ГДЕ

                Номенклатура.ЭтоГруппа = ЛОЖЬ

 

УПОРЯДОЧИТЬ ПО

                Ссылка

№ п/п

Наименование

Код

1

Строчный трансформатор Samsung

000000003

2

Строчный трансформатор GoldStar

000000004

3

Транзистор Philips 2N2369

000000005

4

Шланг резиновый

000000006

5

Кабель электрический

000000007

6

Диагностика

000000008

7

Ремонт отечественного телевизора

000000009

8

Ремонт импортного телевизора

000000010

9

Подключение воды

000000011

10

Подключение электричества

000000012

 

 

10

 

 

 

 

Free Web Hosting