Всем Доброго времени суток! Подскажите пожалуйста!
Расскажу изначально, пытаюсь делать расширение (Номенклатура, с ценой и остатками) для 1С: Розница 8, ПРОФ версия, редакция 2.2.7.37, расширение почти готова, есть проблема с графой Цена, код запроса писал через Конструктор запроса, на данный момент есть ошибка, которую я не могу исправить, подскажите кто знает?
Пытаюсь сделать запрос, установка параметра для Вид Цены, часть кода:
Запрос.УстановитьПараметр("ВидЦены", <ВидЦены>); // Вид цен.
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Вставить обработку выборки ВыборкаДетальныеЗаписи
КонецЦикла;
Выдает синтаксическую ошибку!
{РасширениеНоменклатурыРозницаПрофВерсия Справочник.Номенклатура.Форма.ФормаСписка.Форма(58,38)}: Ожидается выражение
Запрос.УстановитьПараметр("ВидЦены",<<?>> <ВидЦены>); // Вид цен. (Проверка: Сервер)
{РасширениеНоменклатурыРозницаПрофВерсия Справочник.Номенклатура.Форма.ФормаСписка.Форма(58,38)}: Ожидается выражение
Запрос.УстановитьПараметр("ВидЦены",<<?>> <ВидЦены>); // Вид цен. (Проверка: Тонкий клиент)
(12)Найти сперва надо элемент, который вы хотите поместить в параметр запроса. Какой ВидЦены? Базе нужно четко все объяснять: что достать, куда положить.
Скачать консоль с формированием готового кода запроса от Чистакова, вставил изначальный код запроса который сформировал в Конструкторе запроса, мне обработка сформировала данный код, это часть кода, сейчас выложу полный код:
Полный код:
Запрос = Новый Запрос(
"ВЫБРАТЬ
| СправочникНоменклатура.Ссылка КАК Ссылка,
| СправочникНоменклатура.Код КАК Код,
| СправочникНоменклатура.Наименование КАК Наименование,
| СправочникНоменклатура.ВидНоменклатуры КАК ВидНоменклатуры,
| СправочникНоменклатура.ТоварнаяКатегория КАК ТоварнаяКатегория,
| СправочникНоменклатура.Марка КАК Марка,
| ВЫБОР
| КОГДА СправочникНоменклатура.ЭтоГруппа
| ТОГДА ВЫБОР
| КОГДА СправочникНоменклатура.ПометкаУдаления
| ТОГДА 7
| ИНАЧЕ 6
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА СправочникНоменклатура.ПометкаУдаления
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ + ВЫБОР
| КОГДА СправочникНоменклатура.ВидНоменклатуры.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыВеденияДополнительныхДанныхПоНоменклатуре.НеИспользовать)
| ТОГДА 0
| ИНАЧЕ 2
| КОНЕЦ
| КОНЕЦ КАК ИндексКартинки,
| СправочникНоменклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| СправочникНоменклатура.Артикул КАК Артикул,
| СправочникНоменклатура.НаименованиеПолное КАК НаименованиеПолное,
| СправочникНоменклатура.Вес КАК Вес,
| СправочникНоменклатура.СтавкаНДС КАК СтавкаНДС,
| СправочникНоменклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток,
| ЕСТЬNULL(ТоварыНаСкладахОстатки.РезервОстаток, 0) КАК Резерв,
| ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) - ЕСТЬNULL(ТоварыНаСкладахОстатки.РезервОстаток, 0) КАК СвободныйОстаток,
| ЦеныНоменклатурыСрезПоследних.ВидЦены КАК ВидЦеныРозничная,
| ЦеныНоменклатурыСрезПоследних.Цена КАК ЦенаРозничная
|ИЗ
| Справочник.Номенклатура КАК СправочникНоменклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
| ПО (ТоварыНаСкладахОстатки.Номенклатура = СправочникНоменклатура.Ссылка)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
| ПО (ЦеныНоменклатурыСрезПоследних.Цена = СправочникНоменклатура.Ссылка)");
Запрос.УстановитьПараметр("ВидЦены", <ВидЦены>); // Вид цен.
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Вставить обработку выборки ВыборкаДетальныеЗаписи
КонецЦикла;
(5) Хорошо. Что вы собираетесь использовать в качестве вида цены на форме списка номенклатуры?
Что вы вообще собрались выводить, и самое главное - куда, в форме списка номенклатуры?
Цены номенклатуры в список номенклатуры таким образом не выведутся, ну либо выведутся в отдельное табличное поле.
Вам нужно изменять запрос динамического списка, но вопрос с указанием вида цены в любом случае будет очень актуальным.
(9)Хорошо. Что вы собираетесь использовать в качестве вида цены на форме списка номенклатуры?
Что вы вообще собрались выводить, и самое главное - куда, в форме списка номенклатуры?
Цены номенклатуры в список номенклатуры таким образом не выведутся, ну либо выведутся в отдельное табличное поле.
Вам нужно изменять запрос динамического списка, но вопрос с указанием вида цены в любом случае будет очень актуальным.
В форму списка Номенклатуры нужно вывести цену Номенклатуры Розничная, их в программе две, еще есть Закупочная...
Код динамического списка Номенклатуры:
ВЫБРАТЬ
СправочникНоменклатура.Ссылка КАК Ссылка,
СправочникНоменклатура.Код КАК Код,
СправочникНоменклатура.Наименование КАК Наименование,
СправочникНоменклатура.ВидНоменклатуры КАК ВидНоменклатуры,
СправочникНоменклатура.ТоварнаяКатегория КАК ТоварнаяКатегория,
СправочникНоменклатура.Марка КАК Марка,
ВЫБОР
КОГДА СправочникНоменклатура.ЭтоГруппа
ТОГДА ВЫБОР
КОГДА СправочникНоменклатура.ПометкаУдаления
ТОГДА 7
ИНАЧЕ 6
КОНЕЦ
ИНАЧЕ ВЫБОР
КОГДА СправочникНоменклатура.ПометкаУдаления
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ + ВЫБОР
КОГДА СправочникНоменклатура.ВидНоменклатуры.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыВеденияДополнительныхДанныхПоНоменклатуре.НеИспользовать)
ТОГДА 0
ИНАЧЕ 2
КОНЕЦ
КОНЕЦ КАК ИндексКартинки,
СправочникНоменклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
СправочникНоменклатура.Артикул КАК Артикул,
СправочникНоменклатура.НаименованиеПолное КАК НаименованиеПолное,
СправочникНоменклатура.Вес КАК Вес,
СправочникНоменклатура.СтавкаНДС КАК СтавкаНДС,
СправочникНоменклатура.ТипНоменклатуры КАК ТипНоменклатуры,
ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток,
ЕСТЬNULL(ТоварыНаСкладахОстатки.РезервОстаток, 0) КАК Резерв,
ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) - ЕСТЬNULL(ТоварыНаСкладахОстатки.РезервОстаток, 0) КАК СвободныйОстаток,
ЦеныНоменклатурыСрезПоследних.ВидЦены КАК ВидЦеныРозничная,
ЦеныНоменклатурыСрезПоследних.Цена КАК ЦенаРозничная
ИЗ
Справочник.Номенклатура КАК СправочникНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
ПО (ТоварыНаСкладахОстатки.Номенклатура = СправочникНоменклатура.Ссылка)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
ПО (ЦеныНоменклатурыСрезПоследних.Цена = СправочникНоменклатура.Ссылка)
(22) Раз переменная не определена, значит в форме у тебя нет такой переменной. Ну или она записана по другому. Пути решения:
1) если нету в форме такого реквизита, то добавить
2) если она есть, то переименуй ее в ВидЦены
&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
Запрос = Новый Запрос(
"ВЫБРАТЬ
| СправочникНоменклатура.Ссылка КАК Ссылка,
| СправочникНоменклатура.Код КАК Код,
| СправочникНоменклатура.Наименование КАК Наименование,
| СправочникНоменклатура.ВидНоменклатуры КАК ВидНоменклатуры,
| СправочникНоменклатура.ТоварнаяКатегория КАК ТоварнаяКатегория,
| СправочникНоменклатура.Марка КАК Марка,
| ВЫБОР
| КОГДА СправочникНоменклатура.ЭтоГруппа
| ТОГДА ВЫБОР
| КОГДА СправочникНоменклатура.ПометкаУдаления
| ТОГДА 7
| ИНАЧЕ 6
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА СправочникНоменклатура.ПометкаУдаления
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ + ВЫБОР
| КОГДА СправочникНоменклатура.ВидНоменклатуры.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыВеденияДополнительныхДанныхПоНоменклатуре.НеИспользовать)
| ТОГДА 0
| ИНАЧЕ 2
| КОНЕЦ
| КОНЕЦ КАК ИндексКартинки,
| СправочникНоменклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| СправочникНоменклатура.Артикул КАК Артикул,
| СправочникНоменклатура.НаименованиеПолное КАК НаименованиеПолное,
| СправочникНоменклатура.Вес КАК Вес,
| СправочникНоменклатура.СтавкаНДС КАК СтавкаНДС,
| СправочникНоменклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток,
| ЕСТЬNULL(ТоварыНаСкладахОстатки.РезервОстаток, 0) КАК Резерв,
| ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) - ЕСТЬNULL(ТоварыНаСкладахОстатки.РезервОстаток, 0) КАК СвободныйОстаток,
| ЦеныНоменклатурыСрезПоследних.ВидЦены КАК ВидЦеныРозничная,
| ЦеныНоменклатурыСрезПоследних.Цена КАК ЦенаРозничная
|ИЗ
| Справочник.Номенклатура КАК СправочникНоменклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
| ПО (ТоварыНаСкладахОстатки.Номенклатура = СправочникНоменклатура.Ссылка)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
| ПО (ЦеныНоменклатурыСрезПоследних.Цена = СправочникНоменклатура.Ссылка)");
запрос.УстановитьПараметр("ВидЦены", ВидЦены); // Вид цен.
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Вставить обработку выборки ВыборкаДетальныеЗаписи
КонецЦикла;
КонецПроцедуры
ВидЦены=Справочники.ВидыЦен.НайтиПоНаименованию("Розничная"); //// До передачи этого параметра
запрос.УстановитьПараметр("ВидЦены", ВидЦены); // Вид цен.
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Вставить обработку выборки ВыборкаДетальныеЗаписи
КонецЦикла;
&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
ВидЦены=Справочники.ВидыЦен.НайтиПоНаименованию("Розничная"); //// До передачи этого параметра
Запрос = Новый Запрос(
"ВЫБРАТЬ
| СправочникНоменклатура.Ссылка КАК Ссылка,
| СправочникНоменклатура.Код КАК Код,
| СправочникНоменклатура.Наименование КАК Наименование,
| СправочникНоменклатура.ВидНоменклатуры КАК ВидНоменклатуры,
| СправочникНоменклатура.ТоварнаяКатегория КАК ТоварнаяКатегория,
| СправочникНоменклатура.Марка КАК Марка,
| ВЫБОР
| КОГДА СправочникНоменклатура.ЭтоГруппа
| ТОГДА ВЫБОР
| КОГДА СправочникНоменклатура.ПометкаУдаления
| ТОГДА 7
| ИНАЧЕ 6
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА СправочникНоменклатура.ПометкаУдаления
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ + ВЫБОР
| КОГДА СправочникНоменклатура.ВидНоменклатуры.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыВеденияДополнительныхДанныхПоНоменклатуре.НеИспользовать)
| ТОГДА 0
| ИНАЧЕ 2
| КОНЕЦ
| КОНЕЦ КАК ИндексКартинки,
| СправочникНоменклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| СправочникНоменклатура.Артикул КАК Артикул,
| СправочникНоменклатура.НаименованиеПолное КАК НаименованиеПолное,
| СправочникНоменклатура.Вес КАК Вес,
| СправочникНоменклатура.СтавкаНДС КАК СтавкаНДС,
| СправочникНоменклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток,
| ЕСТЬNULL(ТоварыНаСкладахОстатки.РезервОстаток, 0) КАК Резерв,
| ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) - ЕСТЬNULL(ТоварыНаСкладахОстатки.РезервОстаток, 0) КАК СвободныйОстаток,
| ЦеныНоменклатурыСрезПоследних.ВидЦены КАК ВидЦеныРозничная,
| ЦеныНоменклатурыСрезПоследних.Цена КАК ЦенаРозничная
|ИЗ
| Справочник.Номенклатура КАК СправочникНоменклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
| ПО (ТоварыНаСкладахОстатки.Номенклатура = СправочникНоменклатура.Ссылка)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
| ПО (ЦеныНоменклатурыСрезПоследних.Цена = СправочникНоменклатура.Ссылка)");
запрос.УстановитьПараметр("ВидЦены", ВидЦены); // Вид цен.
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Вставить обработку выборки ВыборкаДетальныеЗаписи
КонецЦикла;
КонецПроцедуры
45.
Pavel Rodinchenko
20.08.19 09:05 Сейчас в теме
(43)Ну вот уже и код готовый)) правда ответ был дан уже пару постов назад. Но мне кажется, что следующим вопросом будет то, что вида цены с наименованием "Розничная" не будет в справочнике и возвращена будет пустая ссылка. Но, надеюсь, что я ошибаюсь
47.
Pavel Rodinchenko
20.08.19 09:08 Сейчас в теме
(46)Ну так ты хотя бы код читай, который копируешь. Не все же за тебя делать будут. У тебя результат запроса хранится в переменной РезультатЗапроса, а ты обращаешься к переменной Результат
&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
ВидЦены=Справочники.ВидыЦен.НайтиПоНаименованию("Розничная"); //// До передачи этого параметра
Запрос = Новый Запрос(
"ВЫБРАТЬ
| СправочникНоменклатура.Ссылка КАК Ссылка,
| СправочникНоменклатура.Код КАК Код,
| СправочникНоменклатура.Наименование КАК Наименование,
| СправочникНоменклатура.ВидНоменклатуры КАК ВидНоменклатуры,
| СправочникНоменклатура.ТоварнаяКатегория КАК ТоварнаяКатегория,
| СправочникНоменклатура.Марка КАК Марка,
| ВЫБОР
| КОГДА СправочникНоменклатура.ЭтоГруппа
| ТОГДА ВЫБОР
| КОГДА СправочникНоменклатура.ПометкаУдаления
| ТОГДА 7
| ИНАЧЕ 6
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА СправочникНоменклатура.ПометкаУдаления
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ + ВЫБОР
| КОГДА СправочникНоменклатура.ВидНоменклатуры.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыВеденияДополнительныхДанныхПоНоменклатуре.НеИспользовать)
| ТОГДА 0
| ИНАЧЕ 2
| КОНЕЦ
| КОНЕЦ КАК ИндексКартинки,
| СправочникНоменклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| СправочникНоменклатура.Артикул КАК Артикул,
| СправочникНоменклатура.НаименованиеПолное КАК НаименованиеПолное,
| СправочникНоменклатура.Вес КАК Вес,
| СправочникНоменклатура.СтавкаНДС КАК СтавкаНДС,
| СправочникНоменклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток,
| ЕСТЬNULL(ТоварыНаСкладахОстатки.РезервОстаток, 0) КАК Резерв,
| ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) - ЕСТЬNULL(ТоварыНаСкладахОстатки.РезервОстаток, 0) КАК СвободныйОстаток,
| ЦеныНоменклатурыСрезПоследних.ВидЦены КАК ВидЦеныРозничная,
| ЦеныНоменклатурыСрезПоследних.Цена КАК ЦенаРозничная
|ИЗ
| Справочник.Номенклатура КАК СправочникНоменклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
| ПО (ТоварыНаСкладахОстатки.Номенклатура = СправочникНоменклатура.Ссылка)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
| ПО (ЦеныНоменклатурыСрезПоследних.Цена = СправочникНоменклатура.Ссылка)");
запрос.УстановитьПараметр("ВидЦены", ВидЦены); // Вид цен.
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса .Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Вставить обработку выборки ВыборкаДетальныеЗаписи
КонецЦикла;
КонецПроцедуры
(54) Примерно год назад, я на этом форуме так же писал такие вопросы. Люди так же помогали, кто-то бомбил, мол дурачок. А были люди, которые подключались и помогали. Даже обучали. Так же обучали работать откладкой. Pavel Rodinchenko помогал помню. А https://infostart.ru/profile/95077 вообще полностью обучал
При открытии Номенклатуры в самой программе, ошибка:
Ошибка при выполнении запроса.
по причине:
Ошибка получения данных
по причине:
Ошибка создания набора данных "НаборДанныхДинамическогоСписка"
по причине:
Ошибка при исполнении запроса набора данных
по причине:
{(33, 79)}: Не задано значение параметра "ВидЦены"
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = <<?>>&ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
55.
Pavel Rodinchenko
20.08.19 09:19 Сейчас в теме
(52)Ну так и правильно. Тебе указали вектор для размышлений в (51). Смотри в сторону ДинамическийСписок или Список, короче на ту вещь, которая у тебя выделена жирным на форме списка. и вот туда параметры устанавливай.
Ошибка при выполнении запроса.
по причине:
Ошибка получения данных
по причине:
Ошибка создания набора данных "НаборДанныхДинамическогоСписка"
по причине:
Ошибка при исполнении запроса набора данных
по причине:
{(33, 79)}: Не задано значение параметра "ВидЦены"
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = <<?>>&ВидЦены) КАК ЦеныНоменклатурыСрезПоследних