Имя: Пароль:
1C
1С v8
Конвертация документа Операция Бух и его проводки
,
0 wmzdeadman
 
22.12.11
18:26
Суть такая. Есть документ поступление товаров. Необходимо перегрузить его в свернутом виде, ввиде документа операция бух с проводками. база источник - КА (1.0). база приемник - КА (1.1). Делаю в конвертации. Создал ПКО - ОперацияБух, создал все необходимые ПКС. В ПВД ПередОбработкой делаю Выборкуданных, где есть все нужные реквизиты для заполнения и таблица Хозрасчетный для подсовывания движений по регистру. В ПКО ставлю галку "Не запоминать выгруженные объекты". В итоге перегрузка есть, движений нет. Как скормить движения документу?
1 Господин ПЖ
 
22.12.11
18:28
перенос операции - не такой простой секос как хотелось бы... взять из типовых переносов
2 wmzdeadman
 
22.12.11
18:31
смотрел типовые. не воткну как правильно надо переносить бух регистр
3 wmzdeadman
 
22.12.11
21:40
подниму тему
4 vmv
 
22.12.11
21:45
я сделал скрытую табличную часть аналогичную по структуре регистру в документе операция и грузил в нее, потом подписчик ПередЗаписью() проверял если табличная часть не пуста - заполни регисстр из этой ТЧ и запиши, потом очисти ТЧ по желанию в этом же подписчике.

на производительность плевать, если тч очищать после загрузки, то и хрен с ней с лишней табличной частью, зато все влетает пулей, да и голова не болит.
5 vmv
 
22.12.11
21:47
"В итоге перегрузка есть, движений нет"(с)

верность этого постулата и причину нет легко проверить

открываешь регистр бухи и ищешь движения по регистратору, если их нет, то данные упали не туда и нужно правильно скормить измерения, субконто на проводках и пр.
6 wmzdeadman
 
22.12.11
21:50
(4) а что... как вариант, если уж совсем не добью...
7 wmzdeadman
 
22.12.11
21:51
(5) документ операция появляется в базе-приемнике, но там только номер, дата, сумма, содержание.... движений нет.
8 vmv
 
22.12.11
22:12
(7) варианта всего два

1. при загрузке движения вообще не записались в регистр бухгалтерии
2. при загрузке движения записались не по тем измерениям(маловероятно)


вот что у меня в подписчике, правда я гружу из эксель с удаленных подразделение в базу так называемая главная книга, где только документы "ОперацияБух" и больше ничего.

и там еще пляски с полученим кода счета - рещение не блестящее, но тьотки без претензий

// ОбщийМодуль      : AddПодписки    (2011г.)
// Разработчики: ......

Процедура AddПередЗаписьюПланСчетовХозрасчетный(Источник, Отказ) Экспорт

   Источник.AddКодБезРазделителя = СтрЗаменить(Источник.Код, "-", "");
   Источник.AddКодБезРазделителя = СтрЗаменить(Источник.Код, "_", "");
   
КонецПроцедуры

Процедура AddПередЗаписьюОперацияБух(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
   
   Если Источник.AddКорректировка Тогда
       Возврат;
   КонецЕсли;
   
   Для каждого ПроводкиДокумента из Источник.Движения Цикл
       
       Если ТипЗнч(ПроводкиДокумента) <> Тип("РегистрБухгалтерииНаборЗаписей.Хозрасчетный") Тогда
           Продолжить;
       КонецЕсли;
       
       ТЧ           = Источник.AddТабличнаяЧасть;
       ТЧКоличество = ТЧ.Количество();
       
       ПроводкиДокументаКоличество =  ПроводкиДокумента.Количество();
       
       Для Инд = 0 По (ПроводкиДокументаКоличество-1)  Цикл
           
           Состояние("" + (Инд+1) + "("+ПроводкиДокументаКоличество+")");
           Проводка = ПроводкиДокумента[Инд];
           
           Если Не ТЧКоличество Тогда
               НоваяСтрокаТЧ = ТЧ.Добавить();
               НоваяСтрокаТЧ.СчетДт       = Проводка.СчетДт;
               НоваяСтрокаТЧ.СчетКт       = Проводка.СчетКт;
               НоваяСтрокаТЧ.Сумма        = Проводка.Сумма;
               НоваяСтрокаТЧ.Содержание   = Проводка.Содержание;
               НоваяСтрокаТЧ.НомерЖурнала = Проводка.НомерЖурнала;
           КонецЕсли;
           
           ДтСлужебноеЗначениеСубконто1 = ПолучитьСлужебноеЗначениеСубконто1(Проводка.СчетДт, Истина);
           КтСлужебноеЗначениеСубконто1 = ПолучитьСлужебноеЗначениеСубконто1(Проводка.СчетКт, Ложь);
           
           Если ЗначениеЗаполнено(ДтСлужебноеЗначениеСубконто1) Тогда
               ДтВидСубконто1 = Проводка.СчетДт.ВидыСубконто[0].ВидСубконто;
               Проводка.СубконтоДт.Вставить(ДтВидСубконто1, ДтСлужебноеЗначениеСубконто1);    
           КонецЕсли;
           
           Если ЗначениеЗаполнено(КтСлужебноеЗначениеСубконто1) Тогда
               КтВидСубконто1 = Проводка.СчетКт.ВидыСубконто[0].ВидСубконто;
               Проводка.СубконтоКт.Вставить(КтВидСубконто1, КтСлужебноеЗначениеСубконто1);    
           КонецЕсли;
           
       КонецЦикла;
       
   КонецЦикла;
   
КонецПроцедуры
Функция ПолучитьСлужебноеЗначениеСубконто1(Счет, ЭтоДебет)

   Если Счет.ВидыСубконто.Количество() Тогда
       
       ВидыСубконто1 = Счет.ВидыСубконто[0];
       
       ВидыСубконто1ТипЗначения = ВидыСубконто1.ВидСубконто.ТипЗначения;
       ВидыСубконто1Типы        = ВидыСубконто1ТипЗначения.Типы();
       Если Не ВидыСубконто1Типы.Количество() Тогда
           Возврат Неопределено;
       КонецЕсли;
       
       ОбъектМетаданных = Метаданные.НайтиПоТипу(ВидыСубконто1Типы[0]);
       Если ОбъектМетаданных = Неопределено Тогда
           Возврат Неопределено;
       КонецЕсли;
       Если Метаданные.Справочники.Содержит(ОбъектМетаданных) Тогда
           МенеждерСубконто1 = Справочники[ОбъектМетаданных.Имя];
           Наименование = ?(ЭтоДебет, "Дебет", "Кредит") + "Служебный" + ОбъектМетаданных.Имя;
           СлужебноеЗначениеСубконто1 = МенеждерСубконто1.НайтиПоНаименованию(Наименование, Истина);
           Если ЗначениеЗаполнено(СлужебноеЗначениеСубконто1) Тогда
               Возврат СлужебноеЗначениеСубконто1;
           КонецЕсли;
           НовыйЭлемент = МенеждерСубконто1.СоздатьЭлемент();
           НовыйЭлемент.УстановитьНовыйКод();
           НовыйЭлемент.Наименование = Наименование;
           Попытка
               НовыйЭлемент.Записать();
               Возврат НовыйЭлемент.Ссылка;
           Исключение
               Сообщить("Служебные элементы справочника " + ОбъектМетаданных.Имя + " создать автоматически не удалось");
               Возврат Неопределено;
           КонецПопытки;
       КонецЕсли;
   КонецЕсли;

   Возврат Неопределено;
   
КонецФункции

Функция ПолучитьСчетПоКоду(КодСчета) Экспорт
   
   КодСчетаТолькоЦифры = "";
   Для а = 1 По СтрДлина(КодСчета) Цикл
       Символ = Сред(КодСчета, а, 1);
       КодСимвола = КодСимвола(Символ);
       Если КодСимвола >= 48 И КодСимвола <= 57 Тогда
           КодСчетаТолькоЦифры = КодСчетаТолькоЦифры + Символ;
       КонецЕсли;
   КонецЦикла;

   СсылкаСчета = ПланыСчетов.Хозрасчетный.НайтиПоРеквизиту("AddКодБезРазделителя", КодСчетаТолькоЦифры);
   
   Если СсылкаСчета.Пустая() Тогда
       Сообщить("Не найдет счет: " + КодСчета);
   КонецЕсли;
   
   Возврат СсылкаСчета;
   
КонецФункции

 
Процедура СоздатьЗаписиРегистраБухгалтерии(Объект, Отказ) Экспорт
   
   РегХозрасчетный = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
   РегХозрасчетный.Отбор.Регистратор.Значение = Объект.Ссылка;
   РегХозрасчетный.Очистить();
   
   НомерСтроки = 0;
   ОбъектAddТабличнаяЧастьКоличество = Объект.AddТабличнаяЧасть.Количество();    
   
   Для Каждого СтрокаДанные Из Объект.AddТабличнаяЧасть Цикл
       
       НомерСтроки = НомерСтроки + 1;
       Состояние("Запись: " + НомерСтроки +"("+ОбъектAddТабличнаяЧастьКоличество+")");
               
       РегЗапись = РегХозрасчетный.Добавить();
       ЗаполнитьЗначенияСвойств(РегЗапись, СтрокаДанные);
       
       РегЗапись.Период      = Объект.Дата;
       РегЗапись.Регистратор = Объект.Ссылка;
       РегЗапись.Организация = Справочники.Организации.НайтиПоКоду("000000001");
       
   КонецЦикла;
   
   РегХозрасчетный.Записать();
   
КонецПроцедуры
9 Сияющий Асинхраль
 
22.12.11
22:22
Возьми конвертацию типовую бп 1.6->2.0 там в конвертации ОперацияБух все понятно
10 Stim213
 
22.12.11
22:25
(9) шутка года, блин.
вот пример одного из запросов в правилах по переносу 16-20
http://i018.radikal.ru/1112/23/8f2f449da312.jpg
11 Stim213
 
22.12.11
22:26
зы. автор, стукнись завтра в аську, расскажу
12 Сияющий Асинхраль
 
22.12.11
22:39
(16) я по принципу 1.6 -> 2.0 не только операции, но и вводы начальных остатков по нетиповым счетам написал, когда делал бп 2.0 <-> упп. Все работает. Все понятно. Только вчера правил
13 Stim213
 
22.12.11
22:41
(12) ну может и понятно. но это не совсем то, по чему следует знакомиться с переносом ручных операций
14 Сияющий Асинхраль
 
22.12.11
22:49
А ты сам знакомился? По мне как раз с этим и надо знакомиться, если хочешь спецом стать. А в способ въезжаешь очень быстро, мне получаса хватило, чтобы по аналогии свой вариант написать
15 Stim213
 
22.12.11
23:04
(14) я  учился таким выкрутаса на КД на более простых примерах, и щетаю, так лучше для каждого. от простого к сложному.
16 Сияющий Асинхраль
 
22.12.11
23:42
Да что ты там сложного то нашел? Одна маленькая процедурка строчек на 70 из которых половина элементарный запрос. Хотя ХЗ, я как то стал относиться просто - если меньше 1000 строчек, то все просто :-)
17 Steel_Wheel
 
23.12.11
00:23
Я сегодня все-таки со Стимом соглашусь. В КД может быть много неявных зависимостей (ПВД, алгоритмы и тп). Если есть простой наглядный способ, лучше начать с него. Оптимизировать и потом можно
AdBlock убивает бесплатный контент. 1Сергей