Имя: Пароль:
1C
1C 7.7
v7: Конвертация данных. Перечисление = > Справочник
0 FREEEEs
 
06.09.11
08:50
Всем привет.

Столкнулся с проблемой, сломал мозг, гуглил, но не помогла и тут как в самом мега крайнем случае, задаю вопрос.

Источник: ТиС 7.7
Приемник: Бухучет 7.7.

Конвертирую справочник Номенклатура, там есть реквизит СтавкаНДС, так вот, этот реквизит в источнике является перечислением, а в приемнике справочником.

Сделал правила, выгружает данные. НО НЕ ЗАГРУЖАЕТ ЭТУ СТАВКУ. (к примеру значение 18%).

То есть потом заходя в приемник, что бы глянуть результат, открываю номенклатуру и там после "СтавкаНДС" тупо пустое.

Вырвите мне глаз, обматерите, но только помогите!
1 ДенисЧ
 
06.09.11
08:55
сделай правило строка->справочник.СтавкиНДС
Где ищи по наименованию
При выгрузке назначь для реквизита это правило и сделай значение=Строка(Источник.СтавкаНДС);

Или сделай предопределенные значения в справочнике ставок НДС. И сопоставь значения.
2 PaulBC
 
06.09.11
09:00
(0) посмотри в типовых правилах ТИС - Бух
3 FREEEEs
 
06.09.11
09:19
сделай правило строка->справочник.СтавкиНДС
--

Нефига так не работает, опять же он после загрузки в списке не указывает значение.

Как бы надо передать ссылку на новый элемент чтоль.
4 nicxxx
 
06.09.11
09:23
в типовых ищи. там есть рабочий вариант. в реквизите Источнике на закладке Дополнительно пиши в функции:
Если Источник = Перечисление.СтавкиНДС.БезНДС Тогда
 Возврат 0;
ИначеЕсли Источник = Перечисление.СтавкиНДС.НДС10 Тогда
 Возврат 10;
ИначеЕсли Источник = Перечисление.СтавкиНДС.НДС20 Тогда
 Возврат 20;
ИначеЕсли Источник = Перечисление.СтавкиНДС.НДС9_09 Тогда
 Возврат 9.09;
ИначеЕсли Источник = Перечисление.СтавкиНДС.НДС16_67 Тогда
 Возврат 16.67;
ИначеЕсли Источник = Перечисление.СтавкиНДС.НДС20_120 Тогда
 Возврат 20/120;
ИначеЕсли Источник = Перечисление.СтавкиНДС.НДС10_110 Тогда
 Возврат 10/110;
ИначеЕсли Источник = Перечисление.СтавкиНДС.НДС18 Тогда
 Возврат 18;
ИначеЕсли Источник = Перечисление.СтавкиНДС.НДС18_118 Тогда
 Возврат 18/118;
КонецЕсли;
реквизит-приемник - Ставка (это число), включить поиск
5 FREEEEs
 
06.09.11
10:02
Где именно это писать, на закладке "Дополнительно", тока поле описание.
6 nicxxx
 
06.09.11
10:04
у тебя конвертация версии 8 что ли?
7 FREEEEs
 
06.09.11
10:07
Конвертация данных 2.1 ))
8 nicxxx
 
06.09.11
10:10
ну я для 7.7 пример дал. для 8.х это надо написать в ПередВыгрузкой, и вместо Возврат написать Значение =
9 FREEEEs
 
06.09.11
10:13
Ну это ежу понятно что тупо писать Значение =
Но результата НЕТ.

Значение в поле НЕ вставляется, хотя данные выгружает.

Тем более писать Значение = "18%";  можно только для предопределённых записей.
10 nicxxx
 
06.09.11
10:14
ну и посмотрел бы в типовой
11 nicxxx
 
06.09.11
10:16
ПКО. Источник - ПЕречисление.СтавкиНДС, Приемник - Справочник.СтавкиНДС.
2 ПКС:
1. источник - пустой, приемник - Ставка, включен поиск
в ПередВыгрузкой пиши:
СтроковоеЗначениеПеречисления = Строка(Источник);

СтроковоеЗначениеПеречисления = СтрЗаменить(СтроковоеЗначениеПеречисления, " ", "");
СтроковоеЗначениеПеречисления = СтрЗаменить(СтроковоеЗначениеПеречисления, "%", "");

ПозицияНДС = Найти(СтроковоеЗначениеПеречисления, "НДС"); //это буквы "НДС"

Если ПозицияНДС<>0 Тогда
   Значение = Число(Сред(СтроковоеЗначениеПеречисления, ПозицияНДС + 3));
Иначе
   Значение = Число(СтроковоеЗначениеПеречисления);
КонецЕсли;    
2. источник - пустой, приемник - наименование
ПередВыгрузкой:
Значение = СокрЛП(Источник);
12 FREEEEs
 
06.09.11
10:24
Мда, не чего не изменилось...

короче надоело, спасибо
13 nicxxx
 
06.09.11
10:28
ыыыы, хренасе ты рабочнике, за "надоело" деньги платят?
и если че, в Бух 77, в спр Номенклатура реквизит СтавкаНДС - Периодический, поэтому в ПриЗагрузке у ПКО Номенклатура надо еще вот это написать:

ДатаУстановки = ФормДатаНач;

Если Объект.ЭтоГруппа() = 0 Тогда
   УзлыПериодического = Узел.ВыбратьУзлы("Периодический");            
   Для СчУзлов = 0 По УзлыПериодического.КоличествоУзлов-1 Цикл
       УзелПериодического = УзлыПериодического.ПолучитьУзел(СчУзлов);            
       Имя = УзелПериодического.ПолучитьАтрибут("Имя");
       Периодический = СоздатьОбъект("Периодический");
       Периодический.ИспользоватьОбъект(Имя, Объект);
       Выборка = УзелПериодического.ВыбратьУзлы("ПериодическоеЗначение");
       Для Сч = 0 По Выборка.КоличествоУзлов-1 Цикл
           УзелЗначения = Выборка.ПолучитьУзел(Сч);
           ДатаЗнач = УзелЗначения.ПолучитьАтрибут("ДатаЗнач");
           Значение = УзелЗначения.ПолучитьАтрибут("Значение");
           Периодический.ДатаЗнач = ДатаЗнач;
           Периодический.Значение = Значение;
           Периодический.Записать();
       КонецЦикла;
   КонецЦикла;
КонецЕсли;
14 FREEEEs
 
06.09.11
10:36
nicxxx

СПАСИБО БОЛЬШОЕ !

ТЫ БОГ 1С !

Вся проблема была именно в "Периодический"

И скажи ещё:
1) Как определить что объект переодический
2) И твой код выше, он универсальный? то есть можно вставлять во все переодические реквизиты?
15 nicxxx
 
06.09.11
10:47
1)посмотреть в конфигураторе
2)универсальный
и кстати, в ПКО Номенклатура, в ПКС СтавкаНДС в обработчике ПередВыгрузкой напиши Отказ = Источник.ЭтоГруппа(), а то будет пытаться присвоить ставку ндс группам и как следствие выдавать ошибку
Программист всегда исправляет последнюю ошибку.