Здравствуйте! Есть запрос:
Все бы хорошо, но Сообщить выводит все ВидыЦен.
Как это можно исправить?
"ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Номенклатура.Наименование КАК НоменклатураНаименование,
| ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
| ЦеныНоменклатурыСрезПоследних.Номенклатура.Родитель КАК НоменклатураРодитель,
| ЦеныНоменклатурыСрезПоследних.Номенклатура.Код КАК НоменклатураКод,
| ЦеныНоменклатурыСрезПоследних.Номенклатура.ЕдиницаИзмерения КАК НоменклатураЕдиницаИзмерения,
| ЦеныНоменклатурыСрезПоследних.Номенклатура.Артикул КАК НоменклатураАртикул,
| ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
| ЦеныНоменклатурыСрезПоследних.Валюта КАК Валюта,
| СвободныеОстаткиОстатки.ВНаличииОстаток КАК ВНаличииОстаток,
| ЦеныНоменклатурыСрезПоследних.ВидЦены КАК ВидЦены
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки КАК СвободныеОстаткиОстатки
| ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = СвободныеОстаткиОстатки.Номенклатура
|
|СГРУППИРОВАТЬ ПО
| ЦеныНоменклатурыСрезПоследних.Номенклатура,
| ЦеныНоменклатурыСрезПоследних.Цена,
| ЦеныНоменклатурыСрезПоследних.Валюта,
| СвободныеОстаткиОстатки.ВНаличииОстаток,
| ЦеныНоменклатурыСрезПоследних.ВидЦены
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура";
ВыборкаЗапроса = Запрос.Выполнить().Выбрать();
Таблица = Запрос.Выполнить().Выгрузить();
Таблица.Свернуть("Номенклатура,ВНаличииОстаток,ВидЦены,Цена","");
Для Каждого Строка Из Таблица Цикл
Номенклатура = Строка.Номенклатура;
Артикул = Строка.Номенклатура.Артикул;
Код = Строка.Номенклатура.Код;
Родитель = Строка.Номенклатура.Родитель;
Единица = Строка.Номенклатура.ЕдиницаИзмерения;
Остаток = Строка.ВНаличииОстаток;
ВидЦены = Строка.ВидЦены;
Если Строка.ВидЦены = Справочники.ВидыЦен.НайтиПоНаименованию ("Розница") Тогда
ЦенаРозница = Строка.Цена;
ИначеЕсли Строка.ВидЦены = Справочники.ВидыЦен.НайтиПоНаименованию ("Заказ") Тогда
ЦенаЗаказ = Строка.Цена;
Иначе
КонецЕсли;
Сообщить ("Код "+Код +" Номенклатура "+Номенклатура+" Артикул "+Артикул+
" Родитель "+Родитель+" Единица "+Единица+
" Остаток "+Остаток+" ЦенаЗаказ "+ЦенаЗаказ+" ЦенаРозница "+ЦенаРозница);
КонецЦикла;
ПоказатьВсе бы хорошо, но Сообщить выводит все ВидыЦен.
Как это можно исправить?
По теме из базы знаний
- Исправление отрицательных остатков по организациям в УТ 11.4, КА 2.4, ЕРП 2.4. Интеркампани, механизм формирования резервов
- Выгрузка из БП 3.0 в УТ 11.4
- УТ 11.4: Новая архитектура взаиморасчетов - отчеты и обработки
- Создание своих автоматических скидок в УТ 11.4
- Колонки по взаиморасчетам с поставщиками для списка документов Приобретение товаров и услуг. УТ 11.4.13
Найденные решения
(15) В СписокЦен нужно добавлять виды цен, а у вас строки. Это во первых.
Во вторых не
(15)
а
ЦеныНоменклатурыСрезПоследних.ВидЦены В (&СписокЦен)
а вообще лучше данное условие поместить в параметры виртуальной таблицы
(15)
заменить на
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены В (&СписокЦен)) КАК ЦеныНоменклатурыСрезПоследних
Во вторых не
(15)
|ГДЕ РегистрСведений.ЦеныНоменклатуры.ВидЦены В (&СписокЦен)
а
ЦеныНоменклатурыСрезПоследних.ВидЦены В (&СписокЦен)
а вообще лучше данное условие поместить в параметры виртуальной таблицы
(15)
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
заменить на
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены В (&СписокЦен)) КАК ЦеныНоменклатурыСрезПоследних
(17) Тогда всё верно. Тлько
замените на
если цены предопределенные, тогда
И всё пойдет
СписокЦен.Добавить("Заказ");
СписокЦен.Добавить("Розница");
замените на
СписокЦен.Добавить(Справочники.ВидыЦен.НайтиПоНаименованию("Заказ", Истина));
СписокЦен.Добавить(Справочники.ВидыЦен.НайтиПоНаименованию("Розница", Истина));
если цены предопределенные, тогда
СписокЦен.Добавить(Справочники.ВидыЦен.Заказ);
СписокЦен.Добавить(Справочники.ВидыЦен.Розница);
И всё пойдет
Вдруг кому понадобится.
не сворачивается, очевидно свернуть не дает ВидЦены, убрать из свертки ВидЦены нельзя, используется далее.
Решение здесь похоже одно:
1. Запрос с одной ценой выгружаем в одну таблицу, запрос с другой ценой в другую.
2. Соединяем обе таблицы и общую таблицу сворачиваем так:
Таблица = Запрос.Выполнить().Выгрузить();
Таблица.Свернуть("Номенклатура,ВНаличииОстаток,ВидЦены,Цена","");
не сворачивается, очевидно свернуть не дает ВидЦены, убрать из свертки ВидЦены нельзя, используется далее.
Решение здесь похоже одно:
1. Запрос с одной ценой выгружаем в одну таблицу, запрос с другой ценой в другую.
2. Соединяем обе таблицы и общую таблицу сворачиваем так:
Таблица.Свернуть("Номенклатура,ВНаличииОстаток","Цена,Цена1");
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(4) Не правильно объяснил. Добавлю в запрос условие по двум ценам, я ведь все-равно получу:
Товар1 остаток 20 цена1 100 цена2 150
Товар1 остаток 20 цена1 100 цена2 150
Товар2 остаток 10 цена1 50 цена2 100
Товар2 остаток 10 цена1 50 цена2 100
а мне надо получить:
Товар1 остаток 20 цена1 100 цена2 150
Товар2 остаток 10 цена1 50 цена2 100
Товар1 остаток 20 цена1 100 цена2 150
Товар1 остаток 20 цена1 100 цена2 150
Товар2 остаток 10 цена1 50 цена2 100
Товар2 остаток 10 цена1 50 цена2 100
а мне надо получить:
Товар1 остаток 20 цена1 100 цена2 150
Товар2 остаток 10 цена1 50 цена2 100
(5)
1. Левое соединение. Слева - таблица остатков, справа - две таблицы цен со связью по конкретному виду цен.
2. Объединение. Два подзапроса в каждом условие на отдельный вид цен. Потом группировка (при условии правильных отборов в виртуальных таблицах).
2. Ветвление. Запрос почти как сейчас есть, с условием по двум ценам и два поля цены (Выбор Когда Тогда Иначе 0). Потом группировка (при условии правильных отборов в виртуальных таблицах).
Выбирайте.
Все бы хорошо, но Сообщить выводит все ВидыЦен.
А вроде другая проблема описана, да?
1. Левое соединение. Слева - таблица остатков, справа - две таблицы цен со связью по конкретному виду цен.
2. Объединение. Два подзапроса в каждом условие на отдельный вид цен. Потом группировка (при условии правильных отборов в виртуальных таблицах).
2. Ветвление. Запрос почти как сейчас есть, с условием по двум ценам и два поля цены (Выбор Когда Тогда Иначе 0). Потом группировка (при условии правильных отборов в виртуальных таблицах).
Выбирайте.
(7) Нет, не могу. Я и сам лох в 8.3. Посмотри на мой стаж.
А запросы учат писать на курсах или в учебниках. Там же учат и основным приемам написания запросов.
Я подсказал о существующих ошибках и о том, какими приемами можно добиться искомого результата.
Заниматься обучением или делать за других их работу - не моя стезя.
Впрочем, тут почти все такие.
Но есть и другие.
А запросы учат писать на курсах или в учебниках. Там же учат и основным приемам написания запросов.
Я подсказал о существующих ошибках и о том, какими приемами можно добиться искомого результата.
Заниматься обучением или делать за других их работу - не моя стезя.
Впрочем, тут почти все такие.
Но есть и другие.
Я вот не понимаю, кто все эти люди, которые добрались до 1с но при этом не понимаю как сделать условие в запросе?
сисадмин которого попросили, а ему это зачем? новичек, да как он тогда устроился и кто его пустил вообще.
ученик/стажер, ну так в любой книжке об этом на второй странице написано. непонимаю
сисадмин которого попросили, а ему это зачем? новичек, да как он тогда устроился и кто его пустил вообще.
ученик/стажер, ну так в любой книжке об этом на второй странице написано. непонимаю
(14) не получилось
Поле не найдено "РегистрСведений.ЦеныНоменклатуры.ВидЦены"
ГДЕ <<?>>РегистрСведений.ЦеныНоменклатуры.ВидЦены В (&СписокЦен)
Вроде бы все правильно сделал:
Поле не найдено "РегистрСведений.ЦеныНоменклатуры.ВидЦены"
ГДЕ <<?>>РегистрСведений.ЦеныНоменклатуры.ВидЦены В (&СписокЦен)
Вроде бы все правильно сделал:
СписокЦен = Новый СписокЗначений;
СписокЦен.Добавить("Заказ");
СписокЦен.Добавить("Розница");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Номенклатура.Наименование КАК НоменклатураНаименование,
| ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
| ЦеныНоменклатурыСрезПоследних.Номенклатура.Родитель КАК НоменклатураРодитель,
| ЦеныНоменклатурыСрезПоследних.Номенклатура.Код КАК НоменклатураКод,
| ЦеныНоменклатурыСрезПоследних.Номенклатура.ЕдиницаИзмерения КАК НоменклатураЕдиницаИзмерения,
| ЦеныНоменклатурыСрезПоследних.Номенклатура.Артикул КАК НоменклатураАртикул,
| ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
| ЦеныНоменклатурыСрезПоследних.Валюта КАК Валюта,
| СвободныеОстаткиОстатки.ВНаличииОстаток КАК ВНаличииОстаток,
| ЦеныНоменклатурыСрезПоследних.ВидЦены КАК ВидЦены
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки КАК СвободныеОстаткиОстатки
| ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = СвободныеОстаткиОстатки.Номенклатура
|
|ГДЕ РегистрСведений.ЦеныНоменклатуры.ВидЦены В (&СписокЦен)
|
|СГРУППИРОВАТЬ ПО
| ЦеныНоменклатурыСрезПоследних.Номенклатура,
| ЦеныНоменклатурыСрезПоследних.Цена,
| ЦеныНоменклатурыСрезПоследних.Валюта,
| СвободныеОстаткиОстатки.ВНаличииОстаток,
| ЦеныНоменклатурыСрезПоследних.ВидЦены
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура";
Запрос.УстановитьПараметр("СписокЦен", СписокЦен);
ПоказатьСписокЦен.Добавить("Заказ");
СписокЦен.Добавить("Розница");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Номенклатура.Наименование КАК НоменклатураНаименование,
| ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
| ЦеныНоменклатурыСрезПоследних.Номенклатура.Родитель КАК НоменклатураРодитель,
| ЦеныНоменклатурыСрезПоследних.Номенклатура.Код КАК НоменклатураКод,
| ЦеныНоменклатурыСрезПоследних.Номенклатура.ЕдиницаИзмерения КАК НоменклатураЕдиницаИзмерения,
| ЦеныНоменклатурыСрезПоследних.Номенклатура.Артикул КАК НоменклатураАртикул,
| ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
| ЦеныНоменклатурыСрезПоследних.Валюта КАК Валюта,
| СвободныеОстаткиОстатки.ВНаличииОстаток КАК ВНаличииОстаток,
| ЦеныНоменклатурыСрезПоследних.ВидЦены КАК ВидЦены
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки КАК СвободныеОстаткиОстатки
| ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = СвободныеОстаткиОстатки.Номенклатура
|
|ГДЕ РегистрСведений.ЦеныНоменклатуры.ВидЦены В (&СписокЦен)
|
|СГРУППИРОВАТЬ ПО
| ЦеныНоменклатурыСрезПоследних.Номенклатура,
| ЦеныНоменклатурыСрезПоследних.Цена,
| ЦеныНоменклатурыСрезПоследних.Валюта,
| СвободныеОстаткиОстатки.ВНаличииОстаток,
| ЦеныНоменклатурыСрезПоследних.ВидЦены
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура";
Запрос.УстановитьПараметр("СписокЦен", СписокЦен);
(15) В СписокЦен нужно добавлять виды цен, а у вас строки. Это во первых.
Во вторых не
(15)
а
ЦеныНоменклатурыСрезПоследних.ВидЦены В (&СписокЦен)
а вообще лучше данное условие поместить в параметры виртуальной таблицы
(15)
заменить на
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены В (&СписокЦен)) КАК ЦеныНоменклатурыСрезПоследних
Во вторых не
(15)
|ГДЕ РегистрСведений.ЦеныНоменклатуры.ВидЦены В (&СписокЦен)
а
ЦеныНоменклатурыСрезПоследних.ВидЦены В (&СписокЦен)
а вообще лучше данное условие поместить в параметры виртуальной таблицы
(15)
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
заменить на
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены В (&СписокЦен)) КАК ЦеныНоменклатурыСрезПоследних
(17) Тогда всё верно. Тлько
замените на
если цены предопределенные, тогда
И всё пойдет
СписокЦен.Добавить("Заказ");
СписокЦен.Добавить("Розница");
замените на
СписокЦен.Добавить(Справочники.ВидыЦен.НайтиПоНаименованию("Заказ", Истина));
СписокЦен.Добавить(Справочники.ВидыЦен.НайтиПоНаименованию("Розница", Истина));
если цены предопределенные, тогда
СписокЦен.Добавить(Справочники.ВидыЦен.Заказ);
СписокЦен.Добавить(Справочники.ВидыЦен.Розница);
И всё пойдет
(20) Спасибо!
После ответа DanDy переделал так
Ваш вариант, конечно, правильнее и красивей.
До создания темы на форуме пробовал делать типа этого:
Так же как и сейчас выводило две цены.
Но обоими вариантами выводит:
Товар1 Остаток 2 Цена1 100 Цена2 150
Товар1 Остаток 2 Цена1 100 Цена2 150
Товар2 Остаток 5 Цена1 10 Цена2 50
Товар2 Остаток 5 Цена1 10 Цена2 50
А мне бы получить:
Товар1 Остаток 2 Цена1 100 Цена2 150
Товар2 Остаток 5 Цена1 10 Цена2 50
После ответа DanDy переделал так
Заказ = Справочники.ВидыЦен.НайтиПоНаименованию("Заказ");
Розница = Справочники.ВидыЦен.НайтиПоНаименованию("Розница");
СписокЦен = Новый СписокЗначений;
СписокЦен.Добавить(Заказ);
СписокЦен.Добавить(Розница);
Ваш вариант, конечно, правильнее и красивей.
До создания темы на форуме пробовал делать типа этого:
|ГДЕ
| ЦеныНоменклатурыСрезПоследних.ВидЦены.Наименование = ""Заказ"" ИЛИ
| ЦеныНоменклатурыСрезПоследних.ВидЦены.Наименование = ""Розница""
Так же как и сейчас выводило две цены.
Но обоими вариантами выводит:
Товар1 Остаток 2 Цена1 100 Цена2 150
Товар1 Остаток 2 Цена1 100 Цена2 150
Товар2 Остаток 5 Цена1 10 Цена2 50
Товар2 Остаток 5 Цена1 10 Цена2 50
А мне бы получить:
Товар1 Остаток 2 Цена1 100 Цена2 150
Товар2 Остаток 5 Цена1 10 Цена2 50
(21) В коде вот это осталось?
Таблица.Свернуть("Номенклатура,ВНаличииОстаток,ВидЦены,Цена","");
Тогда должно быть так
Товар1 Остаток 2 Цена1 100 Цена2 150
Товар2 Остаток 5 Цена1 10 Цена2 50
Иначе Товар1 и Товар2 не по одной позиции в справочнике номеклатура
И лучше вот так;
Таблица.Свернуть("Номенклатура,ВНаличииОстаток,ВидЦены,Цена","");
Таблица.Свернуть("Номенклатура,ВНаличииОстаток,ВидЦены,Цена","");
Тогда должно быть так
Товар1 Остаток 2 Цена1 100 Цена2 150
Товар2 Остаток 5 Цена1 10 Цена2 50
Иначе Товар1 и Товар2 не по одной позиции в справочнике номеклатура
И лучше вот так;
Таблица.Свернуть("Номенклатура,ВНаличииОстаток,ВидЦены,Цена","");
(22) Ну, да есть!
думал свернет.
К тому же выводит так:
Код 00-00000153 Номенклатура 1118 Амортизатор крышки багажника GAMMA GMSAD1118 Артикул 1118-8231010-01 Родитель 1118 Седан Единица м Остаток 16 ЦенаЗаказ 110 ЦенаРозница
Код 00-00000153 Номенклатура 1118 Амортизатор крышки багажника GAMMA GMSAD1118 Артикул 1118-8231010-01 Родитель 1118 Седан Единица м Остаток 16 ЦенаЗаказ 110 ЦенаРозница 130
Код 00-00000154 Номенклатура 1118 Амортизатор крышки багажника фирм. упак.LADA Артикул 1118-8231010 Родитель 1118 Седан Единица м Остаток 28 ЦенаЗаказ 1 100 ЦенаРозница 130
Код 00-00000154 Номенклатура 1118 Амортизатор крышки багажника фирм. упак.LADA Артикул 1118-8231010 Родитель 1118 Седан Единица м Остаток 28 ЦенаЗаказ 1 100 ЦенаРозница 1 300
Обратите внимание на ЦенаРозница.
Таблица = Запрос.Выполнить().Выгрузить();
Таблица.Свернуть("Номенклатура,ВНаличииОстаток,ВидЦены,Цена","");
думал свернет.
К тому же выводит так:
Код 00-00000153 Номенклатура 1118 Амортизатор крышки багажника GAMMA GMSAD1118 Артикул 1118-8231010-01 Родитель 1118 Седан Единица м Остаток 16 ЦенаЗаказ 110 ЦенаРозница
Код 00-00000153 Номенклатура 1118 Амортизатор крышки багажника GAMMA GMSAD1118 Артикул 1118-8231010-01 Родитель 1118 Седан Единица м Остаток 16 ЦенаЗаказ 110 ЦенаРозница 130
Код 00-00000154 Номенклатура 1118 Амортизатор крышки багажника фирм. упак.LADA Артикул 1118-8231010 Родитель 1118 Седан Единица м Остаток 28 ЦенаЗаказ 1 100 ЦенаРозница 130
Код 00-00000154 Номенклатура 1118 Амортизатор крышки багажника фирм. упак.LADA Артикул 1118-8231010 Родитель 1118 Седан Единица м Остаток 28 ЦенаЗаказ 1 100 ЦенаРозница 1 300
Обратите внимание на ЦенаРозница.
Вдруг кому понадобится.
не сворачивается, очевидно свернуть не дает ВидЦены, убрать из свертки ВидЦены нельзя, используется далее.
Решение здесь похоже одно:
1. Запрос с одной ценой выгружаем в одну таблицу, запрос с другой ценой в другую.
2. Соединяем обе таблицы и общую таблицу сворачиваем так:
Таблица = Запрос.Выполнить().Выгрузить();
Таблица.Свернуть("Номенклатура,ВНаличииОстаток,ВидЦены,Цена","");
не сворачивается, очевидно свернуть не дает ВидЦены, убрать из свертки ВидЦены нельзя, используется далее.
Решение здесь похоже одно:
1. Запрос с одной ценой выгружаем в одну таблицу, запрос с другой ценой в другую.
2. Соединяем обе таблицы и общую таблицу сворачиваем так:
Таблица.Свернуть("Номенклатура,ВНаличииОстаток","Цена,Цена1");
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот