Имя: Пароль:
1C
1C 7.7
v7: Странное поведение реквизита документа
0 lamo4ok
 
04.07.12
15:39
Есть документ, в нем есть несколько функций/процедур и предопределенная процедура ВводНаОсновании(ДокументОснование). У этого документа есть реквизит ДокументОснование. При введении этого документа на основании в его реквизит ДокументОснование естественно попадает документ-основание (в предопределенной процедуре ВводНаОсновании используется сразу название реквизита, как и написано выше).
Но вот если из процедуры ВводНаОсновании() мы переходим в другие процедуры и функции модуля формы документа, то реквизит ДокументОснование становится пустым, как будто это не реквизит документа, а переменная, которая локально объявлена в процедуре ВводНаОсновании(). Но это не так, и более того - этот документ целиком перенесен из другой базы, в которой аналогичный код работает отлично и при переходе из ВводНаОсновании() в другие процедуры и функции значение ДокументОснование не обнуляется "на время".
1 1Сергей
 
04.07.12
15:42
покажи эту процедуру
2 lamo4ok
 
04.07.12
15:43
Процедура ВводНаОсновании(ДокументОснование, Переоформление=0)
   Перем ОписаниеОш;
   
   глПолучитьНомерСФ(, , Контекст);
   
   СинонимДокумента    = ПредставлениеВида();
   СинонимОснования    = ДокументОснование.ПредставлениеВида();
   
   Список    = глПолучитьСписокВводимыхНаОсновании(ДокументОснование);
   Поз        = Список.НайтиЗначение(Вид());
   
   // выполним проверку, можно ли вводить документ на основании ДокументОснование
   Если Поз = 0 Тогда
       // ДокументОснование не найден в списке разрешенных
       Предупреждение("Документ """ + СинонимДокумента +
                      """ нельзя вводить на основании """ + СинонимОснования + """",60);
       СтатусВозврата(0);Возврат;
   КонецЕсли;
                 
   Если ДополнительнаяПроверкаОснования(ДокументОснование, ОписаниеОш) = 0 Тогда
       Предупреждение(ОписаниеОш, 60);
       СтатусВозврата(0);
       Возврат;
   КонецЕсли;
   
   // документ основание должен быть проведен
   Если ДокументОснование.Проведен() = 0  Тогда
       Предупреждение("Документ """ + ПредставлениеВида() + """ нельзя вводить на основании не проведенного документа!",60);
       СтатусВозврата(0);
       Возврат;
   КонецЕсли;
   
   // все нормально, заполняем СФ на основании документа - основания
   ЗаполнитьШапкуНаОсн(Контекст,ДокументОснование);
   Если глЕстьРеквизитШапки("Валюта",ДокументОснование.Вид()) = 1 Тогда
       Валюта = ДокументОснование.Валюта;
   КонецЕсли;

   УчитыватьНДС    = 1;
   СуммаВклНДС      = 1;
   
   КодВидаОперации = "01";
   СпособВыставления = 1;
           
   Результат = ЗаполнениеПоДокументуОснованию();
   
   Если Переоформление = 1 Тогда УдалитьСтроки(); КонецЕсли;
   ЗаполнитьТабЧастьНаОсн();
   
   Если ПустоеЗначение(Результат) = 0 Тогда
       Сообщить(Результат);
       СтатусВозврата(0);
   КонецЕсли;
   
КонецПроцедуры // ВводНаОсновании()
3 dk
 
04.07.12
15:44
тип не совпадает
4 Ёпрст
 
04.07.12
15:44
Область видимости имён видать в школе не проходили ?

ты своим формальным параметром "забил" реквизит документа.
5 lamo4ok
 
04.07.12
15:44
+(2) Вот допустим код ЗаполнениеПоДокументуОснованию(), в которой ДокументОснование становится пустым (она находится естественно в том же модуле формы документа):


Функция ЗаполнениеПоДокументуОснованию()
               
   Если ДокументОснование.Выбран()=0 Тогда
       Возврат "Не выбран документ - основание";
   КонецЕсли;
               
           
   Фирма = ДокументОснование.Фирма;
   Если глЕстьРеквизитШапки("Договор", ДокументОснование.Вид()) = 1 Тогда
       Клиент    = ДокументОснование.Клиент;
       Договор    = ДокументОснование.Договор;    
   КонецЕсли;
   
   НомерИсходногоДокумента = глНомерНаПечать(ДокументОснование);
   ДатаИсходногоДокумента  = ДокументОснование.ДатаДок;
           
   Возврат "";
   
КонецФункции //ЗаполнениеПоДокументуОснованию()
6 1Сергей
 
04.07.12
15:45
Процедура ВводНаОсновании(ДокОснование, Переоформление=0)
   Перем ОписаниеОш;
   
   ДокументОснование = ДокОснование;


и не ипи моск
7 Ёпрст
 
04.07.12
15:46
(6) ага..
или в ЗаполнитьШапкуНаОсн нужно заполнить этот реквизит
8 lamo4ok
 
04.07.12
15:47
(4) Проходили, лол, но в том-то и дело что в другой базе все ровно также и там значение этого реквизита не теряется при переходе из ВводНаОсновании в др функции/процедуры. Почему так? Вообще вопрос-то да, скорее почему в предыдущей базе работает так, чем почему в этой - нет.

(6) Понятно что так можно.
(7) Точняк, сейчас проверю - скорее всего там и заполняется в старой базе.
9 lamo4ok
 
04.07.12
15:51
+(8) Точно, там и заполняется.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс