Имя: Пароль:
1C
1С v8
Конвертация данных - Справочник - Перечисление
0 tabarigen
 
14.07.15
15:33
Переношу справочник номенкратура, в реквизитах есть СтавкаНДС, которая тоже создает ПКО. На этом ПКО и зациклился.

Смотрел книжку Бояркина там обратный пример Перечисления - Справочник.
ОбъектИсточник - СправочникСсылка.СтавкиНДС
ОбъектПриемник - ПеречислениеСсылка.СтавкиНДС.

Приемник имеет предопределенные значения НДС18, НДС18_118, НДС10, НДС10_110, НДС0, БезНДС.
Источник же имеет реквизиты - НалоговаяГруппаФР, Наименование, Ставка, ПометкаНаУдаление, а также предопределенные значения: ОснованяСтавкаНДС и БезНДС.

Так вот КД сама сопоставила предопределенное значение справочника БезНДС, соответствующему значению из перечисления.
ОсноннаяСтатья соответсвует НДС10. А как быть с теми значениями в приемнике для которых нету предопределенных значений. Их надо устанавливать в обработчиках событий (каких? ПКО? ПКС я не настраиваю, а обработчиков у ПКЗ нету).

Ясен пень, что их надо брать из Справочника.СтавкиНДС (содержит значения [10%, 18%, БезНДС]). Но как это сделать.
1 tabarigen
 
14.07.15
15:34
https://yadi.sk/i/Ehwhk8tuhrfLq
скрин настроек ПКЗ
2 daniel63
 
14.07.15
15:36
В демо базе есть пример, число в перечисление, тут тоже самое.
3 ixijixi
 
14.07.15
16:04
Обработчики "Правила конвертации свойств"
Перед выгрузкой
Значение - Неопределено. Конвертируемое значение свойства. Если значение определить в теле обработчика, то стандартная процедура получения значения не будет происходить.
4 tabarigen
 
14.07.15
16:09
Спасибо за наводку.
В демо базе действительно есть полностью идентичный пример.

В ПКО СтавкиНДС в обработчике перед выгрузкой прописал.

Приемник = Источник;

После выгрузки:
Если ПустоеЗначение(Источник) = 1 Тогда
    
    УзелСсылки = "НДС0";
    
ИначеЕсли Источник.Ставка = 0 Тогда
    
    УзелСсылки = "НДС0";
    
ИначеЕсли Источник.Ставка = 10 Тогда
    
    УзелСсылки = "НДС10";
    
ИначеЕсли Источник.Ставка = 9.09 тогда
    
    УзелСсылки = "НДС10_110";
    
ИначеЕсли Источник.Ставка = 18 тогда
    
    УзелСсылки = "НДС18";
    
ИначеЕсли Источник.Ставка = 15.25 тогда
    
    УзелСсылки = "НДС18_118";
    
ИначеЕсли Источник.Ставка = 20 тогда
    
    УзелСсылки = "НДС20";
    
ИначеЕсли Источник.Ставка = 16.67 тогда
    
    УзелСсылки = "НДС20_120";
    
ИначеЕсли Источник.Ставка < 5 тогда
    
    УзелСсылки = "НДС0";
    
ИначеЕсли Источник.Ставка < 14 тогда
    
    УзелСсылки = "НДС10";
    
ИначеЕсли Источник.Ставка < 19 тогда
    
    УзелСсылки = "НДС18";
    
Иначе
    
    УзелСсылки = "НДС20";
    
КонецЕсли;

Отказ = 1;



Вы выгрузке данных выдается ошибка


Начало выгрузки:   14.07.2015 16:08:36

Ошибка в обработчике события ПослеВыгрузкиОбъекта
    ПКО                    =  СтавкиНДС  (Справочник: Ставки НДС)
    Объект                 =  10%  (Ставки НДС)
    Обработчик             =  ПослеВыгрузкиОбъекта
    ОписаниеОшибки         =  Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(1,6)}: Процедура или функция с указанным именем не определена (ПустоеЗначение)
    ПозицияМодуля          =  Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(9659)
    КодСообщения           =  43

Ошибка при выгрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1620)}: Ошибка в обработчике события ПослеВыгрузкиОбъекта
    ПКО                    =  СтавкиНДС  (Справочник: Ставки НДС)
    Объект                 =  10%  (Ставки НДС)
    Обработчик             =  ПослеВыгрузкиОбъекта
    ОписаниеОшибки         =  Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(1,6)}: Процедура или функция с указанным именем не определена (ПустоеЗначение)
    ПозицияМодуля          =  Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(9659)
    КодСообщения           =  43


p.s Как тут форматировать текст??
5 MadJhey
 
14.07.15
16:12
Процедура или функция с указанным именем не определена (ПустоеЗначение)
6 MadJhey
 
14.07.15
16:12
Куда засунул ПустоеЗначение?
7 tabarigen
 
14.07.15
16:15
в ПКО обработчик ПослеВыгрузки
8 MadJhey
 
14.07.15
16:23
Выгрузка из 7.7?
Если из 8 то не ЗначениеЗаполнено()

а зачем городить такой огород не проще ли использовать
в приВыгрузке
Если ставка=18 Тогда
Значение = "НДС18"
иначе ....
9 tabarigen
 
14.07.15
16:27
Выгрузка из 8.
Управление Аптекой -> Управление Аптечной сетью
10 MadJhey
 
14.07.15
16:29
Нет в 8.2 функции -  ПустоеЗначение, это 7.7
11 Naumov
 
14.07.15
16:31
(9) Демопример для 8.0 еще написан. с 8.1 ПустоеЗначение меняли на "не ЗначениеЗаполнено()"
12 tabarigen
 
14.07.15
17:22
Уфф... Только что Номенкоатура переносилась иерархически, и вдруг перестала. Что трогал не помню, но вроде в настройках порядок.
Скрин с настройками ниже
https://yadi.sk/i/10435D4ohrq7n.

Что за крестик у ПКО номенклатура?
13 VikingKosmo
 
14.07.15
17:26
Крестик означает, что поиск будет идти не только по ссылке, а и по полям поиска ЕМНИП
14 tabarigen
 
14.07.15
17:27
а почему не переходят группы?? Галочка напротив этогрупа и родитель стоят.
15 VikingKosmo
 
14.07.15
17:29
(14) ну ты спросил... Я ж понятия не имею, что там в правилах нарисовано то
16 tabarigen
 
14.07.15
19:59
https://yadi.sk/i/10435D4ohrq7n
ссылку дал ведь с настройками.
17 tabarigen
 
15.07.15
13:38
В общем дела такие парни.  Запарился я с вашей Конвертацией)) плюнул бы на все если бы не имел привычку доводить дело до конца.
В ПКО Перед выгрузкой пишу:

Приемник = Источник;

В ПКО После выгрузки пишу:

Если Не ЗначениеЗаполнено(Источник) = 1 Тогда
    
    УзелСсылки = "НДС0";
    
ИначеЕсли Источник.Ставка = 0 Тогда
    
    УзелСсылки = "НДС0";
    
ИначеЕсли Источник.Ставка = 10 Тогда
    
    УзелСсылки = "НДС10";
    
ИначеЕсли Источник.Ставка = 9.09 тогда
    
    УзелСсылки = "НДС10_110";
    
ИначеЕсли Источник.Ставка = 18 тогда
    
    УзелСсылки = "НДС18";
    
ИначеЕсли Источник.Ставка = 15.25 тогда
    
    УзелСсылки = "НДС18_118";
    
ИначеЕсли Источник.Ставка = 20 тогда
    
    УзелСсылки = "НДС20";
    
ИначеЕсли Источник.Ставка = 16.67 тогда
    
    УзелСсылки = "НДС20_120";
    
ИначеЕсли Источник.Ставка < 5 тогда
    
    УзелСсылки = "НДС0";
    
ИначеЕсли Источник.Ставка < 14 тогда
    
    УзелСсылки = "НДС10";
    
ИначеЕсли Источник.Ставка < 19 тогда
    
    УзелСсылки = "НДС18";
    
ИначеЕсли Источник.Ставка = Неопределено тогда
    
    УзелСсылки = "БезНДС";    
    
Иначе
    
    УзелСсылки = "НДС20";
    
КонецЕсли;

Отказ = 1;

В итоге у меня переносятся только НДС18%.
Та номенклатура у которой в базе источника стоит БезНДС принимает значение 0%.
НДС10% вообще не переносится. Единственное отличие в базе источника НДС 10% и 18% в том что 18% предопределенное значение.

Куда бы копнуть еще? Истина то рядом.
18 MadJhey
 
15.07.15
13:56
А ты настойчивый :).
Отлаживать планы обмены умеешь?
На http://www.youtube.com/watch?v=8uhKPaTEk90
Хотя косяк и так видно: У безндс в источнике какая ставка?
19 MadJhey
 
15.07.15
13:57
планы обмена
20 tabarigen
 
15.07.15
14:14
А нет никакой ставки у БезНДС. Пусто.
21 tabarigen
 
15.07.15
16:29
Пробую отладчиком перехватить обработчик ПКО.

В формируемом отладчиком модуле приемника нет моего кода обработчика ПКО, для того чтоб поставить точку останова.

В формируемом отладчиком модуле источника такой код есть, но там событие не перехватывается ибо событие это после выгрузки.

Как быть то?
22 Абыр
 
15.07.15
17:49
(21) В ПКО для ставок в обработчике "Перед выгрузкой" задавай в Приемник строковый идентификатор значения перечисления в базе-приемнике.
23 tabarigen
 
16.07.15
09:02
(22) че нить полегче для моего мозга сказали бы что ле)
24 MrKartez
 
16.07.15
10:59
У тебя каждый раз условие попадает в ЕСЛИ
Смотри, будет ставка 0, оно у тебя войдет во все ЕСЛИ, 0 же будет и меньше 5 и меньше 19 одновременно. Следовательно, будет возвращено последнее значение при <19. Самое простое что приходит на ум, сделать двойное условие. 5<СтавкаНДС и СтавкаНДС<19.
25 tabarigen
 
16.07.15
14:11
Так и не удалось правильно прописать условие ((((

В итоге всей номенклатуре установил НДС10. Благо ставка ндс одинаковая у всех.
26 tabarigen
 
16.07.15
15:22
Если кому интеречно как все решилось. То надо было галочку поставить не запоимнать выгруженные. Хз как но это помогло.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший