Имя: Пароль:
1C
1С v8
СправочникСписок.Номенклатура отбор по РегиструНакопления.
0 tabarigen
 
27.07.16
16:02
Здравствуйте.
На форме есть тип объекта СправочникСписок. С установкой отборов по реквизитам проблем нет.

1) А вот могу ли я вывести только ту номенклатуру которая есть на остатке по кастомному регистру накопления.
То бишь переопределить выводимый список.
2) Если нельзя то правильно ли я понимаю, что нужно будет сменить тип реквизита с СправочникСписок на ТаблицаЗначений и заполнить его программно.
1 Ёпрст
 
гуру
27.07.16
16:04
1.да
2.нет
2 Зая Бусечка
 
27.07.16
16:06
Получаем список при открытии и ставим его в отбор
3 Зая Бусечка
 
27.07.16
16:06
ну... Или переделываем форму в УФ и настраиваем ДС.
4 tabarigen
 
27.07.16
16:09
(3) Форму нельзя переделать на УФ.
(2) Еще раз повторюсь отбирать нужно не по реквизитам номенклатуры.
5 hhhh
 
27.07.16
16:10
(4) ну в ут возьмите подбор, скопируйте к себе. Зачем велосипеды изобретать?
6 Ёпрст
 
гуру
27.07.16
16:11
(4) тебе еще раз повторяют: сделай запрос на остатки, получи список элементов, воткни его в отбор. Наслаждайся.
7 tabarigen
 
27.07.16
16:25
(6) у меня нет ут, я собственно так и сделал скопировал, подбор и взял к себе. Суть в том что я внес дополнительный регистр и хочу показывать только ту номенклатуру которая есть на остатке в этом регистре.
8 tabarigen
 
27.07.16
16:27
(6) Идею понял, попробую сейчас.
9 tabarigen
 
27.07.16
16:45
Запрос такой

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

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

    ТоварыСоСроками  = Результат.Выгрузить();


Отбор такой.

    СправочникСписок.Отбор.Код.ВидСравнения = ВидСравнения.ВСписке;
    СправочникСписок.Отбор.Код.Значение = ТоварыСоСроками;
    СправочникСписок.Отбор.Код.Использование = Истина;


Сейчас выдается ошибка, несоответствие типов
СправочникСписок.Отбор.Код.Значение = ТоварыСоСроками;
по причине:
Неверный тип значения



Вопрос, какой тип нужно передать в Значение отбора
10 vicof
 
27.07.16
16:48
добавить в запрос ссылку, код убрать нафиг. Результат.Выгрузить().ВыгрузитьКолонку("Ссылка");
11 vicof
 
27.07.16
16:48
И отбор не на код, а на ссылку накладывать
12 tabarigen
 
27.07.16
16:56
(10) да какая разница, ссылка или код. Сделал ссылку ошибка та же, где то упустил какую то мелочь
13 tabarigen
 
27.07.16
16:56
Процедура ПриОткрытии()
    // Установим режим поля списка в зависимости от режима открытия формы
    ЭлементыФормы.Список.РежимВыбора = ЭтаФорма.РежимВыбора;
    ЭлементыФормы.ТаблицаХарактеристик.РежимВыбора = ЭтаФорма.РежимВыбора;
    //ПараметрВыборГруппИЭлементов=ИспользованиеГруппИЭлементов.Элементы;
    

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

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

    ТоварыСоСроками  = Результат.Выгрузить().ВыгрузитьКолонку("Код");

    
    КолонкаКода = ПолучитьПараметрыРежимаВыводаКода();
    ЭтаФорма.ЭлементыФормы.Список.Колонки.Код.ТекстШапки = КолонкаКода.Синоним;
    ЭтаФорма.ЭлементыФормы.Список.Колонки.Код.ПодсказкаВШапке = КолонкаКода.Синоним;
    ИмяРеквизитаКода = КолонкаКода.Имя;
    ЭтаФорма.ЭлементыФормы.ПанельСписки.ТекущаяСтраница = ЭтаФорма.ЭлементыФормы.ПанельСписки.Страницы.СтраницаНоменклатура;
    ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.Список;
    СправочникСписок.Отбор.ПометкаУдаления.ВидСравнения = ВидСравнения.Равно;
    СправочникСписок.Отбор.ПометкаУдаления.Значение = Ложь;
    СправочникСписок.Отбор.ПометкаУдаления.Использование = Истина;
    СправочникСписок.Отбор.Код.ВидСравнения = ВидСравнения.ВСписке;
    СправочникСписок.Отбор.Код.Значение = ТоварыСоСроками;
    СправочникСписок.Отбор.Код.Использование = Истина;
    УстановитьВидимостьКнопок();
    орЗаполнитьТаблицуИндикации(ТаблицаИндикации);
    
    ПроверитьДоступностьСопутствующихТоваров();
        
КонецПроцедуры
14 vicof
 
27.07.16
16:58
(12) большая.
Напоминает анекдот:

Время всемирного потопа. Начал идти дождь, и Ной уже закрылся в своем ковчеге. Остальные евреи тоже хотят спастись и начинают строить лодки. Все строят, а Хаим не строит. Хаим молится. А вода все прибывает. Вот вода уже по колено.
Подплывает к Хаиму лодка, и ему говорят: "Хаим, садись к нам в лодку, а то утонешь".
А он отвечает: "Не надо, мой Бог меня спасет".
Вода - по пояс. Подплывает вторая лодка. "Хаим, садись в лодку, а то утонешь".
А он опять: "Не надо, мой Бог меня спасет".
Вода - по шею. Третья лодка подплывает, и все повторяется снова.
В общем, утонул Хаим. Приходит он к Богу и говорит: "Я так молился, так молился! Почему же Ты меня не спас???"
А Бог отвечает: "Глупец! Я же посылал за тобой три лодки!!!"
15 youalex
 
27.07.16
17:05
Если в списке отбора будет много элементов, СправочникСписок будет тупить скорее всего.
Из-за того, что не получится запихнуть все ссылки напрямую в текст запроса, в условие IN().
И тогда отбор будет производится через создание времянки (один элемент - один Insert) и соединение с ней
16 tabarigen
 
27.07.16
17:08
(14) Сделал со ссылкой ошибка та, же неверный тип.
17 Ёпрст
 
гуру
27.07.16
17:11
(16) посмотри, что возвращает метод выгрузитьКолонку. подумай, чем ЭТО отличается от списка значения.
18 Ёпрст
 
гуру
27.07.16
17:11
потом придёт оно, просветление :)
19 tabarigen
 
27.07.16
17:17
(17) посмотрел  на выходе массив..
20 tabarigen
 
27.07.16
17:20
(18) спасибо за наводку.
   Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |   _Номенклатура.Ссылка
        |ИЗ
        |   РегистрНакопления.ТоварыСоСроками.Остатки КАК ТоварыСоСрокамиОстатки
        |       ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК _Номенклатура
        |       ПО ТоварыСоСрокамиОстатки.Номенклатура = _Номенклатура.Ссылка";

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

    ТоварыСоСроками  = Результат.Выгрузить().ВыгрузитьКолонку("Ссылка");
    Список = Новый СписокЗначений();

    Для Каждого Товар из ТоварыСоСроками Цикл
        Список.Добавить(Товар);
    КонецЦикла;


    СправочникСписок.Отбор.Ссылка.ВидСравнения = ВидСравнения.ВСписке;
    СправочникСписок.Отбор.Ссылка.Значение = Список;
    СправочникСписок.Отбор.Ссылка.Использование = Истина;
21 Ёпрст
 
гуру
27.07.16
17:23
(20) нафига цикл то ? Там же есть ЗагрузитьЗначения у списка, туда пихай свой массив.
22 tabarigen
 
27.07.16
17:23
(21) ого. вот это поворот.
23 Ёпрст
 
гуру
27.07.16
17:24
(20) выкинь из запроса левое соединение к едрени фени. Получай просто измерение Номенклатура в запросе.
24 tabarigen
 
27.07.16
17:25
(23) куя себе рефакторинг.
Но все же спасибо большое вам. После Питона на 1С снова болезненно переходить.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший