8.х Как решить задачу со связанными списками

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Nicom77, 18 авг 2010.

  1. TopicStarter Overlay
    Nicom77
    Offline

    Nicom77

    Регистрация:
    18 авг 2010
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    Добрый день. Прошу прощения если я задам вопрос не очень корректно. Надо что бы форма списка справочника (справочник номенклатура)работала как показано в прикреплённом файле, чтобы табличные части (3 фрейма) между собой были связаны. В книге Радченко я нашёл нечто похожее, но там применительно к форме списка документа. Этот пример в форме списка документа работает, а в форме списка справочника нет. Подскажите если кто сталкивался

    Вложения:

  2. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Решаемо. Посмотрите как сделано Рабочее место менеджера по продажам в УТ. Нужно отрабатывать событие "При активизации строки" табличных полей.
  3. TopicStarter Overlay
    Nicom77
    Offline

    Nicom77

    Регистрация:
    18 авг 2010
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    Если я правильно понял то это вот этот листинг в модуле формы?
    / Процедура - обработчик события "ПриАктивизацииСтроки" элемента формы Список.
    //
    Процедура СписокПриАктивизацииСтроки(Элемент)

    ПодключитьОбработчикОжидания("ОбработчикОжиданияСписокПриАктивизацииСтроки", 0.1, Истина);

    КонецПроцедуры // СписокПриАктивизацииСтроки

    // Процедура - обрабочик ожидания для события ПриАктивизацииСтроки
    // табличного поля Список
    //
    Процедура ОбработчикОжиданияСписокПриАктивизацииСтроки()

    ПоказатьОсновноеИзображение();
    ПоказатьОстаткиТоваров();

    КонецПроцедуры // ОбработчикОжиданияСписокПриАктивизацииСтроки

    Только я ничего не понял что и токуда берётся. :(
  4. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Ну вам может и не нужен обработчик ожидания. это сделано для того, чтобы информация обновлялась периодически.
    Просто при активизации строки первого табличного поля (ТП) прописать получение данных во второе ТП, при активизации строки во втором - получение данных в третье ТП.
  5. TopicStarter Overlay
    Nicom77
    Offline

    Nicom77

    Регистрация:
    18 авг 2010
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    Очень благодарен за быстрые ответы.
    Я не очень давно занимаюсь с конфигуратором 1с (изучаю самостоятельно и в основном только для себя), поэтому не совсем знаю как прописать получение данных при активизации строки в ТП. Это нужно организовывать запрос?
  6. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Верно!
  7. TopicStarter Overlay
    Nicom77
    Offline

    Nicom77

    Регистрация:
    18 авг 2010
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    Спасибо! Буду пытаться.

    Небольшая просьба, если не затруднит , объясните как должны действовать запросы для решения данной задачи (может что-то похожее у Вас есть, может ссылку дадите, т.к. в УТ листинг такой скудны что из него ничег не понятно). Мне просто их принцеп построения пока не понятен вовсе (даже с конструктором).
    Зараенее очень благодарен.
  8. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    В первом случае вам нужно получить остатки товаров на конкретном складе. В простейшем случае:
    Код:
    "ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Номенклатура,
    ТоварыНаСкладахОстатки.КоличествоОстаток
    ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКон, Склад = &Склад) КАК ТоварыНаСкладахОстатки"
    
    Во втором случае - остатки на складах по определенной номенклатуре
    Код:
    "ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Склад,
    ТоварыНаСкладахОстатки.КоличествоОстаток
    ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКон, Номенклатура = &Номенклатура) КАК ТоварыНаСкладахОстатки"
    
  9. TopicStarter Overlay
    Nicom77
    Offline

    Nicom77

    Регистрация:
    18 авг 2010
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    Что-то совсем не получается.
    Я так думаю, что там ещё нужно циклы (перебор) организовать?
    Недавно натолкнулся на очень подходящий пример для организации вывода остатков в в форме списка номенклатуры (событие "При получении данных"). Немножко переделал под себя и модуль заработал. Возможно это нечто похожее. Есть возможность мою конфигурацию глянуть? Что у меня там не так? v8.1.13.41 Конфигурация очень сырая (хотя проводки документов работают) Сейчас бьюсь над обозначеной мной задачей (связанные списки)
    PS надо сменить расширение на dt

    Вложения:

  10. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Ну раз вы используете СправочникСписок, то тогда вам нужно устанавливать отборы.
    В третьем табличном поле тип данных РегистрНакопленияНаборЗаписей.ОстаткиМатериалов на мой взгляд не нужен. Поставьте там тип данных - ТЗ и подгружайте туда данные при активизации строки номенклатуры.
    Оно то у вас отрабатывает, но не набрасывает отбор на номенклатуру, а просто выводит остаток в поле - т.е. даже если товара нет на складе - строка все равно будет выведена.
  11. TopicStarter Overlay
    Nicom77
    Offline

    Nicom77

    Регистрация:
    18 авг 2010
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    Понял. Спасибо. Сейчас буду пробывать. Хотя про отборы тоже ничего не знаю. Методом проб и ошибок (научного тыка) может что-нибудь получится.

    [/quote] В третьем табличном поле тип данных РегистрНакопленияНаборЗаписей.ОстаткиМатериалов на мой взгляд не нужен
    Поставьте там тип данных - ТЗ
    и подгружайте туда данные при активизации строки номенклатуры.
  12. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    1. Да, таблица значений.
    2. Тут смысл в чем, если у вас тип данных табличного поля - СправочникСписок, то нужно работать с отборами (Данные для отбора можно также получить запросом), если ТЗ - то просто в ТЗ загружать полученные запросом данные.
  13. TopicStarter Overlay
    Nicom77
    Offline

    Nicom77

    Регистрация:
    18 авг 2010
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    Запросы нужно создавать наподобии указанных вами? И к чему обращаться в регистре накопления если я хочу вывести остатки по складам (в 3-м табличном поле) - Наименование, остаток или склад (ВидУчётаЭТЦ), остаток? А к чему обращаться при выводе данных во 2-м табличном поле?
    Так же интересует как их (данные) выгружать (заполнять) в строки табличных полей, каким методом?

    Заранее благодарю и прошу прощения за мою назойливость.
  14. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Так а где по вашему хранятся остатки?

    В справочник список - устанавливаем необходимый отбор, в третье поле загружаем ТЗ, полученную из запроса (Запрос.Выполнить().Выгрузить())
  15. TopicStarter Overlay
    Nicom77
    Offline

    Nicom77

    Регистрация:
    18 авг 2010
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    Вы наверное не так меня поняли. Я знаю что остатки хранятся в регистре накопления, но как правильно ( к чему конкретно обращаться в запрсе) сделать запрс я этого пока не пойму. Я в этом практически я полный ноль :smile:

    Сейчас бдуду пробовать, но если бует помощь - не откажусь :unsure: . Заранее благодарен
  16. TopicStarter Overlay
    Nicom77
    Offline

    Nicom77

    Регистрация:
    18 авг 2010
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    Господа! Неужели нет никого кто мог бы подсказать решения данной задачи?
  17. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Так я же вам решение подсказал - пишите, заглядывая в синтаксис-помощник и все получится :)
  18. TopicStarter Overlay
    Nicom77
    Offline

    Nicom77

    Регистрация:
    18 авг 2010
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    Согласен... Только сегодня до 4-х утра пытался что-то сделать, но не продвинулся ни на строчку.
    Но я всё равно буду пробывать.
    Попытался для себя понять как будет выглядеть эта процедура сначала человеческими словами. Подскажите пожалуйста я прав или нет:

    Процедура: При активизации строки в табличном поле №1 делаем запрос в регистр накопления остатков для получения (выбора) значений: Наименование, Склад, Остаток (я так понимаю без цикла это будет происходить только для одного первого элемента, поэтому всё это в цикле). Далее (опять же в этом цикле) сравниваем (если, тогда, иначе) полученное из регистра накопления значение Склад со значением активной строки в табличном поле №1 + проверяем значение запроса Остаток больше 0, то тогда выводим строку списка справочника данного наименования в табличное поле №2 иначе переходим к следующему элементу регистра накопления.
  19. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Вот внешняя обработка под вашу базу.

    Вложения:

  20. TopicStarter Overlay
    Nicom77
    Offline

    Nicom77

    Регистрация:
    18 авг 2010
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    Огроменное спаааааасибо!!!!!!!!!! Всё работает!!!!
    Теперь буду анализировать как, что и откуда берётся. Может разберусь.
    Ещё раз огромнейшее спасибо!

    Ну а вопросы-то у меня всё равно остались
    Можно ли всё что находится в этой обработке перенести на основные Формы СписокСправочник и Выбора Справочника. Как это сделать я уж знаю, а будет ли корректно это работать?

Поделиться этой страницей