Опять вывод дополнительной колонки в табличную часть документа. УТ11

Меня попросили вывести в документ «Заказ поставщику» колонку со свойством номенклатуры — количество упаковок.

Конечно, такую колонку можно вывести и без программирования через настройки формы. Но делать ее каждому пользователю сложно, проще запрограммировать.

И тут я допустил одну ошибку, над которой сразу же и посмеялся.

Я уже было готов был менять динамический список табличной части, но зашел в документ и обнаружил, что там уже в расширении имеется мой код по добавлению колонки «Остаток». Я об этом рассказывал в статье про добавление колонки Остаток.

Увидев свой же код, я понял, что всё забыл и конечно же, никакой динамический список тут не нужен, все сделал по аналогии.

В итоге получился такой код:

&НаСервере
Процедура дор_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    НовыеКолонки = Новый Массив;
    НовыеКолонки.Добавить(Новый РеквизитФормы("дор_КоличествоВУпаковке", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 2)), "Объект.Товары", "В уп."));
    ИзменитьРеквизиты(НовыеКолонки); // ключевая процедура, которая добавляет ревизиты
    
    
    Элемент = Элементы.Вставить("дор_КоличествоВУпаковке", Тип("ПолеФормы"), Элементы.Товары, Элементы.ТоварыКоличествоУпаковок);
    Элемент.Вид = ВидПоляФормы.ПолеВвода;
    Элемент.ПутьКДанным = "Объект.Товары.дор_КоличествоВУпаковке";
    Элемент.ТолькоПросмотр = истина;
	
    дор_ПолучитьДопСвойстваТоваров(); //Дополнительные свойства
КонецПроцедуры

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

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


&НаКлиенте
Процедура дор_ТоварыПриИзмененииПосле(Элемент)
    дор_ПолучитьДопСвойстваТоваров();
КонецПроцедуры

Форма выглядит так:

Среда: УТ 11.4.13.46
Объем план: 0.6 час

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

комментариев 8

  1. Павел:

    innerjoin это круто. Нет свойства — прощайте строки.

    • Если вы намекаете на удаление строк, то нет. На скриншоте видно, что строки не удалены. для первой строки вывелось количество в упаковке, для других нет.

      • rzd:

        А теперь в первой строке меняем значение товара на то, что без свойства. Ой… свойство не стерлось с прежнего товара

        • изменится, там при изменении строки вызывается пересчет. посмотрите внимательнее событие при окончании редактирования.
          Если критично, то можно и при изменении номенклатуры подвязать.

          • rzd:

            Вызывается пересчет, который не пересчитывает
            Оно тупо же из-за внутреннего соединения в выборку теперь не попадет, останется артефакт от предыдущего значения

          • поясни эту мысль. Там выгружается текущая табличная часть.

  2. rzd:

    Обновляются строки, которые попадают в выборку
    При внутреннем соединении не все строки попадают в выборку
    Вывод — не все строки обновляются

    З.Ы. Ответить в ветке почему-то нет кнопки

    • согласен, но это не критично. там обычно не редактируют строки, заказ автозаказом набивается, потом только вручную проверяют. но в целом верно.

Добавить комментарий для fixin Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *