Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
25 ноя 2024, 01:12

Создание внешней обработки реализации товара на основании оприходования в типовой БП 3.0

Автор SnakeSolid, 31 авг 2017, 16:26

0 Пользователей и 1 гость просматривают эту тему.

SnakeSolid

1С Бухгалтерия 3.0 (3.0.51.21), Платформа 8.3.9.1818

Здравствуйте форумчане.
Была поставлена задача: "на основании оприходования создать документ реализации, чтобы не подтягивать номенклатуру путем поиска и подбора"
Ну я, недолго думая, сразу принялся искать решение данной проблемы, даже не задавшись вопрос - а в типовой БП 3.0 такое вообще возможно? :D

Порыскав в гугле и покумекав своими мозгами создал внешнюю обработку с таким вот кодом:

Функция СведенияОВнешнейОбработке() Экспорт

    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.25");
   
    ПараметрыРегистрации.Назначение.Добавить("Документ.ОприходованиеТоваров");
   
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиСозданиеСвязанныхОбъектов();
   
   
    ПараметрыРегистрации.Вставить("Наименование", "Реализация товара");
    ПараметрыРегистрации.Вставить("Версия", "1.0");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
    ПараметрыРегистрации.Вставить("Информация", "Создание документа реализации товара на основании оприходования деталей, высвободившихся после ремонта вагона");

    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = "Реализация товара";
    НоваяКоманда.Идентификатор = "Реализация товара";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовКлиентскогоМетода();
    НоваяКоманда.ПоказыватьОповещение = Истина;
   
    Возврат ПараметрыРегистрации;
   
КонецФункции

&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, СозданныеОбъекты) Экспорт

    Для каждого Элемент из ОбъектыНазначения Цикл

   ФормаДок = ПолучитьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта");

        ДанныеФормы = ФормаДок.Объект;

        СоздатьНовыйДокумент(Элемент, ДанныеФормы);
      
        КопироватьДанныеФормы(ДанныеФормы, ФормаДок.Объект);

        ФормаДок.Открыть();
    КонецЦикла;

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

&НаСервере
Процедура СоздатьНовыйДокумент(Элемент, НовыйОбъект)

    Основание = Элемент.Ссылка;

   НовыйОбъект.Дата = ТекущаяДата();
   НовыйОбъект.Товары = Основание.Товары;

   Для каждого СтрокаТЧ из Основание.Товары Цикл
      
      НоваяСтрока = НовыйОбъект.Товары.Добавить();
      НоваяСтрока.Номенклатура = СтрокаТЧ.Номенклатура;
      НоваяСтрока.Количество = СтрокаТЧ.Количество;
      НоваяСтрока.Цена = СтрокаТЧ.Цена;
      
   КонецЦикла;
   
   НовыйОбъект.Товары.Сумма = НовыйОбъект.Товары.Сумма;
   
   Элемент.Записать(РежимЗаписиДокумента.Запись);

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

За основу, разумеется, был взят всеми известный код для УТ.

Наваяв вот такое чудо, в БП 3.0 у меня ничего не работает :)

Выдает ошибку: "Метод объекта не обнаружен (ВыполнитьКоманду)"

Подскажите пожалуйста, в чем проблема? И вообще - в типовой БП 3.0 создание документа на основании вообще возможно или только через заполнение табличной части можно делать?

Заранее всем спасибо.

Kironten

Есть подозрение, что эта процедура
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, СозданныеОбъекты) Экспорт
находится не в модуле формы.

SnakeSolid

Она находится в модуле формы ДополнительныеОтчетыИОбработкиКлиент

Kironten

:xfbnsdfb:
А что это за форма такая? Покажите скрин.
У вас этот код должен находиться в модуле формы ВАШЕЙ ВНЕШНЕЙ обработки. Вы сейчас хотите сказать, что вы ВАШУ обработку назвали ДополнительныеОтчетыИОбработкиКлиент?

SnakeSolid

Цитата: Kironten от 31 авг 2017, 17:02
:xfbnsdfb:
А что это за форма такая? Покажите скрин.
У вас этот код должен находиться в модуле формы ВАШЕЙ ВНЕШНЕЙ обработки. Вы сейчас хотите сказать, что вы ВАШУ обработку назвали ДополнительныеОтчетыИОбработкиКлиент?

"Этот код" - это про какой Вы код говорите? Про тот, что я тут выложил? Если он, то да, он уже находится в модуле моей внешней обработки.
Моя внешняя обработка НЕ НАЗЫВАЕТСЯ ДополнительныеОтчетыИОбработкиКлиент, она называется по другому.

Насчет скринов, смотрите:
1. Вот я вызываю процедуру "создание на основании" из Оприходования товара и выскакивает эта ошибка.


2. Вот, если развернуть ошибку.


3. Вот куда отправляет конфигуратор.


4. А вот где эта процедура находится. Нашел через стэк вызовов.


А про какую форму Вы говорили? B)

Kironten

Цитата: SnakeSolid от 31 авг 2017, 17:34
Цитата: Kironten от 31 авг 2017, 17:02
:xfbnsdfb:
А что это за форма такая? Покажите скрин.
У вас этот код должен находиться в модуле формы ВАШЕЙ ВНЕШНЕЙ обработки. Вы сейчас хотите сказать, что вы ВАШУ обработку назвали ДополнительныеОтчетыИОбработкиКлиент?

"Этот код" - это про какой Вы код говорите? Про тот, что я тут выложил? Если он, то да, он уже находится в модуле моей внешней обработки.
Моя внешняя обработка НЕ НАЗЫВАЕТСЯ ДополнительныеОтчетыИОбработкиКлиент, она называется по другому.

"Этот код" это вот что:
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, СозданныеОбъекты) Экспорт

    Для каждого Элемент из ОбъектыНазначения Цикл

   ФормаДок = ПолучитьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта");

        ДанныеФормы = ФормаДок.Объект;

        СоздатьНовыйДокумент(Элемент, ДанныеФормы);
     
        КопироватьДанныеФормы(ДанныеФормы, ФормаДок.Объект);

        ФормаДок.Открыть();
    КонецЦикла;

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

&НаСервере
Процедура СоздатьНовыйДокумент(Элемент, НовыйОбъект)

    Основание = Элемент.Ссылка;

   НовыйОбъект.Дата = ТекущаяДата();
   НовыйОбъект.Товары = Основание.Товары;

   Для каждого СтрокаТЧ из Основание.Товары Цикл
     
      НоваяСтрока = НовыйОбъект.Товары.Добавить();
      НоваяСтрока.Номенклатура = СтрокаТЧ.Номенклатура;
      НоваяСтрока.Количество = СтрокаТЧ.Количество;
      НоваяСтрока.Цена = СтрокаТЧ.Цена;
     
   КонецЦикла;
   
   НовыйОбъект.Товары.Сумма = НовыйОбъект.Товары.Сумма;
   
   Элемент.Записать(РежимЗаписиДокумента.Запись);

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

Весь он должен быть в модуле ФОРМЫ ВАШЕЙ ВНЕШНЕЙ ОБРАБОТКИ.
Не в модуле объекта, не в модуле менеджера, не в, упаси Боже - общем модуле, а именно в модуле ФОРМЫ!

SnakeSolid

Цитата: Kironten от 31 авг 2017, 17:42
Весь он должен быть в модуле ФОРМЫ ВАШЕЙ ВНЕШНЕЙ ОБРАБОТКИ.
Не в модуле объекта, не в модуле менеджера, не в, упаси Боже - общем модуле, а именно в модуле ФОРМЫ!

О-БА-НА, помогло, спасибо. Вот в чем на данном этапе затык был, вот я нубас :D
Перенес я данный кусок кода в модуль формы в своей внешней обработке, но теперь другая ошибка всплывает :D

Поле объекта не обнаружено (Объект).

Если подробно, то вот это выдает:
{ВнешняяОбработка.СозданиеРеализации.Форма.Форма.Форма(15)}: Поле объекта не обнаружено (Объект)
        ДанныеФормы = ФормаДок.Объект;

Kironten

Попробуйте вместо:
ФормаДок = ПолучитьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта");
вот так:
ФормаДок = ПолучитьФорму("Документ.РеализацияТоваровУслуг.ФормаДокументаОбщая");

SnakeSolid

Цитата: Kironten от 31 авг 2017, 18:03
вот так:
ФормаДок = ПолучитьФорму("Документ.РеализацияТоваровУслуг.ФормаДокументаОбщая");

так не работает и
так ФормаДок = ПолучитьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента", Новый Структура("Ключ", Элемент));
тоже не работает

Kironten

А если так?
ФормаДок = ПолучитьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаДокументаОбщая");

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск