Форум программистов, компьютерный форум, киберфорум
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
 Аватар для mikkijon
1 / 1 / 0
Регистрация: 29.08.2014
Сообщений: 282

Не могу понять запрос по листингу

06.10.2019, 16:47. Показов 1491. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте друзья!!!

Помогите пожалуйста новичку. Изучаю "1С Предприятия" версии "8.3". И застрял на 14 занятии. А именно оптимизации докумета "Оказание услуги". Там нужно было составить запрос с временной таблицей, листинг ниже.
1C
1
2
3
4
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
Процедура ОбработкаПроведения(Отказ, Режим)
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
 
    // регистр ОстаткиМатериалов Расход
    Движения.ОстаткиМатериалов.Записывать=Истина;
    Движения.СтоимостьМатериалов.Записывать=Истина;
    Движения.Продажи.Записывать=Истина;
    //Создать менеджер временных таблиц
    МенеджеВТ = Новый  МенеджерВременныхТаблиц;
    Запрос = Новый Запрос;
    //Укажем какой запрос менеджер временных таблиц использует этот запрос
    Запрос.МенеджерВременныхТаблиц =МенеджеВТ;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ОказаниеУслугиПереченьНомеклатуры.Номенклатура КАК Номенклатура,
        |   ОказаниеУслугиПереченьНомеклатуры.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,
        |   СУММА(ОказаниеУслугиПереченьНомеклатуры.Количество) КАК КоличествоВДокументе
        |ПОМЕСТИТЬ НоменклатураВДокументе
        |ИЗ
        |   Документ.ОказаниеУслуги.ПереченьНомеклатуры КАК ОказаниеУслугиПереченьНомеклатуры
        |ГДЕ
        |   ОказаниеУслугиПереченьНомеклатуры.Ссылка = &Ссылка
        |
        |СГРУППИРОВАТЬ ПО
        |   ОказаниеУслугиПереченьНомеклатуры.Номенклатура,
        |   ОказаниеУслугиПереченьНомеклатуры.Номенклатура.ВидНоменклатуры";
    
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    
    РезультатЗапроса = Запрос.Выполнить();
    Запрос2 = Новый Запрос;
    Запрос2.МенеджерВременныхТаблиц = МенеджеВТ;
    Запрос2.Текст = "ВЫБРАТЬ
                    |   НоменклатураВДокументе.Номенклатура КАК Номенклатура,
                    |   НоменклатураВДокументе.ВидНоменклатуры КАК ВидНоменклатуры,
                    |   НоменклатураВДокументе.КоличествоВДокументе КАК КоличествоВДокументе,
                    |   ЕСТЬNULL(СтоимостьМатериаловОстатки.СтоимостьОстаток, 0) КАК Стоимость,
                    |   ЕСТЬNULL(ОстаткиМатериаловОстатки.КоличествоОстаток, 0) КАК Количество,
                    |   НоменклатураВДокументе.Сумма КАК Сумма
                    |ИЗ
                    |   НоменклатураВДокументе КАК НоменклатураВДокументе
                    |       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки(
                    |               ,
                    |               Материал В
                    |                   (ВЫБРАТЬ
                    |                       НоменклатураВДокументе.Номенклатура
                    |                   ИЗ
                    |                       НоменклатураВДокументе)) КАК СтоимостьМатериаловОстатки
                    |       ПО НоменклатураВДокументе.Номенклатура = СтоимостьМатериаловОстатки.Материал
                    |       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(
                    |               ,
                    |               Материалы В
                    |                   (ВЫБРАТЬ
                    |                       НоменклатураВДокументе.Номенклатура
                    |                   ИЗ
                    |                       НоменклатураВДокументе)) КАК ОстаткиМатериаловОстатки
                    |       ПО НоменклатураВДокументе.Номенклатура = ОстаткиМатериаловОстатки.Материалы";
    //Запишем пустые наборы записей. чтобы читать остатки без учета данных в документе
    Движения.СтоимостьМатериалов.Записать();
    Движения.ОстаткиМатериалов.Записать();
    РезультатЗапроса = Запрос2.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Если ВыборкаДетальныеЗаписи.Количество = 0 Тогда  
             СтоимостьМатериала = 0;
         Иначе  
             СтоимостьМатериала =  ВыборкаДетальныеЗаписи.Стоимость/ВыборкаДетальныеЗаписи.Количество;
            КонецЕсли;
        Если ВыборкаДетальныеЗаписи.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда 
            Движение = Движения.ОстаткиМатериалов.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Материалы = ВыборкаДетальныеЗаписи.Номенклатура;
        Движение.Склад = Склад;
        Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;
        //Регистр СтоимостьМатериалов.расход
        Движение = Движения.СтоимостьМатериалов.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;
        Движение.Стоимость = ВыборкаДетальныеЗаписи.КоличествоВДокументе*ВыборкаДетальныеЗаписи.СтоимостьМатериала;
        //Движение по Регистру Продажи
    КонецЕсли;
    Движение = Движения.Продажи.Добавить();
        Движение.Период = Дата;
        Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
        Движение.Клиент = Клиент;
        Движение.Мастер = Сотрудники;
        Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;
        Движение.Выручка = ВыборкаДетальныеЗаписи.СуммаВДокументе;
        Движение.Стоимость =СтоимостьМатериала*ВыборкаДетальныеЗаписи.КоличествоВДокументе;
    КонецЦикла;
    
    
 
        
 
    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
Она мне постоянно пишет что поле "Сумма не найдено". Я уже не знаю куда смотреть и что еще можно проверить вроде у меня все правильно как сказано в Книге Радченко .....
Подскажите пожалуйста что я не правильно делаю
Заранее благодарю!!!
Также выкладываю выгрузку самой БД "ООО На все руки мастер".
1Cv8.rar
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.10.2019, 16:47
Ответы с готовыми решениями:

Не могу понять запрос
День добрый. Объясните запрос пожалуйста.Вроде по отдельности всё понимаю, но то что возвращает ни как не понять почему? SELECT t1.id, ...

Не могу понять запрос
Не могу разобрать следующий запрос: "SELECT id, name, position, in_filter, in_stcat, in_catalog, is_slider FROM __features AS f ...

SQL-запрос, не могу понять((((
Уважаемые программисты! Помогите, пожалуйста, выполнить пару запросов, очень долго над ними бьюсь, но что-то никак не могу понять, как...

11
Эксперт 1С
 Аватар для Tklwegsd
845 / 608 / 211
Регистрация: 24.07.2013
Сообщений: 2,102
06.10.2019, 20:43
Цитата Сообщение от mikkijon Посмотреть сообщение
Она мне постоянно пишет что поле "Сумма не найдено".
В первом запросе нет поля "Сумма".
0
 Аватар для mikkijon
1 / 1 / 0
Регистрация: 29.08.2014
Сообщений: 282
09.10.2019, 14:17  [ТС]
Понятно!!!
Не поможете мне разобраться в другом листинге по этой же книге. Не могу понять как это сделать в параметре Виртуальной таблице
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Запрос3.Текст = "ВЫБРАТЬ
| ОстаткиМатериаловОстатки.Материал,
| ОстаткиМатериаловОстатки.НаборСвойств,
| ОстаткиМатериаловОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ОстаткиМатериалов.Остатки( , (Материал, НаборСвойств) В
| (ВЫБРАТЬ
| НоменклатураДокумента.Номенклатура,
| НоменклатураДокумента.НаборСвойств
| ИЗ
| НоменклатураДокумента) И Склад = &Склад)
| КАК ОстаткиМатериаловОстатки
|ГДЕ
| ОстаткиМатериаловОстатки.КоличествоОстаток < 0";
Запрос3.УстановитьПараметр("Склад", Склад);
РезультатЗапроса = Запрос3.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "Не хватает " + Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток) +
" единиц материала """ + ВыборкаДетальныеЗаписи.Материал + """" +
" из набора свойств """ + ВыборкаДетальныеЗаписи.НаборСвойств + """";
Сообщение.Сообщить();
Отказ = Истина;
КонецЦикла;
РегистрНакопления.ОстаткиМатериалов.Оста тки( , (Материал, НаборСвойств) В
| (ВЫБРАТЬ
| НоменклатураДокумента.Номенклатура,
| НоменклатураДокумента.НаборСвойств

Данную строчку не могу сообразить как создать в параметре виртуальной таблицы
Заранее благодарю!!!
0
Модератор
Эксперт 1С
 Аватар для Yulunga
4138 / 945 / 265
Регистрация: 22.04.2013
Сообщений: 6,589
Записей в блоге: 1
09.10.2019, 14:54
там же где-то рядом написано.
нажимаешь на кнопку, открывается окошко, там пишешь условие
Миниатюры
Не могу понять запрос по листингу  
0
 Аватар для mikkijon
1 / 1 / 0
Регистрация: 29.08.2014
Сообщений: 282
09.10.2019, 15:03  [ТС]
Это итак понятно Что нужно в свойстве написать .
Как добавить (Материал, НаборСвойств) мне нужно пошагово объяснить
и как добавить (ВЫБРАТЬ
| НоменклатураДокумента.Номенклатура,
| НоменклатураДокумента.НаборСвойств тоже пошагово
в книге нет никаких пояснении
0
 Аватар для dggrom
198 / 158 / 45
Регистрация: 23.08.2014
Сообщений: 807
09.10.2019, 15:09
mikkijon, Ну вы там прописываете

(Материал, НаборСвойств) В (&ПараметрМтериалов)\

Вот что бы не прописывать ПараметрМтериалов как параметр, можно прописать еще один запрос в эту таблицу. Таким образом 1с сама выполнит запрос и вытащит что нужно.
0
 Аватар для mikkijon
1 / 1 / 0
Регистрация: 29.08.2014
Сообщений: 282
09.10.2019, 15:22  [ТС]
dggrom, Можно по подробнее
0
 Аватар для dggrom
198 / 158 / 45
Регистрация: 23.08.2014
Сообщений: 807
09.10.2019, 15:50
mikkijon, Долго расписывать если честно )

Но к примеру тебе необходимо выбрать остатки товаров, которые имеют признак материал.

Ты можешь прописать

1C
1
2
3
4
5
6
7
8
9
Запрос = Новый Запрос("ВЫБРАТЬ
| ОстаткиТоваров.Товар,
| ОстаткиТоваров.КоличествоОстаток
|ИЗ
| РегистрНакопления.ОстаткиТоваров.Остатки() КАК ОстаткиТоваров
|ГДЕ
| ОстаткиТоваров.Товар В (&Номенклатура)");
 
Запрос.Установитьпараметр("Номенклатура", МассивСтвоейноменклатурой);
Что бы получить массив с твоей номенклатурой тебе придется написать запрос к базе.

Но можно написать запрос в виртуальную таблицу

1C
1
2
3
4
5
6
7
8
9
10
Запрос = Новый Запрос("ВЫБРАТЬ
| ОстаткиТоваров.Товар,
| ОстаткиТоваров.КоличествоОстаток
|ИЗ
| РегистрНакопления.ОстаткиТоваров.Остатки( , (Товар) В
| (ВЫБРАТЬ
| Номенклатура.Ссылка
| ИЗ
| Справочники.Номенклатура КАК Номенклатура
| ГДЕ Номенклатура.ТИП = "Материал")) КАК ОстаткиТоваров");
И тогда параметр заносить нет необходимости. Пример примитивный конечно, но имеет место быть так сказать.

Можешь еще почитать тут 14,15,16 пункты.
0
 Аватар для mikkijon
1 / 1 / 0
Регистрация: 29.08.2014
Сообщений: 282
09.10.2019, 16:03  [ТС]
Постараюсь Вам объяснить пошагово что я делаю
Согласно книге Радченко а именно урок 15 надо было добавить еще несколько объектов конфигурации в раздел справочники, планы видов характеристик и Регистр Сведении. Из за чего вноситься дополнения в документы ПриходнаяНакладная и ОказаниеУслуги и еще Регистры накопления Остатки Номенклатуры, а именно поле НаборДанных
Соответственно Процедура "ОбработкаПроведение" изменяется скриншот ниже.

Я все делал как сказано в книге и застрял только на "Запрос3"
где нужно было добавить в параметр регистра накопления ОстаткиНоменклатуры поле Набор данных. Вот что я делал
1) Я открыл Конструктор запроса и добавил поле НаборДанных скриншот ниже

2) Выделив саму виртуальную таблицу "ОстаткиНоменклатуры" я нажал сверху кнопку под названием "Параметры виртуальной Таблицы" Нажав нажав на кнопку которое находиться рядом с полем "Условие"

3) Открывается окно под названием произвольное выражение

Вот как раз загвостка. Я добавил поле "НаборДанных" после слово Материал как сказано в книге
1C
1
2
3
4
5
6
(,(Материалы, НаборСвойств В
        (ВЫБРАТЬ
            НоменклатураДокумента.Номенклатура НоменклатураДокумента.НаборСвойств 
        ИЗ
            НоменклатураДокумента)
    И Склад = &Склад )
Она мне выдает ошибку что ожидается выражения
0
 Аватар для mikkijon
1 / 1 / 0
Регистрация: 29.08.2014
Сообщений: 282
09.10.2019, 16:04  [ТС]
даже с запятой она мне выдает такую же ошибку

Добавлено через 53 секунды
то есть "НоменклатураДокумента.Номенклатура, НоменклатураДокумента.НаборСвойств" она выдает ошибку
0
Модератор
Эксперт 1С
 Аватар для Yulunga
4138 / 945 / 265
Регистрация: 22.04.2013
Сообщений: 6,589
Записей в блоге: 1
09.10.2019, 19:13
смотрите, тут надо так:
пишете "материалы, наборы в ( )"
пробел, который в скобках, выделяете мышкой
кликаете правой кнопкой - и внизу написано "конструктор запроса"
так можно писать произвольные запросы, соответственно, которые будут верными, так как скд их проверяет, в отличие от рукописных

а у вас, по всей видимости, ошибка в том, что материалы, набор надо заключить в скобки
а то у вас открывается, но не закрывается
0
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,701
Записей в блоге: 1
13.10.2019, 23:48
1C
1
2
3
4
5
(Склад = &Склад) и (Материалы, НаборСвойств В
        (ВЫБРАТЬ
            НоменклатураДокумента.Номенклатура, НоменклатураДокумента.НаборСвойств 
        ИЗ
            НоменклатураДокумента))
Добавлено через 1 минуту
А так вообще В - плохой оператор, СУБД не всегда может построить правильный план запроса.
Особенно если в параметре & большое количество значений.

Добавлено через 18 секунд
Лучше использовать внутреннее соединение
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.10.2019, 23:48
Помогаю со студенческими работами здесь

не могу понять как реализовать запрос
Здравствуйте, не могу понять как реализовать запрос. Итак, имеется таблица с id обекта и параметр характеристики. Необходимо...

Запрос на обновление, не могу понять где ошибка (бд прилагается)
Добрый день! Подскажите пожалуйста где у меня ошибка.... А_ДобавлениеМедпрепаратовОбработчикGroup - таблица с данными, которые нужно...

Не могу понять почему вот так не работает запрос
Пишу сайт и админскую панель для него по технологии MVC. Есть вид &quot;добавление проекта&quot;, где есть форма и загрузка картинок. Вот код,...

Не могу понять почему не срабатывает запрос к базе mysql
Всем привет. Перл не знаю, но надо поправить работу одного демона. Есть кусок кода : if ($dhcp_opt82_chasis_id ne '') { ...

Не могу понять, от кого контроллер получает второй раз GET запрос
Здравствуйте! В целях потестировать гугловские графики накидал вьюху @model ReportUunView.Models.ViewModelChart @{ Layout =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru