Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
23 Июл 2017, 21:42
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Как корректно сформировать запрос  (Прочитано 702 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Мухаммад

  • *
  • Сообщений: 3
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2016-07-13
  • Сайт: 
  • Профессия: Ученик 1С
Здравствуйте)). Я хочу составить список всех товаров из всех складов (или склад по выбору) с колонками: номенклатура, штрих-код, цена (розничная), остаток (шт), ячейка (место хранения).

Я как понял нужно запрос делать либо в "РегистрСведений", либо в "РегистрНакопления", либо в "ШтрихкодыНоменклатуры".

Я пока смог получить колонки: номенклатура, штрих-код, остаток. Но остаток неправильный (в окне пересчёта товаров, остаток по учёту совсем другой). И штрих-код я взял "минимум" из всех, мне бы если 2 и более штрих-кодов, то их в 1 строку через пробел, например, 4604534534345_460312434234_42132141242121. Помогите, пожалуйста! :mellow:
&НаСервере
Процедура ЗаполнитьНаСервере()

ЭтаФорма.ТЗ.Очистить();

ЗапросШ = Новый Запрос;
ЗапросШ.Текст = "ВЫБРАТЬ
| МИНИМУМ(ШтрихкодыНоменклатуры.Штрихкод) КАК Штрихкод,
| ШтрихкодыНоменклатуры.Номенклатура КАК Номенклатура
|ИЗ
| РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
|СГРУППИРОВАТЬ ПО
| ШтрихкодыНоменклатуры.Номенклатура";

ТЗ_Ш = Новый ТаблицаЗначений;
ТЗ_Ш.Колонки.Добавить("Номенклатура");
ТЗ_Ш.Колонки.Добавить("Штрихкод");

ТЗ_Ш = ЗапросШ.Выполнить().Выгрузить();

МассивШ = Новый Массив;
МассивШК = Новый Массив;
Для каждого Стр из ТЗ_Ш цикл
МассивШ.Добавить(Стр.Номенклатура);
МассивШК.Добавить(Стр.Штрихкод);
КонецЦикла;

/////////////////////////////////////////////////

ЗапросО = Новый Запрос;
ЗапросО.Текст = "ВЫБРАТЬ
                | ТоварыНаСкладахОстатки.ВНаличииОстаток КАК Остаток,
                | ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура
|ИЗ
                | РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки";

ТЗ_Г = Новый ТаблицаЗначений;
ТЗ_Г.Колонки.Добавить("Номенклатура");
ТЗ_Г.Колонки.Добавить("Штрихкод");
ТЗ_Г.Колонки.Добавить("Остаток");

ТЗ_О = Новый ТаблицаЗначений;

ТЗ_О.Колонки.Добавить("Номенклатура");
ТЗ_О.Колонки.Добавить("Остаток");

ТЗ_О = ЗапросО.Выполнить().Выгрузить();

МассивО = Новый Массив;
МассивОст = Новый Массив;
МассивГотН = Новый Массив;
МассивГотШ = Новый Массив;
МассивГотО = Новый Массив;

Для каждого Стр из ТЗ_О цикл
МассивО.Добавить(Стр.Номенклатура);
МассивОст.Добавить(Стр.Остаток);
КонецЦикла;

Для Каждого ЭлементМассиваО из МассивО Цикл
НОстатка = ЭлементМассиваО;
ИндексО = МассивО.Найти(НОстатка);
Для Каждого ЭлементМассиваШ из МассивШ Цикл
НШК = ЭлементМассиваШ;
ИндексШ = МассивШ.Найти(НШК);

Если НОстатка = НШК Тогда

Стр = ТЗ_Г.Добавить();
Стр.Номенклатура = НОстатка;
Стр.Штрихкод = МассивШК.Получить(ИндексШ);
Стр.Остаток = МассивОст.Получить(ИндексО);

КонецЕсли;

КонецЦикла;

КонецЦикла;

ЭтаФорма.ТЗ.Загрузить(ТЗ_Г);

КонецПроцедуры

&НаКлиенте
Процедура Заполнить(Команда)

ЗаполнитьНаСервере();

КонецПроцедуры



Последний раз редактировалось: Мухаммад; 13 Июл 2016, 19:32


Оффлайн mixqn

  • Администратор
  • *****
  • Сообщений: 1346
  • РЕПУТАЦИЯ: 166
  • КПД: 12%
  • Who is John Galt?
  • Регистрация: 2012-08-15
  • Сайт: 3gmaster.net
  • Профессия: Программист 1С
В одну строчку штрихкоды вывести будет сложно, так как количество штрихкодов на каждый товар может быть разным. Нормально такое не сделать. Во всяком случае, одним запросом - не сделать. Тут либо сначала отдельным запрос вычислить максимальное количество штрихкодов на 1 позицию, а потом программным кодом формировать результирующий запрос, либо просто заложить заранее какое-то фиксированное количество штрихкодов, например 3. Смысл в том, что для того, чтобы сложить штрихкоды в 1 колонку, они изначально должны оказаться в одной строке. Так как складывать значения из разных строк не получится. Соответственно, чтобы штрихкоды оказались в одной колонке, нужны левые соединения в таком количестве, сколько максимум может быть штрихкодов на одну позицию.
Есть конечно и третий вариант: получить все штрихкоды по товару в разных строках, а потом результат запроса обрабатывать программным кодом, схлопывая штрихкоды в одну строку.

Проще выводить столько строк по одной номенклатуре, сколько по ней штрихкодов, остаток при этом в каждой строке можно показывать общий, т.к. остатки в разрезе штрихкодов вряд ли хранятся. Ну или ваш вариант - показывать один любой ШК.


Добавлено: 13 Июл 2016, 20:17

ваш программный код сложно комментировать... я вообще не уловил логику, зачем столько массивов, для чего сделано 2 запроса и почему вообще все так запутано. Если вариант с одним штрихкодом устраивает, то задача решается в 1 запрос без кода вообще

Оффлайн Мухаммад

  • *
  • Сообщений: 3
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2016-07-13
  • Сайт: 
  • Профессия: Ученик 1С
Я смог получить данные (номенклатура + штрихкод) с "ШтрихкодыНоменклатуры", и (номенклатура + остаток) с "РегистрНакопления".
Массивы нужны, чтобы можно было их "связать" (номенклатура + штрихкод + остаток).
Просто в "ШтрихкодыНоменклатуры" нет остатков, а в "РегистрНакопления" нет штрихкодов.
Если бы можно было, получить с запроса данные сразу в виде (номенклатура + штрихкод + остаток), мне бы не потребовались массивы. Наверно, я принцип запросов плохо понимаю, пришлось с массивами возиться, просто есть опыт в Java. Я сам по сути Android разработчик.

Думаю пока вариант с 1 штрихкодом подойдёт, а потом придумаю, как разные штрихкоды выводить.

Оффлайн Мухаммад

  • *
  • Сообщений: 3
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2016-07-13
  • Сайт: 
  • Профессия: Ученик 1С
Подскажите хотя бы, куда запрос посылать? В регистр сведений, справочник, регистр накопления, штрих-коды номенклатуры?


Теги:
 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

oleg-x
105 Сообщений
alex0402
93 Сообщений
Геннадий ОбьГЭС Геннадий ОбьГЭС
65 Сообщений
ilyay ilyay
49 Сообщений
Golickoff Golickoff
49 Сообщений
AIFrame
47 Сообщений
ab30ru
38 Сообщений
wise wise
34 Сообщений
Амал
30 Сообщений
lansy
22 Сообщений

* Кто онлайн

  • Точка Гостей: 229
  • Точка Скрытых: 0
  • Точка Пользователей: 9
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal