Получить массив ссылок колонки Номенклатура из Регистры сведений.Поставщики номенклатуры
1с Розница 2.2 8.3.10
Не могу понять как в запрос выбора остатков при получении данных на сервере передать массив ссылок номенклатуры из запроса ДС Регистры сведений.Поставщики номенклатуры
При запуске отладки 1с и вызове Закупки-Поставляемая номенклатура получаю ошибку
Есть Динамический список из Регистры сведений.Поставщики номенклатуры
Исполняется произвольный запрос
Процедура отвечающая за получение и вывод остатков по всем складам
З.Ы. будьте снисходительны, ведь я только учусь!
Не могу понять как в запрос выбора остатков при получении данных на сервере передать массив ссылок номенклатуры из запроса ДС Регистры сведений.Поставщики номенклатуры
При запуске отладки 1с и вызове Закупки-Поставляемая номенклатура получаю ошибку
{РегистрСведений.НоменклатураПоставщиков.Форма.ФормаСписка.Форма(590)}: Значение, соответствующее ключу, не задано
СтрокаСписка=Строки[ВыборкаНоменклатура.Номенклатура];
Есть Динамический список из Регистры сведений.Поставщики номенклатуры
Исполняется произвольный запрос
ВЫБРАТЬ
РегистрСведенийНоменклатураПоставщиков.Поставщик,
РегистрСведенийНоменклатураПоставщиков.Магазин,
РегистрСведенийНоменклатураПоставщиков.Номенклатура,
РегистрСведенийНоменклатураПоставщиков.Характеристика,
РегистрСведенийНоменклатураПоставщиков.Цена,
РегистрСведенийНоменклатураПоставщиков.ДатаПоследнегоПоступления,
ВЫРАЗИТЬ("" КАК СТРОКА(100)) КАК Остаток
ИЗ
РегистрСведений.НоменклатураПоставщиков КАК РегистрСведенийНоменклатураПоставщиков
ПоказатьПроцедура отвечающая за получение и вывод остатков по всем складам
&НаСервереБезКонтекста
Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)
МассивН = Новый Массив;
Для Каждого Элемент Из Строки.ПолучитьКлючи() Цикл
МассивН.Добавить(Строки[Элемент].Данные["Номенклатура"]);
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстатки.Склад КАК Склад,
| ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
| ТоварыНаСкладахОстатки.Склад.Наименование КАК СкладНаименование,
| СкладыДополнительныеРеквизиты.Значение КАК Значение
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(
| ,Номенклатура В (&мТовары)) КАК ТоварыНаСкладахОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады.ДополнительныеРеквизиты КАК СкладыДополнительныеРеквизиты
| ПО (ТоварыНаСкладахОстатки.Склад.Ссылка = СкладыДополнительныеРеквизиты.Ссылка)
|
|УПОРЯДОЧИТЬ ПО
| Значение
|ИТОГИ ПО
| Номенклатура";
Запрос.УстановитьПараметр("мТовары", МассивН);
ПоказатьЗ.Ы. будьте снисходительны, ведь я только учусь!
Найденные решения
Прошу прощения за Г*внокод
все получилось, когда в мозгу сложилась вся картинка по оперированию данными
все получилось, когда в мозгу сложилась вся картинка по оперированию данными
&НаСервереБезКонтекста
Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)
Массив = Новый Массив;
Для Каждого Элемент Из Строки Цикл
Массив.Добавить(Элемент.Ключ.Номенклатура);
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстатки.Склад КАК Склад,
| ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
| ТоварыНаСкладахОстатки.Склад.Наименование КАК СкладНаименование,
| СкладыДополнительныеРеквизиты.Значение КАК Значение
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(
| ,Номенклатура В (&мТовары)) КАК ТоварыНаСкладахОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады.ДополнительныеРеквизиты КАК СкладыДополнительныеРеквизиты
| ПО (ТоварыНаСкладахОстатки.Склад.Ссылка = СкладыДополнительныеРеквизиты.Ссылка)
|
|УПОРЯДОЧИТЬ ПО
| Значение
|ИТОГИ ПО
| Номенклатура";
Запрос.УстановитьПараметр("мТовары", Массив);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаНоменклатура = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаНоменклатура.Следующий() Цикл
Остатки="";
НазваниеСклада="";
ВыборкаДетальныеЗаписи = ВыборкаНоменклатура.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Остатки=Остатки+?(Остатки="", "", ", ")+ВыборкаДетальныеЗаписи.Значение+": "+ВыборкаДетальныеЗаписи.КоличествоОстаток;
КонецЦикла;
Массив2 = Новый Массив;
Для Каждого Элемент2 Из Строки Цикл
ЕСЛИ Элемент2.Ключ.Номенклатура=ВыборкаНоменклатура.Номенклатура тогда
Строки[Элемент2.Ключ].Данные["Остаток"]=Остатки;
конецесли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Из выборки сделай массив.
Строки[ВыборкаНоменклатура.Номенклатура]; - в массив "строки" вместо индекса посылаешь какое-то значение.
ВыборкаНоменклатуры = Запрос.выполнить().Выбрать(); //выполнить верхний запрос
МассивН = Новый массив;
Пока Выборка.Следующий() Цикл
МассивН.Добавить(Выборка.Номенклатура);
КонецЦикла
Строки[ВыборкаНоменклатура.Номенклатура]; - в массив "строки" вместо индекса посылаешь какое-то значение.
Вот так можно:
ВЫБРАТЬ
РегистрСведенийНоменклатураПоставщиков.Поставщик,
РегистрСведенийНоменклатураПоставщиков.Магазин,
РегистрСведенийНоменклатураПоставщиков.Номенклатура,
РегистрСведенийНоменклатураПоставщиков.Характеристика,
РегистрСведенийНоменклатураПоставщиков.Цена,
РегистрСведенийНоменклатураПоставщиков.ДатаПоследнегоПоступления,
ВЫРАЗИТЬ("" КАК СТРОКА(100)) КАК Остаток
ПОМЕСТИТЬ втНоменклатураПоставщика
ИЗ
РегистрСведений.НоменклатураПоставщиков КАК РегистрСведенийНоменклатураПоставщиков;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
ТоварыНаСкладахОстатки.Склад КАК Склад,
ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
ТоварыНаСкладахОстатки.Склад.Наименование КАК СкладНаименование,
СкладыДополнительныеРеквизиты.Значение КАК Значение
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура В (ВЫБРАТЬ
втНоменклатураПоставщика.Номенклатура
ИЗ
втНоменклатураПоставщика)) КАК ТоварыНаСкладахОстатки
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады.ДополнительныеРеквизиты КАК СкладыДополнительныеРеквизиты
ПО ТоварыНаСкладахОстатки.Склад.Ссылка = СкладыДополнительныеРеквизиты.Ссылка
ПОЛНОЕ СОЕДИНЕНИЕ втНоменклатураПоставщика КАК втНоменклатураПоставщика
ПО ТоварыНаСкладахОстатки.Номенклатура = втНоменклатураПоставщика.Номенклатура
УПОРЯДОЧИТЬ ПО
Значение
ИТОГИ ПО
Номенклатура
Показать
На мой взгляд вот это странное творение:
Для Каждого Элемент Из Строки.ПолучитьКлючи() Цикл
МассивН.Добавить(Строки[Элемент].Данные["Номенклатура"]);
КонецЦикла;
Надо преобразовать
Для каждого Элемент Из Строки Цикл
МассивН.Добавить(Элемент.Значение.Данные["Номенклатура"]); // ну или Элемент.Значение.Данные.Номенклатура; //работать будет и так и эдак
КонецЦикла;
Для Каждого Элемент Из Строки.ПолучитьКлючи() Цикл
МассивН.Добавить(Строки[Элемент].Данные["Номенклатура"]);
КонецЦикла;
Надо преобразовать
Для каждого Элемент Из Строки Цикл
МассивН.Добавить(Элемент.Значение.Данные["Номенклатура"]); // ну или Элемент.Значение.Данные.Номенклатура; //работать будет и так и эдак
КонецЦикла;
(7) из-за невнимательности и отсутствия опыта получилось, что мной в недостаточной мере была проанализирована ошибка, отсюда и следует, что вопрос был некорректным по отношению к ошибке.
В итоге первая часть кода была рабочей, а вот часть кода отвечающая за помещение результата выборки по остаткам в колонку Остатки не работала, так как попытка обратиться к нужной строке была ошибочной из-за неверного ключа.
Осталось теперь понять, как передать "нужный ключ" СтрокаСписка=Строки[Нужный ключ];
В итоге первая часть кода была рабочей, а вот часть кода отвечающая за помещение результата выборки по остаткам в колонку Остатки не работала, так как попытка обратиться к нужной строке была ошибочной из-за неверного ключа.
Осталось теперь понять, как передать "нужный ключ" СтрокаСписка=Строки[Нужный ключ];
Очень прошу прощения, проблема оказалась в совсем другом.
1с-ка вылетает с ошибкой, что "значение соответствующее ключу не найдено" на строке
все верно в плане возникновения ошибки, так как в массиве строк ключи принадлежат записям из РегистрСведенийНоменклатураПоставщиков, а моя попытка выбрать нужную строку по ключу от Номенклатуры.
&НаСервереБезКонтекста
Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)
Массив = Новый Массив;
Для Каждого Элемент Из Строки Цикл
Массив.Добавить(Элемент.Ключ.Номенклатура);
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстатки.Склад КАК Склад,
| ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
| ТоварыНаСкладахОстатки.Склад.Наименование КАК СкладНаименование,
| СкладыДополнительныеРеквизиты.Значение КАК Значение
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(
| ,Номенклатура В (&мТовары)) КАК ТоварыНаСкладахОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады.ДополнительныеРеквизиты КАК СкладыДополнительныеРеквизиты
| ПО (ТоварыНаСкладахОстатки.Склад.Ссылка = СкладыДополнительныеРеквизиты.Ссылка)
|
|УПОРЯДОЧИТЬ ПО
| Значение
|ИТОГИ ПО
| Номенклатура";
Запрос.УстановитьПараметр("мТовары", Массив);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаНоменклатура = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаНоменклатура.Следующий() Цикл
Остатки="";
НазваниеСклада="";
ВыборкаДетальныеЗаписи = ВыборкаНоменклатура.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Остатки=Остатки+?(Остатки="", "", ", ")+ВыборкаДетальныеЗаписи.Значение+": "+ВыборкаДетальныеЗаписи.КоличествоОстаток;
КонецЦикла;
СтрокаСписка=Строки[ВыборкаНоменклатура.Номенклатура];
СтрокаСписка.Данные.Остаток=Остатки;
КонецЦикла;
КонецПроцедуры
Показать1с-ка вылетает с ошибкой, что "значение соответствующее ключу не найдено" на строке
СтрокаСписка=Строки[ВыборкаНоменклатура.Номенклатура];
все верно в плане возникновения ошибки, так как в массиве строк ключи принадлежат записям из РегистрСведенийНоменклатураПоставщиков, а моя попытка выбрать нужную строку по ключу от Номенклатуры.
Прошу прощения за Г*внокод
все получилось, когда в мозгу сложилась вся картинка по оперированию данными
все получилось, когда в мозгу сложилась вся картинка по оперированию данными
&НаСервереБезКонтекста
Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)
Массив = Новый Массив;
Для Каждого Элемент Из Строки Цикл
Массив.Добавить(Элемент.Ключ.Номенклатура);
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстатки.Склад КАК Склад,
| ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
| ТоварыНаСкладахОстатки.Склад.Наименование КАК СкладНаименование,
| СкладыДополнительныеРеквизиты.Значение КАК Значение
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(
| ,Номенклатура В (&мТовары)) КАК ТоварыНаСкладахОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады.ДополнительныеРеквизиты КАК СкладыДополнительныеРеквизиты
| ПО (ТоварыНаСкладахОстатки.Склад.Ссылка = СкладыДополнительныеРеквизиты.Ссылка)
|
|УПОРЯДОЧИТЬ ПО
| Значение
|ИТОГИ ПО
| Номенклатура";
Запрос.УстановитьПараметр("мТовары", Массив);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаНоменклатура = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаНоменклатура.Следующий() Цикл
Остатки="";
НазваниеСклада="";
ВыборкаДетальныеЗаписи = ВыборкаНоменклатура.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Остатки=Остатки+?(Остатки="", "", ", ")+ВыборкаДетальныеЗаписи.Значение+": "+ВыборкаДетальныеЗаписи.КоличествоОстаток;
КонецЦикла;
Массив2 = Новый Массив;
Для Каждого Элемент2 Из Строки Цикл
ЕСЛИ Элемент2.Ключ.Номенклатура=ВыборкаНоменклатура.Номенклатура тогда
Строки[Элемент2.Ключ].Данные["Остаток"]=Остатки;
конецесли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот