|
|||
Dirk Diggler
04.01.10 — 07:23 |
Есть некий список номенклатуры, в таблице значений МерныеМатериалы.
Запрос.Текст=»ВЫБРАТЬ |
||
Rie
1 — 04.01.10 — 07:30 |
(0) А почему бы не ВЫБРАТЬ РАЗЛИЧНЫЕ |
||
Dirk Diggler
2 — 04.01.10 — 07:33 |
Кажись пробовал, нельзя. Там запрос должен быть. |
||
Rie
3 — 04.01.10 — 07:42 |
Что-нибудь вроде СЧЕТЧИК равен количеству элементов номенклатуры. |
||
Rie
4 — 04.01.10 — 08:20 |
(2) Всё же непонятно, что значит «там запрос должен быть»? ВЫБРАТЬ даст тебе именно общие, если ВсегоНоменклатурыВТаблице=Таблица.КоличествоСтрок() |
||
Dirk Diggler
5 — 04.01.10 — 11:06 |
(4) после «в» должен стоять вложенный запрос. А по топику — заработало, спасибо. Запрос.Текст=»ВЫБРАТЬ |
||
Dirk Diggler
6 — 06.01.10 — 05:51 |
блин, я тупой ))) КОЛИЧЕСТВО(*) = &ВсегоНоменклатурыВТаблице |
||
Rie 7 — 06.01.10 — 05:57 |
КОЛИЧЕСТВО — подсчитывает свой аргумент (строки выборки) по группировкам. А вот слово РАЗЛИЧНЫЕ ты зря добавил, IMHO. |
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование.
Фредерик Брукс-младший
Приветствую всех.
Предлагаю разобрать решение первой задачи. (https://forum-1c.ru/index.php?topic=5607.0)
Оно безусловно не единственно возможное, но такое решение выбрал я.
Адекватная критика, замечания, дополнения — приветствуются. Пишите или в личку, или просто оставляйте сообщения в этой теме.
Итак, начнем.
Чтобы не переключаться с одной темы на другую, продублирую условие задачи здесь:
«У производственного предприятия, в связи с расширением направлений деятельности, появилось большое количество новой номенклатуры. И у большей части этой номенклатуры базовая единица измерения «кг». А там где килограмм, там и что? Правильно, тонна. Собственно задача заключается в том, чтобы для номенклатуры, у которой в качестве базовой единицы измерения стоит килограмм, создать еще одну единицу измерения — тонна».
Давайте сначала определим по пунктам, что нам нужно сделать:
1. Найти номенклатуру, у которой в качестве базовой единицы измерения используется килограмм.
2. Добавить к единицам измерения этой номенклатуры тонну.
Давайте найдем всю номенклатуру, у которой базовая единица — килограмм. Как будем искать? Я думаю, запросом .
КгКлассиф = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("кг");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ПометкаУдаления = Ложь
| И Номенклатура.БазоваяЕдиницаИзмерения = &КгКлассиф";
Запрос.УстановитьПараметр("КгКлассиф", КгКлассиф);
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(ВыборкаДетальныеЗаписи.Ссылка);
КонецЦикла;
Немного прокомментирую. Я ввел переменную «КгКлассиф», которая будет хранить ссылку на элемент, с наименованием «кг» в справочнике «КлассификаторЕдиницИзмерения». Она нам пригодится для того, чтобы в запросе сравнивать со значением реквизита «БазоваяЕдиницаИзмерения» справочника «Номенклатура», из которого мы собственно и будем получать данные.
В результате выполнения этого запроса мы получаем всю номенклатуру, у которой базовая единица измерения килограмм. То, что нам и нужно для выполнения первого пункта.
Казалось бы можно создавать новую единицу измерения? Но нет. Мы не торопимся, а немного порассуждаем.
А вдруг какой-то пользователь уже успел добавить новую единицу измерения к какой-то из номенклатур? И что у нас получится? Правильно, две одинаковые единицы измерения у одной номенклатуры, что нас не устраивает. Давайте подумаем, как нам получить номенклатуру, для которой уже создана едница измерения — тонна.
Как? Конечно запросом .
ТоннаКлассиф = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("тонна");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЕдиницыИзмерения.Владелец
|ИЗ
| Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
|ГДЕ
| ЕдиницыИзмерения.Владелец.ПометкаУдаления = Ложь
| И ЕдиницыИзмерения.ЕдиницаПоКлассификатору = &ТоннаКлассиф";
Запрос.УстановитьПараметр("ТоннаКлассиф", ТоннаКлассиф);
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(ВыборкаДетальныеЗаписи.Ссылка);
КонецЦикла;
Этим запросом мы получим всю номенклатуру, у которой уже есть единица измерения — тонна.
По поводу ключевого слова «РАЗЛИЧНЫЕ» в запросе — его можно и не использовать. Я исходил из предположения, что где-то есть номенклатура, у которой, ошибочно несколько раз заведена единица измерения — тонна.
Кроме того, хочу отметить, что владельцем справочника «ЕдиницыИзмерения» является справочник «Номенклатура», что вполне логично и нас устраивает, и собственно именно по этому мы его и используем для получения данных.
Теперь перед нами стоит задача: выбрать всю номенклатуру из первого запроса, но так, чтобы она не входила в результат второго. И снова запрос .
КгКлассиф = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("кг");
ТоннаКлассиф = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("тонна");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ПометкаУдаления = ЛОЖЬ
| И Номенклатура.БазоваяЕдиницаИзмерения = &КгКлассиф
| И (НЕ Номенклатура.Ссылка В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЕдиницыИзмерения.Владелец
| ИЗ
| Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
| ГДЕ
| ЕдиницыИзмерения.Владелец.ПометкаУдаления = ЛОЖЬ
| И ЕдиницыИзмерения.ЕдиницаПоКлассификатору = &ТоннаКлассиф))";
Запрос.УстановитьПараметр("КгКлассиф", КгКлассиф);
Запрос.УстановитьПараметр("ТоннаКлассиф", ТоннаКлассиф);
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(ВыборкаДетальныеЗаписи.Ссылка);
КонецЦикла;
здесь особо пояснять нечего. Слепили мы два запроса.
Теперь осталось дело за малым — создать новую единицу измерения для данной номенклатуры:
КгКлассиф = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("кг");
ТоннаКлассиф = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("тонна");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ПометкаУдаления = ЛОЖЬ
| И Номенклатура.БазоваяЕдиницаИзмерения = &КгКлассиф
| И (НЕ Номенклатура.Ссылка В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЕдиницыИзмерения.Владелец
| ИЗ
| Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
| ГДЕ
| ЕдиницыИзмерения.Владелец.ПометкаУдаления = ЛОЖЬ
| И ЕдиницыИзмерения.ЕдиницаПоКлассификатору = &ТоннаКлассиф))";
Запрос.УстановитьПараметр("КгКлассиф", КгКлассиф);
Запрос.УстановитьПараметр("ТоннаКлассиф", ТоннаКлассиф);
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
НовыйЭлемент = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
НовыйЭлемент.Владелец = ВыборкаДетальныеЗаписи.Ссылка;
НовыйЭлемент.Коэффициент = 1000;
НовыйЭлемент.ЕдиницаПоКлассификатору =ТоннаКлассиф;
НовыйЭлемент.Наименование = ТоннаКлассиф.Наименование;
НовыйЭлемент.Записать();
КонецЦикла;
Параметры запроса в 1С 8.3 необходимы для оптимизации кода запроса. Параметры бывают простых типов, ссылочных типов, списочных типов, в виде таблиц значений. Чтобы объявить параметра в языке запроса используется символ «&» и название параметра, Например: &ДатаДокумента. Для вставки параметра в запрос, используется функция УстановитьПараметр().
Передача параметров простых типов в запросе в 1С 8.3:
&НаСервере
Процедура ПередачаПараметровПростыхТиповВЗапросе()// Создание отбора по поступлению материала за 2020 год
Запрос = Новый Запрос(«ВЫБРАТЬ
| Ссылка
|ИЗ
| Документ.ПоступлениеМатериалов
|ГДЕ
| Дата МЕЖДУ &НачДата И &КонДата
|УПОРЯДОЧИТЬ ПО
| Дата ВОЗР»);Запрос.УстановитьПараметр(«НачДата», ‘20200101000000’);
Запрос.УстановитьПараметр(«КонДата», ‘20201231235959’);РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Передача параметров ссылочных типов в запросе в 1С 8.3:
&НаСервере
Процедура ПередачаПараметровСсылочныхТиповВЗапросе()// Создание отбора по материалам с единицей измерения «Куб.см.»
Запрос = Новый Запрос(«ВЫБРАТЬ
| Наименование,
| ЕдиницаИзмерения
|ИЗ
| Справочник.Материалы
|ГДЕ
| ЕдиницаИзмерения = &ЕдинИзмер»);Запрос.УстановитьПараметр(«ЕдинИзмер»,Справочники.ЕдиницыИзмерения.НайтиПоНаименованию(«Куб.см.»));РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Передача параметров списочного типа в запросе в 1С 8.3:
&НаСервере
Процедура ПередачаПараметровСписочногоТипаВЗапросе()// Создание отбора по материалам, единицы измерения входят в переданный список
Запрос = Новый Запрос(«ВЫБРАТЬ
| Наименование,
| ЕдиницаИзмерения
|ИЗ
| Справочник.Материалы
|ГДЕ
| ЕдиницаИзмерения В (&СписокЕдиницИзмерения)»);СписокЕИ = Новый Массив;
СписокЕИ.Добавить(Справочники.ЕдиницыИзмерения.НайтиПоНаименованию(«Куб.см.»));
СписокЕИ.Добавить(Справочники.ЕдиницыИзмерения.НайтиПоНаименованию(«Куб.дм.»));
СписокЕИ.Добавить(Справочники.ЕдиницыИзмерения.НайтиПоНаименованию(«Куб.м.»));Запрос.УстановитьПараметр(«СписокЕдиницИзмерения»,СписокЕИ);РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Передача параметра в виде таблицы значений в запросе в 1С 8.3:
&НаСервере
Процедура ПередачаПараметраВВидеТаблицыЗначенийВЗапросе()// Создание отбора по материалам в соответствии с параметром в виде
// комбинированной таблицы значений: «Срок Использования» и «Производитель»
ТЗ_СрокИсп_Произв = новый ТаблицаЗначений;
ТЗ_СрокИсп_Произв.Колонки.Добавить(«СрокИспользования», Новый ОписаниеТипов(«СправочникСсылка.КлассификаторСроковПИ»));
ТЗ_СрокИсп_Произв.Колонки.Добавить(«Производитель», Новый ОписаниеТипов(«СправочникСсылка.Контрагенты»));// «12 месяцев» + «Гомелькабель»
СтрокаТЗ = ТЗ_СрокИсп_Произв.Добавить();
СтрокаТЗ.СрокИспользования = Справочники.КлассификаторСроковПИ.НайтиПоНаименованию(«12 месяцев»);
СтрокаТЗ.Производитель = Справочники.Контрагенты.НайтиПоНаименованию(«Гомелькабель»);// «18 месяцев» + «Гомельстекло»
СтрокаТЗ = ТЗ_СрокИсп_Произв.Добавить();
СтрокаТЗ.СрокИспользования = Справочники.КлассификаторСроковПИ.НайтиПоНаименованию(«18 месяцев»);
СтрокаТЗ.Производитель = Справочники.Контрагенты.НайтиПоНаименованию(«Гомельстекло»);Запрос = Новый Запрос(«ВЫБРАТЬ
| Наименование,
| СрокИспользования,
| Производитель
|ИЗ
| Справочник.Материалы
|ГДЕ
| (СрокИспользования, Производитель) В (&СписокСочетаний)»);Запрос.УстановитьПараметр(«СписокСочетаний», ТЗ_СрокИсп_Произв);РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Использование таблицы значений переданной в запрос как параметр в 1С 8.3:
&НаСервере
Процедура ИспользованиеТаблицыЗначенийПереданнойВЗапросКакПараметр()// Программное создание Таблицы Значений и передача её в запрос
ДрагМеталл = новый ТаблицаЗначений;
ДрагМеталл.Колонки.Добавить(«Название», Новый ОписаниеТипов(«Строка»));
ДрагМеталл.Колонки.Добавить(«РынЦена», Новый ОписаниеТипов(«Число»));НоваяСтрока = ДрагМеталл.Добавить();
НоваяСтрока.Название = «Золото»;
НоваяСтрока.РынЦена = 127.29;НоваяСтрока = ДрагМеталл.Добавить();
НоваяСтрока.Название = «Серебро»;
НоваяСтрока.РынЦена = 1.30;НоваяСтрока = ДрагМеталл.Добавить();
НоваяСтрока.Название = «Платина»;
НоваяСтрока.РынЦена = 62.00;НоваяСтрока = ДрагМеталл.Добавить();
НоваяСтрока.Название = «Родий»;
НоваяСтрока.РынЦена = 568.27;// Сперва выбираем данные во временную таблицу, а потом работаем как с обычной таблицей
Запрос = Новый Запрос(«ВЫБРАТЬ
| Название,
| РынЦена
|ПОМЕСТИТЬ
| ВременнаяТаблица
|ИЗ
| &ТаблицаДрагМеталлов КАК ДрагМеталлы
|;
|ВЫБРАТЬ
| Название,
| РынЦена
|ИЗ
| ВременнаяТаблица
|УПОРЯДОЧИТЬ ПО
| РынЦена УБЫВ»);Запрос.УстановитьПараметр(«ТаблицаДрагМеталлов», ДрагМеталл);РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Обращение с помощью литерала ЗНАЧЕНИЕ (ПРЕДСТАВЛЕНИЕЗНАЧЕНИЯ) в запросе в 1С 8.3:
// Вместо параметров можно применять обращение к предопределенным данным конфигурации с помощью литерала ЗНАЧЕНИЕ
// (ПРЕДСТАВЛЕНИЕЗНАЧЕНИЯ). В качестве представления значений могут использоваться
// предопределенные данные справочников, планов видов характеристик,
// планов счетов, планов видов расчета, значение перечислений, пустые ссылки,
// значения точек маршрута, значения системных перечислений. Пример:
|ГДЕ НашаНоменклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.Гвоздь)
|
|ГДЕ НашаНоменклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
|
|ГДЕ ТипТовара = ЗНАЧЕНИЕ(Перечисление.ВидыТоваров.Продукция)
|
|ГДЕ ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
|
|ГДЕ ТочкаМаршрута = ЗНАЧЕНИЕ(БизнесПроцесс.Согласование.ТочкаМаршрута.Согласие)
💡 Шаблоны (готовые модели) кода 1С 8.3 с тегом #Запросы:
Copyright©, «Программист 1С в г.Минске», 14.06.2020
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Слушатель курса Разработка и оптимизация запросов в 1С:Предприятие 8.3 столкнулся с трудностями при обращении к конкретному объекту непосредственно в запросе. С аналогичной задачей может столкнуться каждый, поэтому мы решили опубликовать вопрос слушателя и ответ тренера из Мастер-группы курса.
Вопрос
В самом начале курса было показано, как найти объект на встроенном языке, например, НайтиПоНаименованию или НайтиПоКоду и передать его в запрос через параметр. А можно ли обратиться к объекту прямо в запросе, не используя параметр. Например, найти номенклатуру, зная её точное название или артикул?
Ответ тренера
Искать по произвольному реквизиту в запросе тоже можно, сравнивая значение этого реквизита с примитивными типами. Разумеется, значение реквизита так же должно иметь примитивный тип.
Выборка номенклатуры по конкретному значению артикула:
ВЫБРАТЬ Номенклатура.Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Артикул = "Арт1234"
Если значение реквизита не является примитивным типом, требуется через точку перейти на следующий уровень детализации.
То есть, чтобы выбрать номенклатуру с единицей измерения “штука”, нельзя написать
Номенклатура.ЕдиницаИзмерения = "Шт"
Правильным будет следующее условие:
Номенклатура.ЕдиницаИзмерения.Наименование = "Шт".
P.S.
Понимать, как работают запросы и уметь их строить — обязательный навык для всех, кто дорабатывает и внедряет 1С.
После курса Вы сможете:
- Строить сложные запросы с несколькими источниками данных
- Уверенно задействовать вложенные запросы и временные таблицы
- Использовать встроенный язык для обработки результатов запроса
- Учитывать особенности соединений и объединений нескольких таблиц.
- Разрабатывать запросы на уровне задач Аттестации 1С:Специалист по платформе.
pluck |
|
||
---|---|---|---|
Здравствуйте Проблема состоит в следующем, нужно при заполнении макета проверять заполнена ли единица измерения в номенклатура в «списокЕдиницыИзмерения», то есть в поле с отбором по родителю, код представлен ниже. Код отрабатывает, но считает для всех полей, а нужно чтобы только для тех где в номенклатуре есть значение «шт» . Никак не могу разобраться, где то не там вывожу строку Код 1C v 8.2 УП
|
Yandex |
|
||
---|---|---|---|
pluck |
|
||
---|---|---|---|
И еще, значение во всех полях вводит одно и то же, то есть из первого поля где есть «шт» |
escritor |
|
||
---|---|---|---|
так поставь условие в самом первом запросе, что нужно выводить номенклатуру только с ШТ, зачем еще при выводе номенклатуры делать запрос? |
pluck |
|
||
---|---|---|---|
проблема в том что в карточке номенклатуры та единица измерения которая мне нужна находится не в реквизите, а выведена форма списка справочника единица измерения с отбором по родителю, родитель соответственно текущая номенклатура этим запросом я повторил тот отбор и проверяю введено ли в список значение «шт» если да то делю количество на коэфф от шт если нет то нужно чтобы поле было пустое вместо пустого поля он посчитал в первой номенклатура где есть шт и заполнил это в остальные, тоесть не прервал почему-то |
pluck |
|
||
---|---|---|---|
решение — занулить параметр КолШт перед циклом «пока» |
pluck |
|
||
---|---|---|---|
Вопрос закрыт! |
Подсказка: Щелкнув по значку (справа от названия вопроса), вы получите список ответов на похожие вопросы! |
МОВ 0 / 0 / 0 Регистрация: 14.08.2022 Сообщений: 3 |
||||
1 |
||||
Не получается рассортировать номенклатуру по единицам измерения14.08.2022, 18:45. Показов 1237. Ответов 13 Метки нет (Все метки)
Задание рассортировать номенклатуру по папкам, по единицам измерения , через внешнюю обработку Группа создается, запрос в консоли отрабатывается, до точки останова в конце процедуры доходит, при выполнении не ругается, а номенклатура по папкам не разносится. Подскажите пожалуйста, что делаю не так
0 |
Аватар 1505 / 948 / 364 Регистрация: 31.05.2012 Сообщений: 3,333 |
||||
14.08.2022, 20:07 |
2 |
|||
СправочникОбъект = ВыборкаЗаписей.ПолучитьОбъект(); И ошибки не было? Скорее всего выборка пустая.
0 |
0 / 0 / 0 Регистрация: 14.08.2022 Сообщений: 3 |
|
15.08.2022, 00:12 [ТС] |
3 |
Скорее всего что так
0 |
1505 / 948 / 364 Регистрация: 31.05.2012 Сообщений: 3,333 |
|
15.08.2022, 06:29 |
4 |
в параметр что передается? и почему отбор по наименованию единицы измерения, а не по ссылке? и левое соединение не нужно было бы в запросе тогда
0 |
Yulunga 1142 / 689 / 203 Регистрация: 22.04.2013 Сообщений: 5,159 Записей в блоге: 1 |
||||
15.08.2022, 07:06 |
5 |
|||
0 |
1808 / 1228 / 442 Регистрация: 16.01.2015 Сообщений: 5,395 |
|
15.08.2022, 08:00 |
6 |
А зачем левое соединение со справочником Базовые Единицы? У номенклатуры есть реквизит ЕдиницаИзмерения с типом СправочникСсылка.БазовыеЕдиницы. Никаких соединений, на мой взгляд, не требуется. Только условие ГДЕ Номенклатура.ЕдиницаИзмерения = &ЕдиницаИзмерения
0 |
1142 / 689 / 203 Регистрация: 22.04.2013 Сообщений: 5,159 Записей в блоге: 1 |
|
15.08.2022, 08:41 |
7 |
polax, Аватар, то есть что в запросе есть
|Номенклатура.ПометкаУдаления КАК ПометкаУдаления, вас как-то устраивает, да? ))))))))))))))
0 |
1505 / 948 / 364 Регистрация: 31.05.2012 Сообщений: 3,333 |
|
15.08.2022, 09:17 |
8 |
Та кликнул ТС в конструкторе и потянуло все поля, делов то. Не эффективно конечно для целей задачки. Если она учебная то простительно, если же нет то беда ))
0 |
1808 / 1228 / 442 Регистрация: 16.01.2015 Сообщений: 5,395 |
|
15.08.2022, 09:36 |
9 |
Yulunga, Мое сообщение выше было продолжением твоего поста, точнее вопрос тебе. Извини, не поставил ник )))
0 |
1142 / 689 / 203 Регистрация: 22.04.2013 Сообщений: 5,159 Записей в блоге: 1 |
|
15.08.2022, 09:58 |
10 |
polax, а, понял
0 |
0 / 0 / 0 Регистрация: 14.08.2022 Сообщений: 3 |
|
15.08.2022, 11:13 [ТС] |
11 |
Добрый день, высланный код тоже не работает Код который скинули в ответах тоже не хочет работать Я уже голову сломала, сегодня нужно сдать контрольную, а я ….. Добавлено через 48 секунд Добавлено через 5 минут
0 |
Yulunga 1142 / 689 / 203 Регистрация: 22.04.2013 Сообщений: 5,159 Записей в блоге: 1 |
||||
15.08.2022, 11:14 |
12 |
|||
Без обращения к справочнику Базовые Единицы Измерения у меня не получается связать параметр и Запрос
0 |
polax 1808 / 1228 / 442 Регистрация: 16.01.2015 Сообщений: 5,395 |
||||
15.08.2022, 16:14 |
13 |
|||
В виде исключения, хотя и поздно уже:
0 |
0 / 0 / 0 Регистрация: 08.03.2020 Сообщений: 3 |
|
20.09.2022, 22:05 |
14 |
polax, У Вас заработал данный код? У меня почему то внешняя обработка ни как не реагирует, на кнопку выполнить
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
20.09.2022, 22:05 |
14 |
1
2
Показывать по
10
20
40
сообщений
Новая тема
Ответить
kend
Дата регистрации: 05.05.2009
Сообщений: 95
1С:Предприятие 8.3 (8.3.4.437)
Управление торговлей, редакция 11.1 (11.1.4.14)
День добрый!
Подскажите, пожалуйста, кто в курсе.
В УТ есть документ «Реализация товаров и услуг», нужно из табличной части «Товары» получить распечатку —
«Товар» , «Количество» , «Единица измерения»
……..
……..
С Товаром и Количеством все понятно, а ЕдиницуИзмерения, как вытащить на печать?
В УТ 10.3 работал такой код в модуле документа
Код |
---|
Для Каждого СтрокаТЧ из ЭтотОбъект.Товары Цикл сообщить(""+СтрокаТЧ.Номенклатура+" "+СтрокаТЧ.Количество+" "+СтрокаТЧ.ЕдиницаИзмерения); КонецЦикла; |
В УТ 11 вместо ЕдиницыИзмерения — Упаковка, но из нее не получается вытащить никакие данные.
Prikum
активный пользователь
офлайн
Дата регистрации: 18.02.2002
Сообщений: 20842
kend, упаковка какой тип имеет?
kend
Дата регистрации: 05.05.2009
Сообщений: 95
В Конфигураторе — СправочникСсылка.УпаковкиНоменклатуры
В самой базе, в колонке «Упаковка» выходят Единицы измерения.
Пробовал в цикле вверху ставить СтрокаТЧ.Упаковка… и далее реквизиты, все-равно ничего на выходит
Prikum
активный пользователь
офлайн
Дата регистрации: 18.02.2002
Сообщений: 20842
kend, СтрокаТЧ.ЕдиницаИзмерения.Упаковка так что выходит?
kend
Дата регистрации: 05.05.2009
Сообщений: 95
Prikum,
В документе «РеализацияТоваровУслуг» в табличной части «Товары» нет реквизита «ЕдиницаИзмерения», он был в 10.3, а в УТ-11 его заменили на реквизит «Упаковка».
По крайней-мере в моей конфе такого реквизита нет.
kend
Дата регистрации: 05.05.2009
Сообщений: 95
Prikum,
Для каждого СтрокаТЧ из ЭтотОбъект.Товары цикл
сообщить(«»+СтрокаТЧ .Упаковка);
сообщить(«»+СтрокаТЧ .Упаковка.ЕдиницаИзмерения);
сообщить(«»+СтрокаТЧ .Упаковка.ЕдиницаИзмерения.Наименование);
сообщить(«»+СтрокаТЧ .Упаковка.ИмяПредопределенныхДанных);
сообщить(«»+СтрокаТЧ .Упаковка.Наименование);
конеццикла;
выходят все пустые строки, хотя в документе стоит единица — «шт»
kend
Дата регистрации: 05.05.2009
Сообщений: 95
Prikum,
Цикл
СтрокаТЧ.Номенклатура.ЕдиницаИзмерения;
Конеццикла
выдает «шт», но как-то это не правильно имхо….
Вьюн
Дата регистрации: 14.01.2007
Сообщений: 657
kend,
Если СтрокаТЧ.Упаковка = Справочник.УпаковкиНоменклатуры.ПустаяСсылка Тогда
Сообщить(СтрокаТЧ.Номенклатура.ЕдиницаИзмерения);
Иначе
Сообщить(СтрокаТЧ.Упаковка.Наименование)
КонецЕсли;
kend
Дата регистрации: 05.05.2009
Сообщений: 95
Вьюн,
Ну да, этот вариант четко отрабатывает, выдает — «шт».
Работает первое условие — Если СтрокаТЧ.Упаковка = Справочник.УпаковкиНоменклатуры.ПустаяСсылка Тогда….
но почему работает именно оно, ведь в документе в строке ясно указано — «шт».
т.е она то, что указано в документе не воспринимает как положено, а понимает, как пустую ссылку, и обращается затем к Номенклатуре и ее реквизиту.
Собственно, задача вывода на печать решена, но вопросов стало больше чем было…
Вьюн
Дата регистрации: 14.01.2007
Сообщений: 657
kend пишет:
Цитата |
---|
но почему работает именно оно, ведь в документе в строке ясно указано — «шт». |
Не в документе, а на форме документа, где в этой колонке стоит группа колонок, которая состоит из Объект.Товары.Упаковка и Объект.Товары.Номенклатура.ЕдиницаИзмерения.
А в запросах для печати везде стоит:
Код |
---|
| ВЫБОР | КОГДА ТаблицаТоваров.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиНоменклатуры.ПустаяСсылка) | ТОГДА ТаблицаТоваров.Номенклатура.ЕдиницаИзмерения.Представление | ИНАЧЕ ТаблицаТоваров.Упаковка.ЕдиницаИзмерения.Представление | КОНЕЦ КАК ЕдиницаИзмеренияНаименование, |