Имя: Пароль:
1C
1С v8
v8: Налоговая накладная! Украинская конфигурация (какая .... знает)
,
0 Tasechka
 
25.12.12
13:56
1С:Предприятие 8.2 (8.2.16.363)
Конфигурация 1.2.9.1
Нужно перевести номенклатуру в налоговой накладной. Вот что я сделала:
У меня есть функция перевода:
Функция Перевод (Товар)
    Запрос = Новый Запрос;
    Запрос.Текст=
     "ВЫБРАТЬ ПЕРВЫЕ 1
     |    НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента
     |ИЗ
     |    РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
     |ГДЕ
     |    НоменклатураКонтрагентов.Номенклатура = &Номенклатура";
   
    Запрос.УстановитьПараметр("Номенклатура", Товар);
    Результат = Запрос.Выполнить().Выбрать();
    Если Результат.Следующий() Тогда
        Данные = Результат.НаименованиеНоменклатурыКонтрагента;
    Иначе
       Сообщить("Заполните регистр сведений");
   КонецЕсли;
       Возврат Данные;
КонецФункции //ПереводНоменклатуры
Есть регистр сведений, "Номенклатура контрагента" откуда берется перевод. В функцию Печать() я добавила вот такой код:
Запрос = Новый Запрос();
            Запрос.УстановитьПараметр("Контрагент", Шапка.Контрагент);
            Запрос.УстановитьПараметр("Номенклатура", СтрокаТаблицы.Номенклатура);
            Запрос.Текст =
            "ВЫБРАТЬ  ПЕРВЫЕ 1
               |    НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента
               |ИЗ
               |    РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
               |ГДЕ
               |    НоменклатураКонтрагентов.Контрагент = &Контрагент
               |    И НоменклатураКонтрагентов.Номенклатура = &Номенклатура";
             Выборка = Запрос.Выполнить().Выбрать();
             Пока Выборка.Следующий() Цикл
               ОбластьМакета.Параметры.Номенклатура = Перевод(СтрокаТаблицы.Номенклатура);
               Сообщить(СтрокаТаблицы.Номенклатура);
             КонецЦикла;
Посмотрите кому не сложно, что то оно и ошибок не выдает, но и не переводит. Подскажите кому не сложно, пожалуйста.
1 Галахад
 
гуру
25.12.12
14:00
Жесть какая. Нафига два прохожих запроса?
Причем второй не используется.
2 zak555
 
25.12.12
14:00
чято такое налоговая накладная ?
3 Aleksey
 
25.12.12
14:01
(2) украинские заморочки
4 zak555
 
25.12.12
14:06
(3) а чего у неё код тогда не на мове ?
5 palpetrovich
 
25.12.12
14:07
"перевести номенклатуру" - это как по русски?
6 zak555
 
25.12.12
14:07
(5) видимо перевести на мову
7 palpetrovich
 
25.12.12
14:09
(0) что, правда (6)?
8 Tasechka
 
25.12.12
14:10
(5) это по русски. Номенклатуру нужно перевести на украинский язык
9 palpetrovich
 
25.12.12
14:13
(8) а украинские названия в РС НоменклатураКонтрагентов?
10 palpetrovich
 
25.12.12
14:13
+9 кста, а ничего что одна и та-же номенклатура моджет в этом РС быть обюозвана по0разному?
11 Tasechka
 
25.12.12
14:20
(9) да) она не будет обозвана по разному
12 zak555
 
25.12.12
14:21
учите Русский язык !
13 M0narch
 
25.12.12
14:24
посмотри отладчиком что возвращает функция
14 palpetrovich
 
25.12.12
14:29
если очень хочется, то можно тупо:
   Запрос = Новый Запрос;
   Запрос.Текст =
       "ВЫБРАТЬ
       |    НоменклатураКонтрагентов.Номенклатура,
       |    НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента
       |ИЗ
       |    РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов";
   Результат = Запрос.Выполнить();
   ВыборкаДетальныеЗаписи = Результат.Выбрать();
   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
       ОбъектНоменклатура = ВыборкаДетальныеЗаписи.Номенклатура.ПолучитьОбъект();    
       ОбъектНоменклатура.Наименование = ВыборкаДетальныеЗаписи.НаименованиеНоменклатурыКонтрагента;
       ОбъектНоменклатура.Записать();
   КонецЦикла;

условий добавь если надо и копию сделай предварительно. Обязательно!
15 Tasechka
 
25.12.12
17:35
(14) нет не получается так(((
16 palpetrovich
 
25.12.12
17:56
(15) что именно не получается?
17 Tasechka
 
25.12.12
18:04
(16) оно все равно выводит номенклатуру на русском
18 palpetrovich
 
25.12.12
18:07
(17) ты уверена что в Регистре Сведений - на украинском?
19 Tasechka
 
25.12.12
18:08
(18) да
20 palpetrovich
 
25.12.12
18:11
(19) и что, код из (14) отрабатывает, не ругается - и все остается так как было?
21 Bes1CC
 
25.12.12
18:14
может потому, что в НН полное наименование выводиться?
22 palpetrovich
 
25.12.12
18:17
(21) в некоторых конфигурациях даже - НаименованиеДляНН ;)
23 Bes1CC
 
25.12.12
18:21
В (0) бухгалтерия, там полное наименование.
24 viktor_vv
 
25.12.12
18:25
В бухгалтерии там и регистра сведений номенкдатура контрагентов нету.
У нее скорее всего УТП.
И судя по коду в (0) она это не в том месте пытается вставить.
То есть дальше наверное идет стандартное заполнение заполнение параметра.
25 Tasechka
 
25.12.12
18:41
(20) да) все нормально, хоть бы раз споткнулся
26 Tasechka
 
25.12.12
18:43
(23) в НН выводится полное наименование
27 Tasechka
 
25.12.12
18:49
(24) регистр у меня есть, а вот то что я пытаюсь не туда вставить код, это скорее всего правда(
28 viktor_vv
 
25.12.12
18:51
(27) Покажи чуть больше кода до этого фрагмента и после. Только без фанатизма.
29 Tasechka
 
25.12.12
20:00
(28)
// Выводим табличную часть
       ОбластьМакета = Макет.ПолучитьОбласть("РазделI");
       ЭтоПерваяСтрока = Истина;
       // Выведем на печать все строки таблицы в раздел I
       Для каждого СтрокаТаблицы Из ТаблицаНоменклатуры Цикл
           
           Если ЭтоПерваяСтрока Тогда    
               // в первой строке раздела укажем номер раздела
               ОбластьМакета.Параметры.НомерРаздела = "I";
               ЭтоПерваяСтрока = Ложь;
           Иначе
               ОбластьМакета.Параметры.НомерРаздела = "";
           КонецЕсли;    
           
           ОбластьМакета.Параметры.Заполнить(СтрокаТаблицы);
           
           Если ПечататьКодУКТВЭДБезПробелов Тогда
               ОбластьМакета.Параметры.КодУКТВЭД = СтрЗаменить(ОбластьМакета.Параметры.КодУКТВЭД, " ", "");
           КонецЕсли;
           
           Если ЗначениеЗаполнено(СтрокаТаблицы.ТекстДляПечатиВКолонкеКоличество) Тогда
               ОбластьМакета.Параметры.Количество = СтрокаТаблицы.ТекстДляПечатиВКолонкеКоличество;
           КонецЕсли;
           
           // дата отгрузки/оплаты
           Если НЕ ЗначениеЗаполнено(СтрокаТаблицы.ДатаОтгрузкиОплаты) Тогда
               // укажем дату выписки накладной
               ОбластьМакета.Параметры.ДатаОтгрузкиОплаты = СсылкаНаОбъект.Дата;
           КонецЕсли;
           
           Если НЕ ЗначениеЗаполнено(СтрокаТаблицы.Номенклатура) И Страница = 1 Тогда
               Сообщить(НСтр("ru='В одной из строк не заполнено наименование номенклатуры - проверьте заполнение документа!';uk='В одному з рядків не заповнене найменування номенклатури - перевірте заповнення документа!'"), СтатусСообщения.Важное);
           КонецЕсли;
//**********************************************************************************************************************************
            Запрос = Новый Запрос();
            Запрос.УстановитьПараметр("Контрагент", Шапка.Контрагент);
            Запрос.УстановитьПараметр("Номенклатура", СтрокаТаблицы.Номенклатура);
            Запрос.Текст =
            "ВЫБРАТЬ  ПЕРВЫЕ 1
               |    НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента
               |ИЗ
               |    РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
               |ГДЕ
               |    НоменклатураКонтрагентов.Контрагент = &Контрагент
               |    И НоменклатураКонтрагентов.Номенклатура = &Номенклатура";
             Выборка = Запрос.Выполнить().Выбрать();
             Пока Выборка.Следующий() Цикл
                   ОбъектНоменклатура = Выборка.Номенклатура.ПолучитьОбъект();    
                   ОбъектНоменклатура.Наименование = Выборка.НаименованиеНоменклатурыКонтрагента;
                   ОбъектНоменклатура.Записать();
               //ОбластьМакета.Параметры.Номенклатура = Перевод(СтрокаТаблицы.Номенклатура);
               //Сообщить(СтрокаТаблицы.Номенклатура);
             КонецЦикла;
//**********************************************************************************************************************************

           ОбластьМакета.Параметры.Сумма20    = СимволДляПустыхПоказателей;
           ОбластьМакета.Параметры.Сумма0Укр    = СимволДляПустыхПоказателей;
           ОбластьМакета.Параметры.Сумма0Эксп    = СимволДляПустыхПоказателей;
           ОбластьМакета.Параметры.СуммаБезНДС = СимволДляПустыхПоказателей;
           
           // Определим в какую колонку (в зависимости от ставки НДС) попадает сумма без НДС
           Колонка = "Сумма" + ОпределитьКолонкуТаблицы(СтрокаТаблицы.СтавкаНДС);
           ОбластьМакета.Параметры[Колонка] = ОбщегоНазначения.ФорматСумм(СтрокаТаблицы.Сумма, ,"0,00");
           ТабДокумент.Вывести(ОбластьМакета);
30 Живой Ископаемый
 
25.12.12
20:39
ну то есть на самом деле ни конфигурация, ни то что она украинская, ни вид документа оказались не важны.. суть просто в том, что копрокод не выполняет возлагавшиеся на него надежды. так?
31 viktor_vv
 
25.12.12
21:26
(29) Ну ХЗ. Вроде там.
Ну выведи еще

             Пока Выборка.Следующий() Цикл
                   ОбъектНоменклатура = //Выборка.Номенклатура.ПолучитьОбъект();    
//                    ОбъектНоменклатура.Наименование = //Выборка.НаименованиеНоменклатурыКонтрагента;
//                    ОбъектНоменклатура.Записать();
               //ОбластьМакета.Параметры.Номенклатура = Перевод(СтрокаТаблицы.Номенклатура);

               Сообщить(""+Выборка.НаименованиеНоменклатурыКонтрагента);
32 viktor_vv
 
25.12.12
21:26
*    //                 ОбъектНоменклатура = //Выборка.Номенклатура.ПолучитьОбъект();
33 J_B
 
25.12.12
21:35
(0) Есть у меня подозрение, что не в той функции Печать() делаются изменения. В типовых для Украины сейчас актуальна ф-я ПечатьДокументаНалоговыйКодекс2012()
34 palpetrovich
 
25.12.12
22:01
(29) я таки не понял, тебе чисто в печати подменить надо, справочник Номенклатура не курочить?
35 viktor_vv
 
25.12.12
22:10
(33) Судя по наличию в (29)

           Если ПечататьКодУКТВЭДБезПробелов Тогда
               ОбластьМакета.Параметры.КодУКТВЭД = СтрЗаменить(ОбластьМакета.Параметры.КодУКТВЭД, " ", "");
           КонецЕсли;

таки в той. УКТВЭД выводится именно в

ПечатьДокументаНалоговыйКодекс2012()

Но в принципе автор давно бы уже отладчиком пробежалась, да нашла бы косяк.
36 palpetrovich
 
25.12.12
22:12
(35) при печати НН, делать нечто типа "ОбъектНоменклатура.Записать();" - как-бы не православно ;)
37 viktor_vv
 
25.12.12
22:23
(36) Ну так это ж она твой код туда вставила из (14), насколько я понял :).
38 palpetrovich
 
25.12.12
22:26
(37) дык, нельзя-же так бездумно...
39 viktor_vv
 
25.12.12
22:36
(38) Ну ты даешь :). На хворуме написали, значит можно :).
40 Tasechka
 
26.12.12
10:55
(34) да, нужно просто подменить запись из регистра, а справочник трогать не нужно
41 viktor_vv
 
26.12.12
11:55
(40) ИЗ (31) вставьте код, что выведет ?
42 Tasechka
 
26.12.12
11:57
(41) Ошибку выдает:
Обращение к процедуре как к функции (Сообщить)
              <<?>>Сообщить(""+Выборка.НаименованиеНоменклатурыКонтрагента);
43 Tasechka
 
26.12.12
11:59
(41) я убрала ОбъектНоменклатура =, ошибок не выдает, но и ничего не выводит
44 Конфигуратор1с
 
26.12.12
12:06
а за запрос в цикле автора еще не били?
45 palpetrovich
 
26.12.12
12:08
(40) найди строку, закомментируй ее как здесь:
//ОбластьМакета.Параметры.Номенклатура = СокрП("" + СтрокаТаблицы.Номенклатура) + ?(НЕ ЗначениеЗаполнено(СтрокаТаблицы.Характеристика), "", "(" + СтрокаТаблицы.Характеристика +")");
// вместо ее - вставь это:
Запрос = Новый Запрос();
Запрос.УстановитьПараметр("Контрагент", Шапка.Контрагент);
Запрос.УстановитьПараметр("Номенклатура", СтрокаТаблицы.Номенклатура);
Запрос.Текст =
"ВЫБРАТЬ  ПЕРВЫЕ 1
|    НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента
|ИЗ
|    РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
|ГДЕ
|    НоменклатураКонтрагентов.Контрагент = &Контрагент
|    И НоменклатураКонтрагентов.Номенклатура = &Номенклатура";
Выборка = Запрос.Выполнить().Выбрать();
Если  Выборка.Следующий() Тогда
   ТекНоменклатура = Выборка.НаименованиеНоменклатурыКонтрагента;
Иначе    
   ТекНоменклатура = СокрП("" + СтрокаТаблицы.Номенклатура);
КонецЕсли;

ОбластьМакета.Параметры.Номенклатура = ТекНоменклатура + ?(НЕ ЗначениеЗаполнено(СтрокаТаблицы.Характеристика), "", "(" + СтрокаТаблицы.Характеристика +")");

// хотя, лучше конечно сделать один запрос по всем позициям номенклатуры в ТЧ, но и так работать будет :)
46 palpetrovich
 
26.12.12
12:08
(44) о, и меня побейте :)
47 Конфигуратор1с
 
26.12.12
12:09
НУ а если уж гофнокодить то
сие замени на
//**********************************************************************************************************************************

            Запрос = Новый Запрос();
            Запрос.УстановитьПараметр("Контрагент", Шапка.Контрагент);
            Запрос.УстановитьПараметр("Номенклатура", СтрокаТаблицы.Номенклатура);
            Запрос.Текст =
            "ВЫБРАТЬ  ПЕРВЫЕ 1
               |    НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента
               |ИЗ
               |    РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
               |ГДЕ
               |    НоменклатураКонтрагентов.Контрагент = &Контрагент
               |    И НоменклатураКонтрагентов.Номенклатура = &Номенклатура";
             Выборка = Запрос.Выполнить().Выбрать();
             Пока Выборка.Следующий() Цикл
                   ОбъектНоменклатура = Выборка.Номенклатура.ПолучитьОбъект();    
                   ОбъектНоменклатура.Наименование = Выборка.НаименованиеНоменклатурыКонтрагента;
                   ОбъектНоменклатура.Записать();
               //ОбластьМакета.Параметры.Номенклатура = Перевод(СтрокаТаблицы.Номенклатура);

               //Сообщить(СтрокаТаблицы.Номенклатура);

             КонецЦикла;
//**********************************************************************************************************************************
    Запрос = Новый Запрос();
            Запрос.УстановитьПараметр("Контрагент", Шапка.Контрагент);
            Запрос.УстановитьПараметр("Номенклатура", СтрокаТаблицы.Номенклатура);
            Запрос.Текст =
            "ВЫБРАТЬ  ПЕРВЫЕ 1
               |    НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента
               |ИЗ
               |    РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
               |ГДЕ
               |    НоменклатураКонтрагентов.Контрагент = &Контрагент
               |    И НоменклатураКонтрагентов.Номенклатура = &Номенклатура";
             Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() тогда
//тут получаем из выборки значение
КонецЕсли;
48 Tasechka
 
26.12.12
12:12
(45) у меня нет такого кода:
ОбластьМакета.Параметры.Номенклатура = СокрП("" + СтрокаТаблицы.Номенклатура) + ?(НЕ ЗначениеЗаполнено(СтрокаТаблицы.Характеристика), "", "(" + СтрокаТаблицы.Характеристика +")");
49 palpetrovich
 
26.12.12
12:13
(48) тогда признавайся уже, что у тебя за конфигурация
50 viktor_vv
 
26.12.12
12:13
(48) А должен быть.
51 Tasechka
 
26.12.12
12:14
"Бухгалтерия для Украины", редакция 1.2.9.1
52 Конфигуратор1с
 
26.12.12
12:15
(51)Юная Леди, выложите уже на файлобменник печатную форму шоб злые дядьки не мучались  и посмотрели шо к чему
53 palpetrovich
 
26.12.12
12:15
(51) а что, в 1.2.9.1 РегистрСведений.НоменклатураКонтрагентов есть? или кто-то дорабатывал?
54 Tasechka
 
26.12.12
12:18
(53) дорабатывали
55 palpetrovich
 
26.12.12
12:19
(51) ищи тогда:
           ОбластьМакета.Параметры.Номенклатура = СокрП("" + СтрокаТаблицы.Номенклатура)
                                                + ?(ДополнитьНазваниеНомеромГТД И ЗначениеЗаполнено(СтрокаТаблицы.НомерГТД), ". ВМД №: " + СтрокаТаблицы.НомерГТД + ", дата ВМД: " + Формат(СтрокаТаблицы.ДатаГТД, ?(ПечататьДатыБезРазделителей,"ДФ=ddMMyyyy","ДФ=dd.MM.yyyy")), "");
замени на:
Запрос из (45) и
           ОбластьМакета.Параметры.Номенклатура ТекНоменклатура
                                                + ?(ДополнитьНазваниеНомеромГТД И ЗначениеЗаполнено(СтрокаТаблицы.НомерГТД), ". ВМД №: " + СтрокаТаблицы.НомерГТД + ", дата ВМД: " + Формат(СтрокаТаблицы.ДатаГТД, ?(ПечататьДатыБезРазделителей,"ДФ=ddMMyyyy","ДФ=dd.MM.yyyy")), "");
56 palpetrovich
 
26.12.12
12:20
+55
ОбластьМакета.Параметры.Номенклатура ТекНоменклатура читать как
ОбластьМакета.Параметры.Номенклатура = ТекНоменклатура
57 Prince
 
26.12.12
12:20
Ребята, а зачем всё ЭТО надо? Не проще добавить ещё одно поле наименования для заполнения на украинском языке и его выводить в Печ.Форму
58 Tasechka
 
26.12.12
12:24
59 palpetrovich
 
26.12.12
12:24
(57) проще наверное, но такое ТЗ... :)
60 Tasechka
 
26.12.12
12:25
+(58) 17702610
61 palpetrovich
 
26.12.12
12:26
(58) бугага
короче, найди строку "ОбластьМакета.Параметры.Номенклатура = " в "Функция ПечатьДокументаНалоговыйКодекс2012(...) и запость сюда
62 palpetrovich
 
26.12.12
12:31
(58) еще раз бугага! ты что, иэ обработки печатаешь? и все это время молчала?!
63 Tasechka
 
26.12.12
12:35
(62) я из внешней печатной формы печатаю
64 palpetrovich
 
26.12.12
12:36
(63) предупреждать надо
65 Prince
 
26.12.12
12:37
так надо её подключить с параметрами..
66 Prince
 
26.12.12
12:38
67 Prince
 
26.12.12
12:39
И вообще...1С не переводчик, а база данных. Это надо сказать руководству а не плясать под их дудку
68 palpetrovich
 
26.12.12
12:54
короче так, до строки
Для каждого СтрокаТаблицы Из ТаблицаНоменклатуры Цикл
всавляешь код:
Запрос = Новый Запрос();
Запрос.УстановитьПараметр("Контрагент", СсылкаНаОбъект.Контрагент);
Запрос.УстановитьПараметр("СписокНоменклатура", СсылкаНаОбъект.Товары.ВыгрузитьКолонку("Номенклатура");
Запрос.Текст =
"ВЫБРАТЬ  ПЕРВЫЕ 1
|    НоменклатураКонтрагентов.Номенклатура КАК Номенклатура,
|    НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента КАК НоменклатураКонтрагентов
|ИЗ
|    РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
|ГДЕ
|    НоменклатураКонтрагентов.Контрагент = &Контрагент И
|     НоменклатураКонтрагентов.Номенклатура В Иерархии (&СписокНоменклатура)";
ТЗНоменклатура = Запрос.Выполнить().Выгрузить();

после
               Если СтрокаТаблицы.Сумма = 0 И СтрокаТаблицы.СуммаНДС = 0 Тогда
                   Продолжить
               КонецЕсли;

вставляешь:

НайденнаяСтрока = ТЗНоменклатура.Найти(СтрокаТаблицы.Номенклатура, "Номенклатура");
Если НайденнаяСтрока = Неопределено Тогда
   ОбластьМакета.Параметры.Номенклатура = СокрЛП(СтрокаТаблицы.Номенклатура);
Иначе
   ОбластьМакета.Параметры.Номенклатура = НайденнаяСтрока.НоменклатураКонтрагентов;
КонецЕсли;
69 Tasechka
 
26.12.12
13:16
(68) неа(( все равно выводит старое название((
Я тут немного порылась, здесь есть функция ПодготовитьТаблицы, там есть такая строчка: СтруктураПолей.Вставить("Номенклатура"              , "Номенклатура.НаименованиеПолное");, может здесь нужно вставлять запрос? или я опять туплю(
70 palpetrovich
 
26.12.12
13:40
(69) в общем так, без твоей конфигурации я не вижу как тебе помочь. если хочешь - выложи CF-шник в файлообменник
71 Prince
 
26.12.12
16:27
"СтруктураПолей.Вставить("Номенклатура"              , "Номенклатура.НаименованиеПолное""-правильно, ты же полное наименование переводишь.