пишу под себя обработку для выгрузки Номенклатуры в CSV для синхронизации с интернет-магазином
код такой:
Текст = СоздатьОбъект(«Текст»);
Список = СоздатьОбъект(«СписокЗначений»);
Спр=СоздатьОбъект(«Справочник.Номенклатура»);
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент()=1 Цикл
Список.ДобавитьЗначение(Спр.Код);
Список.ДобавитьЗначение(Спр.Наименование); // и другие поля…
// выводим список в текст
Текст.ДобавитьСтроку(Список.ВСтрокуСРазделителями());
Список.УдалитьВсе();// очищаем список
КонецЦикла;
Текст.Записать(«exp_imp.txt»);
Показать
проблема вот в чём: поля "Код" и "Наименование" есть как у групп, так и у отдельных товаров номенклатуры.
однако у товаров помимо них есть и другие поля, в отличие от групп
при этом если я пытаюсь также выгружать и эти поля (например, "Спр.Марка"), то при запуске обработки получаю ошибку "Поле агрегатного объекта не обнаружено {Марка}" :(
по сути группы сами по себе мне и не нужны для эскпорта!
вопрос в том - КАК выгрузить из Номенклатуры ТОЛЬКО товары? по какому принципу можно исключить группы из выборки?
пробовал такой код - не работает...
Если ПустоеЗначение(Спр.Марка)<>1 Тогда
Список.ДобавитьЗначение(Спр.Марка);
КонецЕсли;
ребята, спасибо большое за подсказки!
однако проблема не решилась... :(
дело в том, что не во всех записях товаров заполнены все поля
когда пытаюсь обращаться к тому же полю Марка даже у простого товара (группы уже пропускаю), выдаётся точно такое же сообщение!
пытаюсь использовать такой код - без эффекта:
Если ПустоеЗначение(Спр.Марка)<>1 Тогда
Список.ДобавитьЗначение(Спр.Марка);
КонецЕсли;
как-то можно проверить ещё, существует ли и заполнено ли данное поле?
Список.ДобавитьЗначение(Спр.Наименование) - не совсем корректно.
Лучше будет - Список.ДобавитьЗначение(СокрЛП(Спр.Наименование))
И еще, та же Марка - какого типа реквизит - строка,справочник,перечисление?
Если строка, тогда можно попробовать:
Если СокрЛП(Спр.Марка) <> "" Тогда
Список.ДобавитьЗначение(Спр.Марка);
КонецЕсли;
Если справочник:
Если Спр.Марка.Выбран() = 1 Тогда
Список.ДобавитьЗначение(СокрЛП(Спр.Марка.Наименование));
КонецЕсли;
Если перечисление:
Если Спр.Марка.Выбран() = 1 Тогда
Список.ДобавитьЗначение(Спр.Марка.Идентификатор());
КонецЕсли;
ребята, всем огромное спасибо за помощь!
ошибка была действительно в том, что я неправильно обращался к полю
я просто до этого открыл Номенклатуру, там написано поле "Марка"
а на самом деле в справочнике такого поля нет, есть другое, к нему и получилось обратиться
только вот непонятно, где же задаётся соответствие между полями Номенклатуры и структурой справочника "Номенклатура"?
дело в том, что у меня, например, есть ещё поле Цена в Номенклатуре, значение которого определяется расчётами, использующими другие справочники
если кто-нибудь подскажет, где могут быть эти расчёты - буду очень признателен!
надеюсь, я достаточно подробно сформулировал вопрос...
соответствие между полями Номенклатуры и структурой справочника "Номенклатура"
Это имеется ввиду соответствие между данными, отображаемыми на форме элемента справочника "Номенклатура", и значениями реквизитов элемента справочника?
Расчеты могут производиться в формуле элемента диалога, в модуле формы, в глобальном модуле.
нет, не совсем
мне нужно настроить отображение СПИСКА номенклатуры, который выводится по нажатию пункта меню "Номенклатуры"
что-то вроде этого делает вот эта обработка: http://infostart.ru/projects/3746/ ну и плюс надо настроить вывод полей этого списка, там же наверняка можно использовать какие-то формулы?