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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

КонецЕсли;

КонецЦикла;

КонецЦикла;

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

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

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

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

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



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

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>


Оффлайн mixqn

  • Администратор
  • *****
  • Сообщений: 1345
  • РЕПУТАЦИЯ: 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 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
152 Сообщений
alex0402
73 Сообщений
alexandr_ll
37 Сообщений
LexaK
29 Сообщений
MuI_I_Ika MuI_I_Ika
27 Сообщений
crow1983
27 Сообщений
sertak sertak
23 Сообщений
дфтын дфтын
17 Сообщений
Vzonder
15 Сообщений
BuhRust
15 Сообщений

* Кто онлайн

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

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

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

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

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

Поиск

 

Dellos Catering - выездной ресторан кейтеринг по всему Миру
SimplePortal 2.3.5 © 2008-2012, SimplePortal