Имя: Пароль:
1C
1С v8
При программной записи стирается реквизит документа
0 sidalexsandr
 
23.01.13
17:24
Конфигурация УПП 1.3

Создаю программно документ РеализацияТоваровУслуг и заполняю шапку:
ПодчРеализация = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
   ПодчРеализация.Дата = РабочаяДата;

   //    //********************************************************************    
   ЗаполнениеДокументов.ЗаполнитьШапкуДокументаПоОснованию(ПодчРеализация, ЭтотОбъект);
   ПодчРеализация.ВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.ПродажаКомиссия;
ПодчРеализация.Записать(РежимЗаписиДокумента.Запись);

Вопрос: Почему после Записи очищаются реквизиты документа ДоговорКонтрагента и ВидПередачи?
1 sidalexsandr
 
23.01.13
17:25
Процедуру ПередЗаписью() закомментировал. Всеравно 2 этих реквизита очищаются.
2 Wobland
 
23.01.13
17:25
почему так решил?
3 sidalexsandr
 
23.01.13
17:26
(2) Если убрать строчку ПодчРеализация.Записать(РежимЗаписиДокумента.Запись);

То все нормально.
4 Bober
 
23.01.13
17:26
(0) есть подписка, есть проверка заполнения. Еще много мест где может это происходить
5 sidalexsandr
 
23.01.13
17:28
(4) Проверка заполнения - вроде только срабатывает когда незаполненно?
6 DrShad
 
23.01.13
17:30
[ПодчРеализация.ВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.ПродажаКомиссия;] все зло здесь!
7 Reset
 
23.01.13
17:31
Не удивлюсь, если (1) проделано на форме.
Это ни к чему, просто к слову
8 КуплюКровать
 
23.01.13
17:32
(0)отладчиком умеешь пользоваться?
9 mehfk
 
23.01.13
17:40
(0)
// Процедура вызывается перед записью документа
//
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
   
   Если ОбменДанными.Загрузка  Тогда
       Возврат;
   КонецЕсли;
           
   мУдалятьДвижения = НЕ ЭтоНовый();
   
   // Если договор с комиссионером, то надо почистить закладку "Услуги".
   Если Услуги.Количество() > 0
       И (ДоговорКонтрагента.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СКомиссионером
       ИЛИ ВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.ОтгрузкаБезПереходаПраваСобственности) Тогда
       Услуги.Очистить();
       
   КонецЕсли;
   
   // Если вид операции документа "АктВыполненныхРабот", то очистим ТЧ Товары и ВозвратнаяТара
   Если ВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.АктВыполненныхРабот Тогда
       
       Если Товары.Количество() > 0 Тогда
           Товары.Очистить();
       КонецЕсли;
       
       Если ВозвратнаяТара.Количество() > 0 Тогда
           ВозвратнаяТара.Очистить();
       КонецЕсли;
       
   КонецЕсли;
   
   // Проверка заполнения единицы измерения мест и количества мест
   ОбработкаТабличныхЧастей.ПриЗаписиПроверитьЕдиницуИзмеренияМест(Товары);
   ОбработкаТабличныхЧастей.ПриЗаписиПроверитьСтавкуНДС(ЭтотОбъект, Товары);
   ОбработкаТабличныхЧастей.ПриЗаписиПроверитьСтавкуНДС(ЭтотОбъект, Услуги);
   
   // Посчитать суммы документа и записать ее в соответствующий реквизит шапки для показа в журналах
   СуммаДокумента = УчетНДС.ПолучитьСуммуДокументаСНДС(ЭтотОбъект, "Товары") + УчетНДС.ПолучитьСуммуДокументаСНДС(ЭтотОбъект, "Услуги");
   
   // В этом случае почистим в табличных частях поле СпособСписанияОстаткаТоваров.
   Если ВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.Оборудование Тогда
       Сделка = Неопределено;
       Для каждого СтрокаТаблицы Из ЭтотОбъект.Товары Цикл
           Если СтрокаТаблицы.СпособСписанияОстаткаТоваров = Перечисления.СпособыСписанияОстаткаТоваров.ИзРезерва Тогда
               СтрокаТаблицы.СпособСписанияОстаткаТоваров = "";
           КонецЕсли;
       КонецЦикла;
       
       Для Каждого СтрокаТаблицы Из ЭтотОбъект.ВозвратнаяТара Цикл
           Если СтрокаТаблицы.СпособСписанияОстаткаТоваров = Перечисления.СпособыСписанияОстаткаТоваров.ИзРезерва Тогда
               СтрокаТаблицы.СпособСписанияОстаткаТоваров = "";
           КонецЕсли;
       КонецЦикла;
   //для брака способ списания всегда - со склада
   ИначеЕсли ВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.Брак Тогда
       Для каждого СтрокаТаблицы Из ЭтотОбъект.Товары Цикл
           Если СтрокаТаблицы.СпособСписанияОстаткаТоваров = Перечисления.СпособыСписанияОстаткаТоваров.ИзРезерва Тогда
               СтрокаТаблицы.СпособСписанияОстаткаТоваров = Перечисления.СпособыСписанияОстаткаТоваров.СоСклада;
               Сообщить("В строке №"+СтрокаТаблицы.НомерСтроки+" табличной части ""Товары"" изменен способ списания остатка товаров: было 'Из резерва', установлено 'Со склада'."+Символы.ПС+"   Списывать брак из резерва запрещено.", СтатусСообщения.Внимание);
           КонецЕсли;
       КонецЦикла;
       
       Для Каждого СтрокаТаблицы Из ЭтотОбъект.ВозвратнаяТара Цикл
           Если СтрокаТаблицы.СпособСписанияОстаткаТоваров = Перечисления.СпособыСписанияОстаткаТоваров.ИзРезерва Тогда
               СтрокаТаблицы.СпособСписанияОстаткаТоваров = Перечисления.СпособыСписанияОстаткаТоваров.СоСклада;
               Сообщить("В строке №"+СтрокаТаблицы.НомерСтроки+" табличной части ""Возвратная тара"" изменен способ списания остатка товаров: было 'Из резерва', установлено 'Со склада'."+Символы.ПС+"   Списывать брак из резерва запрещено.", СтатусСообщения.Внимание);
           КонецЕсли;
       КонецЦикла;
   Иначе
       // Необходимо, чтобы качество обязательно было "Новый"
       КачествоНовый = Справочники.Качество.Новый;
       Для каждого СтрокаТаблицы Из ЭтотОбъект.Товары Цикл
           Если СтрокаТаблицы.Качество <> КачествоНовый Тогда
               СтрокаТаблицы.Качество = КачествоНовый;
           КонецЕсли;
       КонецЦикла
       
   КонецЕсли;
   
   Если НЕ ЗначениеЗаполнено(Сделка) И Сделка <> Неопределено Тогда
       Сделка = Неопределено;
   КонецЕсли;
   
   УчетНДС.СинхронизацияПометкиНаУдалениеУСчетаФактуры(ЭтотОбъект);
   
   УправлениеЗаказами.ЗаполнитьЗаказПокупателяВТЧ(ВидОперации,ЭтотОбъект, "Реализация");
   Для каждого СтрокаТаблицы Из ЭтотОбъект.Товары Цикл
       Если НЕ ЗначениеЗаполнено(СтрокаТаблицы.ЗаказПокупателя) И СтрокаТаблицы.СпособСписанияОстаткаТоваров = Перечисления.СпособыСписанияОстаткаТоваров.ИзРезерва Тогда
           СтрокаТаблицы.СпособСписанияОстаткаТоваров = Перечисления.СпособыСписанияОстаткаТоваров.СоСклада;
       КонецЕсли;
   КонецЦикла;
   
   Для каждого СтрокаТаблицы Из ЭтотОбъект.ВозвратнаяТара Цикл
       Если НЕ ЗначениеЗаполнено(СтрокаТаблицы.ЗаказПокупателя) И СтрокаТаблицы.СпособСписанияОстаткаТоваров = Перечисления.СпособыСписанияОстаткаТоваров.ИзРезерва Тогда
           СтрокаТаблицы.СпособСписанияОстаткаТоваров = Перечисления.СпособыСписанияОстаткаТоваров.СоСклада;
       КонецЕсли;          
   КонецЦикла;
   
   ЗаполнитьСкладыВТЧ();
   
   // Удаление неиспользуемых строк табличной части "Серийные номера".
   УчетСерийныхНомеров.УдалитьНеиспользуемыеСтрокиПодчиненнойТЧ(ЭтотОбъект, мПараметрыСвязиСтрокТЧ, "Товары");
   УчетСерийныхНомеров.УдалитьНеиспользуемыеСтрокиПодчиненнойТЧ(ЭтотОбъект, мПараметрыСвязиСтрокТЧ, "СоставНабора", "СерийныеНомераСоставНабора");
       
КонецПроцедуры // ПередЗаписью
10 sidalexsandr
 
23.01.13
17:42
(9)Спасибо, но я в (1) писал, что пробовал даже полностью закомментировать ПередЗаписью(). Ничего не помагает.
11 Reset
 
23.01.13
17:45
(10) Читал (6)?
Перенеси строку до заполнения шапки.
12 DrShad
 
23.01.13
17:45
(11) ну взял и весь холивар испортил
13 sidalexsandr
 
23.01.13
17:48
(11) Я её вообще закомментировал, не помогло.
14 sidalexsandr
 
23.01.13
17:49
Всем спасибо. Пока не нашел причину.
15 Reset
 
23.01.13
17:50
(14) Тогда учись (8) :)
16 DrShad
 
23.01.13
17:57
(13) а кто говорил об закомментировать?
17 mehfk
 
23.01.13
18:08
(14) ВидПередачи - посмотри в отладчике. Он не то что не очищается, он и не заполняется :)
18 GROOVY
 
23.01.13
18:21
Возможно реквизиты формы не привязаны к реквизитам документа?
19 Reset
 
23.01.13
18:23
(17)(18)

из (2)->(3) следует, что заполняется и привязан.
Но, может, я плохо интерпретирую ответ автора.
20 mehfk
 
23.01.13
18:47
(18) в коде ТС работы с формой нет. Но мысль вместо записи док-та открыть форму тоже была.
(19) м.б., не хуже и не лучше чем остальные.
21 sidalexsandr
 
24.01.13
10:40
(17) Написал в коде : ПодчРеализация.ВидПередачи = Перечисления.ВидыПередачиТоваров.СоСклада;
22 sidalexsandr
 
24.01.13
10:41
(17) Спасибо.
23 Reset
 
24.01.13
12:04
(22) То есть ты всем дурил голову, начиная с (3) и поле у тебя просто не было заполнено с самого начала.
Браво.
Верная мысль была, оказыватся, в (2), а я хреновый телепат и переоценил тебя