Имя: Пароль:
1C
1С v8
Не идет обращение к Процедуре в Справочнике Номенклатура (доработка) УТ10.3
0 Shecurok
 
16.05.19
14:18
Здравствуйте.
Начну с начала. Была платформа УТ10.3 (10.3.12.3) на конф. 8.1 со множеством доработок. Стали обновлять на 8.3 и УТ(10.3.52.2). Обновили всё нормально, без ошибок и пр.
Стали возвращать доработки которые нужны. Одна из них заключается в следующем:
В документе Реализация товаров и услуг, после создания документа при выборе Номенклатуры в раскрывающемся списке показан остаток товара на складе.
Выяснил, что доработка написана в Справочнике Номенклатура в ФормеВыбора. Код для неё следующий:

Перем ЗапросОстатки;

Процедура ПриОткрытии()

    ЗапросОстатки = Новый Запрос;
    //ЗапросОстатки.Текст =
    //"ВЫБРАТЬ
    //|    Рег.Номенклатура,
    //|    Рег.КоличествоОстаток
    //|ИЗ
    //|    РегистрНакопления.ТоварыНаСкладах.Остатки(
    //|        ,
    //|        Номенклатура В (&Номенклатура)) КАК Рег";
    ЗапросОстатки.Текст =
    "ВЫБРАТЬ
    |    ТоварыНаСкладахОстатки.Номенклатура,
    |    ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) КАК ОстатокВРезервеНаСкладе,
    |    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК ОстатокНаСкладе,
    |    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) - ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) КАК СвободныйОстаток
    |ПОМЕСТИТЬ ВТ_СвободныеОстатки
    |ИЗ
    |    РегистрНакопления.ТоварыНаСкладах.Остатки(
    |            ,
    |            Номенклатура В  (&Номенклатура)
    |                И Склад = &Склад) КАК ТоварыНаСкладахОстатки
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(
    |                ,
    |                Номенклатура В  (&Номенклатура)
    |                    И Склад = &Склад) КАК ТоварыВРезервеНаСкладахОстатки
    |        ПО ТоварыНаСкладахОстатки.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
    |            И ТоварыНаСкладахОстатки.Склад = ТоварыВРезервеНаСкладахОстатки.Склад
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    Рег.Номенклатура,
    |    Рег.КоличествоОстаток КАК КоличествоОстаток,
    |    ЕСТЬNULL(ВТ_СвободныеОстатки.ОстатокВРезервеНаСкладе, 0) КАК РезервОстаток,
    |    ЕСТЬNULL(ВТ_СвободныеОстатки.ОстатокНаСкладе, 0) КАК ОстатокНаСкладе,
    |    ЕСТЬNULL(ВТ_СвободныеОстатки.СвободныйОстаток, 0) КАК СвободныйОстаток
    |ИЗ
    |    РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура В  (&Номенклатура)) КАК Рег
    |        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СвободныеОстатки КАК ВТ_СвободныеОстатки
    |        ПО Рег.Номенклатура = ВТ_СвободныеОстатки.Номенклатура";
(...)


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

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

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

Теперь смотрю отладчиком в старой версии. Ставлю ТочкуОстанова на процедуре Справочник... Она срабатывает, всё хорошо.
В новой версии ТочкаОстанова не срабатывает, значит при открытии списка номенклатуры сюда он и не заходит. Есть идеи почему такое может быть?
1 hhhh
 
16.05.19
14:22
(0) ну наверно забыли в событие добавить эту процедуру. Процедура по имени процедуры не вызывается в восьмерке, нужно событие.
2 Shecurok
 
16.05.19
14:27
(1) не могли бы подробнее описать как это сделать? ППросто в 1С работаю только 2 месяца, с программированием крайне плохо пока.
3 Kondarat
 
16.05.19
14:35
(2) Открыть свойства списка, найти событие ПриПолученииДанных, выбрать в это поле процедуру  СправочникСписокПриПолученииДанных
4 Гипервизор
 
16.05.19
14:38
https://pastenow.ru/5K5RT
Сделайте по аналогии.
5 Shecurok
 
16.05.19
14:39
Всё получилось. Надо было добавить строчку кода

ЭлементыФормы.СправочникСписок.УстановитьДействие("ПриПолученииДанных",Новый Действие("СправочникСписокПриПолученииДанных"));