8.х создание обработки

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

  1. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    А эти реквизиты какой тип имеют ?
    Прежде чем решать задачу нужно определить, какие данные нужно поменять (это уже будет решением)
  2. TopicStarter Overlay
    st88
    Offline

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.725
    Симпатии:
    28
    Баллы:
    54
    краткоеНаименование - имеют тип строка длина 100

    Наименование - строка 100 символов)))
  3. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    Резюмируем,
    В табличной части документа нужно внести изменения в том случае, если нужно заменить ссылку на элемент "ВидОборудования" на другой элемент справочника.
    Если элемент справочника один и тот-же, а нужно изменить его краткое наименование, то документ менять не нужно, нужно изменить краткое наименование элемента справочника "ВидОборудования"
  4. TopicStarter Overlay
    st88
    Offline

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.725
    Симпатии:
    28
    Баллы:
    54
    Т.е. вы предлагаете в справочнике загнать и одни и теже значения в реквизит и наименование и краткое наименование??? так не пойдёт!...

    немного переделал, вроде теперь работает как надо всё меняет в Договорах абонентов, при повторном запуске замен 0..)

    Код:
    
    Запрос = Новый Запрос;
    Запрос.Текст = ("
    |ВЫБРАТЬ
    |			 ДоговорТабличнаяЧасть.Оборудование,
    |			 ПРЕДСТАВЛЕНИЕ(ДоговорТабличнаяЧасть.Оборудование),
    |			 ДоговорТабличнаяЧасть.Ссылка,
    |			 ПРЕДСТАВЛЕНИЕ(ДоговорТабличнаяЧасть.Ссылка),
    |			 ДоговорТабличнаяЧасть.Ссылка.ДоговорОснование,
    |			 ПРЕДСТАВЛЕНИЕ(ДоговорТабличнаяЧасть.Ссылка.ДоговорОснование),
    |			 ДоговорТабличнаяЧасть.Ссылка.Дата,
    |			 ДоговорТабличнаяЧасть.Ссылка.Контрагент.Наименование,
    |			 ДоговорТабличнаяЧасть.Ссылка.Контрагент.Ссылка,
    |			 ДоговорТабличнаяЧасть.Ссылка.Контрагент.Представление
    |ИЗ
    |			 Документ.Договор.ТабличнаяЧасть КАК ДоговорТабличнаяЧасть
    |ГДЕ
    | ДоговорТабличнаяЧасть.Оборудование.Ссылка.Наименование ПОДОБНО (""Плита газовая 4-х конфорочная"")");
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    // обход результата
    н=0;
    Пока Выборка.Следующий() Цикл
    
    // получаем документ - объект для изменения
    Пер = Выборка.Оборудование.ссылка.ПолучитьОбъект();
    Пер.Наименование = "ПГ4";
    Попытка
    Пер.записать();
    н=н+1;
    Исключение
    Сообщить(ОписаниеОшибки(),СтатусСообщения.Важное);
    КонецПопытки;
    КонецЦикла;
    Если н <> 0 тогда
    ЭлементыФормы.Надпись2.Заголовок = н;
    иначе
    ЭлементыФормы.Надпись2.Заголовок = "Замен не было";
    конецесли;
    
    
    Проверяю отчётом:

    Код:
    
    ПостроительОтчетаОтчет3.Текст =
    "ВЫБРАТЬ
    |			 ДоговорТабличнаяЧасть.Оборудование,
    |			 ПРЕДСТАВЛЕНИЕ(ДоговорТабличнаяЧасть.Оборудование),
    |			 ДоговорТабличнаяЧасть.Ссылка,
    |			 ПРЕДСТАВЛЕНИЕ(ДоговорТабличнаяЧасть.Ссылка),
    |			 ДоговорТабличнаяЧасть.Ссылка.ДоговорОснование,
    |			 ПРЕДСТАВЛЕНИЕ(ДоговорТабличнаяЧасть.Ссылка.ДоговорОснование),
    |			 ДоговорТабличнаяЧасть.Ссылка.Дата,
    |			 ДоговорТабличнаяЧасть.Ссылка.Контрагент.Наименование,
    |			 ДоговорТабличнаяЧасть.Ссылка.Контрагент.Ссылка,
    |			 ДоговорТабличнаяЧасть.Ссылка.Контрагент.Представление
    |ИЗ
    |			 Документ.Договор.ТабличнаяЧасть КАК ДоговорТабличнаяЧасть
    |ГДЕ  ДоговорТабличнаяЧасть.Оборудование.Ссылка.Наименование <> ""ПГ4""
    | И   ДоговорТабличнаяЧасть.Оборудование.Ссылка.Наименование <> ""ПГ2""";
    
    
  5. Annie
    Offline

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

    Регистрация:
    10 фев 2010
    Сообщения:
    949
    Симпатии:
    23
    Баллы:
    29
    Я не говорю, что он там нужен. Это была попытка выяснить, как человек определяет кол-во замен )))
  6. TopicStarter Overlay
    st88
    Offline

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.725
    Симпатии:
    28
    Баллы:
    54
    Так вы мне скажите я правильно сделал?! ил это что-то не то меняется?

    какой тип будет у переменной ПГ4 ??? строка???

    ПГ4 = Справочники.ВидыВДГО.НайтиПоРеквизиту("КраткоеНаименование","ПГ4");

    если нет, то мне надо поменять во всех документах полное наименование (такого вот типа) на краткое наименование такого типа. вот....
  7. Annie
    Offline

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

    Регистрация:
    10 фев 2010
    Сообщения:
    949
    Симпатии:
    23
    Баллы:
    29
    В справочнике ВидыВДГО есть стандартный реквизит Наименование и реквизит КраткоеНаименование, так?
    Судя по коду, вы изменили само Наименование, а не КраткоеНаименование.

    Если вам надо было в документе Договор, отобразить КраткоеНаименование, то надо было в справочнике ВидыВДГО, найти элемент с наименованием "Плита газовая 4-х конфорочная" и прописать в нем краткое наименование "ПГ4".

    А в документе сделать так, чтобы оборудование отображалось не полным наименованием (стандартный реквизит Наименование), а кратким.
    А вы зачем-то пошли через тридевять земель, не знаю, зачем ))

    ПГ4 будет иметь тип "СправочникСсылка.ВидыВДГО".
  8. TopicStarter Overlay
    st88
    Offline

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.725
    Симпатии:
    28
    Баллы:
    54
    С этим разобрался, всё ОК. поменялись только наименования, ссылки все целые. (на справочник видов оборудования).

    Теперь тоже самое надо поменять, но только уже не в договорах а в справочнике ПаспортОборудования. Написал обработку, вроде учёл ссылки, но всё равно при повторном запуске опять столькоже замен (даже на одну больше...). Где ошибка???

    Код:
    ЗапросОборудование = Новый Запрос;
    ЗапросОборудование.Текст =(
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |			 ПаспортВДГО.Ссылка КАК Оборудование,
    |			 ПаспортВДГО.ДатаВыпуска,
    |			 ПаспортВДГО.СрокСлужбы,
    |			 ПаспортВДГО.Количество,
    |			 ПаспортВДГО.ВидВДГО,
    |			 (НЕ ПаспортВДГО.ПометкаУдаления) КАК Исп
    |ИЗ
    |			 Справочник.ПаспортВДГО КАК ПаспортВДГО
    |ГДЕ
    |			 ПаспортВДГО.ВидВДГО.Ссылка.Наименование ПОДОБНО (""Плита газовая 4-х конфорочная"")");
    //ЗапросОборудование.УстановитьПараметр("Владелец",Абонент);
    Результат = ЗапросОборудование.Выполнить();
    Выборка = Результат.Выбрать();
    н=0;
    Пока Выборка.Следующий() Цикл
    Пер = Выборка.ВидВДГО.ссылка.ПолучитьОбъект();
    Пер.Наименование = "ПГ4";
    Попытка
    Пер.записать();
    н=н+1;					
    Исключение
    Сообщить(ОписаниеОшибки(),СтатусСообщения.Важное);
    КонецПопытки;
    КонецЦикла;
    Если н <> 0 тогда
    ЭлементыФормы.Надпись2.Заголовок = н;
    Иначе
    ЭлементыФормы.Надпись2.Заголовок = "Замен не было";
    Конецесли;					
    
  9. Annie
    Offline

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

    Регистрация:
    10 фев 2010
    Сообщения:
    949
    Симпатии:
    23
    Баллы:
    29
    St88, почему вы напрямую не обрабатываете справочник "ВидВДГО"? К чему вот это вот обращение к справочнику ПаспортВДГО? Для чего вы так делаете?
  10. TopicStarter Overlay
    st88
    Offline

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.725
    Симпатии:
    28
    Баллы:
    54
    потомучто надо изменить в справочнике паспортВДГО. в справочнике видВДГО всё правильно, да и туда лезть не следует. при добавлении из него информации в справочник паспортВДГО всё нормально добавляется как надо. Я уже говорил что мне надо поменять значения которые были подставлены автоматически в эти поля при загрузке старой бд...
  11. Annie
    Offline

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

    Регистрация:
    10 фев 2010
    Сообщения:
    949
    Симпатии:
    23
    Баллы:
    29
    Ну дак, судя по вашему коду, вы обращаетесь к элементу справочника видВДГО, получаете объект, меняете в нем наименование и записываете.
    Какой тип имеет реквизит ВидВДГО в справочнике ПаспортВДГО?
  12. TopicStarter Overlay
    st88
    Offline

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.725
    Симпатии:
    28
    Баллы:
    54
    ВидВДГО как написал в предыдущем посте имеет тип: СправочникСсылка.ВидыВДГО.
  13. TopicStarter Overlay
    st88
    Offline

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.725
    Симпатии:
    28
    Баллы:
    54
    Праздники прошли, настали суровые трудовые будни)
    Итак продолжим.
    Сделал новую версию обработк. Выборка работает, выбирает аккурат то что надо.
    Теперь при обходе выборки, надо поменять реквизит в справочнике ПаспортВДГО.Наименование.
    Собственно, как я понял надо как то получать опять таки этот реквизит, а потом туда записывать нужное мне значение. Пробовал так и так:
    Пер = Выборка.Наименование.ПолучитьОбъект();
    Пер = Выборка.Ссылка.Наименование.ПолучитьОбъект();
    Пер = Выборка.Наименование.Ссылка.ПолучитьОбъект();
    Вылетает ошибка: (значение не является значением объектного типа!!!)

    Если просто пишу:
    Пер = Выборка.Наименование;
    То работает, но ничего в итоге не записывает!!!
    Что делать, как быть???!!!
    Код:
    Процедура КнопкаВыполнитьНажатие(Кнопка)
    ЗапросОборудование = Новый Запрос;
    ЗапросОборудование.Текст =(
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |	 ПаспортВДГО.Ссылка,
    |	 ПаспортВДГО.ДатаВыпуска,
    |	 ПаспортВДГО.СрокСлужбы,
    |	 ПаспортВДГО.Наименование,
    |	 ПаспортВДГО.ВидВДГО,
    |	 (НЕ ПаспортВДГО.ПометкаУдаления) КАК Исп
    |ИЗ
    |	 Справочник.ПаспортВДГО КАК ПаспортВДГО
    |ГДЕ
    |	 ПаспортВДГО.ВидВДГО.Ссылка.Наименование ПОДОБНО (""Плита газовая 4-х конфорочная"")
    |И   ПаспортВДГО.Наименование <> ""ПГ4""");
    //ЗапросОборудование.УстановитьПараметр("Владелец",Абонент);
    Результат = ЗапросОборудование.Выполнить();
    Выборка = Результат.Выбрать();
    н=0;
    Пока Выборка.Следующий() Цикл
    Пер = Выборка.Наименование;
    // Пер = "ПГ4";
    //н=н+1;
    Попытка
    //Пер.записать();
    н=н+1;
    Пер = "ПГ4";
    Исключение
    Сообщить(ОписаниеОшибки(),СтатусСообщения.Важное);
    КонецПопытки;
    КонецЦикла;
    
    Если н <> 0 тогда
    ЭлементыФормы.Надпись2.Заголовок = н;
    Иначе
    ЭлементыФормы.Надпись2.Заголовок = "Замен не было";
    Конецесли;
    КонецПроцедуры
    
    
  14. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    вот эта строка сразу видно,что не отработает
    Код:
    Пер = Выборка.Наименование.ПолучитьОбъект();
    Наименование - это Строка, а не ОбЪект. Скорее всего надо так
    Код:
    ер = Выборка.Ссылка.ПолучитьОбъект();

    З.Ы. Вместо того, чтобы методом тыка "получать" обЪекты, разберитесь что есть обЪект в 1с.
  15. TopicStarter Overlay
    st88
    Offline

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.725
    Симпатии:
    28
    Баллы:
    54
    Пер = Выборка.Ссылка.ПолучитьОбъект();

    Пробовал так, работать работает, но ничего не меняет и не записывает.

    зы: я то знаю что такое объект в 1с (справочник, документ и т.д....)
  16. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    А Пер.Записать() у вас закомментировано?
    Покажите последнюю версию кода, приведённого выше.
  17. TopicStarter Overlay
    st88
    Offline

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.725
    Симпатии:
    28
    Баллы:
    54
    Вот блин, точно!!!, не заметил, что она закомментена. Спасибо большое, теперь работает!)))

    зы: правда вопрос с заменой уже был решен с помощью: Стандартной обработкой - подбор и замена. но всё таки надо было иметь свою обработку, чтобы юзвери не натыкали там что на что менять, а тупо на одну кнопочку клацали..)

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