Имя: Пароль:
1C
1С v8
КД. Конвертирование в операцию
,
0 Wobland
 
13.03.13
07:10
Есть вот такое желание (общего характера, т.к. хочу понять принцип): конвертировать некий документ с ТЧ в Операцию. Приёмник не имеет привычных ТЧ, которые можно было бы поставить в соответствие источнику, всё пишется в регистр. Как нормальные люди в таких случаях делают?
Было бы неплохо сформировать в источнике ТЗ, выгрузить её, потом в приёмнике обработать как следует. Но никак не догоняю, как. Натолкните на мысль, плз
1 Godofsin
 
13.03.13
07:21
(0) В операцию не загонял, а вот в корректировку регистра делал. По сути, тоже самое
2 GenV
 
13.03.13
07:21
(0) Добавляешь группу-регистр в ПКО. Ну а данные для неё передаешь как для обычной ТЧ (можно переопределить КоллекцияОбъектов, можно через входящие данные). Это все на стороне источника.
3 Wobland
 
13.03.13
07:26
воот. а как данные передать?
при выгрузке объекта:

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

в файле в упор не вижу никаких таблиц...
4 ks_83
 
13.03.13
08:18
(3) Ты когда конфу загружал в КД галочку напротив регистров ставил? Она по умолчанию не установлена.
5 sanja26
 
13.03.13
08:22
от документа в приемнике по сути только ссылка нужна, как регистратор
6 Wobland
 
13.03.13
08:23
(4) ставил. напротив регистров бухгалтерии и "выгружать движения только у непроводимых документов"
7 Wobland
 
13.03.13
08:25
(5) документ создаётся хорошо. сумма, к примеру, переносится. а вот ТЧ во что и как превращать? обработать как-то что-то на стороне приёмника - не проблема
8 sanja26
 
13.03.13
08:34
помню, что надо в выборку или результат запроса на стороне источника поместить, а дальше не помню)
9 sanja26
 
13.03.13
08:36
во входящие данные не вставляется?
10 ДенисЧ
 
13.03.13
08:55
в книге про КД есть пример переноса в операцию
11 Wobland
 
13.03.13
09:18
(9) вставляется. а не вижу в приёмнике. копипастил этот кусок ((3)) со своего рабочего кода (но в том случае в приёмнике был объект с таким именем - подставлялось само).
(10) бояркин? не нравится он мне. но спасибо за наводку
12 Сияющий Асинхраль
 
13.03.13
09:24
Загрузи конвертацию бп 1.6->2.0. Там есть пример
13 Wobland
 
13.03.13
09:31
(12) о, пример! спасибо
14 Wobland
 
14.03.13
06:38
с помощью примера и литературы таки удалось создать то, что выглядит работоспособным. во всяком случае, принципиальных отличий от бояркинского кода не вижу.

СубконтоДт=СоздатьОбъект("ТаблицаЗначений");
СубконтоДт.НоваяКолонка("Ключ");
СубконтоДт.НоваяКолонка("Значение");
СубконтоКт=СоздатьОбъект("ТаблицаЗначений");
СубконтоКт.НоваяКолонка("Ключ");
СубконтоКт.НоваяКолонка("Значение");

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

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


теперь втыкаюсь в следующую ошибку:
Возврат мТаблицаПравилКонвертацииОбъектов.ПолучитьЗначение(НомерПКО, Реквизит);
{\\TSCLIENT\D\1C\КОНВЕРТАЦИЯ\V77EXP_EP.ERT(9275)}: Номер за пределами значения!

про отладчик знаю. но, быть может, кто-то умный раньше скажет, чего оно от меня хочет?
15 Wobland
 
14.03.13
06:41
а вот сейчас подумал, что тип субконтов приёмника включает в себя некоторые документы, правил на которых у меня нет. здесь собака порылась?
16 Сияющий Асинхраль
 
14.03.13
07:14
Так ты с семеркой работаешь, или с восьмеркой? Тема у тебя вроде в восьмерке стоит. А, судя по коду, работаешь в семерке... Если правил нет, скорее всего, просто не перенесется... Да, и, кстати, самый простой вариант переноса проводок в семерке - использовать документ бухгалтерская справка, а не операции...
17 Wobland
 
14.03.13
07:23
источник - семёрка, приёмник - восьмёрка. а вот сделать из документа бухсправку и уже справку отдать правилу - это идея..
18 Wobland
 
14.03.13
07:38
(17) а хрен там. нету в ТиС бухсправки ;)
смотрю на типовые правила БП 1.6 -> БП 2.0, вижу тип СубконтоДт совсем пустой. у меня же - список из 87 позиций. как они этого добились?
19 Wobland
 
14.03.13
07:40
(15) да и какая источнику разница, какой тип имеет приёмник? у ПГКС Хозрасчетный стоит же галка "получать из входящих данных". какой-то мрачный тупик..
20 Сияющий Асинхраль
 
14.03.13
07:41
В принципе в БП 2 есть загрузка из 7.7, там наверняка и обработка бух операций есть, просто по коду надо найти где правила хранятся, чтобы поглядеть как они такую загрузку делают. Так что тут не надо особо изобретать. Я в свое время изучал выгрузку загрузку БП 1.6 -> БП 2.0 там операции очень легко переносятся, по сути надо только написать корректно алгоритм "ПолучитьПроводкиДокумента" а остальное элементарно...
21 Сияющий Асинхраль
 
14.03.13
07:43
+(21) Кстати указанный алгоритм "ПолучитьПроводкиДокумента" можно без проблем под 7.7 перенести
22 Rie
 
14.03.13
07:44
(14) Видимо, ИмяПКО для кого-то не задано.
23 GenV
 
14.03.13
07:45
22+ там еще по-моему для 7.7 нужно задавать ИмяПКОВидСубконто
24 Wobland
 
14.03.13
07:49
(22) да нет таких
(23) это что такое?
25 GenV
 
14.03.13
07:51
(24) Переменная, в которую в обработчике субконто нужно присвоить имя ПКО для вида субконто.
26 Wobland
 
14.03.13
07:52
(21) можно. упрощённо оно у меня в (14) формирует нужную ТЗ. но не выгружает.
я б даже уже пустых правил понасоздавал под все типы субконто, да вот 1) будет ли смысл? 2) 87 штук только для дебетового...
27 Wobland
 
14.03.13
07:58
ИмяПКОВидСубконто - имя правила конвертации, по которому производится преобразование вида субконто (только для свойств СубконтоДт и СубконтоКт записей регистра бухгалтерии). Может быть выбрано в зависимости от каких-либо условий.

уже лучше. судя по ругани уже что-то пытается с номенклатурой сделать. продолжаю тыкаться наощупь ;)
28 Rie
 
14.03.13
08:01
(27) А зачем наощупь тыкаться-то?
Смотри ПКС для того свойства, где у тебя номенклатура конвертируется. И задай (присваиванием) ИмяПКО и ИмяПКОВидСубконто в обработчике ПередВыгрузкой.
29 Wobland
 
14.03.13
08:07
(28) в этом месте пока не догоняю. СубконтоДТ - это ТЗ (ну ждёт оно ТЗ на стороне приёмника), в ТЗ в колонке "Значение" имею значения двух типов - Номенклатура и Склад. в каком месте нужно присвоить в ИмяПКОВидСубконто то или иное?
30 Wobland
 
14.03.13
08:09
(28) при выгрузке, кстати. ибо перед выгрузкой у меня Значение ещё Неопределено. а вот в этом месте имею ТЗ...
31 Сияющий Асинхраль
 
14.03.13
08:10
Вряд ли чисто семерочный вариант из книги прокатит для загрузки в восьмерку, хотя бы даже потому, что реквизитов в восьмерке несравнимо больше того, что передается для семерки
32 Rie
 
14.03.13
08:10
(29)
Если СубконтоДт.Значение.Вид()="Номенклатура" Тогда
   ИмяПКО = "ИмяПКОДляНоменклатуры";
   ...
33 Wobland
 
14.03.13
08:14
(32) Сообщить(""+Значение+"//"+ТипЗначенияСтр(Значение));
ТаблицаЗначений//ТаблицаЗначений
34 Rie
 
14.03.13
08:16
(33) Странно. Поскольку у тебя

СубконтоДт.Значение=НекийТовар;
35 Wobland
 
14.03.13
08:17
(34) а перед этим
СубконтоДт=СоздатьОбъект("ТаблицаЗначений");
СубконтоДт.НоваяСтрока();
36 Rie
 
14.03.13
08:20
(35) А зачем ты через ВходящиеДанные передаёшь?
У тебя же источник в правиле не задан?
37 Wobland
 
14.03.13
08:20
+(35) у бояркина в этом месте создаётся ТЗ. плюс у меня раньше была ошибка "что-то там не является ТЗ"
38 Wobland
 
14.03.13
08:21
(36) ваще-то задан. я документ хочу в операцию превратить
39 Wobland
 
14.03.13
08:22
(36) источник у правила задан, у ПКГС нет, там галка про входящие
40 Rie
 
14.03.13
08:27
(39) Не пихай в Хозрасчетный таблицы значений СубконтоДт и СубконтоКт. Создай колонки СубконтоДт1, СубконтоДт2, ...
41 cw014
 
14.03.13
08:28
Ну и я добавлю свою лепту. А откуда и куда ты собрался грузить то?
42 Wobland
 
14.03.13
08:31
(40) бояркин открытым по белому говорит, что для семёрки строго ТЗ. могу скрин показать, набивать лень ;)

Сообщить(""+Значение.Значение+"//"+ТипЗначенияСтр(Значение.Значение));
вот так уже что-то более осмысленное. пойду ИмяПКОВидСубконто присваивать
43 Wobland
 
14.03.13
08:34
(41) сначала из образовательного интереса хотел из произвольных данных источника сделать бухоперацию. произвольные данные теперь - это документ. источник ТиС на 7.7, приёмник - БП 3.0
44 Rie
 
14.03.13
08:57
(42) Виноват, это я перепутал с какой стороны у тебя что.
45 Wobland
 
14.03.13
09:10
теперь имею следующее
===============================
при выгрузке СубконтоДт

ИмяПКОВидСубконто=Значение.Ключ;
Сообщить("Дт: "+ИмяПКОВидСубконто);
глПоказать(Значение);
Сообщить("="+Значение.Значение+"//"+ТипЗначенияСтр(Значение.Значение));
Значение=Значение.Значение;

Дт: Номенклатура
=+Товары//Справочник
то есть в Значение присваивается элемент справочника.
===============================
перед загрузкой ПКО Номенклатура
Сообщить(""+Источник+"//"+ТипЗначенияСтр(Источник));
говорит Номенклатура//Строка

в конце одного правила это справочник, в начале другого строка. что за нафих?
46 Wobland
 
14.03.13
09:38
цитата из бояркина:
http://s40.radikal.ru/i088/1303/f1/929ebe263697.jpg

вот почему я бросил читать эту книжку. как понимать предпоследнее предложения? какая конвертация из ТЗ по разным правилам может быть? что за хрень он там несёт или как его следует понимать?

кстати,

Значение.ВыбратьСтроки();
Пока Значение.ПолучитьСтроку()=1 Цикл
   ВыгрузитьПоПравилу(Значение.Значение, , , , Значение.Ключ);
КонецЦикла;

тоже не взлетает:
{\\TSCLIENT\D\1C\КОНВЕРТАЦИЯ\V77EXP_EP.ERT(9344)}: Номер за пределами значения!
47 Wobland
 
14.03.13
11:31
при выгрузке СубконтоДт:

Сообщить("=="+Значение.Значение+"//"+ТипЗначенияСтр(Значение.Значение));
ИмяПКОВидСубконто="ВидыСубконто";
ИмяПКО=Значение.Ключ;

перед выгрузкой ВидовСубконто:

Сообщить(">>"+Источник+"//"+ТипЗначенияСтр(Источник));

в первом случае имеем справочник, во втором - строку. в файл элементы справочников-субконты присутствуют, в приёмнике пусто. теряю понимание...
48 Rie
 
14.03.13
11:48
(46) Он имеет в виду, что ИмяПКОВидСубконтот ты можешь назначить в обработчике события.
49 Wobland
 
14.03.13
11:57
(48) угу. имя ПКО для ТЗ? я это имел в виду

+(47) а вот если б что-то было в источнике навроде ПВХ ВидыСубконто, тогда ... а хрен знает, что тогда. у меня в правило для ВидовСубконто попадает строка а-ля "Номенклатура" или "Склады"
50 Wobland
 
14.03.13
12:14
и возвращаемся к исходному вопросу. а нельзя ль как-то ТЗ прицепом к объекту пристегнуть? вон как в fb2 сделано:
<image l:href="#image0.jpeg" />
а в конце сами картинки в двоичном виде
<binary content-type="image/jpeg" id="image0.jpeg">/9j/4AAQSkZJRgABAQEAY
51 Wobland
 
14.03.13
14:12
в общем, я сдаюсь. вижу только два варианта обхода
1) при загрузке стучаться в источник, по номеру и дате документа запрашивать нужные данные, как-то их превращать в желаемое;
2) добавить в конфигурацию источника документ-затычку, данные складывать в его ТЧ, в приёмнике доставать;
52 GenV
 
14.03.13
23:35
(49) А что правило не создать для ПВХ Виды Субконто (источник пусто) и передавать код вида субконто для поиска по нему?
53 Wobland
 
15.03.13
06:04
(52) попадает строка а-ля "Номенклатура" или "Склады"
54 GenV
 
15.03.13
06:53
(53) Правило создай для ПВХ с поиском по "Код", в ПередВыгрузкой "Код" укажи "Значение=Источник", а в обработчике субконто сохраняй не его имя в "Ключ", а его код в приемнике.
55 Pasha
 
15.03.13
06:56
(0) Если мне не изменяет склероз, то при выгрузке конфигурации в файл надо поставить флажок выгружать движения... И соответственно непосредственно в правилах прописать движения, которые надо сформировать...
56 Wobland
 
15.03.13
12:32
оно меня устало. при загрузке делаю запрос к внешнему источнику, формирую нужный набор записей регистра. пускай работает так ;)
Независимо от того, куда вы едете — это в гору и против ветра!