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

Форма Номенклатуры + РегистрСведенийСписок (обычная форма)

Автор Алина Осипова, 21 мая 2020, 16:23

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

Алина Осипова

Доброго времени суток! Есть обычная форма списка номенклатуры с двумя реквизитами и следующая задача:

1.При активации строки списка номенклатуры необходимо ограничить отображение списка аналогов только по выбранной номенклатуре.
2.В табличное поле Аналоги добавить для измерения Аналог колонки Артикул (реквизит Артикул справочника Номенклатура), Остаток (данные брать из регистра Остатки номенклатуры).
3.В табличное поле Аналоги выводить только аналоги с остатками.

Решено для ТабличноПолеАналоги с типом ТаблицаЗначений, подскажите как реализовать для  ТабличноПолеАналоги с типом РегистрСведенийСписок???


Процедура СправочникСписокПриАктивизацииСтроки(Элемент)
      Запрос = Новый Запрос;
      Запрос.Текст = "ВЫБРАТЬ
                    |   спрНоменклатура.Ссылка,
                    |   Аналоги.Аналог,
                    |   Аналоги.Аналог.Артикул КАК Артикул,
                    |   Остатки.КоличествоОстаток
                    |ИЗ
                    |   РегистрСведений.Аналоги КАК Аналоги
                    |   ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК спрНоменклатура
                    |   ПО Аналоги.Номенклатура = спрНоменклатура.Ссылка
                    |      ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК Остатки
                    |      ПО Аналоги.Аналог = Остатки.Номенклатура
                    |ГДЕ
                    |   спрНоменклатура.Ссылка = &Ссылка" ;
      
      Запрос.УстановитьПараметр("Ссылка", ЭлементыФормы.СправочникСписок.ТекущаяСтрока.Ссылка);
      РезультатЗапроса = Запрос.Выполнить();
      ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
      
      ТаблицаАналогов = Новый ТаблицаЗначений;
      ТабличноеПолеАналоги.Очистить();
      
      Пока ВыборкаДетальныеЗаписи.Следующий() Цикл         
      Строка = ЭлементыФормы.ТабличноеПолеАналоги.Значение.Добавить();
      Строка.Аналог = ВыборкаДетальныеЗаписи.Аналог;
      Строка.Артикул = ВыборкаДетальныеЗаписи.Артикул;
      Строка.Остатки = ВыборкаДетальныеЗаписи.КоличествоОстаток ;
        КонецЦикла;
КонецПроцедуры


         

LexaK

Алина Осипова,
Цитироватьподскажите как реализовать для ТабличноПолеАналоги с типом РегистрСведенийСписок???
можно реализовать с помощью Отборов.

только зачем? У вас же уже есть (абы как) работающий вариант!
а со стороны пользователя какая разница ТЗ это или РегистрСписок?
если помогло нажмите: Спасибо!

Алина Осипова

Цитата: LexaK от 21 мая 2020, 19:28
только зачем? У вас же уже есть (абы как) работающий вариант!
а со стороны пользователя какая разница ТЗ это или РегистрСписок?

Задача такая, именно через РегистрСписок
Уже переделала, но выдает ошибку "Значение не является значением объектного типа(Ячейки)"


Процедура СправочникСписокПриАктивизацииСтроки(Элемент)
   ТаблицаАналогов = ЭлементыФормы.ТабличноеПолеАналоги.Значение;
   Выбор = ЭлементыФормы.СправочникСписок.ТекущаяСтрока;   
   ТаблицаАналогов.Отбор.Номенклатура.Установить(Выбор.Ссылка);
КонецПроцедуры


Процедура ТабличноеПолеАналогиПриПолученииДанных(Элемент, ОформленияСтрок)
       Соответствие = Новый Соответствие;
      АналогМассив = Новый Массив;
      Для каждого Стр Из ОформленияСтрок Цикл
         АналогМассив.Добавить(Стр.ДанныеСтроки.Аналог);
         Соответствие.Вставить(Стр.ДанныеСтроки.Аналог, Стр);      
      КонецЦикла;
      
      Запрос = Новый Запрос;
      Запрос.Текст = "ВЫБРАТЬ
                    |   спрНоменклатура.Ссылка,
                    |   Аналоги.Аналог,
                    |   Аналоги.Аналог.Артикул КАК Артикул,
                    |   Остатки.КоличествоОстаток
                    |ИЗ
                    |   РегистрСведений.Аналоги КАК Аналоги
                    |   ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК спрНоменклатура
                    |   ПО Аналоги.Номенклатура = спрНоменклатура.Ссылка
                    |      ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК Остатки
                    |      ПО Аналоги.Аналог = Остатки.Номенклатура
                    |ГДЕ
                    |   спрНоменклатура.Ссылка = &Ссылка" ;
      
      Запрос.УстановитьПараметр("Ссылка", ЭлементыФормы.СправочникСписок.ТекущаяСтрока.Ссылка);
      РезультатЗапроса = Запрос.Выполнить().Выбрать();
      Пока РезультатЗапроса.Следующий() Цикл
          Соответствие.Получить(РезультатЗапроса.Аналог).Ячейки.Артикул.Значение = РезультатЗапроса.Артикул;
         Соответствие.Получить(РезультатЗапроса.Аналог).Ячейки.Остаток.Значение = РезультатЗапроса.КоличествоОстаток;
      КонецЦикла;
КонецПроцедуры

LexaK

Цитировать
    Соответствие.Получить(РезультатЗапроса.Аналог).Ячейки.Артикул.Значение = РезультатЗапроса.Артикул;
Соответствие.Получить(...) - может иногда Неопределено возвращать!!! Какие в этом случае Ячейки? :dfbbdrfb:
если помогло нажмите: Спасибо!

Алина Осипова

 
Цитировать
Какие в этом случае Ячейки? :dfbbdrfb:

Не знаю, по этому и спрашиваю как это исправить
Работаю с этим впервые

LexaK

Алина Осипова, странная у вас программа,
но ошибку(только ее) можно исправить так!
(правда в следующем письме вы напишите что: ошибка исчезла, но и ничего не работает)

      Пока РезультатЗапроса.Следующий() Цикл
          лкДанные = Соответствие.Получить(РезультатЗапроса.Аналог);
          Если лкДанные <> Неопределено Тогда //добавлена проверка
              лкДанные.Ячейки.Артикул.Значение = РезультатЗапроса.Артикул;//тут скорее всего Текст надо вставлять, не помню
              лкДанные.Ячейки.Остаток.Значение = РезультатЗапроса.КоличествоОстаток;
          КонецЕсли;
      КонецЦикла;
если помогло нажмите: Спасибо!

Алина Осипова

Цитата: LexaK от 21 мая 2020, 22:27
странная у вас программа
Возможно, но учиться на чем-то надо)

Цитировать
(правда в следующем письме вы напишите что: ошибка исчезла, но и ничего не работает)
Да нет, оно работает) Спасибо за помощь!

Теги:

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

Рейтинг@Mail.ru

Поиск