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

Связать справочник и регистр накопления

Автор szhutov, 09 ноя 2012, 11:54

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

szhutov

Проблема такая:

Имееются: Справочник "Номенклатура" с реквизитами "Количество", "Цена"

                   Документ "Расходная накладная" с реквизитами "Получатель", "Склад". Табличные                 данные "Материалы" с реквизитами "Номенклатура", "ЕдИзмерения", "Количество", "Цена", "Сумма".

                  Регистр накопления "ОстаткиМатериалов" с измерениями "Материал", "Склад" и ресурсами "Сумма", "Количество"

При заполнении документа "Расходная накладная" при выборе "номенклатуры" нужно, чтобы здесь же (справочник "Номенклатура" форма выбора) были видны ее остатки.

Написал вот такую бодягу (программирую первый месяц :xfbnsdfb: )

Процедура СправочникСписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    // Вставить содержимое обработчика.
        Если Не ДанныеСтроки.ЭтоГруппа тогда
            ОтборНоменклатуры=Новый Структура;
            ОтборНоменклатуры.Вставить("Номенклатура",ДанныеСтроки.Ссылка);
            ОформлениеСтроки.Ячейки.Остаток.ОтображатьТекст=Истина;
            АктуальныеОстатки=РегистрыНакопления.ПолучитьПоследнее(,ОтборНоменклатуры).Количество;
            ОформлениеСтроки.Ячейки.Остаток.Текст=АктуальныеОстатки;
        КонецЕсли;


КонецПроцедуры

Выскакивает вот такое сообщение:

{Справочник.Номенклатура.Форма.ФормаВыбора(8)}: Метод объекта не обнаружен (ПолучитьПоследнее)
            АктуальныеОстатки=РегистрыНакопления.ПолучитьПоследнее(,ОтборНоменклатуры).Количество;


Второй день вожусь с этой проблемой!

Помогите, пожалуйста!!!

Заранее спасибо.





mixqn

остатки выводятся в отдельной колонке по каждой номенклатуре?
если да, лучше используйте событие ПриПолученииДанных, а не ПриВыводеСтроки. Разница в количестве раз срабатывания события.
Сами данные получайте запросом и выводите куда следует.

cska-fanat-kz

Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

szhutov

Цитата: mixqn от 09 ноя 2012, 12:06
остатки выводятся в отдельной колонке по каждой номенклатуре?
если да, лучше используйте событие ПриПолученииДанных, а не ПриВыводеСтроки. Разница в количестве раз срабатывания события.
Сами данные получайте запросом и выводите куда следует.

Да, я в ручную добавил в справочник колонку "Остатки".
Я в запросах пока еще плохо разбираюсь, даже с конструктором. По этому хотел попроще все это организовать. Конфигурация простенькая (для небольшого склада), самописная.

Добавлено: 09 ноя 2012, 13:12


Цитата: cska-fanat-kz от 09 ноя 2012, 12:15
Метод объекта не обнаружен
Пробовал со многими методами, в частности "Остатки". Или ни чего не получается или выводится не понятно что.

mixqn

Цитата: szhutov от 09 ноя 2012, 13:05Я в запросах пока еще плохо разбираюсь, даже с конструктором. По этому хотел попроще все это организовать.
лучше разберитесь с запросами.
Цитата: szhutov от 09 ноя 2012, 13:05Пробовал со многими методами, в частности "Остатки".
пробовать все подряд смысла нет. используйте синтаксис-помощник, там видно, какие есть методы у объекта, а каких нет.
Цитата: szhutov от 09 ноя 2012, 13:05Или ни чего не получается или выводится не понятно что.
опять же синтаксис-помощник в помощь.
Цитата: szhutov от 09 ноя 2012, 13:05Конфигурация простенькая (для небольшого склада), самописная.
выкладывайте конфигурацию сюда - посмотрим

szhutov

Вот конфигурация. В ней только расход производится не "Расходной накладной" (написал для простоты), а "ЛЗК".
Заранее Спасибо!
А с запросами я обязательно разберусь!:)

Добавлено: 09 ноя 2012, 13:37


Платформа 8.1.10.50

Dethmontt

Можно вот так, но наверное это не оптимально...

(Для большого справочника НОМЕНКЛАТУРЫ будет заметное замедление работы по получению остатков)
Добавлено: 09 ноя 2012, 20:45


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

mixqn

эх, Dethmontt, опередил меня )) пока я собирался посмотреть, уже сделал.
вопрос (с целью повышения образованности :)): а что такое ДополнительныеПараметры? Некий признак, который надо задавать перед вызовом формы? Типа когда он указан, получаем итоги, а когда нет - не получаем. Такая цель?
Добавлено: 09 ноя 2012, 23:34


с ДополнительныеПараметры разобрался) не досмотрел весь код сначала. в общем вопрос более не актуален )

mixqn

по поводу оптимальности... я думал сразу запрос делать с отбором по списку номенклатуры (тому, который выводится в форму) - в этом случае от размера справочника зависеть не должно, а значит и работать должно более-менее быстро. в этом случае код может выглядеть так:
Процедура СправочникСписокПриПолученииДанных(Элемент, ОформленияСтрок)

Если ДополнительныеПараметры = Неопределено Тогда
Возврат;
КонецЕсли;

МассивСсылок = Новый Массив;
Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл
МассивСсылок.Добавить(ОформлениеСтроки.ДанныеСтроки.Ссылка);
КонецЦикла;

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

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

Для Каждого СтрОф Из ОформленияСтрок Цикл
СтрокаТЗ = Результат.Найти(СтрОф.ДанныеСтроки.Ссылка,"Номенклатура");
Если СтрокаТЗ = Неопределено Тогда
Продолжить;
КонецЕсли;
СтрОф.Ячейки.СуммаОстаток.Значение = СтрокаТЗ.СуммаОстаток;
СтрОф.Ячейки.КоличествоОстаток.Значение = СтрокаТЗ.КоличествоОстаток;
КонецЦикла;

КонецПроцедуры

Dethmontt

Ну это если устанавливать отбор при открытии формы выбора.

P.S. Я по началу так и сделал, но почему-то удалил.....
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Теги:

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

Рейтинг@Mail.ru

Поиск