Имя: Пароль:
1C
1С v8
СверткаБазы: Значение не является значением объектного типа
,
0 pnamik
 
10.03.14
10:21
Текст ошибки:

{ВнешняяОбработка.СверткаБазы(149)}: Значение не является значением объектного типа (ПриходныйДокумент)
        СпрП.ПриходныйДокумент = ДокументОстатков.Ссылка;


Модуль свертки:

Процедура ДобавитьЗаписьНоменклатурыВТЧ(ДокументОстатков,Номенклатура,Количество,СтрокаВыборки,РозничнаяЦена)
    Нстр = ДокументОстатков.Накладная.Добавить();
    НСтр.Артикул = Номенклатура.Артикул;
    НСтр.Штрихкод = СокрЛП(Номенклатура.ТекШтрихКод);
    Нстр.Номенклатура = Номенклатура;
    Нстр.Количество = Количество;
    НСтр.Единица = Номенклатура.Единица;
    НСтр.Коэффициент = Номенклатура.Коэффициент;
    
    Если ТипЗнч(СтрокаВыборки) = Тип("СправочникСсылка.Партии") Тогда
        Отбор = Новый Структура;
        Отбор.Вставить("Номенклатура",Номенклатура);
        СтрокиТаб = ДокументОстатков.Накладная.НайтиСтроки(Отбор);
        Если СтрокиТаб.Количество() > 0 Тогда
            ЗначСтроки = СтрокиТаб.Получить(0);
            Если ЗначСтроки.ЦенаПоступления > 0 Тогда
                НСтр.ЦенаПоступления = ЗначСтроки.ЦенаПоступления;
            Иначе
                НСтр.ЦенаПоступления = РозничнаяЦена;
            КонецЕсли;    
        Иначе
            НСтр.ЦенаПоступления = РозничнаяЦена;
        КонецЕсли;    
        НСтр.Партия = СтрокаВыборки;
    Иначе
        Попытка
            НСтр.ЦенаПоступления = СтрокаВыборки.СуммаОстаток/СтрокаВыборки.КоличествоОстаток;
        Исключение
            НСтр.ЦенаПоступления = РозничнаяЦена;
        КонецПопытки;
        
        СпрП = СтрокаВыборки.Партия.ПолучитьОбъект();
        СпрП.ПриходныйДокумент = ДокументОстатков.Ссылка;
        СпрП.Записать();
        
        НСтр.Партия = СтрокаВыборки.Партия;
    КонецЕсли;    
    
    НСтр.Сумма = Нстр.ЦенаПоступления * Нстр.Коэффициент * НСтр.Количество;
    НСтр.РозничнаяЦена = РозничнаяЦена;
    НСтр.СуммаРозница = Нстр.РозничнаяЦена * Нстр.Коэффициент * НСтр.Количество;
    Нстр.СтавкаНДС = Номенклатура.СтавкаНДС;
    НДС = Нстр.Сумма * Нстр.СтавкаНДС.Ставка/(100+Нстр.СтавкаНДС.Ставка);
    НСтр.СуммаНДС = НДС;
    НСтр.СуммаБезНДС = НСтр.Сумма - НДС;
КонецПроцедуры

Как исправить ошибку?
Помогите, пожалуйста
1 mulmulya
 
10.03.14
10:24
отладчиком пробовали?
2 pnamik
 
10.03.14
10:33
Проверил, выдает ту же ошибку
3 shuhard
 
10.03.14
10:51
(2)[выдает ту же ошибку]
значит нет ДокументОстатков.Ссылка;
4 GANR
 
10.03.14
10:54
(0) А именно стек вызовов пробовали смотреть? Что это за переменная ДокументОстатков передается а процедуру и может ли у нее быть поле Ссылка?
5 NcSteel
 
10.03.14
10:57
(0) Попробуй сделай так:

СпрП = Новая Структура("ПриходныйДокумент", Неопределено);

Должно помочь.
6 GANR
 
10.03.14
11:02
А это что за явление пупа народу???

СпрП = СтрокаВыборки.Партия.ПолучитьОбъект();
СпрП.ПриходныйДокумент = ДокументОстатков.Ссылка;

Зачем так было написано?
7 GANR
 
10.03.14
11:03
+(6) а нет-нет - это нормально
8 pnamik
 
10.03.14
11:11
+(5) Вместо:


СпрП = СтрокаВыборки.Партия.ПолучитьОбъект();
        СпрП.ПриходныйДокумент = ДокументОстатков.Ссылка;
        СпрП.Записать();


Добавить:

СпрП = Новая Структура("ПриходныйДокумент", Неопределено);
        СпрП.ПриходныйДокумент = ДокументОстатков.Ссылка;
        СпрП.Записать();



Правильно?
9 NcSteel
 
10.03.14
11:12
(8) В каком документе или справочнике вы пытаетесь заполнить реквизит "ПриходныйДокумент". Как он называется?
10 pnamik
 
10.03.14
11:32
Привожу весь текст (т.к. сам не понимаю):

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

Функция СоздатьДокументОстатков()
    Док = Документы.ВводОстатковТМЦ.СоздатьДокумент();
    Док.Дата = КонецДня(ДатаСвертки)-600;
    Док.КодОперации = Перечисления.КодыОпераций.ВводОстатковТМЦ;
    Док.Автор = глПользователь;
    Док.Склад = Константы.ОсновнойСклад.Получить();
    Док.УчитыватьНДС = Истина;
    Док.СуммаВклНДС = Истина;
    Док.Комментарий = "Администратор. Свертка остатков товаров и партий!";
    Док.Представление = "Оприходование остатков ТМЦ (свертка)";
    Док.НеВыгружать = Истина;
    Док.Выгружен = Истина;
    Док.Записать(РежимЗаписиДокумента.Запись);
    
    Возврат Док;
КонецФункции    

Процедура ЗавершитьДокументОстатков(ДокументОстатков)
    ДокументОстатков.СуммаИтог = ДокументОстатков.Накладная.Итог("Сумма");
    ДокументОстатков.Записать(РежимЗаписиДокумента.Запись);
    ДокументОстатков.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);
    Сообщить("Создан документ с остатками "+СокрЛП(ДокументОстатков));
КонецПроцедуры

Функция ВыборкаОстатковПартий(Номенклатура)
    ТекстЗапроса =
        "ВЫБРАТЬ
        |    ДвиженияПоПартиямОстатки.КоличествоОстаток,
        |    ДвиженияПоПартиямОстатки.СуммаОстаток,
        |    ДвиженияПоПартиямОстатки.Партия
        |ИЗ
        |    РегистрНакопления.ДвиженияПоПартиям.Остатки(&КонПериода, Номенклатура = &Номенклатура) КАК ДвиженияПоПартиямОстатки
        |ГДЕ
        |    ДвиженияПоПартиямОстатки.КоличествоОстаток > &МинОстаток
        |
        |УПОРЯДОЧИТЬ ПО
        |    ДвиженияПоПартиямОстатки.Партия.ПриходныйДокумент.Дата УБЫВ";
        
    Запрос = Новый Запрос(ТекстЗапроса);
    Запрос.УстановитьПараметр("КонПериода",КонецДня(ДатаСвертки));
    Запрос.УстановитьПараметр("МинОстаток",0);
    Запрос.УстановитьПараметр("Номенклатура",Номенклатура);
    
    Результат = Запрос.Выполнить();
    
    Возврат Результат;
КонецФункции

Функция СоздатьНовуюПартию(Номенклатура,ДокументОстатков)
    спрП = Справочники.Партии.СоздатьЭлемент();
    спрП.Владелец = Номенклатура.Ссылка;
    спрП.Записать();
    спрП.ПриходныйДокумент = ДокументОстатков.Ссылка;
    спрП.СтранаПроисхождения = Номенклатура.СтранаПроисхождения;
    спрП.Поставщик = Справочники.Контрагенты.ГарантРесурс;
    спрП.Записать();
    
    Возврат спрП.Ссылка;
КонецФункции

Процедура ДобавитьЗаписьНоменклатурыВТЧ(ДокументОстатков,Номенклатура,Количество,СтрокаВыборки,РозничнаяЦена)
    Нстр = ДокументОстатков.Накладная.Добавить();
    НСтр.Артикул = Номенклатура.Артикул;
    НСтр.Штрихкод = СокрЛП(Номенклатура.ТекШтрихКод);
    Нстр.Номенклатура = Номенклатура;
    Нстр.Количество = Количество;
    НСтр.Единица = Номенклатура.Единица;
    НСтр.Коэффициент = Номенклатура.Коэффициент;
    
    Если ТипЗнч(СтрокаВыборки) = Тип("СправочникСсылка.Партии") Тогда
        Отбор = Новый Структура;
        Отбор.Вставить("Номенклатура",Номенклатура);
        СтрокиТаб = ДокументОстатков.Накладная.НайтиСтроки(Отбор);
        Если СтрокиТаб.Количество() > 0 Тогда
            ЗначСтроки = СтрокиТаб.Получить(0);
            Если ЗначСтроки.ЦенаПоступления > 0 Тогда
                НСтр.ЦенаПоступления = ЗначСтроки.ЦенаПоступления;
            Иначе
                НСтр.ЦенаПоступления = РозничнаяЦена;
            КонецЕсли;    
        Иначе
            НСтр.ЦенаПоступления = РозничнаяЦена;
        КонецЕсли;    
        НСтр.Партия = СтрокаВыборки;
    Иначе
        Попытка
            НСтр.ЦенаПоступления = СтрокаВыборки.СуммаОстаток/СтрокаВыборки.КоличествоОстаток;
        Исключение
            НСтр.ЦенаПоступления = РозничнаяЦена;
        КонецПопытки;
        
        СпрП = СтрокаВыборки.Партия.ПолучитьОбъект();
        СпрП.Записать();
        
        НСтр.Партия = СтрокаВыборки.Партия;
    КонецЕсли;    
    
    НСтр.Сумма = Нстр.ЦенаПоступления * Нстр.Коэффициент * НСтр.Количество;
    НСтр.РозничнаяЦена = РозничнаяЦена;
    НСтр.СуммаРозница = Нстр.РозничнаяЦена * Нстр.Коэффициент * НСтр.Количество;
    Нстр.СтавкаНДС = Номенклатура.СтавкаНДС;
    НДС = Нстр.Сумма * Нстр.СтавкаНДС.Ставка/(100+Нстр.СтавкаНДС.Ставка);
    НСтр.СуммаНДС = НДС;
    НСтр.СуммаБезНДС = НСтр.Сумма - НДС;
КонецПроцедуры

Процедура СвернутьОстаткиПартии() Экспорт
    ТекстЗапроса =
        "ВЫБРАТЬ
        |    ОстаткиТМЦОстатки.Номенклатура,
        |    ОстаткиТМЦОстатки.КоличествоОстаток,
        |    РозничныеЦеныСрезПоследних.РозничнаяЦена
        |ИЗ
        |    РегистрНакопления.ОстаткиТМЦ.Остатки(&КонПериода, ) КАК ОстаткиТМЦОстатки
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РозничныеЦены.СрезПоследних(&КонПериода, ) КАК РозничныеЦеныСрезПоследних
        |        ПО ОстаткиТМЦОстатки.Номенклатура = РозничныеЦеныСрезПоследних.Номенклатура";
        
    Запрос = Новый Запрос(ТекстЗапроса);
    Запрос.УстановитьПараметр("КонПериода",КонецДня(ДатаСвертки));
    
    Выборка = Запрос.Выполнить().Выбрать();
    СоздаватьНовыйДокумент = Ложь;
    ДокументОстатков = СоздатьДокументОстатков();
    КолСтрок = 0;
    
    Пока Выборка.Следующий() Цикл
        Если Выборка.КоличествоОстаток <= 0 Тогда
            Продолжить;
        КонецЕсли;
        Если Выборка.Номенклатура.ЭтоГруппа = Истина Тогда Продолжить; КонецЕсли;
            
        Если СоздаватьНовыйДокумент = Истина Тогда
            ЗавершитьДокументОстатков(ДокументОстатков);
            СоздаватьНовыйДокумент = Ложь;
            ДокументОстатков = СоздатьДокументОстатков();
        КонецЕсли;    
        
        ВыборкаПартий = ВыборкаОстатковПартий(Выборка.Номенклатура.Ссылка).Выбрать();
        
        ТекОстаток = Выборка.КоличествоОстаток;
        Если ВыборкаПартий.Количество() > 0 Тогда
            Пока ВыборкаПартий.Следующий() Цикл
                Если ВыборкаПартий.КоличествоОстаток <= ТекОстаток Тогда
                    ТекОстаток = ТекОстаток - ВыборкаПартий.КоличествоОстаток;
                    ДобавитьЗаписьНоменклатурыВТЧ(ДокументОстатков,Выборка.Номенклатура,ВыборкаПартий.КоличествоОстаток,ВыборкаПартий,Выборка.РозничнаяЦена);
                    КолСтрок = КолСтрок + 1;
                Иначе
                    ДобавитьЗаписьНоменклатурыВТЧ(ДокументОстатков,Выборка.Номенклатура,ТекОстаток,ВыборкаПартий,Выборка.РозничнаяЦена);
                    КолСтрок = КолСтрок + 1;
                    ТекОстаток = 0;
                КонецЕсли;    
                
                Если ТекОстаток = 0 Тогда Прервать; КонецЕсли;
            КонецЦикла;
        КонецЕсли;    
        
        Если ТекОстаток > 0 Тогда
            НовПартия = СоздатьНовуюПартию(Выборка.Номенклатура,ДокументОстатков);
            ДобавитьЗаписьНоменклатурыВТЧ(ДокументОстатков,Выборка.Номенклатура,ТекОстаток,НовПартия,Выборка.РозничнаяЦена);
            КолСтрок = КолСтрок + 1;
        КонецЕсли;
        
        Состояние("Обработано строк документа: "+Строка(КолСтрок));
        Если Колстрок >= 1000 Тогда
            КолСтрок = 0;
            СоздаватьНовыйДокумент = Истина;
        КонецЕсли;
    КонецЦикла;    
    
    Если КолСтрок > 0 Тогда
        ЗавершитьДокументОстатков(ДокументОстатков);
    КонецЕсли;
КонецПроцедуры
11 pnamik
 
10.03.14
14:43
Знатоки, как исправить ошибку?
12 shuhard
 
10.03.14
15:03
(11) это не лечиться
13 NcSteel
 
10.03.14
18:14
(10) Ответ на вопрос (9) Можно всеже услышать?
14 toys
 
10.03.14
19:00
походу СпрП = неопределено