8.х ТабличноеПоле значение произвольной колонки

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

  1. TopicStarter Overlay
    Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Добрый день,

    В форме документа размещено табличное поле, которое связано с табличной частью документа. В это табличное поле (не в табличную часть) добавлена новая колонка с элементом управления ПолеВвода. В процедуру ПриВыводеСтроки, добавлено определение значения для данного поля:
    Код:
    ОформлениеСтроки.Ячейки.Неисправности.Значение = СтрокаВыбранныхЗначений;
    ОформлениеСтроки.Ячейки.Неисправности.Текст = СтрокаВыбранныхЗначений;
    
    
    Если не входить в эту ячейку - то все отлично, показывает текст, но при входе для редактирования - показывает пустую стоку.

    В поле добавлена кнопка выбора, на нее повешен обработчик НачалоВыбора
    Код:
    Элемент.Значение = СтрокаВыбранныхЗначений;
    
    
    После выбора - все ОК, т.е. и текст в режиме редактирования ячейки соответствует тексту неактивной ячейки.

    Насколько я понял, основной смысл - получить элемент управления "ПолеВвода" в процедуре ПриВыводеСтроки, но там доступны только ссылка на табличное поле, оформление строки и текущие данные, которые не содержат данные того поля, т.к. оно отсутствует в табличной части.

    Может кто сталкивался с такой проблемой, расскажите как решали...
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Если поле вычисляемое, то и менять значение такого поля - смысла не много(на обработку табличной части до закрытия объекта). Вычисляемые поля служат для дополнительной информативности строки ТЧ.

    Добавляй реквизит ТЧ документа и привязывай его к ТП на форме документа.
  3. TopicStarter Overlay
    Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Скажем так, у меня в документе есть 2 табличные части, в первой основная информация, во второй дополнительная, причем несколько значений для каждой строки первой. Не хочу пользователям показывать вторую таб часть, т.к. некрасиво. Вот и сделал доп реквизит в который записываю представление, собранное из второй таб части в текстовом представлении, а при нажатии на кнопку выбора, вызываю форму для редактирования.

    ЗЫ собственно задача такая: В УТ есть документ корректировка качества, мне надо в том случае, если новое качество "Неисправен", чтобы пользователь указал, какие именно неисправности (может быть несколько пунктов), в дальнейшем эту информацию надо отразить в регистре сведений. Ничего более красивого не придумал. Единственное, что не очень нравится, что при входе в редактирование поля пропадает текст. Не критично, но не очень красиво...
  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Я мож чего-то не допонимаю, но зачем изобретать велосипед? Зачем нужна какая-то вторая ТЧ, которая не видна юзерам, но из неё берется информация в текстовом виде? Чем не устраивает обработка выбора НОВОЕ КАЧЕСТВО? Выбрал юзер НЕИСПРАВЕН, появилось поле для выбора описания неисправности.

    Для этого добавить один реквизит табличной части ОПИСАНИЕ НЕИСПРАВНОСТИ и управлять его видимостью в зависимости от выбранного нового качества.
  5. TopicStarter Overlay
    Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Я может недообяснил... Неисправности надо выбирать из заранее приготовленного списка (зависящего от номенклатуры), помечая галочками те неисправности, которые возникли в данный момент. Потом эти неисправности учитываются, и делается автоматическое списание материалов, которые необходимы для устранения неисправностей, и стоимости ремонта (для каждой неисправности указана стоимость исправления).
  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Имхо, влюбом случае, если от значения поля зависит что-либо, то лучше будет использовать "предопределенный" реквизит ТЧ документа - это позволит хранить данные, следовательно, эти данные будут отображатся и в режиме редактирования поля - чего ты и хочешь добится.
  7. TopicStarter Overlay
    Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Ну и как же в табличную часть запихнуть реквизит с типом ТаблицаЗначений, СписокЗначений или на худой конец Массив?

    ЕЩЕ раз: для каждой строки табличной части документа может быть несколько значений неисправностей, т.е. есть товар, например автомобиль, мне надо у этого автомобиля установить качество, что он неисправен и указать, что у него битое крыло, сел аккумулятор и течет радиатор, при этом все возможные неисправности описаны, и нужно только указать какие именно присутствуют в данном случае.
  8. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    реквизит может быть с типом ХранилищеЗначения, а уже туда засовывайте всё что душе угодно
  9. TopicStarter Overlay
    Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Может, но как организовать выбор и отображение пользователю выбранных значений, опять же через доп колонку в табличном поле, и те же грабли, о которых пост.

    А с точки зрения оптимизации хранения и получения информации, дополнительная табличная часть все таки лучше реквизита с типом ХранилищеЗначения ИМХО.
  10. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Никак.

    Я прекрасно понял вашу проблему. Для данного случая используется ДеревоЗначений, но т.к. вы собираетесь делать это все в типовом документе КорректировкаКачества, то, имхо, лучше будет добавить реквизит ТЧ с типом СТРОКА и хранить в нем строковые значения неисправностей, разделенные определенным разделителем, но это поле не должно быть вычисляемым, как сделали вы, тогда его значения будут присутствовать в этом поле всегда.

    С хранилищем - свои заморочки, но в него можно и ТЗ запихнуть и массив, если необходимо.
  11. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    вы спросили как засунуть в реквизит ТаблицаЗначений, СписокЗначений или на худой конец Массив, и я вам ответил. к чему теперь ваше ИМХО? :)

    предлагаю решить вашу проблему через планвидовхарактеристик

    nomad_irk заморочек не больше чем со строкой :)
    допустим, у авто 3 неисправности, строка представляющая неисправность примерно равно 15-25 символов, умножаем на 3 и получаем не малое количество итераций вместо 3х, если работаем с хранилищем.

    вот, например, так хранится реквизит ВоинскийУчет в справочнике Сотрудники конфигурации КАМИН:Расчет ЗП

    Код:
        
    Процедура ПередЗаписью(Отказ)
    //...
    л_Список = Новый Соответствие();
    л_Список.Вставить("ВоенныйБилет",ВоенныйБилет);
    л_Список.Вставить("КатегорияЗапаса",рд_КатегорияЗапаса);
    л_Список.Вставить("Звание",рд_Звание);
    л_Список.Вставить("Состав",рд_Состав);
    л_Список.Вставить("ВУС",рд_ВУС);
    л_Список.Вставить("КатегорияГодности",рд_КатегорияГодности);
    л_Список.Вставить("Военкомат",рд_Военкомат);
    л_Список.Вставить("Учет",рд_Учет);
    л_Список.Вставить("НомерКоманды",рд_НомерКоманды);
    л_Список.Вставить("ДатаСнятия",рд_ДатаСнятия);
    л_Хранилище = Новый ХранилищеЗначения(л_Список);
    ВоинскийУчет = л_Хранилище;
    
    //...
    КонецПроцедуры
    
    Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    л_Список = ВоинскийУчет.Получить();
    Если ТипЗнч(л_Список) = Тип("Соответствие") Тогда
    ВоенныйБилет = л_Список.Получить("ВоенныйБилет");
    ВБПриИзменении();
    рд_КатегорияЗапаса = л_Список.Получить("КатегорияЗапаса");
    рд_Звание = л_Список.Получить("Звание");
    рд_Состав = л_Список.Получить("Состав");
    рд_ВУС = л_Список.Получить("ВУС");
    рд_КатегорияГодности = л_Список.Получить("КатегорияГодности");
    рд_Военкомат = л_Список.Получить("Военкомат");
    рд_Учет = л_Список.Получить("Учет");
    рд_НомерКоманды = л_Список.Получить("НомерКоманды");
    рд_ДатаСнятия = л_Список.Получить("ДатаСнятия");
    КонецЕсли;
    КонецПроцедуры
    
    
    
    рд - реквизиты формы, думаю не сложно подогнать под требуемую задачу
  12. TopicStarter Overlay
    Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Спасибо всем за участие :)

    Но все таки задача:
    Есть справочник возможных неисправностей, в нем есть реквизиты: Наименование, Запчасть для устранения, Вид ремонта (замена, ремонт и т.д.) и стоимость ремонта. Справочник подчинен справочнику "Номенклатура", соответственно для каждой номенклатуры свой список порядка 20-30 неисправностей.
    Это не заказ-наряд на ремонт! После определения неисправностей, оборудование может простоять на складе еще долго.
    Необходимо при смене качества на "неисправен" единицы оборудования (ведется учет по сериям, одна серия - один объект) к серии надо привязать информацию о том, какие неисправности в этой серии, чтобы проведя один раз диагностику не надо было проводить ее еще раз через год, когда появятся запчасти для ремонта. В одном документе может отбраковываться по несколько единиц оборудования.

    Что было сделано: добавлена новая табличная часть в документ корректировка качества, создана форма для показа и выбора неисправностей по каждой строке, при выводе строки значения считываются и преобразуются в строку для отображения пользователю в таблице товаров.

    Проблема: При установке значений через процедуру ПриВыводеСтроки не могу получить доступ к ПолюВвода ячейки выводимой строки для того, чтобы присвоить ему значение. Как это выглядит: при открытии документа в табличную часть выводится текст с неисправностями, но при входе в редактирование этого поля текст очищается.

    ЗЫ все работает, просто пользователей немного смущает данное поведение формы. Вроде как неисправности есть, а как хочешь их изменить - куда то пропадают.
  13. TopicStarter Overlay
    Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Поле строкового типа неограниченной длинны, которое не несет смысловой нагрузки не есть гуд. Это лишняя нагрузка на БД, т.к. строки неограниченной длинны физически хранятся в отдельной таблице.
    А отбирать я могу и так - по второй табличной части и отбор по ссылке намного эффективнее чем по строке методом "содержит". Но мне этот отбор нафиг не нужен.
  14. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    "1С:Предприятие 8.0". Внедрение и адаптация конфигурации «Управление торговлей» Курс дистанционного обучения. Автор методических материалов - Габец А.

    Itsys если можете вышлите базу на gosn1ck@yandex.ru
  15. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Максимум, что можно сделать, установить тип значения СПИСОКЗНАЧЕНИЙ и обрабатывать его, например:
    Код:
    Процедура ТабличнаяЧастьПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    
    СписокЗначений = ЭлементыФормы.ТабличнаяЧасть.Колонки.Колонка1.ЭлементУправления.Значение;
    
    Если НЕ ЗначениеЗаполнено(СписокЗначений) Тогда
    Выборка = Справочники.Неисправности.Выбрать(,ДанныеСтроки.Номенклатура);
    Пока Выборка.Следующий() Цикл
    СписокЗначений.Добавить(Выборка.Ссылка);
    ОформлениеСтроки.Ячейки.Колонка1.Текст = ОформлениеСтроки.Ячейки.Колонка1.Текст + Выборка.Наименование + ";";
    КонецЦикла;
    КонецЕсли;
    
    КонецПроцедуры
    
    
  16. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Про текстовый реквизит - это понятно, но когда очень хочется.......
  17. TopicStarter Overlay
    Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Проще выложить сюда :)
    WHNWS.cf
  18. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    Системе не удается найти указанный путь. :unsure:
  19. TopicStarter Overlay
    Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    WHNWS.zip, только это не архив. Надо поменять расширение на cf после скачивания.
  20. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    кхм, а какой документ? :)

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