8.х 2 процедуру в 1 общий

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

  1. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте, в 1с я не силен. в Конфигурация есть 2 процедура одинаковые почти. Как сделать 1 только процедуру?
    Код:
    Процедура ДиагнозыПриПолученииДанныхВП(Элемент, ОформленияСтрок)
    
    Для Каждого ТекСтрока Из ОформленияСтрок Цикл
    Если НЕ обЗначениеНеЗаполнено(ТекСтрока.ДанныеСтроки.Диагноз) Тогда
    ТекСтрока.Ячейки.Код.Текст = ТекСтрока.ДанныеСтроки.Диагноз.Код;
    ТекСтрока.Ячейки.Код.ОтображатьТекст = Истина;
    ТекСтрока.Ячейки.ПолноеНаименование.Текст = ТекСтрока.ДанныеСтроки.Диагноз.ПолноеНаименование();
    ТекСтрока.Ячейки.ПолноеНаименование.ОтображатьТекст = Истина;
    КонецЕсли;
    
    ТекНомерЗуба = ТекСтрока.ДанныеСтроки.НомерЗуба;
    Если ТекНомерЗуба > 0 И ТекНомерЗуба <> 99 Тогда
    ТекСтрока.Ячейки.НомерЗуба.ОтображатьТекст = Истина;
    ТекСтрока.Ячейки.НомерЗуба.Текст = Строка(ПереченьЗубов[ТекНомерЗуба - 1].Значение.НомерЗуба);
    КонецЕсли;
    КонецЦикла;
    
    КонецПроцедуры
    и
    Код:
    Процедура ДиагнозыПриПолученииДанныхДП(Элемент, ОформленияСтрок)
    
    Для Каждого ТекСтрока Из ОформленияСтрок Цикл
    Если НЕ обЗначениеНеЗаполнено(ТекСтрока.ДанныеСтроки.Диагноз) Тогда
    ТекСтрока.Ячейки.Код.Текст = ТекСтрока.ДанныеСтроки.Диагноз.Код;
    ТекСтрока.Ячейки.Код.ОтображатьТекст = Истина;
    ТекСтрока.Ячейки.ПолноеНаименование.Текст = ТекСтрока.ДанныеСтроки.Диагноз.ПолноеНаименование();
    ТекСтрока.Ячейки.ПолноеНаименование.ОтображатьТекст = Истина;
    КонецЕсли;
    
    ТекНомерЗуба = ТекСтрока.ДанныеСтроки.НомерЗуба;
    Если ТекНомерЗуба > 0 И ТекНомерЗуба <> 99 Тогда
    ТекСтрока.Ячейки.НомерЗуба.ОтображатьТекст = Истина;
    ТекСтрока.Ячейки.НомерЗуба.Текст = Строка(ПереченьЗубовДП[ТекНомерЗуба - 1].Значение.НомерЗуба);
    КонецЕсли;
    КонецЦикла;
    
    КонецПроцедуры
  2. GeneRDust
    Offline

    GeneRDust Опытный в 1С

    Регистрация:
    6 дек 2011
    Сообщения:
    62
    Симпатии:
    0
    Баллы:
    26
    Судя по всему обе процедуры абсолютно одинаковы, но применяются при разных действиях. Удалить одну и для этих действий указать выполнение одной и тойже процедуры.
  3. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    я бы попробовала так:
    1. Вынести общий код в отдельную процедуру с параметрами
    2. В указанных процедурах вызывать новую и передавать необходимые параметры
    но надо проверить работоспособность кода (что-то гложут сомнения)
    Код:
    
    Процедура ВашаПроцедура(ОформленияСтрок, ПереченьЗубов)
    
    
    Для Каждого ТекСтрока Из ОформленияСтрок Цикл
    Если НЕ обЗначениеНеЗаполнено(ТекСтрока.ДанныеСтроки.Диагноз) Тогда
    ТекСтрока.Ячейки.Код.Текст = ТекСтрока.ДанныеСтроки.Диагноз.Код;
    ТекСтрока.Ячейки.Код.ОтображатьТекст = Истина;
    ТекСтрока.Ячейки.ПолноеНаименование.Текст = ТекСтрока.ДанныеСтроки.Диагноз.ПолноеНаименование();
    ТекСтрока.Ячейки.ПолноеНаименование.ОтображатьТекст = Истина;
    КонецЕсли;
    
    ТекНомерЗуба = ТекСтрока.ДанныеСтроки.НомерЗуба;
    Если ТекНомерЗуба > 0 И ТекНомерЗуба <> 99 Тогда
    ТекСтрока.Ячейки.НомерЗуба.ОтображатьТекст = Истина;
    ТекСтрока.Ячейки.НомерЗуба.Текст = Строка(ПереченьЗубов[ТекНомерЗуба - 1].Значение.НомерЗуба);
    КонецЕсли;
    КонецЦикла;
    
    КонецПроцедуры
    
    
    Процедура ДиагнозыПриПолученииДанныхВП(Элемент, ОформленияСтрок)
    
    ВашаПроцедура(ОформленияСтрок, ПереченьЗубов);
    
    КонецПроцедуры
    
    
    
    Процедура ДиагнозыПриПолученииДанныхДП(Элемент, ОформленияСтрок)
    
    ВашаПроцедура(ОформленияСтрок, ПереченьЗубовДП);
    
    КонецПроцедуры
    
    
    Посмотрите внимательнее, они НЕ абсолютно одинаковые....
  4. kotlovD
    Offline

    kotlovD Опытный в 1С

    Регистрация:
    16 фев 2011
    Сообщения:
    718
    Симпатии:
    0
    Баллы:
    26
    Как нить так чтоли
    Код:
    Процедура ДиагнозыПриПолученииДанных(Элемент, ОформленияСтрок)
    
    Для Каждого ТекСтрока Из ОформленияСтрок Цикл
    Если НЕ обЗначениеНеЗаполнено(ТекСтрока.ДанныеСтроки.Диагноз) Тогда
    ТекСтрока.Ячейки.Код.Текст = ТекСтрока.ДанныеСтроки.Диагноз.Код;
    ТекСтрока.Ячейки.Код.ОтображатьТекст = Истина;
    ТекСтрока.Ячейки.ПолноеНаименование.Текст = ТекСтрока.ДанныеСтроки.Диагноз.ПолноеНаименование();
    ТекСтрока.Ячейки.ПолноеНаименование.ОтображатьТекст = Истина;
    КонецЕсли;
    
    ТекНомерЗуба = ТекСтрока.ДанныеСтроки.НомерЗуба;
    Если ТекНомерЗуба > 0 И ТекНомерЗуба <> 99 Тогда
    ТекСтрока.Ячейки.НомерЗуба.ОтображатьТекст = Истина;
    Если Элемент.Данные = "ДанныеДП" Тогда//посмотрите как точно называется реквизит
    ТекСтрока.Ячейки.НомерЗуба.Текст = Строка(ПереченьЗубовДП[ТекНомерЗуба - 1].Значение.НомерЗуба);
    ИначеЕсли Элемент.Данные = "ДанныеВП" Тогда//посмотрите как точно называется реквизит
    ТекСтрока.Ячейки.НомерЗуба.Текст = Строка(ПереченьЗубов[ТекНомерЗуба - 1].Значение.НомерЗуба);
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    
    КонецПроцедуры
    
    PS
    Код:
    Если ТекНомерЗуба > 0 И ТекНомерЗуба <> 99 Тогда
    забавное условие)))
  5. GeneRDust
    Offline

    GeneRDust Опытный в 1С

    Регистрация:
    6 дек 2011
    Сообщения:
    62
    Симпатии:
    0
    Баллы:
    26
    Извиняюсь. действительно есть отличие. Соглашусь с
    Tiger86
  6. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    Да, есть отличие, карта зубов, делятся на 2 Взрослый и детский, они находятся вкладках взрослый и детский. а Диагноз (ТЧ) один. Перечень зубовВП (Взр.), ПереченьЗубовДП (детс.) - это нумерация зубов.
    Забыл сказать Конфигурация 8.1 рарус
  7. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    ну так проблема то решилась?
  8. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
  9. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    причина? какая-то ошибка вылезла в предложенном коде или что?
  10. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    Код:
    Процедура ДиагнозыПриПолученииДанных(Элемент, ОформленияСтрок)
    
    Для Каждого ТекСтрока Из ОформленияСтрок Цикл
    Если НЕ обЗначениеНеЗаполнено(ТекСтрока.ДанныеСтроки.Диагноз) Тогда
    ТекСтрока.Ячейки.Код.Текст = ТекСтрока.ДанныеСтроки.Диагноз.Код;
    ТекСтрока.Ячейки.Код.ОтображатьТекст = Истина;
    ТекСтрока.Ячейки.ПолноеНаименование.Текст = ТекСтрока.ДанныеСтроки.Диагноз.ПолноеНаименование();
    ТекСтрока.Ячейки.ПолноеНаименование.ОтображатьТекст = Истина;
    КонецЕсли;
    
    // ТекНомерЗуба = ТекСтрока.ДанныеСтроки.НомерЗуба;
    // Если ТекНомерЗуба > 0 И ТекНомерЗуба <> 99 Тогда
    //  ТекСтрока.Ячейки.НомерЗуба.ОтображатьТекст = Истина;
    //  ТекСтрока.Ячейки.НомерЗуба.Текст = Строка(ПереченьЗубов[ТекНомерЗуба - 1].Значение.НомерЗуба);
    // КонецЕсли;
    //КонецЦикла;
    
    ТекНомерЗуба = ТекСтрока.ДанныеСтроки.НомерЗуба;
    Если ТекНомерЗуба > 0 И ТекНомерЗуба <> 99 Тогда
    ТекСтрока.Ячейки.НомерЗуба.ОтображатьТекст = Истина;
    ТекСтрока.Ячейки.НомерЗуба.Текст = Строка(ПереченьЗубовДП[ТекНомерЗуба - 1].Значение.НомерЗуба);
    ТекСтрока.Ячейки.НомерЗуба.Текст = Строка(ПереченьЗубовДП[ТекНомерЗуба - 1].Значение.НомерЗуба);
    КонецЕсли;
    
    КонецЦикла;
    
    попробовал так, в ДП перечень зубов и идет от 51 нумерация, а ВП с 11 го, ВП карте зубов отмечается нумерация ДП, в ДП карте зубов нечего не отмечается.
  11. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    потому как если вы выбрали не мой код, то эту вашу процедуру вам надо будет привязать на соответствующее событие в ваших ТЧ. Я предлагала код без замены привязки - только создание новой процедуры.

    + вам код то вроде не совсем такой дали, там условия были, а у вас они пропали
  12. vartanet
    Offline

    vartanet Опытный в 1С Команда форума

    Регистрация:
    16 ноя 2010
    Сообщения:
    2.698
    Симпатии:
    15
    Баллы:
    29
    получаете имя табличной части (посмотрите в отладчике.. вроде через текущие данные), для которой вызывается данное событие. затем подставляете имя в модуль.. прописываете этот обработчик события в обе табличные части.

    Код:
    Процедура ДиагнозыПриПолученииДанных(Элемент, ОформленияСтрок)
    ИмяТекущейТабличнойЧасти = ........;
    Для Каждого ТекСтрока Из ОформленияСтрок Цикл
    Если НЕ обЗначениеНеЗаполнено(ТекСтрока.ДанныеСтроки.Диагноз) Тогда
    ТекСтрока.Ячейки.Код.Текст = ТекСтрока.ДанныеСтроки.Диагноз.Код;
    ТекСтрока.Ячейки.Код.ОтображатьТекст = Истина;
    ТекСтрока.Ячейки.ПолноеНаименование.Текст = ТекСтрока.ДанныеСтроки.Диагноз.ПолноеНаименование();
    ТекСтрока.Ячейки.ПолноеНаименование.ОтображатьТекст = Истина;
    КонецЕсли;
    
    ТекНомерЗуба = ТекСтрока.ДанныеСтроки.НомерЗуба;
    Если ТекНомерЗуба > 0 И ТекНомерЗуба <> 99 Тогда
    ТекСтрока.Ячейки.НомерЗуба.ОтображатьТекст = Истина;
    ТекСтрока.Ячейки.НомерЗуба.Текст = Строка(ЭтотОбъект[ИмяТекущейТабличнойЧасти]][ТекНомерЗуба - 1].Значение.НомерЗуба);
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры
  13. vartanet
    Offline

    vartanet Опытный в 1С Команда форума

    Регистрация:
    16 ноя 2010
    Сообщения:
    2.698
    Симпатии:
    15
    Баллы:
    29
    ну или как Tiger86 сказала..
  14. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    карта слоя ВП находиться в ЭлементыФормы.ПанельКартыЗубов.Страницы.ВзрослыйПрикус и ДП в ЭлементыФормы.ПанельКартыЗубов.Страницы.ДесткийПрикус
    .
    стандартный процедура
    Код:
    // Обработчик события ПриПолученииДанных для ТП "Диагнозы"
    Процедура ДиагнозыПриПолученииДанных(Элемент, ОформленияСтрок)
    
    Для Каждого ТекСтрока Из ОформленияСтрок Цикл
    Если НЕ обЗначениеНеЗаполнено(ТекСтрока.ДанныеСтроки.Диагноз) Тогда
    ТекСтрока.Ячейки.Код.Текст = ТекСтрока.ДанныеСтроки.Диагноз.Код;
    ТекСтрока.Ячейки.Код.ОтображатьТекст = Истина;
    ТекСтрока.Ячейки.ПолноеНаименование.Текст = ТекСтрока.ДанныеСтроки.Диагноз.ПолноеНаименование();
    ТекСтрока.Ячейки.ПолноеНаименование.ОтображатьТекст = Истина;
    КонецЕсли;
    
    ТекНомерЗуба = ТекСтрока.ДанныеСтроки.НомерЗуба;
    Если ТекНомерЗуба > 0  И ТекНомерЗуба <> 99 Тогда
    ТекСтрока.Ячейки.НомерЗуба.ОтображатьТекст = Истина;
    ТекСтрока.Ячейки.НомерЗуба.Текст = Строка(ПереченьЗубов[ТекНомерЗуба - 1].Значение.НомерЗуба);
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры
    
    А я добавил слой ДЕтскийПрикус, и переченьзубаДП
  15. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    я исходила из вашего первого поста. В нем вы указали 2 стандартные процедуры (как я поняла, они у вас к разным табличным частям привязаны). Потому если завести отдельную продуру и передавать туда как параметры ваши ТЧ, а потом из ваших стандартных вызывать эту новую процедуру, то все должно корректно работать (я у себя так обработчик нескольких ТЧ по такому принципу делала и работает)
  16. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    2 карта зубов ВП и ДП, и один ТЧ диагноз
  17. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    ну и что что 2, в чем проблема то. При вызове процедуры передавайте нужную ТЧ в нее и все, если они у вас одинаковые по структуре, то я не вижу проблем в реализации моего метода. Что вас не устраивает? С чем вы не согласны?
  18. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    Пример, привести можете? в Кодах я не очень силен(
  19. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    а в посте номер 3 что я привела по вашему?
  20. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    можно закрывать тему) решили по другому сделать)
    Всем спасибо)

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