Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
21 ноя 2024, 18:12

Как создать запрос из созданной обработки к справочнику Номенклатура

Автор modoll, 10 июн 2016, 10:14

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

modoll

Здравствуйте, всем. Ищу помощи у знающих людей. Создала обработку, которая из документа Excel загружает в "себя" данные (реквизиты). Застопорилась на следующем этапе: надо сравнить данные из обработки и справочника. Номенклатура по полю штрихкод или PLU и записать в обработку найденные совпадения (т.е. в обработке из Excel загрузились данные о штрихкодах и PLU и надо чтобы по нажатию кнопки Проверить и неё добавились данные о названии товара из справочника.Номеклатура). Помогите!!!!

https://drive.google.com/open?id=0BzHzLYChPnXQWW9hYmtYZDhuSlk

mixqn

данные из файла вы получаете в таблицу значений. далее пишете запрос, куда в качестве параметра передадите полученную таблицу значений и соедините ее со справочником номенклатура по указанным вами правилам - либо по ШК либо по PLU

modoll

Цитата: mixqn от 10 июн 2016, 10:19
данные из файла вы получаете в таблицу значений. далее пишете запрос, куда в качестве параметра передадите полученную таблицу значений и соедините ее со справочником номенклатура по указанным вами правилам - либо по ШК либо по PLU


а можно более подробно: куда залазить и что делать?????

mixqn

подробнее лучше почитать в книге...
я могу просто дать пример кода
Добавлено: 10 июн 2016, 10:57


вот вам реальный пример из рабочей базы (автор кода - я :))

// таблицы надо сравнить
// сравнивать я предпочитаю запросом
// Логика запроса: в корректировке количество с обратным знаком, соответственно,
// достаточно просуммировать количество в сообщении и количество в документе, все строки с нулями проигнорировать (если ноль, значит изменений нет),
// а на оставшиеся строки с обратным знаком скорректировать потом реализацию
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ТабличнаяЧасть.Номенклатура,
| ТабличнаяЧасть.Количество
|ПОМЕСТИТЬ ВрТабСообщение
|ИЗ
| &ТабличнаяЧасть КАК ТабличнаяЧасть
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| КорректировкаЗаказаПокупателяТовары.Номенклатура,
| КорректировкаЗаказаПокупателяТовары.Количество * ВЫБОР
| КОГДА ЕдиницыИзмерения.Коэффициент = 0
| ТОГДА 1
| ИНАЧЕ ЕдОстатков.Коэффициент / ЕдиницыИзмерения.Коэффициент
| КОНЕЦ КАК Количество
|ПОМЕСТИТЬ ВрТабДокумент
|ИЗ
| Документ.КорректировкаЗаказаПокупателя.Товары КАК КорректировкаЗаказаПокупателяТовары
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ЕдиницыИзмерения КАК ЕдОстатков
| ПО СпрНоменклатура.ЕдиницаХраненияОстатков = ЕдОстатков.Ссылка
| ПО КорректировкаЗаказаПокупателяТовары.Номенклатура = СпрНоменклатура.Ссылка
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
| ПО КорректировкаЗаказаПокупателяТовары.ЕдиницаИзмерения = ЕдиницыИзмерения.Ссылка
|ГДЕ
| КорректировкаЗаказаПокупателяТовары.Ссылка = &Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТаблицаТовары.Номенклатура,
| СУММА(ТаблицаТовары.Количество) КАК Количество
|ИЗ
| (ВЫБРАТЬ
| ВрТабСообщение.Номенклатура КАК Номенклатура,
| ВрТабСообщение.Количество КАК Количество
| ИЗ
| ВрТабСообщение КАК ВрТабСообщение
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ВрТабДокумент.Номенклатура,
| ВрТабДокумент.Количество
| ИЗ
| ВрТабДокумент КАК ВрТабДокумент) КАК ТаблицаТовары
|
|СГРУППИРОВАТЬ ПО
| ТаблицаТовары.Номенклатура
|
|ИМЕЮЩИЕ
| СУММА(ТаблицаТовары.Количество) <> 0";

Запрос.УстановитьПараметр("ТабличнаяЧасть", ТабличнаяЧасть);
Запрос.УстановитьПараметр("Ссылка", ДокументКорректировки.Ссылка);

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

Добавлено: 10 июн 2016, 10:59


ну и буквально в 2-ух словах комментарий к запросу: запрос составной, в первой части создается виртуальная таблица - в ней переданная параметром таблица значений.
дальше в вашем случае будет второй запрос, где к ранее созданной виртуальной таблице слева присоединяется реальная таблица справочника номенклатура

modoll

процедура добавляет данные в графу Номенклатура, но удаляет все остальные данные из других граф, как это исправить?????


Процедура КоманднаяПанель2Проверить(Кнопка)
   
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    Запрос.УстановитьПараметр("Тов",Товары.Выгрузить());
    Запрос.Текст = "ВЫБРАТЬ
                   |    Тов.Plu
                   |ПОМЕСТИТЬ ВрТабл
                   |ИЗ
                   |    &Тов КАК Тов
                   |;
                   |
                   ////////////////////////////////////////////////////////////////////////////////

                   |ВЫБРАТЬ
                   |    ВложенныйЗапрос.Номенклатура,
                   |    ВложенныйЗапрос.Код
                   |ИЗ
                   |    ВрТабл КАК ВрТабл
                   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                   |            КодыТоваровPLU.Номенклатура КАК Номенклатура,
                   |            КодыТоваровPLU.Код КАК Код
                   |        ИЗ
                   |            РегистрСведений.КодыТоваровPLU КАК КодыТоваровPLU) КАК ВложенныйЗапрос
                   |        ПО ВрТабл.Plu = ВложенныйЗапрос.Код";
       
   
      Товары.Загрузить(Запрос.Выполнить().Выгрузить());
КонецПроцедуры

LexaK

самый тупой, жутко не оптимальный метод, но должен сработать B)


    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Тов",Товары.Выгрузить());
    Запрос.Текст = "ВЫБРАТЬ
                   |    Тов.* //все поля таблицы
                   |ПОМЕСТИТЬ ВрТабл
                   |ИЗ
                   |    &Тов КАК Тов
                   |;
                   |
                   |ВЫБРАТЬ
                   |    Рег.Номенклатура,
                   |    ВрТабл.*
                   |ИЗ
                   |    ВрТабл КАК ВрТабл
                   |левое СОЕДИНЕНИЕ РегистрСведений.КодыТоваровPLU КАК Рег
                   |    ПО ВрТабл.Plu = Рег.Код
                   |";
       
   
      Товары.Загрузить(Запрос.Выполнить().Выгрузить());
КонецПроцедуры




попробуйте, напишите потом получилось? :)
если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск