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

Почему не отрабатывает код при повторном проведении

Автор Nosferatu112, 19 янв 2023, 14:04

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

Nosferatu112

В общем какая проблема, с Документом Реализации проблем нет он отрабатывает всегда как должен но с документом возврата какая то фигня при создании и проведении документа всё работает как надо но стоит закрыть документ потом открыть и перепровести он всегда даёт ошибку независимо от того какая там организация результат при повторном проведении равен NULL
&НаСервере
Функция СовпадениеОрганизации(Организация, Ссылка) Экспорт
         
   Если ТипЗнч(Ссылка) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
      Результат = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "ЗаказКлиента.Организация");   
         
      Если Организация <> Результат Тогда
         Отказ = Истина;
         ВызватьИсключение "Организация в документе проведения не соответствует организации документа заказ клиента (Отказ проведения)";
         
      КонецЕсли;
   
   ИначеЕсли ТипЗнч(Ссылка) = Тип("ДокументСсылка.ВозвратТоваровОтКлиента") Тогда
      Результат = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "ДокументРеализации.Организация");   
         
      Если Организация <> Результат Тогда
         Отказ = Истина;
         ВызватьИсключение "Организация в документе проведения не соответствует организации документа реализация товаров и услуг(Отказ Проведения)";
         
      КонецЕсли;
   КонецЕсли;
   
КонецФункции

Это вызов функции в документах

&Перед("ОбработкаПроверкиЗаполнения")
Процедура Расш1_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
   
   Расш1_ОбщегоНазначения.СовпадениеОрганизации(Организация, Ссылка);
   
КонецПроцедуры

И ещё напишите кто нибудь как код закидывать сюда как код а не как текст

LexaK

Nosferatu112, проверьте результат который возвращает эта строка
Результат = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "ДокументРеализации.Организация");   есть подозрение что ДокументРеализации - не заполнен. Поэтому ошибка и возникает

что бы вставить код, здесь на окне нажмите кнопку с картинкой 1С
появится " " между скобками "] ... [" вставляете код
если помогло нажмите: Спасибо!

Максим75

а случайно нигде не затирается Организация при открытии НЕ НОВОГО документа?

Надо глянуть, в функции какие значения у Результата и Организации, просто тыкнуть точку останова и посмотреть.

Nosferatu112

Максим75, У организации значение выбраное в проводимом документе а у Результата NULL
Я просто не могу понять почему 1я часть кода спокойно выполняеться а вторая косячит

Nosferatu112

LexaK, ДокументВозврата создаёться на основании реализации а реализация на основании заказа клиента при создании проведении и повторном проведении Реализации всё отрабатывает как надо а вот при создании и проведении Возврата всё ок но стоит закрыть документ и открыть опять он выдаёт ошибку не зависимо от того какая указана организация эта строчка выдаёт при создании организацию документа основания а после закрытия открытия и повторного проведения выдаёт NULL

Максим75

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

Nosferatu112

Всем спасибо кто отвечал эту задачу я решил так
Общий модуль
&НаСервере
Функция СовпадениеОрганизации(Организация, ДокументОснование, Отказ, Ссылка) Экспорт
   
    Если ТипЗнч(Ссылка) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
        Результат = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДокументОснование, "Организация");     
           
        Если Организация <> Результат Тогда
   
            ОбщегоНазначения.СообщитьПользователю("Организация в документе проведения не соответствует организации документа заказ клиента (Отказ проведения)",,,,Отказ);
               
        КонецЕсли;
   
    ИначеЕсли ТипЗнч(Ссылка) = Тип("ДокументСсылка.ВозвратТоваровОтКлиента") Тогда
        Результат = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДокументОснование, "Организация");     
           
        Если Организация <> Результат Тогда
           
            ОбщегоНазначения.СообщитьПользователю("Организация в документе проведения не соответствует организации документа реализация товаров и услуг (Отказ проведения)",,,,Отказ);           
           
        КонецЕсли;
    КонецЕсли;
   
КонецФункции
Документ Возврата
&Перед("ОбработкаПроверкиЗаполнения")
Процедура Расш1_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты, ДокументОснование)
   
    Если ЭтотОбъект.ДокументРеализации <> Неопределено Тогда
       
        Расш1_ОбщегоНазначения.СовпадениеОрганизации(ЭтотОбъект.Организация, ЭтотОбъект.ДокументРеализации, Отказ, Ссылка);
       
    Иначе
       
        Сообщить("Отсутствует документ основания");
       
    КонецЕсли;
   
КонецПроцедуры
Документ реализации
&Перед("ОбработкаПроверкиЗаполнения")
Процедура Расш1_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты,ДокументОснование)
   
    Если ЭтотОбъект.ЗаказКлиента <> Неопределено Тогда
       
        Расш1_ОбщегоНазначения.СовпадениеОрганизации(ЭтотОбъект.Организация, ЭтотОбъект.ЗаказКлиента, Отказ, Ссылка);
    Иначе
        Сообщить("Отсутствует документ основания");
    КонецЕсли;
   
КонецПроцедуры

Nosferatu112

Сложился неожиданный вопрос код который я выложил в конце отлично отрабатывает делает всё как надо, НО если создать документ реализации на основании двух заказов клиента сохранить его а потом в одном из документов основания сменить организацию тогда он во первых
&Перед("ОбработкаПроверкиЗаполнения")
Процедура Расш1_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты, ДокументОснование)

Если ЗначениеЗаполнено(ЭтотОбъект.ДокументРеализации) Тогда

Расш1_ОбщегоНазначения.СовпадениеОрганизации(ЭтотОбъект.Организация, ЭтотОбъект.ДокументРеализации, Отказ, Ссылка);

Иначе

Сообщить("Отсутствует документ основания");

КонецЕсли;

КонецПроцедуры
На этом этапе не заходит в Если а сразу кидает сообщение а во вторых если закомментировать всё и оставить только строку с расширением то уже там он кидает ошибку
Ошибка при вызове метода контекста (Записать)
{ОбщийМодуль.ОбщегоНазначенияУТКлиент.Модуль(1472)}: Результат = Форма.Записать(ПараметрыЗаписи);
{ОбщийМодуль.ОбщегоНазначенияУТКлиент.Модуль(1425)}: ЗаписатьОбъект(Форма, ПараметрыЗаписи);
{Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента.Форма(2988)}: ОбщегоНазначенияУТКлиент.Провести(ЭтаФорма, Истина);
по причине:
Ошибка при выполнении обработчика - 'ОбработкаПроверкиЗаполнения'
по причине:
{ОбщийМодуль.ОбщегоНазначения.Модуль(167)}: Неверный первый параметр Ссылка в функции ОбщегоНазначения.ЗначенияРеквизитовОбъекта:
- Значение должно быть ссылкой или именем предопределенного элемента
Результат = Форма.Записать(ПараметрыЗаписи);

по причине:
Ошибка при выполнении обработчика - 'ОбработкаПроверкиЗаполнения'
по причине:
{ОбщийМодуль.ОбщегоНазначения.Модуль(167)}: Неверный первый параметр Ссылка в функции ОбщегоНазначения.ЗначенияРеквизитовОбъекта:
- Значение должно быть ссылкой или именем предопределенного элемента

Неверный первый параметр Ссылка в функции ОбщегоНазначения.ЗначенияРеквизитовОбъекта:
- Значение должно быть ссылкой или именем предопределенного элемента
{ОбщийМодуль.ОбщегоНазначения.Модуль(167)}: НСтр("ru = 'Неверный первый параметр Ссылка в функции ОбщегоНазначения.ЗначенияРеквизитовОбъекта:
{ОбщийМодуль.ОбщегоНазначения.Модуль(401)}: Результат = ЗначенияРеквизитовОбъекта(Ссылка, ИмяРеквизита, ВыбратьРазрешенные, КодЯзыка);
{Расширение1 ОбщийМодуль.Расш1_ОбщегоНазначения.Модуль(5)}: Результат = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДокументОснование, "Организация");
{Расширение1 Документ.РеализацияТоваровУслуг.МодульОбъекта(7)}: Расш1_ОбщегоНазначения.СовпадениеОрганизации(ЭтотОбъект.Организация, ЭтотОбъект.ЗаказКлиента, Отказ, Ссылка);   

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

Теги:

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

Рейтинг@Mail.ru

Поиск