Имя: Пароль:
1C
 
Перенос ручных операций с помощью КД из 77 в 8. Как сделать?
0 bublik
 
11.11.10
13:14
Собственно сабж. База бухгалтерия бюджет.
1 Рэйв
 
11.11.10
13:16
(0)Наверное надо настроить правила.
2 bublik
 
11.11.10
13:25
это понятно)) только у ручной операции нет табчасти, проводки пишутся сразу в регистр, и не понятно как проводки  переносить.
3 Живой Ископаемый
 
11.11.10
13:27
в книжке есть пример. у меня получилось
4 ДенисЧ
 
11.11.10
13:27
В книжке по КД есть пример этого..
ТОлько там коду на 3 страницы книги :-(
5 Рэйв
 
11.11.10
13:32
(2)Я давно гогда то перносил через текст.

при загрузке создаешь док ,пишешь все в регистр, а док подставляешь как регистратор
6 Живой Ископаемый
 
11.11.10
13:39
1. То что у операции нет табличной части, а проводки пишутся регистр, в КД описывается так:
создаем ПКГС (правило конвертации ГРУППЫ свойств) - в табличной чатси ПКО это отражается как Папочка, то есть иемнно ее нужно завести. И для этой папчоки ты указываешь, что источник данных - пустой,а приемник - Хозрасчетный (твой РБ в 8.1)
7 Живой Ископаемый
 
11.11.10
13:41
2. Для этого ПКГС в обработчик "Перед обработкой" ты пишешь код, который а) подготовит в качестве источника данных ТЗ, переберет проводки твоей ручной операции и заполнит эту твою ТЗ.... считай что это и будет табличной частью твоей операции в 77, и эта табличная часть будет источником данных.
8 Живой Ископаемый
 
11.11.10
13:42
в конце кода обработчика так и напишешь:
КоллекцияОбъектов=ТЗсПроводками;
там отдельный нюанс с Субконтами, ноо нем позже
9 bublik
 
11.11.10
13:42
(5) вот по хозрасчетке я тоже через текстовый файл делал, а в бюджете там счета в 8 и 77 отличаются немного. Например, в 77 счет 301.1 а в 8-ке 301; в 77 счет А21.1.1 а в 8-ке 21... запаришься код писать
10 Живой Ископаемый
 
11.11.10
13:45
3. Зайдя в эту папочку создаешь ПКС для каждого реквизита проводки - СчетДТ, СчетКт, Сумма, Количество, Регистратор, и т.п.при чем для каждого ПКС пишешь в обработчике "Перед выгрузкой" напримре такое:
Значение = ОбъектКоллекции.СчетДт;
и указываешь правило - например ПланСчетовХозрасчетный
2(5)А в ПКО "ПланСчетовХозрасчетный" на закладке Конвертация Значений ты пишешь, что счету 301.1 в 77 соответсвует счет 301 в 8-ке...

И все
11 bublik
 
11.11.10
13:46
спасибо за ответы
12 ДенисЧ
 
11.11.10
13:48
(8) про субконты продолжай...
13 Живой Ископаемый
 
11.11.10
13:49
:) (12) гы... пусть сначала это переварит... или ты для себя?
14 Живой Ископаемый
 
11.11.10
13:53
В Пункте 2, нам нужно предусмотреть, что Поле Таблицы значений СубконтоДт и СубконтоКТ также будут таблицами значений...
и поэтому их заполнять будем примерно так:


   ТЗсПроводками.СубконтоДт = СоздатьОбъект("ТаблицаЗначений");
   ТЗсПроводками.СубконтоДт.НоваяКолонка("Ключ");
   ТЗсПроводками.СубконтоДт.НоваяКолонка("Значение");//
Для НомерСубконто=1 По Операция.Дебет.Счет.КоличествоСубконто() Цикл
           ТЗсПроводками.СубконтоДт.НоваяСтрока();
           ТЗсПроводками.СубконтоДт.Ключ = Операция.Дебет.Счет.ВидСубконто(НомерСубконто);
           ТЗсПроводками.СубконтоДт.Значение = Операция.Дебет.Субконто(НомерСубконто);
   КонецЦикла;
15 ДенисЧ
 
11.11.10
13:53
(13) для себя, разумеется :-)
16 Живой Ископаемый
 
11.11.10
13:57
На самом деле у меня тут было больше всего кода, который учитывал разницу в планах счетов между 77 и 8.
Например именно тут я переставлял местами субконто по мат. счетам - в 77 идет Склад\Номенклатура\партия, в 8 - Номенклатура\Партия\Склад

Писал что-то типа:


       ИначеЕсли (Лев(Операция.Кредит.Счет.Код,2)="20") ИЛИ (Лев(Операция.Кредит.Счет.Код,2)="28") ИЛИ (Лев(Операция.Кредит.Счет.Код,2)="22")  Тогда
           Если НомерСубконто=1 Тогда
               ТЗсПроводками.СубконтоКт.НоваяСтрока();                      //первым по 20-ке идет номенклатура
               ТабличнаяЧасть.СубконтоКт.Ключ = Операция.Кредит.Счет.ВидСубконто(2);
               ТабличнаяЧасть.СубконтоКт.Значение = Операция.Кредит.Субконто(2);
           ИначеЕсли НомерСубконто=2 Тогда
               ТабличнаяЧасть.СубконтоКт.НоваяСтрока();                      //вторым по 20-ке идет партия
               ТЗсПроводками.СубконтоКт.Ключ = Операция.Кредит.Счет.ВидСубконто(3);
               ТабличнаяЧасть.СубконтоКт.Значение = Операция.Кредит.Субконто(3);
           ИначеЕсли НомерСубконто=3 Тогда
               Если (Лев(Операция.Кредит.Счет.Код,3)="283") Тогда
               Иначе
                   ТЗсПроводками.СубконтоКт.НоваяСтрока();                      //третьим по 20-ке идет склад
                   ТЗсПроводками.СубконтоКт.Ключ = Операция.Кредит.Счет.ВидСубконто(1);
                   ТЗсПроводками.СубконтоКт.Значение = Операция.Кредит.Субконто(1);
               КонецЕсли;
           КонецЕсли;

И тому подобное... Может это можно было еще как-то обработать, и настоящие крутые дядьки заклеймят такое быдлокодом - но у меня так...
17 Живой Ископаемый
 
11.11.10
14:09
Далее переходим к ПКС СубконтоДт (тому что внутри папочки-ПГКС "Хозрасчетный")
В обработчкие перед выгрузкой для этих ПКС у нас написано что и для всех:
Значение = ОбъектКоллекции.СубконтоДт;

Но еще мы добавляем обработчик "ПриВыгрузке"

Параметры.ПараметрыАлгоритмов.УдалитьВсе();
Параметры.ПараметрыАлгоритмов.Установить("Счет", ОбъектКоллекции.СчетДт);
Параметры.ПараметрыАлгоритмов.Установить("ВидСубконто", ВидСубконто);
Параметры.ПараметрыАлгоритмов.Установить("Субконто", Субконто);
Параметры.ПараметрыАлгоритмов.Установить("НомерСубконто", Число(Значение.НомерСтроки));
ПриВыгрузкеСубконто();


Что мы делаем этим кодом? Мы заполняем параметры отдельного алгоритма, который у нас так и называется ПриВыгрузкеСубконто - находится на вкладке "Алгоритмы\Запросы" правил конвертации вцелом...

В общем там еще есть нюансы, которые я могу с ходу не вспомнить, остались только смутные идеи... Например бывает такое что Один и тот же вид субконто с одного счета должен перейти в один восьмерочный вид, а с другого счета - в другой... Это ведет к ому, что приходится создавать более одного ПКО "ВидыСубконтоХозрасчетные".

http://www.screencast.com/users/october.hammer/folders/Jing/media/e6cbafe9-01a7-4ec6-971b-a4d6077597d7
18 Птица
 
11.11.10
14:12
ээ
19 Живой Ископаемый
 
11.11.10
14:14
2(18) тока не нужно критиковать... :) Мне это все не очень легко далось и к написанному очень привязан. :) Тем более все работает именно так как хочу. :) и более того - если встает нужда повторить - то тоже все работает.
20 Живой Ископаемый
 
11.11.10
14:23
Короче текст алгоритма при выгрузке субконто у меня такой:

Счет = Параметры.ПараметрыАлгоритмов.Получить("Счет");
ВидСубконто = Параметры.ПараметрыАлгоритмов.Получить("ВидСубконто");
Субконто = Параметры.ПараметрыАлгоритмов.Получить("Субконто");
НомерСубконто = Параметры.ПараметрыАлгоритмов.Получить("НомерСубконто");

Если ПустоеЗначение(ВидСубконто) = 1 Тогда
   Субконто = Параметры.ПараметрыАлгоритмов.Получить("Субконто");
   НомерСубконто = Параметры.ПараметрыАлгоритмов.Получить("НомерСубконто");
   Если Счет.КоличествоСубконто() >= НомерСубконто Тогда
       ВидСубконто = Счет.ВидСубконто(НомерСубконто);
   Иначе
       Отказ = 1;
       Возврат "";
   КонецЕсли;
КонецЕсли;
ИмяПКО = "";

Если (Лев(Счет.Код,2) = "65") ИЛИ (Лев(Счет.Код,3) = "642") ИЛИ (Лев(Счет.Код,2) = "12")  ИЛИ (Лев(Счет.Код,3) = "133") ИЛИ (Лев(Счет.Код,4) = "1521")
   ИЛИ (Лев(Счет.Код,4) = "1531")
   ИЛИ (Лев(Счет.Код,2) = "95")  ИЛИ (Лев(Счет.Код,2) = "96")  ИЛИ (Лев(Счет.Код,2) = "97")  
   ИЛИ (Лев(Счет.Код,2) = "98")  ИЛИ (Лев(Счет.Код,2) = "99") Тогда
   //по 12-м - необоротные активы превращаются не в оС/инвестции,а в нематериальные активы
   //по 133-му - аналогично
   ИмяПКОВидСубконто  = "ВидыСубконтоХозрасчетные00001";
ИначеЕсли (Лев(Счет.Код,3) = "151") ИЛИ (Лев(Счет.Код,4) = "1532")  ИЛИ (Лев(Счет.Код,4) = "1522") ИЛИ (Лев(Счет.Код,4) = "1542")  Тогда
   ИмяПКОВидСубконто  = "ВидыСубконтоХозрасчетные00002";
ИначеЕсли (Лев(Счет.Код,4) = "1541")   Тогда
   ИмяПКОВидСубконто  = "ВидыСубконтоХозрасчетные00003";
   ИмяПКО = "ИнвестицииВНМА";
   //        Сообщить(""+ОбъектКоллекции.СчетКт.Код+" "+ИмяПКОВидСубконто);
ИначеЕсли (Лев(Счет.Код,3) = "206") И  (ВидСубконто=ВидыСубконто.МестаХранения) Тогда
   ИмяПКО = "МХВКонтрагента";
   ИмяПКОВидСубконто  = "ВидыСубконтоХозрасчетные00002";
Иначе
   ИмяПКОВидСубконто  = "ВидыСубконтоХозрасчетные";
КонецЕсли;


//ИмяПКОВидСубконто = "ВидыСубконтоХозрасчетные";
//Сообщить(""+ВидСубконто);
Если ВидСубконто = ВидыСубконто.Сотрудники Тогда
   ИмяПКО = "ФизическиеЛица";

ИначеЕсли ВидСубконто = ВидыСубконто.Контрагенты Тогда
   ИмяПКО = "Контрагенты";
//ИначеЕсли ВидСубконто = ВидыСубконто.Эмитенты Тогда
//    ИмяПКО = "Контрагенты";
ИначеЕсли ВидСубконто = ВидыСубконто.ВидыИспользованияАмортизации Тогда
   ИмяПКО = "ВидыИспользованияАмортизации";
ИначеЕсли ВидСубконто = ВидыСубконто.Гарантии Тогда
   ИмяПКО = "Гарантии";
ИначеЕсли ВидСубконто = ВидыСубконто.ДоходыБудущихПериодов Тогда
   ИмяПКО = "ДоходыБудущихПериодов";
ИначеЕсли ВидСубконто = ВидыСубконто.КонтрактныеОбязательства Тогда
   ИмяПКО = "КонтрактныеОбязательства";
ИначеЕсли ВидСубконто = ВидыСубконто.Партии Тогда
   ИмяПКО = "Партия";
ИначеЕсли ВидСубконто = ВидыСубконто.ЦенныеБумаги Тогда
   ИмяПКО = "ЦенныеБумаги";
ИначеЕсли ВидСубконто = ВидыСубконто.Заказы Тогда
   //Сообщить("Вид субконто Заказ");
   ИмяПКО = "ДокументРасчетовСКонтрагентом";
ИначеЕсли ВидСубконто = ВидыСубконто.ТМЦ Тогда
   ИмяПКО = "Номенклатура";
ИначеЕсли ВидСубконто = ВидыСубконто.НеоборотныеАктивы Тогда
   ИмяПКО = "ОсновныеСредства";
ИначеЕсли ВидСубконто = ВидыСубконто.ВидыЗатрат Тогда    
   ИмяПКО = "СтатьиЗатрат";
ИначеЕсли ВидСубконто = ВидыСубконто.Инвестиции Тогда
   Если (Лев(Счет.Код,2) = "10") Тогда
       //если это третье субконто - например в 105-м счете, то его не выгружаем вовсе.
       ИмяПКОВидСубконто  = "ВидыСубконтоХозрасчетные00001";
       ИмяПКО = "";
   ИначеЕсли (Лев(Счет.Код,4) = "1541") Тогда
       ИмяПКОВидСубконто  = "ВидыСубконтоХозрасчетные00003";
       ИмяПКО = "ИнвестицииВНМА";
   Иначе
       ИмяПКО = "ФинансовыеИнвестиции";
   КонецЕсли;
ИначеЕсли ВидСубконто = ВидыСубконто.Сотрудники Тогда
   ИмяПКО = "ФизическиеЛица";
ИначеЕсли ВидСубконто = ВидыСубконто.НашиДенежныесчета Тогда
   ИмяПКО = "БанковскиеСчета";
ИначеЕсли ВидСубконто = ВидыСубконто.НалогиОтчисления Тогда
   Если ИмяПКОВидСубконто  = "ВидыСубконтоХозрасчетные00001" Тогда
       ИмяПКО = "Налоги";
   Иначе
       ИмяПКО = "СтатьиНалоговыхДеклараций";
   КонецЕсли;
   
КонецЕсли;
НомерПКОСубконто = НайтиПравило(Субконто, ИмяПКО);


Если НомерПКОСубконто = 0 Тогда
   Отказ = 1;
КонецЕсли;


Сначала я получаю значения параметров,
потом определяю ИмяПКОВидСубконто, потом ИмяПКО, и нахожу саму процедуру:
НомерПКОСубконто = НайтиПравило(Субконто, ИмяПКО);
21 John83
 
11.11.10
14:31
(3)(4) там пример для какой конфигурации?
PS странно, что нигде не встречал подобную обработку/правила, хотя задача очень распостраненная
22 Живой Ископаемый
 
11.11.10
14:33
2(21) там пример для сферической конфигурации...
23 DailyLookingOn Sunset
 
11.11.10
14:43
В типовой конфигурации "Конвертация данных" есть демо-база.
В ней есть конвертация "ПУБ(7.7)->УПП(8.х)".
В ней есть всё необходимое для переноса бухпроводок, и алгоритмы, и ПКО операции и пр.