8.х Заполнение табличной части документа

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем mhl, 27 апр 2009.

  1. TopicStarter Overlay
    mhl
    Offline

    mhl Опытный в 1С

    Регистрация:
    23 июн 2007
    Сообщения:
    418
    Симпатии:
    0
    Баллы:
    26
    При проведении документа, созданного методом СоздатьДокумент() выдает ошибку:

    В строке номер "1" табличной части для типа цен "" не заполнена Валюта.
    В строке номер "1" табличной части для типа цен "" не заполнена Номенклатура.

    хотя эти строки заполнены. вот участок кода:
    Код:
    СтрокаТЧЗакуп.Номенклатура = Товар;
    СтрокаТЧЗакуп.Валюта = Манат;
    СтрокаТЧЗакуп.ЕдиницаИзмерения = Штука;
    СтрокаТЧЗакуп.ПроцентСкидкиНаценки = ЭПокупки;
    СтрокаТЧЗакуп.ТипЦен = Закуп;
    
  2. reboot
    Offline

    reboot Опытный в 1С

    Регистрация:
    13 апр 2006
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    Товар - Это сылочный тип? если нет тогда лучше попробуй Товар.Ссылка и еще посмотри через отладку
  3. TopicStarter Overlay
    mhl
    Offline

    mhl Опытный в 1С

    Регистрация:
    23 июн 2007
    Сообщения:
    418
    Симпатии:
    0
    Баллы:
    26
    Переменная Товар имеет тип СправочникСсылка. Тем не менее попробовал написать Товар.Ссылка. Та же ошибка. По отладчику он все присваивает. Ошибка вылетает в момент записи
  4. reboot
    Offline

    reboot Опытный в 1С

    Регистрация:
    13 апр 2006
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    после прошода этой строки СтрокаТЧЗакуп.Номенклатура = Товар; по обе стороны "=" одинаковые значения?
  5. x_under
    Offline

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    В этом документе 2 ТЧ: Товары и Типы цен. Ты обе заполняешь? Покажи весь код
  6. TopicStarter Overlay
    mhl
    Offline

    mhl Опытный в 1С

    Регистрация:
    23 июн 2007
    Сообщения:
    418
    Симпатии:
    0
    Баллы:
    26
    заполнил таб.часть ТипыЦен. та же ошибка. Вот код
    Код:
    Процедура ЗагрузкаЦен(Элемент)
    СпрТипЦен = Справочники.ТипыЦенНоменклатуры;
    Закуп  = СпрТипЦен.НайтиПоНаименованию("Закупочные");
    Опт    = СпрТипЦен.НайтиПоНаименованию("Оптовые");
    Рознич = СпрТипЦен.НайтиПоНаименованию("Розничные");
    
    СпрВал = Справочники.Валюты;
    Манат = СпрВал.НайтиПоНаименованию("AZN");
    
    СпрЕдИзм = Справочники.ЕдиницыИзмерения;
    Штука = СпрЕдИзм.НайтиПоНаименованию("əd.");
    
    СпрНомен = Справочники.Номенклатура;
    
    Док = ПолучитьCOMОбъект("C:\Documents and Settings\Администратор\Мои документы\le sebil.xls");
    КоличествоСтраниц = 1;
    
    ДокЦеныНоменЗакуп  = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
    ДокЦеныНоменРознич = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
    
    ДокЦеныНоменЗакуп.Дата = ТекущаяДата();
    
    Для ТекНомер = 1 По 48 Цикл
    ЭКод     = Док.Sheets(1).Cells(ТекНомер, 1).Value;
    ЭИмя     = Док.Sheets(1).Cells(ТекНомер, 2).Value;
    ЭПокупки = Док.Sheets(1).Cells(ТекНомер, 6).Value;
    ЭПродажи = Док.Sheets(1).Cells(ТекНомер, 7).Value;
    
    Если ЭКод = "Kod" Тогда
    Продолжить;
    КонецЕсли;
    Если ЭИмя = Неопределено Тогда
    Продолжить;
    КонецЕсли;
    Если ТипЗнч(ЭПокупки) <> Тип("Число") Тогда
    ЭПокупки = 0;
    КонецЕсли;
    Если ТипЗнч(ЭПродажи) <> Тип("Число") Тогда
    ЭПродажи = 0;
    КонецЕсли;
    
    СтрокаТЧЗакуп  = ДокЦеныНоменЗакуп.Товары.Добавить();
    СтрокаТЧРознич = ДокЦеныНоменРознич.Товары.Добавить();
    
    ВхЗак = 0;
    ТЧТоварыЗакуп = ДокЦеныНоменЗакуп.Товары;
    Для Каждого СтрЗакуп Из ТЧТоварыЗакуп Цикл
    СтрНомен = Строка(СтрЗакуп.Номенклатура);
    Если СтрНомен = ЭИмя Тогда
    ВхЗак = 1;
    Прервать;
    КонецЕсли;
    КонецЦикла;
    Если ВхЗак = 1 Тогда
    Продолжить;
    КонецЕсли;
    
    Товар = СпрНомен.НайтиПоНаименованию(ЭИмя);
    Если Товар = Неопределено Тогда
    Сообщить(ЭИмя + " отсутствует в справочнике Номенклатура!");
    КонецЕсли;
    
    СтрокаТЧЗакуп.Номенклатура = Товар;
    СтрокаТЧЗакуп.Валюта = Манат;
    СтрокаТЧЗакуп.ЕдиницаИзмерения = Штука;
    СтрокаТЧЗакуп.ПроцентСкидкиНаценки = ЭПокупки;
    СтрокаТЧЗакуп.ТипЦен = Закуп;
    
    ТЧТипыЦенЗакуп = ДокЦеныНоменЗакуп.ТипыЦен;
    СтрокаТипЦенЗакуп = ТЧТипыЦенЗакуп.Добавить();
    СтрокаТипЦенЗакуп.ТипЦен = Закуп;
    
    ОбработкаПрерыванияПользователя();
    КонецЦикла; //проход по листам Экселя
    
    ДокЦеныНоменЗакуп.Записать(РежимЗаписиДокумента.Проведение);
    Предупреждение("Готово");
    КонецПроцедуры
    
  7. tunec
    Offline

    tunec Опытный в 1С

    Регистрация:
    2 июн 2008
    Сообщения:
    469
    Симпатии:
    0
    Баллы:
    26
    глянь на строке записи отладчиком по строкам для табчастей есть ли в них чего... Я так как-то забыл стереть наброски кода и получилось, что в середине процесса заполнения создавалась пустая строка....
  8. x_under
    Offline

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    Вот тебе пример
    Код:
    	// создаем новый документ "Установка цен номенклатуры"
    Док = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
    Док.Комментарий = "Создан обработкой ""Загрузка прайсов""";
    
    Док.ТипыЦен.Добавить().ТипЦен = Дистрибьюторская;
    Док.ТипыЦен.Добавить().ТипЦен = Диллерская;
    Док.ТипыЦен.Добавить().ТипЦен = ПостоянныйПокупатель;
    Док.ТипыЦен.Добавить().ТипЦен = РозничнаяЦена;
    
    // просматриваем файл
    Для ИндСтр = НачальнаяСтрока По КоличествоСтрок Цикл
    
    // Получим наименование
    Наименование = СокрЛП(Excel.Cells(ИндСтр,3).Value) + ?(КоличествоПК,"(На "+ СокрЛП(Excel.Cells(ИндСтр,8).Value) +" ПК)","");
    Если Наименование = "" Тогда
    Продолжить;
    КонецЕсли;
    
    // пытаемся найти такой элемент в справочнике
    СсылкаНаЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Наименование);
    Если СсылкаНаЭлемент = Справочники.Номенклатура.ПустаяСсылка() Тогда
    Сообщить("Элемент "+Наименование+" не существует в справочнике. Загрузка не произведена");
    Продолжить;
    КонецЕсли; 
    
    Валюта = Справочники.Валюты.НайтиПоКоду("810");
    
    // заполняем табличную часть
    Стр = Док.Товары.Добавить();
    Стр.Номенклатура = СсылкаНаЭлемент;
    Стр.ТипЦен = Дистрибьюторская;
    Стр.Валюта = Валюта;
    Стр.Цена = Число(Excel.Cells(ИндСтр,КолонкаДистрибьюторская).Value); 
    Стр.ЕдиницаИзмерения = СсылкаНаЭлемент.ЕдиницаХраненияОстатков;
    Стр.ПроцентСкидкиНаценки = Дистрибьюторская.ПроцентСкидкиНаценки;
    
    Стр = Док.Товары.Добавить();
    Стр.Номенклатура = СсылкаНаЭлемент;
    Стр.ТипЦен = Диллерская;
    Стр.Валюта = Валюта;
    Стр.Цена = Число(Excel.Cells(ИндСтр,КолонкаДилерская).Value); 
    Стр.ЕдиницаИзмерения = СсылкаНаЭлемент.ЕдиницаХраненияОстатков;
    Стр.ПроцентСкидкиНаценки = Диллерская.ПроцентСкидкиНаценки;
    
    Стр = Док.Товары.Добавить();
    Стр.Номенклатура = СсылкаНаЭлемент;
    Стр.ТипЦен = ПостоянныйПокупатель;
    Стр.Валюта = Валюта;
    Стр.Цена = Число(Excel.Cells(ИндСтр,КолонкаПостоянныйПокупатель).Value); 
    Стр.ЕдиницаИзмерения = СсылкаНаЭлемент.ЕдиницаХраненияОстатков;
    Стр.ПроцентСкидкиНаценки = Дистрибьюторская.ПроцентСкидкиНаценки;
    
    Стр = Док.Товары.Добавить();
    Стр.Номенклатура = СсылкаНаЭлемент;
    Стр.ТипЦен = РозничнаяЦена;
    Стр.Валюта = Валюта;
    Стр.Цена = Число(Excel.Cells(ИндСтр,КолонкаРозничнойЦены).Value); 
    Стр.ЕдиницаИзмерения = СсылкаНаЭлемент.ЕдиницаХраненияОстатков;
    Стр.ПроцентСкидкиНаценки = РозничнаяЦена.ПроцентСкидкиНаценки;
    
    
    Индикатор = ОКР(ИндСтр/КоличествоСтрок*100);
    КонецЦикла; 		// просматриваем файл
    
    Док.ПолучитьФорму().Открыть();
    
    
  9. TopicStarter Overlay
    mhl
    Offline

    mhl Опытный в 1С

    Регистрация:
    23 июн 2007
    Сообщения:
    418
    Симпатии:
    0
    Баллы:
    26
    данный код помог) спасибо!

Поделиться этой страницей