Имя: Пароль:
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С снова болезненно переходить.
Основная теорема систематики: Новые системы плодят новые проблемы.