Имя: Пароль:
1C
1С v8
Конвертация даных
,
0 Aleksei_Pro
 
20.07.13
09:13
Ребят подсакжите , пишу перед выгрузкой код:
Если ПолучитьЗначение(ВходящиеДанные,"ДокументОснование").Вид() = "ПоступлениеМатериалов" Тогда
   ИмяПКО = "дор_ПоступлениеТоваровУслуг_материалов";
ИначеЕсли ПолучитьЗначение(ВходящиеДанные,"ДокументОснование").Вид() = "ПоступлениеОборудования" Тогда
   ИмяПКО ="дор_ПоступлениеТоваровУслуг_оборудование";
   ИначеЕслиПолучитьЗначение(ВходящиеДанные,"ДокументОснование").Вид() = "ПоступлениеОС" Тогда
   ИмяПКО = "дор_ПоступлениеОС";
ИначеЕсли ПолучитьЗначение(ВходящиеДанные,"ДокументОснование").Вид() = "ПоступлениеТоваров" Тогда
   ИмяПКО = "дор_ПоступлениеТоваровУслуг";
Иначе
КонецЕсли;
Значение =  ПолучитьЗначение(ВходящиеДанные,"ДокументОснование");

Источник ставлю пустой , приемник выбираю , флаг стоит "Получить из входящих данных" , документ в отладчике попадает , правило устанавливается , но почему то не выгружает реквизит "ДокументОснование" - подскажите в чем проблема!
1 Aleksei_Pro
 
20.07.13
09:15
(0) вот так устанавливаю:
ВходящиеДанные = СоздатьОбъект("СписокЗначений");
ВходящиеДанные.Установить("Номер",Док.НомерДокВходящий);
ВходящиеДанные.Установить("Дата",Док.ДатаДок);
ВходящиеДанные.Установить("Контрагент", Док.Контрагент);
ВходящиеДанные.Установить("ДоговорКонтрагента",Док.Договор);
ВходящиеДанные.Установить("Комментарий" ,"Создан на основании документа  - "  + Строка(Док)) ;
ВходящиеДанные.Установить("СуммаДокумента" , Док.Итог("Всего"));
ВалютаДокумента = ?(ПустоеЗначение(Док.Договор.ВалютаДоговора) = 0,Док.Договор.ВалютаДоговора,Параметры.Рубли);
ВходящиеДанные.Установить("ВалютаДокумента" ,ВалютаДокумента);
ВходящиеДанные.Установить("ВидСчетаФактуры","НаПоступление");
ВходящиеДанные.Установить("ДокументОснование",Док);
ВходящиеДанные.Установить("ДатаВходящегоДокумента", Док.ДатаДокВходящий);
ВходящиеДанные.Установить("НомерВходящегоДокумента" , Док.НомерДокВходящий);
       
ТЗ = СоздатьОбъект("ТаблицаЗначений");
     ТЗ.НоваяКолонка("ДокументОснование");
     ТЗ.НоваяСтрока();
     ТЗ.ДокументОснование = Док;
ВходящиеДанные.Установить("ДокументыОснования" , ТЗ);
       
ВыгрузитьПоПравилу(,, ВходящиеДанные,, "дор_СчетФактураПолученный_ДляПоступлений");
2 Rie
 
модератор
20.07.13
09:17
(1) Кто такой Док?
3 Aleksei_Pro
 
20.07.13
09:19
Перед обработкой:
Док = СоздатьОбъект("Документ.ПоступлениеТоваров");
Док.ВыбратьДокументы(Параметры.Датанач,Параметры.ДатаКон);
Пока Док.ПолучитьДокумент() = 1 Цикл
   Если СокрЛП(Док.ДатаНомерСчетаФактуры)<>""Тогда
+...(1)
КонецЦикла;
4 Aleksei_Pro
 
20.07.13
09:23
Есть мысли почему не выгружает?
5 Rie
 
модератор
20.07.13
09:25
(4) Не Док используй, а Док.ТекущийДокумент()
6 Aleksei_Pro
 
20.07.13
09:37
Спасибо большое)
7 Aleksei_Pro
 
20.07.13
09:42
Ребят еще вопросик. После загрузки документа "БухСправка" пишу заполнение НУ:
// НУ
//СторнируемыйНаборЗаписейБУ = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
//СторнируемыйНаборЗаписейБУ.Отбор.Регистратор.Значение = Объект.Ссылка;
//СторнируемыйНаборЗаписейБУ.Прочитать();

//СторнируемыйНаборЗаписейНУ = РегистрыБухгалтерии.Налоговый.СоздатьНаборЗаписей();
//СторнируемыйНаборЗаписейНУ.Отбор.Регистратор.Значение = Объект.Ссылка;
//СторнируемыйНаборЗаписейНУ.Прочитать();
//СторнируемыйНаборЗаписейНУ.Очистить();
//НалоговыйУчет.ЗаполнитьДанныеНалоговогоУчетаПоБухгалтерскомуУчету(СторнируемыйНаборЗаписейНУ, СторнируемыйНаборЗаписейБУ, Объект.Дата);
//ТЗ = СторнируемыйНаборЗаписейНУ.Выгрузить();
//ТЗ.ЗаполнитьЗначения(Объект.Дата,"Период");
//СторнируемыйНаборЗаписейНУ.Загрузить(ТЗ);
//СторнируемыйНаборЗаписейНУ.Записать();

Почему пишет не установлен владелец?
8 Rie
 
модератор
20.07.13
10:03
В обработчике ПослеЗагрузки объект ещё не записан в базу. Соответственно, Ссылка - пустая.
9 Aleksei_Pro
 
20.07.13
10:05
Спасибо нашел
10 Aleksei_Pro
 
20.07.13
10:15
А в какую лучше процедуру записать?
11 Aleksei_Pro
 
20.07.13
10:16
В ПослеЗагрузкиданных?
12 Rie
 
модератор
20.07.13
10:17
(10) А зачем это делать при загрузке? Регистры подчинены регистратору. Вот пусть при проведении он с ними и разберётся.
13 Aleksei_Pro
 
20.07.13
10:22
Это же бухгалтерская справка , там не прокатит так!
14 Rie
 
модератор
20.07.13
10:24
(13) Прошу прощения, не обратил внимание.
Тогда, похоже, придётся заниматься этим как раз ПослеЗагрузкиДанных.
15 Aleksei_Pro
 
20.07.13
10:26
Нет , процедура ПослеЗагрузкиОбъекта:
// НУ
Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Объект)) Тогда
   Если Объект.Метаданные().Имя = "ОперацияБух" Тогда
        СторнируемыйНаборЗаписейБУ = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
        СторнируемыйНаборЗаписейБУ.Отбор.Регистратор.Значение = Объект.Ссылка;
        СторнируемыйНаборЗаписейБУ.Прочитать();
       
        СторнируемыйНаборЗаписейНУ = РегистрыБухгалтерии.Налоговый.СоздатьНаборЗаписей();
        СторнируемыйНаборЗаписейНУ.Отбор.Регистратор.Значение = Объект.Ссылка;
        СторнируемыйНаборЗаписейНУ.Прочитать();
        СторнируемыйНаборЗаписейНУ.Очистить();
        НалоговыйУчет.ЗаполнитьДанныеНалоговогоУчетаПоБухгалтерскомуУчету(СторнируемыйНаборЗаписейНУ, СторнируемыйНаборЗаписейБУ, Объект.Дата);
        ТЗ = СторнируемыйНаборЗаписейНУ.Выгрузить();
        ТЗ.ЗаполнитьЗначения(Объект.Дата,"Период");
        СторнируемыйНаборЗаписейНУ.Загрузить(ТЗ);
        СторнируемыйНаборЗаписейНУ.Записать();
   КонецЕсли;
КонецЕсли;


Спасибо , что помогли!
16 Aleksei_Pro
 
20.07.13
10:29
Что то не помогло!
17 Aleksei_Pro
 
20.07.13
10:30
Или это функция тоже еще объект не записала.?
18 Rie
 
модератор
20.07.13
10:32
(16) ПослеЗагрузкиОбъекта вызывается перед ПослеЗагрузки у объекта. Так что в ней объект ещё не записан.
Составь список документов, в ПослеЗагрузкиДанных - пробегись по списку и поудаляй всё из регистра.
19 Aleksei_Pro
 
20.07.13
10:35
Да , я  так и сделал.
Спасибо за помощь.
20 Aleksei_Pro
 
20.07.13
10:35
Извините если отклек у вас минутки времени)))
21 Aleksei_Pro
 
20.07.13
10:41
А что Параметры.Датанач,Параметры.ДатаКон не доступны после зугрузки данных? Он пишет что не обнаружено
22 Aleksei_Pro
 
20.07.13
11:20
Почему пишу ПослеЗагрузкиОбъекта:
Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Объект)) Тогда
    Если Объект.Метаданные().Имя = "ОперацияБух" Тогда
        Параметры.МассивДокументовКПроведению.Добавить(Объект);
    КонецЕсли;
КонецЕсли;


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


И пишет переменная не определена МассивДокументовКПроведению . В чем дело?
23 Aleksei_Pro
 
20.07.13
11:23
После загрузки параметров пишу:
Параметры.Вставить("МассивДокументовКПроведению",Новый Массив);
24 Aleksei_Pro
 
20.07.13
19:13
Ребят подскажите как правильно загрнать определенный вид документов в массив и потом в процедуре после загрузке данных их провести ( обработать)?
Я делал как в (22) не сработало.
25 Aleksey
 
20.07.13
19:52
не после выгрузки данных, а После загрузки данных
26 Aleksey
 
20.07.13
19:56
Параметры.Вставить("МассивДокументовКПроведению",Новый Массив); - это ты проинициализировал массив


затем после загрузки поступление

Параметры.МассивДокументовКПроведению.Добавить(Объект)
27 Aleksei_Pro
 
21.07.13
11:43
(26) Я пробовал если добавить в после загрузки в документ то он ругается  и выдает ошибку:
   ТипОбъекта             =  Операция (бухгалтерский и налоговый учет)
   Объект                 =  Операция (бухгалтерский и налоговый учет)  от 01.01.2013 12:00:30
   Обработчик             =  ПослеЗагрузкиОбъекта
   ОписаниеОшибки         =  Значение не является значением объектного типа (Добавить)
   ПозицияМодуля          =  (33)
   КодСообщения           =  21

А сделал так :
Параметры.МассивДокументовКПроведению.Добавить(Объект)
28 Aleksei_Pro
 
21.07.13
11:56
Ребят если есть опыт подскажте, как правильно  и в каких фукгциях прописать.
29 Aleksey
 
21.07.13
12:36
а какое отношения имеет операция к проведению?
30 К_Дач
 
21.07.13
12:37
Если ты хочешь проводить документы, вновь созданные в базе-приемнике, то для этого оптимально использовать регистрацию в узле плана обмена. Новый доки попадут в таблицу регистрации после записи в приемнике. Пишешь обработку, где смотришь эту таблицу и дальше можешь проводить и все остальное.
31 Aleksey
 
21.07.13
12:47
(30) Ну проведением можно разрудить на этапе выгрузке, вот только у операции нет ТЧ и там нечего проводить, ибо запись идет непосредственно в регистр
32 К_Дач
 
21.07.13
12:54
(31) Тогда целесообразно написать ПКО вида (ДокументИсточник - РегистрБухгалтерииЗапись), тогда при выгрузке все доки сразу будут записываться в регистр. Можно управлять активностью записи. А все свойства подтягивать рекурсивно, написав соответсвующие ПКО
33 Aleksei_Pro
 
21.07.13
17:43
Мне нужно после загрузки "ОперацийБУХ" ( бухгалтерская справка ) выполнить вот этот код:
Для каждого ДокументКПроведению Из Параметры.МассивДокументовКПроведению цикл            
   ДокументОбъектКПроведению = ДокументКПроведению.ПолучитьОбъект();                                
   СторнируемыйНаборЗаписейБУ = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
   СторнируемыйНаборЗаписейБУ.Отбор.Регистратор.Значение = ДокументОбъектКПроведению.Ссылка;
   СторнируемыйНаборЗаписейБУ.Прочитать();            
   СторнируемыйНаборЗаписейНУ = РегистрыБухгалтерии.Налоговый.СоздатьНаборЗаписей();
   СторнируемыйНаборЗаписейНУ.Отбор.Регистратор.Значение = ДокументОбъектКПроведению.Ссылка;
   СторнируемыйНаборЗаписейНУ.Прочитать();
   СторнируемыйНаборЗаписейНУ.Очистить();
   НалоговыйУчет.ЗаполнитьДанныеНалоговогоУчетаПоБухгалтерскомуУчету(СторнируемыйНаборЗаписейНУ, СторнируемыйНаборЗаписейБУ, ДокументОбъектКПроведению.Дата);
   ТЗ = СторнируемыйНаборЗаписейНУ.Выгрузить();
   ТЗ.ЗаполнитьЗначения(ДокументОбъектКПроведению.Дата,"Период");
   СторнируемыйНаборЗаписейНУ.Загрузить(ТЗ);
   СторнируемыйНаборЗаписейНУ.Записать();
КонецЦикла;
34 GenV
 
21.07.13
22:42
(33)
Можно сделать так:
- При выгрузке заполнять твой массив документов в параметре.
- Создать одно/несколько ПКО в которых в после загрузки будет выполняться указанный код для "Объект.Ссылка". ПКО будет только искать ссылку и ничего не менять, документы должны выгружаться раньше.
 Можно и существующие ПКО использовать, но тогда нужно передавать флаг, что в "Посл загрузки объекта" у этого ПКО должен выполняться указанный код (можно через "ПараметрыОбъекта" флаг булево передавать).
- В "После выгрузки данных" выполнять выгрузку каждого документа из массива в параметре по созданным ПКО. Тогда в после загрузки для каждого документы выполниться код.