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

Из Excel в справочник

Автор Funt432286, 05 сен 2019, 19:51

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

Funt432286

В продолжении темы!
Данные из Екселя в регистр накопления я загрузил. Сделал запрос для проверки по всем позициям!
Каждая номенклатура имеет несколько параметров (фото прилагается). делаю запрос по выбору из регистра, но вернуть мне нужно только одно из 5 параметров, в зависимости от количества печатных листов.
Как можно реализовать такой выбор, подскажите пожалуйста!

KOI8-R

Цитата: Funt432286 от 09 сен 2019, 10:28
Данные из Екселя в регистр накопления я загрузил.
Вы храните цены в регистре НАКОПЛЕНИЯ?

Funt432286

Нет, ошибочка - регистр СВЕДЕНИЙ!
Запрос выглядит вот так:

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СтоимостьБумаги.НазваниеБумаги,
| СтоимостьБумаги.МассаБумаги,
| СтоимостьБумаги.До50,
| СтоимостьБумаги.До100,
| СтоимостьБумаги.От100,
| СтоимостьБумаги.От250,
| СтоимостьБумаги.От500,
| СтоимостьБумаги.От1000
|ИЗ
| РегистрСведений.СтоимостьБумаги КАК СтоимостьБумаги";

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

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

    Пока Записи.Следующий() Цикл
        Сообщить(
            "[" + Записи.НазваниеБумаги + "] " +
            Записи.До50 + " " +
            Записи.До100 + " " +
            Записи.От100 + " "
        );
    КонецЦикла;


Каждая номенклатура имеет несколько параметров,  делаю запрос по выбору из регистра, но вернуть мне нужно только одно из 5 параметров, в зависимости от количества печатных листов.
Как можно реализовать такой выбор, подскажите пожалуйста!

LexaK

у вас неправильно, регистр построен надо было отдельно интервалы задавать и значения к ним,
если добавите еще один уровень вам придется и регистр реструктурировать и код переписывать
вот для вашего регистра, добавьте такую функцию и при ее вызове получите значение по заданной бумаге по указанному количеству листов


Функция ПолучитьРезультат(СсылкаБумага, КоличествоЛистов)

Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Выбор
| Когда &КоличествоЛистов <= 50 Тогда Рег.До50
| Когда &КоличествоЛистов <= 100 Тогда Рег.До100
| Когда &КоличествоЛистов > 1000 Тогда Рег.От1000
| Когда &КоличествоЛистов > 500 Тогда Рег.От500
| Когда &КоличествоЛистов > 100 Тогда Рег.От100
| Конец как Значение
        |ИЗ
        |    РегистрСведений.СтоимостьБумаги КАК Рег
|Где
|    Рег.НазваниеБумаги = &Бумага  //почему реквизит НазваниеБумаги - ?
|
|";
       
Запрос.УстановитьПараметр("Бумага", СсылкаБумага);
Запрос.УстановитьПараметр("КоличествоЛистов", КоличествоЛистов);

лкВыборка = лкЗапрос.Выполнить().Выбрать();
Если лкВыборка.Следующий() Тогда
лкЗначение = лкВыборка.Значение;
Иначе
лкЗначение = лкВыборка.Значение;
КонецЕсли;

Возврат лкЗначение
КонецФункции
 
если помогло нажмите: Спасибо!

Funt432286

Цитата: LexaK от 09 сен 2019, 11:56
у вас неправильно, регистр построен надо было отдельно интервалы задавать и значения к ним,
если добавите еще один уровень вам придется и регистр реструктурировать и код переписывать
вот для вашего регистра, добавьте такую функцию и при ее вызове получите значение по заданной бумаге по указанному количеству листов


Функция ПолучитьРезультат(СсылкаБумага, КоличествоЛистов)

Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Выбор
| Когда &КоличествоЛистов <= 50 Тогда Рег.До50
| Когда &КоличествоЛистов <= 100 Тогда Рег.До100
| Когда &КоличествоЛистов > 1000 Тогда Рег.От1000
| Когда &КоличествоЛистов > 500 Тогда Рег.От500
| Когда &КоличествоЛистов > 100 Тогда Рег.От100
| Конец как Значение
        |ИЗ
        |    РегистрСведений.СтоимостьБумаги КАК Рег
|Где
|    Рег.НазваниеБумаги = &Бумага  //почему реквизит НазваниеБумаги - ?
|
|";
       
Запрос.УстановитьПараметр("Бумага", СсылкаБумага);
Запрос.УстановитьПараметр("КоличествоЛистов", КоличествоЛистов);

лкВыборка = лкЗапрос.Выполнить().Выбрать();
Если лкВыборка.Следующий() Тогда
лкЗначение = лкВыборка.Значение;
Иначе
лкЗначение = лкВыборка.Значение;
КонецЕсли;

Возврат лкЗначение
КонецФункции


Почему-то пишет ошибку
Цитировать
{Документ.РасчетЦифра.Форма.ФормаДокумента.Форма(472,17)}: Переменная не определена (лкЗапрос)
    лкВыборка = <<?>>лкЗапрос.Выполнить().Выбрать(); (Проверка: Сервер)

LexaK

просто опечатка
вместо
лкВыборка = лкЗапрос.Выполнить().Выбрать();
надо
лкВыборка = Запрос.Выполнить().Выбрать();
если помогло нажмите: Спасибо!

Funt432286

Цитата: LexaK от 09 сен 2019, 15:44
просто опечатка
вместо
лкВыборка = лкЗапрос.Выполнить().Выбрать();
надо
лкВыборка = Запрос.Выполнить().Выбрать();

Для проверки добавил Сообщить(лкЗначение), но почему-то он возвращает пустое значение!

    лкВыборка = Запрос.Выполнить().Выбрать();
    Если лкВыборка.Следующий() Тогда
        лкЗначение = лкВыборка.Значение;
      Сообщить(лкЗначение);
    Иначе   
        лкЗначение = лкВыборка.Значение;
      Сообщить(лкЗначение);      
    КонецЕсли;

LexaK

чета туплю по конец
попробуйте так
Если лкВыборка.Следующий() Тогда
        лкЗначение = лкВыборка.Значение;
    Иначе   
        лкЗначение = 0;
        Сообщить("Бумага: " + СсылкаБумага + ", Кол-во листов: " + КоличествоЛистов + " значение не найдено!");
    КонецЕсли;     
если помогло нажмите: Спасибо!

Funt432286

Цитата: LexaK от 09 сен 2019, 16:14
чета туплю по конец
попробуйте так
Если лкВыборка.Следующий() Тогда
        лкЗначение = лкВыборка.Значение;
    Иначе   
        лкЗначение = 0;
        Сообщить("Бумага: " + СсылкаБумага + ", Кол-во листов: " + КоличествоЛистов + " значение не найдено!");
    КонецЕсли;   

Почему-то пишет -> Бумага: Кристалл Борд С2S 300 гр., Кол-во листов: 25 значение не найдено!
Хотя данные в справочнике и регистре совпадает и количество печатных листов тоже есть! :dfbsdfbsdf:

KOI8-R

Цитата: Funt432286 от 09 сен 2019, 16:51
Цитата: LexaK от 09 сен 2019, 16:14
чета туплю по конец
попробуйте так
Если лкВыборка.Следующий() Тогда
        лкЗначение = лкВыборка.Значение;
    Иначе   
        лкЗначение = 0;
        Сообщить("Бумага: " + СсылкаБумага + ", Кол-во листов: " + КоличествоЛистов + " значение не найдено!");
    КонецЕсли;   

Почему-то пишет -> Бумага: Кристалл Борд С2S 300 гр., Кол-во листов: 25 значение не найдено!
Хотя данные в справочнике и регистре совпадает и количество печатных листов тоже есть! :dfbsdfbsdf:
А сделайте скрин структуры регистра, а то уже гадать неинтересно. Да и заодно - он у вас периодический?

Теги:

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

Рейтинг@Mail.ru

Поиск