Имя: Пароль:
1C
1С v8
v8: Вопросы по КД2...
0 mikecool
 
06.06.13
12:33
Начал собсно на старости лет изучать КД2 - посему затрахаю вопросами )
Правила рисую из 77 комплекс в 77 бух
Есть документ, в ТЧ счет и три субконто
В зависимости от счета-источника подставляется счет-приемник и в приемнике надо
субконто 1 - найти в справочнике(типы источника и приемника не совпадают)
субконто 2 и 3 - пустые

в пкс Субконто1 в событии ПередВыгрузкой записано следующее:
КоррСчет = ОбъектКоллекции.КоррСчет;
Если (КоррСчет.ПринадлежитГруппе(Параметры.Счет44) = 1) Тогда
   Если СтрДлина(СокрЛП(Сред(КоррСчет.Код, 4))) > 1 Тогда //это субсчета, заменяемые на субконто
       СтруктураДляПравила = СоздатьОбъект("СписокЗначений");
       СтруктураДляПравила.ДобавитьЗначение("Код", "Z1");
       СтруктураДляПравила.ДобавитьЗначение("Наименование", "Z1");
       СтруктураДляПравила.ДобавитьЗначение("Родитель", "");
       СтруктураДляПравила.ДобавитьЗначение("ЭтоГруппа", 0);
       СтруктураДляПравила.ДобавитьЗначение("СписыватьИздержкиПропорциональноОстаткуТоваров", 0);
       Значение = ВыгрузитьПоПравилу(, , СтруктураДляПравила, , "СтатьиИздержекОбращенияВхДанные");
   КонецЕсли;
КонецЕсли;

Значение субконто в файл выгрузки попадает с пустыми значениями свойств
ПКО СтатьиИздержекОбращенияВхДанные - все реквизиты с галкой "Получать из вх. данных"

Значение = ВыгрузитьПоПравилу(, , СтруктураДляПравила, , "СтатьиИздержекОбращенияВхДанные");
или
ВыгрузитьПоПравилу(, , СтруктураДляПравила, , "СтатьиИздержекОбращенияВхДанные");
- результат одинаков, пустая структура

чяднт? как же получить нормальную заполненную структуру для того, чтобы при загрузке по ней нашелся/создался элемент справочника?
1 fenixx
 
06.06.13
12:42
А в приемнике куда записывать надо - в ТЧ, в шапку документа или ещё куда?
2 mikecool
 
06.06.13
12:44
(1) также, в ТЧ, структуры документов практически идентичны
3 acsent
 
06.06.13
12:45
СтруктураДляПравила.ДобавитьЗначение("Родитель", "")
Ты правильно делаешь? Значение и представление не путаешь?
4 fenixx
 
06.06.13
12:46
ИМХО, там ПКГС надо править, при выгрузке ТЧ. То что ты написал не взлетит. Исходящие данные формируются для объекта целиком, в ПКС дума можно только что-то добавить
5 mikecool
 
06.06.13
13:05
(3) я вообще хотел передавать только код и Этогруппа как поля поиска, но при загрузке в приемнике получал "не заполнено наименование" и т.п.
(4) щас попробую в пкгс прописать
6 fenixx
 
06.06.13
13:16
Блин, ну и задачка )
Попробуй ещё, через ПКС субконто 1 вариант

Насколько я понял, ПКС для счетов у тебя настроен?

Тогда в ПКС субконто 1 можно изобразить

Если ОБъектКоллекции.Счет = ... Тогда
   Значение = ...
   ИмяПКО = ...
ИначеЕсли ОбъектКоллекции.Счет = ...
   Значение = ...
   ИмяПКО = ...
КонецЕсли;
7 fenixx
 
06.06.13
13:17
(6) + в обработчике "ПередВыгрузкой"
8 mikecool
 
06.06.13
13:18
(6) у меня есть только строка кода элемента справочника приемника, схавает только по нему?

щас для тестов записал в пкс субконто1 в источнике:
Статьи = СоздатьОбъект("Справочник.СтатьиИздержекОбращения");
Статьи.НайтиПоКоду("14000001", 0);
Значение = Статьи.ТекущийЭлемент();
это работает.

пробую вариант (6)
9 mikecool
 
06.06.13
13:19
но думаю если в значение запихну строку, то не пко соответствующее не схавает, или ошибаюсь?
10 fenixx
 
06.06.13
13:23
(8) схавает. Сделай ПКО типа "из строки в справочник":

Источник - строка
Приемник - справочник.ххх

делаешь одно пкс

Источник - строка, Приемник - код. Ставишь галку "поиск", в обработчике перед выгрузкой пишешь "Значение = Источник"
11 mikecool
 
06.06.13
13:42
пкс субконто стало таким http://s018.radikal.ru/i505/1306/6c/2ccfcceb0f8d.jpg
пко на строка - справочник такое http://s49.radikal.ru/i125/1306/57/e956b536a1d9.jpg
при загрузке не находится
12 mikecool
 
06.06.13
13:46
в файле выгрузки
- <Объект Нпп="10" Тип="СправочникСсылка.СтатьиИздержекОбращения" ИмяПравила="СтатьяИздержекПоКоду">
- <Ссылка Нпп="10">
- <Свойство Имя="Код" Тип="Строка">
 <Пусто />
 </Свойство>
 </Ссылка>
 </Объект>
13 fenixx
 
06.06.13
13:51
(12) Попробуй в ПКС (Субконто1->Cубконто1) очистить Источник - субконто1. Ты же значению строку присваиваешь. Теоретически, это может не влиять, но кто его знает...
14 vicof
 
06.06.13
13:53
(13) Это не влияет.
15 vicof
 
06.06.13
13:54
Правило укажи в ПКС
16 fenixx
 
06.06.13
13:54
(12) А в обработчике "При выгрузке" что за код?
17 fenixx
 
06.06.13
13:55
(15) правило он указал в обработчике. И оно прижилось ИмяПравила="СтатьяИздержекПоКоду"

значение почему-то не подхватилось.
18 mikecool
 
06.06.13
13:55
(13) заработало!
19 mikecool
 
06.06.13
13:57
ПКС Субконто1, Перед выгрузкой:
       Источник = "";
       Значение = "14000001";
       ИмяПКО = "СтатьяИздержекПоКоду";
и все нормально выгружается-загружается )
всем спасибо
20 fenixx
 
06.06.13
13:59
(19) =-O  

Я вообще имел ввиду поле в форме редактирования ПКС очистить. Ну, заработало значит и так прокатит )
21 mikecool
 
06.06.13
13:59
ветка с круглым номером )))
22 mikecool
 
06.06.13
14:00
(20) заработало, как - я хз, это чудо )))
23 fenixx
 
06.06.13
14:01
(22) а кинь xml-код выгруженного дока, глянуть что там получилось.
24 mikecool
 
06.06.13
14:01
а если почистить поле - то и источник очищать не придется ))
но - у меня подмена субконто только по конкретному счету идет, по остальным - обработка по-умолчанию
25 mikecool
 
06.06.13
14:02
(23) ось так в файле получилось
- <Объект Нпп="10" Тип="СправочникСсылка.СтатьиИздержекОбращения" ИмяПравила="СтатьяИздержекПоКоду">
- <Ссылка Нпп="10">
- <Свойство Имя="Код" Тип="Строка">
 <Значение>14000001</Значение>
 </Свойство>
 </Ссылка>
 </Объект>
в документе соответственно - ссылки на Нпп=10
26 vicof
 
06.06.13
14:03
(25) Может, ты сохранил правила?)
27 mikecool
 
06.06.13
14:04
(26) нене, я каждый раз сохранял и правила, и модули
28 fenixx
 
06.06.13
14:05
(25) Я всегда считал что "Источник" - это ссылка на док целиком. С этой точки зрения обнулив "Источник" ты ссылку на док побил.

хелп в этом отношении тоже ясности не вносит:

"Источник - Произвольный. Ссылка на выгружаемый объект источник данных"  

А что за объект - док в целом или субконто1 - неполнятненько....
29 mikecool
 
06.06.13
14:05
(28) в данном случае в пкс Субконто1 Источник = ссылка на значение субконто1 источника, имхо
30 fenixx
 
06.06.13
14:06
(25) да, бывает паришься паришься а на самом деле правила не выгрузил :-)
31 fenixx
 
06.06.13
14:07
(29) Ну что тут сказать... Век живи век учись
32 mikecool
 
06.06.13
14:07
(30) не, я как школьник в первом классе - переписываю весь лист )))
даже модуль загрузки подменяю, хотя в нем и не было изменений )
33 fenixx
 
06.06.13
14:09
(32) ты как во второй класс перейдёшь (будешь корёжить восьмерочные правила для планов обмена БСП) - увидишь что лучше иногда перепроверить )
34 mikecool
 
06.06.13
14:12
(33) )))
до этого сталкивался с правилами 8х-77
там все было на пвд заточено, подготовка структуры выгрузки вся была там, куски кода одинакового было по всем пвд - что изменить, надо править по всем пвд (
а щас подумал - ведь должно же работать и в пкс все, что бы если править, то в одном месте )
35 mikecool
 
06.06.13
15:56
а вот теперь усложняю вопрос - как решенный сабж вынести в общее пко типа "КонвертацияСубконто", чтобы не прописывать тексты модулей в каждом реквизите, а указывать пко?
36 mikecool
 
06.06.13
15:56
думаю - должно же получиться?
37 vicof
 
07.06.13
04:50
на уровне конвертации есть событие "ПередВыгрузкойОбъекта". Там можно проверять и выгружать.
Можно сделать алгоритм, в котором написать действия по выгрузке, а в ПКС указывать, что нужно выполнить алгоритм.
38 mikecool
 
07.06.13
09:55
(37)
ПередВыгрузкойОбъекта - думаю не подойдет, поскольку анализ именно свойства нужен, ибо это субконто - а будет ли выгружаемый объект ссылкой на свойство субконто - не всегда.
вот про алгоритмы мне уже намекнули, почитал по ссылкам и не особо понял как их применять (
39 mikecool
 
07.06.13
10:14
если я правильно понимаю, вызываю алгоритм, в нем доступно в виде параметров все из пко или пкс, и собсно в самом алгоритме все и прописываю?
40 mikecool
 
07.06.13
10:24
в алгоритме доступны входящие и исходящие данные, если я в пкс передвыгрузкой вызываю алгоритм  - какое из этих свойств заполнять?
41 fenixx
 
07.06.13
10:49
(35) Я правильно понял, что ты хочешь правило "Субконто в субконто" сделать для нескольких документов?
42 fenixx
 
07.06.13
10:58
(40) В алгоритме доступен весь контекст обработчика. Т.е. если вызвать из обработчика "Перед выгрузкой" то в алгоритме можешь задавать "значение" "имя пко", смотреть реквизиты источника и объекта коллекции для тч
43 fenixx
 
07.06.13
10:59
+ (42) Это в восьмерке. Будет ли так работать в семёрке - сложно сказать
44 mikecool
 
07.06.13
10:59
(41) ога, эти субконто - в каждом документе по три раза, и чтобы в сслучае изменения алгоритма не лазить по всем пко и пкс - опишу все в одном месте
45 mikecool
 
07.06.13
11:00
попробовал - получилось ))
все описано также как и ранее в пкс, только в одном месте терь будет )
46 mikecool
 
07.06.13
11:00
(43) в семерке тоже доступно, проверено
47 mikecool
 
07.06.13
11:12
вот остается вопрос - в источнике субконто 3, если в приемнике только одно субконто, как указать, что второе и третье должны быть пустыми? Отказ = 1 при выгрузке 2 и 3?
или Пусто = 1?
48 mikecool
 
07.06.13
11:15
пробую через Пусто = 1
49 sttt
 
07.06.13
11:16
(38) Выполнить(Алгоритмы.ЧтотоСделать);
50 mikecool
 
07.06.13
12:03
(49) а вот в семерке нет - это функция, так что просто ЧтотоСделать()
51 mikecool
 
14.06.13
11:41
Подниму тему... Теперь уперся в операции, надо переносить еще и их проводки.
Почитал Хрусталеву, почитал Бояркина - не понял, как это делать
у меня нет ни источника, ни приемника, как рисовать ПКС - не представляю...
помогите чем можете )
52 Aleksey
 
14.06.13
11:46
как это нет приемника? украли?
53 mikecool
 
14.06.13
11:50
(52) ну в 77 таб части или набора записей нет, к чему привязывать свойства?
54 mikecool
 
14.06.13
12:54
попробовал описать выгрузку согласно Перенос операций между 7.7 базами с помощью КД2
выгружается, ругается, что не на все значения есть пко - как бы нормально
а вот при загрузке - 1с крашится без звуков ((
55 mikecool
 
14.06.13
12:56
пытаюсь описать согласно Бояркину, но тут проблема - нет приемника и не активируется ПКГС
как активировать правило конветации, если нет ни источника, ни приемника?
56 ДенисЧ
 
14.06.13
12:57
Если нет приёмника нет, куда выгружаешь?
57 acsent
 
14.06.13
12:57
Для начала открой правила из бу 77 в бп 20. посмотри как несовпадающие субконто передают
58 acsent
 
14.06.13
12:58
там же как проводки передают
59 mikecool
 
14.06.13
12:59
(57) как бы пример из 7 в 8 видел, в приемнике есть набор записей
у меня 7 - 7, там ни в источнике, ни в приемнике нихрена нет
60 acsent
 
14.06.13
12:59
Ах тебе из 7 в 7. Это ваще хз как
61 mikecool
 
14.06.13
12:59
(56) хз, вот как то надо ))))
62 mikecool
 
14.06.13
13:00
(60) :) зато экспа будет
63 acsent
 
14.06.13
13:00
(62) да кому она такая нужна
64 acsent
 
14.06.13
13:01
там весь код внутри обработчиков. Проще самому обработку писать
65 acsent
 
14.06.13
13:01
*Все формирование XML файла
66 mikecool
 
14.06.13
14:25
(64) вот вечно извращение какое придумаешь...
67 mikecool
 
14.06.13
14:31
как же сэмулировать приемник?
68 acsent
 
14.06.13
14:40
(67) никак, только самому формировать хмл
69 mikecool
 
14.06.13
14:52
(68) я надыбал кусок, ссылку в (54) привел, дык валит приемник при загрузке ((
70 acsent
 
14.06.13
14:53
(69) выгружай 1 операцию и отладчиком ищи где валит
71 mikecool
 
14.06.13
14:54
о, еще нарвался

ТекстЗапроса = "Период С ДатаНачала По ДатаОкончания;
|ТекущийДокумент = Документ.РасходнаяНакладная.ТекущийДокумент;
|Номенклатура = Документ.РасходнаяНакладная.Товар;
|Условие (Номенклатура.ВидТовара = Перечисление.ВидыТоваров.Товар);
|Условие (Сумма(Номенклатура) > 0);
|Группировка ТекущийДокумент;
при выгрузке говорит "Функция не обнаружена (Сумма)"

пробовал Количество() - та же хрень
72 mikecool
 
14.06.13
14:54
(70) уже предчуствую отладчик и рыдаю (((
73 mikecool
 
14.06.13
14:54
+71 в передвыгрузкой пвд
74 mikecool
 
14.06.13
17:17
остыли? ща подкину дровишек
имею пвд, в передобработкой написал:

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

Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
   Отказ = 1;
КонецЕсли;

СписокДанных = СоздатьОбъект("СписокЗначений");
Пока Запрос.Группировка("ТекущийДокумент") = 1 Цикл
   Если СписокДанных.Принадлежит(Запрос.ТекущийДокумент) = 0 Тогда
       СписокДанных.ДобавитьЗначение(Запрос.ТекущийДокумент);
   КонецЕсли;
КонецЦикла;

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

в ПКО "РасходнаяНакладная" в ПКГС ТабличнаяЧасть в событии "Перед выгрузкой" как бы (по справке) должен получать построчно строки табчасти, а получаю таблицу значений, с содержимым ТЧ - при этом событие вызывается столько раз, сколько строк в ТЧ документа
где я совершил косяк?
75 mikecool
 
14.06.13
17:22
вернул в пвд стандартную выгрузку
ситуация не изменилась...
значит все таки справка врет, и в ПКГС только ТЗ целиком, а не построчно обрабатывается
76 Alex S D
 
14.06.13
17:26
(75) нет, товарищ, у меня там все работает. Где ты там таблицу видишь?
77 Alex S D
 
14.06.13
17:27
и что у тебя в ОбъектКоллекции ?
78 mikecool
 
14.06.13
17:28
(76) в ПКГС "Табличная часть" в событии "Перед выгрузкой" ОбъектКоллекции = Таблица значений
79 mikecool
 
14.06.13
17:30
80 mikecool
 
14.06.13
17:31
пробовал инициализровать ВыборкаДанных в виде списка значений

выполнял при этом
Важно:
Если для выборки данных ПВД используется произвольный алгоритм и в обработчике ПВД "Перед обработкой" инициируется параметр ВыборкаДанных, то для ПКО следует установить признак "Не запоминать выгруженные объекты".
81 mikecool
 
14.06.13
17:32
щас думаю переписать на ВыборкаДанных в виде ТЗ и попробовать еще раз с произвольным алгоритмом
82 Alex S D
 
14.06.13
17:37
а что у тебя в Источнике в ПКГС ПередВыгрузкой?
83 mikecool
 
17.06.13
09:24
(82) а в источник у меня попадает документ
84 mikecool
 
17.06.13
09:49
+83 даже при стандартной выгрузке туда попадает документ
вотзефак?
85 mikecool
 
17.06.13
10:25
почему ПКГС вызывается столько раз, сколько строк в документе?
86 mikecool
 
17.06.13
10:26
+85 вернее - это логично, но почему в элементеколлекции не строка, а вся табчасть документа?
87 mikecool
 
17.06.13
10:50
подниму чтоли
88 mikecool
 
17.06.13
13:40
новый вопрос:
в ПКО в ПриЗагрузке пишу

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

получаю:
Объект.ВариантРасчетаНалогов - заполнен
Всего - нет
чяднт?
89 mikecool
 
17.06.13
13:41
+88 в отладчике смотрю - Всего рассчитывается и присваивается, а в готовом документе - пусто
90 mikecool
 
17.06.13
13:44
где же спецы по кд?
91 sttt
 
17.06.13
14:27
(89) может последняя строка пустая))
92 mikecool
 
17.06.13
17:44
(91) как ни странно - переписал в событие послезагрузки(хоть оно и для восьмерки) - и сработало
93 mikecool
 
17.06.13
17:46
на мисте в последнее время пока ответ получишь - сам все выучишь и сделаешь )))
94 sttt
 
17.06.13
18:26
(92) где это написано, что для 8ки?
погорячился я в (91) не внимательно посмотрел, что у тебя выборка объекта))
95 EvgeniuXP
 
17.06.13
19:07
(0) так курсы по КД есть :)
96 mikecool
 
18.06.13
09:41
(94) в справке в кд )
(95) да, верю, и что? я смотрел курсы от nasf-а, пока смотришь - все понятно, курсы дают лишь поверхностное значние, зачастую при реальных задачах ответов в них не найдешь.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn