Имя: Пароль:
1C
1С v8
Ошибка при проводке документа.
0 ThugLife
 
31.03.12
11:12
Программно созданный документ не хочет проводится. При этом ошибка возникает не в моем кода, а в общем модуле.


[code]по причине:
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{ОбщийМодуль.УчетНДС.Модуль(79)}: Преобразование значения к типу Булево не может быть выполнено
           новыйДокумент.Записать(РежимЗаписиДокумента.Проведение);[/code]

Код создания документа

[code]Если элемент.ИмяУзла = "РасходнаяНакладная" Тогда
           документРасходнаяНакладная = Документы.РеализацияТоваровУслуг;
           новыйДокумент = документРасходнаяНакладная.СоздатьДокумент();
           новыйДокумент.ВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.ПродажаКомиссия;
           новыйДокумент.Комментарий = элемент.ПолучитьАтрибут("НомерДокумента");
           новыйДокумент.Дата = Дата(элемент.ПолучитьАтрибут("Дата"));
           названиеСклада = элемент.ПервыйДочерний.ПолучитьАтрибут("Наименование");
           Если Справочники.Склады.НайтиПоНаименованию(названиеСклада).Пустая() Тогда
               склад = Справочники.Склады.СоздатьЭлемент();
               видСклада = элемент.ПолучитьЭлементыПоИмени("Клиент").Элемент(0).ПолучитьАтрибут("ВидСклада");
               Если видСклада = "Опт" Тогда
                   склад.ВидСклада = Перечисления.ВидыСкладов.Оптовый
                   Иначе Если видСклада = "Розница" Тогда
                       склад.ВидСклада = Перечисления.ВидыСкладов.Розничный
                   Иначе
                       склад.ВидСклада = Перечисления.ВидыСкладов.Оптовый;
                   КонецЕсли;
               КонецЕсли;
               склад.Наименование = названиеСклада;
               склад.Записать();
           КонецЕсли;                  
           новыйДокумент.ВалютаДокумента = рубли;
           новыйДокумент.СчетУчетаРасчетовСКонтрагентом = ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.01");
           новыйДокумент.Организация = Организация;
           новыйДокумент.СпособЗачетаАвансов = Перечисления.СпособыЗачетаАвансов.НеЗачитывать;
           новыйДокумент.Склад = Справочники.Склады.НайтиПоНаименованию(названиеСклада);
           новыйДокумент.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(элемент.ПолучитьЭлементыПоИмени("Клиент").Элемент(0).ПолучитьАтрибут("Наименование"));    
           табличнаяЧастьУзел = элемент.ПоследнийДочерний;
           договоры = Справочники.ДоговорыКонтрагентов.Выбрать(, Справочники.Контрагенты.НайтиПоНаименованию(элемент.ПолучитьЭлементыПоИмени("Клиент").Элемент(0).ПолучитьАтрибут("Наименование")));
           названиеДоговора = элемент.ПолучитьАтрибут("НазваниеДоговора");
           табличнаяЧастьДокумента = новыйДокумент.Товары;
           Пока договоры.Следующий() Цикл
               Если договоры.Наименование = названиеДоговора Тогда
                   новыйДокумент.ДоговорКонтрагента = договоры.Ссылка;
                   break;  
               КонецЕсли;
           КонецЦикла;
           
           количество = 0;
           сумма = 0;                
           
           Для к = 0 По табличнаяЧастьУзел.ДочерниеУзлы.Количество() - 1 Цикл
               количество = количество + Число(табличнаяЧастьУзел.ДочерниеУзлы.Элемент(к).ПолучитьАтрибут("Количество"));
               сумма = сумма + Число(табличнаяЧастьУзел.ДочерниеУзлы.Элемент(к).ПолучитьАтрибут("Сумма"));
           КонецЦикла;
           
           Если количество <> 0 Тогда
               строкаТабличнойЧасти = табличнаяЧастьДокумента.Добавить();
               строкаТабличнойЧасти.Количество = количество;
               строкаТабличнойЧасти.Цена = сумма / количество;
               строкаТабличнойЧасти.Сумма = сумма;
               строкаТабличнойЧасти.Номенклатура = товар;
               строкаТабличнойЧасти.СчетУчета = ПланыСчетов.Хозрасчетный.ТоварыНаСкладах;
               строкаТабличнойЧасти.СчетДоходов = ПланыСчетов.Хозрасчетный.ПрочиеДоходы;
               строкаТабличнойЧасти.СчетРасходов = ПланыСчетов.Хозрасчетный.ПрочиеРасходы;
           КонецЕсли;
           новыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
           Сообщить("Создан документ ""Реализация товаров и услуг""...");
           счетФактураВыданный = Документы.СчетФактураВыданный.СоздатьДокумент();
           счетФактураВыданный.Дата = новыйДокумент.Дата;
           счетФактураВыданный.Организация = новыйДокумент.Организация;
           счетФактураВыданный.Контрагент = новыйДокумент.Контрагент;
           счетФактураВыданный.ДоговорКонтрагента = новыйДокумент.ДоговорКонтрагента;
           счетФактураВыданный.ВалютаДокумента = рубли;
           счетФактураВыданный.ВидСчетаФактуры = Перечисления.НДСВидСчетаФактуры.НаРеализацию;
           документОснованиеСчетаФактуры = счетФактураВыданный.ДокументыОснования.Добавить();
           документОснованиеСчетаФактуры.ДокументОснование =
           документы.РеализацияТоваровУслуг.НайтиПоНомеру(новыйДокумент.Номер, новыйДокумент.Дата);
           счетФактураВыданный.Записать(РежимЗаписиДокумента.Проведение);
           Сообщить("Создан документ ""Счет-фактура выданный""...");
           Продолжить;
       КонецЕсли;[/code]

Я долго писал обработку, поэтому у меня соответственно создалось много справочников и документом, и в моей конфигурации (Бухгалтерия) документы все проводятся удачно. Когда пытаюсь запустить на другом компьютере выходит ошибка.

Ошибка возникает в этом куске кода:
[code]
Если ЭтоУслуга Тогда
   ВидЦенности = Перечисления.ВидыЦенностей.ПрочиеРаботыИУслуги;    
Иначе
   ВидЦенности = Перечисления.ВидыЦенностей.Товары;    
КонецЕсли;
[/code]

В принципе, почему исключение возникает это понятно, переменная ЭтоУслуга равно Null, но что конкретно эта переменная обозначает и где в моем кода что не присвоилось мне не понятно.
1 КМ155
 
31.03.12
11:16
(0) а ни чё, что в твоем коде нет НДС, но есть счёт-фактура ?
2 ThugLife
 
31.03.12
11:27
Если количество <> 0 Тогда
   строкаТабличнойЧасти = табличнаяЧастьДокумента.Добавить();
   строкаТабличнойЧасти.Количество = количество;
   строкаТабличнойЧасти.Цена = сумма / количество;
   строкаТабличнойЧасти.Сумма = сумма;
   строкаТабличнойЧасти.Номенклатура = товар;
   строкаТабличнойЧасти.СчетУчета = ПланыСчетов.Хозрасчетный.ТоварыНаСкладах;
   строкаТабличнойЧасти.СчетДоходов = ПланыСчетов.Хозрасчетный.ПрочиеДоходы;
   строкаТабличнойЧасти.СчетРасходов = ПланыСчетов.Хозрасчетный.ПрочиеРасходы;
   строкаТабличнойЧасти.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
   строкаТабличнойЧасти.СуммаНДС = 0;
КонецЕсли;


Исправил, толку ноль.
3 КМ155
 
31.03.12
11:27
(2) найми отладчик
4 ThugLife
 
31.03.12
11:30
Я минут 10 трассировал общие модули, а до этой строки не добрался.
5 ThugLife
 
01.04.12
13:47
Ап...
6 vicof
 
01.04.12
13:55
"не в моем кода"
индус?
7 ThugLife
 
02.04.12
06:15
vicof, еврей.
8 Любопытная
 
02.04.12
06:20
ЭтоУслуга - признак номенклатуры.
Что у тебя в переменной "товар"?
9 Любопытная
 
02.04.12
06:28
На другом компьютере тоже бухгалтерия? Потому что у меня перед теми строками, что ты указал, в бухгалтерии есть проверка на Null
10 ThugLife
 
02.04.12
07:01
Осуществляется перенос данных из самописной конфигурации в бухгалтерию. Так как решили что бухгалтерам не важно знать какие товары продавались, решили завести в номенклатуре элемент с наименованием "Товар".
11 ThugLife
 
02.04.12
07:01
товар = Справочники.Номенклатура.НайтиПоНаименованию("Товар");
12 ThugLife
 
02.04.12
07:08
На другом тоже бухгалтерия.
13 Рэйв
 
02.04.12
07:15
Скорее всего у тебя ЭтоУслуга не булево, а строка или еще что-нить такое же неудобоваримое для Если.

Пробуй
Если ЭтоУслуга= Истина Тогда

Ругаться не будет, но в условие скорее всего никогда не войдет
14 ThugLife
 
02.04.12
07:20
Оказывается товар, находился как группа справочника, а не как элемент, поставил чувствительность при поиске.  Любопытная, спасибо.
15 ThugLife
 
02.04.12
07:21
Рэйв эта ошибка возникает в общем модуле, не в моем. А общий модуль править не хочется.
16 Godofsin
 
02.04.12
07:23
(14) Всегда лучше позиционироваться по коду в таких случаях
17 Рэйв
 
02.04.12
07:23
тогда смотри  что в общем модуле сидит в ЭтоУслуга.Может что-то не то передается
18 Godofsin
 
02.04.12
07:26
+(16) А нее, это ж обмен.
19 Мимохожий Однако
 
02.04.12
07:37
При создании элемента номенклатуры или поиске проверь, что это услуга или товар. Если услуга, то эта номенклатура не должна попадать в табличную часть товары. Проверь переменную "Товар" в момент заполнения.
20 ThugLife
 
02.04.12
07:41
Проблема решена. Просто в строке
Справочники.Номенклатура.НайтиПоНаименованию("Товар")
Находилась группа справочника "Товары". Сейчас передал второй параметр, теперь ищет точное соответствие.
Справочники.Номенклатура.НайтиПоНаименованию("Товар", Истина)
Всем спасибо.
21 ThugLife
 
02.04.12
07:41
И как тут код выделять?
22 Godofsin
 
02.04.12
07:50
(21) Да да... я не глянул, что может использоваться для разных БД