Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
30 мая 2024, 15:07

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

Автор studentca, 09 июл 2012, 09:25

0 Пользователей и 1 гость просматривают эту тему.

studentca

Я беру из дбф файла код (он числовой) и затем пытаюсь найти по данному коду в справочнике Номенклатуру, потом записываю в таблицу уже, наверное, строкой.

nn68

Попробуйте числовой код из ДБФ файла преобразовать в строку(Коды справочников в 1с обычно строковые):

ТоварКод = Формат(ТекКонтр.Номенклатура, "ЧЦ=11; ЧВН=; ЧГ=")// 11 - длина кода
Номенкл = Справочники.Номенклатура.НайтиПоКоду(ТоварКод);
Если Номенкл.Пустая() Тогда
   Сообщить("Не найден: товар с кодом"+ ТоварКод);
Иначе
        Объект.Номенклатура = Номенкл.Ссылка;
        .......
КонецЕсли;

studentca

К сожалению, не помогло(((

nn68

Какой тип у поля Номенклатура табличной части Товары?

studentca

вот так я беру данные из дбф файла (номенклатура в дбф файле число, но я беру как строку)

ДБФС = Новый XBase;

   ДБФС.Кодировка = КодировкаXBase.OEM;
   ТЗСост = Новый ТаблицаЗначений;
   ТЗСост.Колонки.Добавить("НомерСтроки",         Новый ОписаниеТипов("Число"));
   ТЗСост.Колонки.Добавить("Количество",         Новый ОписаниеТипов("Число"));
   ТЗСост.Колонки.Добавить("Сумма",            Новый ОписаниеТипов("Число"));
   ТЗСост.Колонки.Добавить("Цена",                Новый ОписаниеТипов("Число"));
   ТЗСост.Колонки.Добавить("Договор",            Новый ОписаниеТипов("Строка"));
   ТЗСост.Колонки.Добавить("Номенклатура",         Новый ОписаниеТипов("Строка"));
   ТЗСост.Колонки.Добавить("НДС",                  Новый ОписаниеТипов("Строка"));

   
    ТЗСост.Индексы.Добавить("Договор");

   ДБФС.ОткрытьФайл(ВыбФайлСостав, ,Истина);
   НК = ДБФС.КоличествоЗаписей();
   //ТЗСост.Индексы.Добавить("Договор");
      
   Для НК = 1 По 3000  Цикл
      ДБФС.Перейти(НК);
         
      НС = ТЗСост.Добавить();
      НС.НомерСтроки = НК;
      НС.Количество = Формат(ДБФС.AMOUNT, "ЧГ=0");
      НС.Сумма = Формат(ДБФС.SUMMA, "ЧГ=0");
      НС.Цена = Формат(ДБФС.PRICE, "ЧГ=0");
      НС.Договор = Формат(ДБФС.NI_ID, "ЧГ=0");
      НС.Номенклатура = Формат(ДБФС.GOOD_ID, "ЧГ=0");
      НС.НДС = Формат(ДБФС.NDS, "ЧГ=0");
........................


Прих = Документы.РеализацияТоваровУслуг;
         
          НайденнаяСсылка = Прих.НайтиПоНомеру(СокрЛП(НСН.Номер), НСН.День);
             Если НайденнаяСсылка.Пустая() Тогда
         
          Контр = Прих.СоздатьДокумент();
         Контр.ВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.ПродажаКомиссия;
         Контр.Номер = НСН.Номер;
         Контр.Комментарий = НСН.Номер;
         Контр.Дата = НСН.День;
         Контр.Организация = Справочники.Организации.НайтиПоКоду("000000001");
         Контр.Склад = Справочники.Склады.НайтиПоКоду("000000001");
         Контр.Контрагент = Справочники.Контрагенты.НайтиПоКоду(НСН.Контрагент);
          Контр.ДоговорКонтрагента = Справочники.ДоговорыКонтрагентов.НайтиПоКоду(НСН.Код);
         Контр.СпособЗачетаАвансов = Перечисления.СпособыЗачетаАвансов.Автоматически;
         ИскомоеЗначение = НСН.Код;
                           
         СтруктураОтбора = Новый Структура;
         СтруктураОтбора.Вставить("Договор", ИскомоеЗначение);
         НайденныйМассивСтрок = ТЗСост.НайтиСтроки(СтруктураОтбора);
         Для Каждого ТекКонтр Из НайденныйМассивСтрок Цикл
            
                                                        Объект = Контр.Товары.Добавить();
               ТоварКод = Формат(ТекКонтр.Номенклатура, "ЧЦ=11; ЧВН=; ЧГ=");
               Номенкл = Справочники.Номенклатура.НайтиПоКоду(ТоварКод);
               Если НЕ Номенкл.Пустая() Тогда
                  
               Объект.Номенклатура = Номенкл.Наименование;
               Сообщить(Объект.Номенклатура);
               
                КонецЕсли;
               Объект.Количество = ТекКонтр.Количество;
               Объект.Цена = ТекКонтр.Цена;
               Объект.Сумма = ТекКонтр.Сумма;
               Объект.СтавкаНДС = ТекКонтр.НДС;
               ЗаполнитьЗначенияСвойств(Объект, ТекКонтр);
         КонецЦикла;
            
         Контр.Записать();
         Контр.ПолучитьФорму().Открыть();
         Если ПроводитьПН = Истина Тогда
          Контр.Записать(РежимЗаписиДокумента.Проведение);
         
      КонецЕсли;

nn68

У Вас :
Объект.Номенклатура = Номенкл.Наименование; // Вы ссылочному типу пытаетесь присвоить строку
нужно:
Объект.Номенклатура = Номенкл.Ссылка;

studentca

Сделала ссылку, но не получилось

studentca

В табличной части док "реализации товаров и услуг" реквезит номенклатура берет данные из справочника номенклатура

nn68

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

studentca

Я смотрела в табло6
Объект.Номенклатура - значение пусто, а
ЗаполнитьЗначенияСвойств(Объект, ТекКонтр) - смотрела Объект: "ДокументТабличнаяЧастьСтрока.РеализацияТоваровУслуг.Товары", при открытии "Номенклатура" также пуста, а код имеет значение двух ковычек внутри которых пустое пространство.
Надеюсь объяснила понятно)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск