Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: СвойстваНоменклатуры

v7: СвойстваНоменклатуры
Я
   odinAssDblSeven
 
16.12.20 - 11:06
Всем привет, в 1с ни в зуб ногой, но стоит задача, которую не могу нагуглить. Помогите разобраться плз. Задача максимум - сделать аналог отчета Остатки ТМЦ в ТиС 9.2 релиз 932, но в виде отдельной обработки, которая молча будет делать файл csv или post запрос на сервер. ТМЦ должны выгружаться только те, что имеют ВидСвойства "на сайт" и ЗначениеСвойства "да". Задача минимум, понять как программно дернуть эти самые свойства товаров. Я могу получить все товары и не могу отфильтровать их. Все, что удалось найти, это "ИспользоватьВладельца", но я не могу прикрутить эту конструкцию к циклу. В модуле оригинального отчета есть такая строка глФильтрПоПеременнойЗапроса (ТаблицаМФ,"Номенклатура",ВыбТМЦ,"ВыбТМЦ",     ТекстЗапроса,Загол,"СвойстваНоменклатуры"); В ТаблицаМФ в ЗначенияСвойств есть список элементов в котором есть значение "да", но нигде нет ВидСвойства "на сайт". Т.е. запрос скопипастить без ручного добавления в Множественный фильтр не выходит. Подскажите плз как это реализовать?
   Базис
 
1 - 16.12.20 - 11:07
Кнопку в форме осилишь?
   Базис
 
2 - 16.12.20 - 11:10
Тогда сделай заполнение выбранной номенклатуры по нужному тебе свойству.
Хотя там вроде и подбор по свойству есть.
   odinAssDblSeven
 
3 - 16.12.20 - 11:14
(1) кнопку то я осилю, но нужно, чтобы это было без множественного фильтра
   uno-group
 
4 - 16.12.20 - 11:31
Правильный файл csv без Бом в нужной кодировке + выборка + куча т.п. тут с наскоку не взлетит. добраться до свойства номенклатуры и сделать выборку это меньшая из проблем. Проще обратиться к специалисту. Сам убьешь недели 2-3 на разбирательство как это сделать.
   uno-group
 
5 - 16.12.20 - 11:38
А так правую кнопку мышки на отчете "Сохранить как внешний отчет обработку" и дальше правишь этот отчет.
В начале отчета текст=СоздатьОбъект("текст"). в нужных местах после или вместо таб.ВывестиСекцию(); пишешь Текст.ДобавитьСтроку(....). в конце отчета. Текст.Записать(...)
   odinAssDblSeven
 
6 - 16.12.20 - 11:42
(4) спасибо за совет, но пока есть и время, и желание желание разобраться, как это работает. А во сколько вы оцениваете эту работу, если не секрет?
   uno-group
 
7 - 16.12.20 - 11:43
Текст.ДобавитьСтроку(....) нужно вставить кучу проверок и замен убрать переводы строк и т.п. из данных которые сделают файл не читаемым. Отлично работающий отчет на 10 товарах - 2 дня отлаживал на 10 тысячах. Выходил csv с ошибками.
Одну ошибку так и не поборол получилось только выдать юзеру предупреждение с котом товара который нужно глазами смотреть и исправлять в нем данные.
   odinAssDblSeven
 
8 - 16.12.20 - 11:48
(7)
    спр = СоздатьОбъект("Справочник.Номенклатура"); 
    спр.ВыбратьЭлементы();
    Пока спр.ПолучитьЭлемент()=1 Цикл     
        Если ПустоеЗначение(спр.ПолнНаименование) = 0 Тогда
            Сообщить(спр.ПолнНаименование);
        КонецЕсли;    
    КонецЦикла;   

как в цикле получить все свойства позиции?
   uno-group
 
9 - 16.12.20 - 11:48
(6) Зависит от количества товаров, количества выгружаемых полей, наличия в них строк неограниченной длинны и т.п.
от 50 у.е.
   uno-group
 
10 - 16.12.20 - 11:52
Я бы юзалл Спр.СоздатьОбъект("Справочник.СвойстваНоменклатуры")
Спр.ВыбратьПоРеквизиту("ВидСвойства",Константа.ВыгружатьНаСайт...);
ТМЦ=Спр.Владелец
   Злопчинский
 
11 - 16.12.20 - 14:01
Вы все дятлы.
делается запрос к спр.Свойства.Номенклатуры
с фильтром по нужному виду и значению 
в запросе тянется владелец-товар. Всё.
ща накидаю, если ГМ не свариляс еще...
   Злопчинский
 
12 - 16.12.20 - 14:06
а вот если НЕ выгружать на сайт товары, которые ВидСвойства.Выгружать = НЕТ, а любое другое значение свойства или остуствие свойства = выгружать - тогда сложнее, но не особо, первым запросом собираем "не выгружаемые", вторым запросом по спр.номенклатура выбираем с филтиром Не В Списке (невыгружаемые)
   Злопчинский
 
13 - 16.12.20 - 14:16
https://ibb.co/b1fKjkS
.
сделано конструктором.
Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
    //Создание объекта типа Запрос

    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать)

    |Без итогов;
    |ВидСвойства = Справочник.СвойстваНоменклатуры.ВидСвойства;
    |ЗначениеСвойства = Справочник.СвойстваНоменклатуры.ЗначениеСвойства;
    |Владелец = Справочник.СвойстваНоменклатуры.Владелец;
    |Группировка Владелец упорядочить по Владелец.Код без групп;
    |Условие(ВидСвойства = ВыбВидСвойства);
    |Условие(ЗначениеСвойства = ВыбЗначениеСвойства);
    |"//}}ЗАПРОС

    ;
    // Если ошибка в запросе, то выход из процедуры

    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;

    // Подготовка к заполнению выходных форм данными запроса

    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    // Заполнение полей "Заголовок"

    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка() = 1 Цикл
        // Заполнение полей Сформировать

        Таб.ВывестиСекцию("Сформировать");
    КонецЦикла;
    // Вывод заполненной формы

    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", "");
КонецПроцедуры
   odinAssDblSeven
 
14 - 18.12.20 - 09:47
(13) спасибо за помощь, я немного по-другому сделал: создаю объект номенклатура, перебирая элементы смотрю свойства через "использоватьВладелльца" а остатки выгружаю через через сводныйОстаток. Возник другой вопрос: как при создании объекта номенклатура ограничить его размер указав только одно наименование номенклатуры?
   Bigbro
 
15 - 18.12.20 - 09:54
(14) перебирая элементы ты дрюкаешь базу обращениями, если у тебя сотня тысяч элементов - будет сто тысяч обращений так делать не стоит, лучше воспользуйся тем что Злоп написал - запросом выдергиваешь данные.
а по поводу только одного наименования - добавь на форму "выбНоменклатура" - Элемент справочника.
и 
если ПустоеЗначение(выбНоменклатура)=0 тогда
ТекстЗапроса = ТекстЗапроса + "
|Условие (Владелец = ВыбНоменклатура);
|";
примерно так.
   odinAssDblSeven
 
16 - 18.12.20 - 10:05
(15) запросы пока еще не осилил. У меня нет формы, все работает в одной функции.

ном = СоздатьОбъект("Справочник.Номенклатура");
ном.ВыбратьЭлементы();
    Пока ном.ПолучитьЭлемент()=1 Цикл
    //тут вся логика с выгрузкой

    КонецЦикла;


вот можно как-то при создании ном указать один элемент справочника?
   Bigbro
 
17 - 18.12.20 - 10:10
ном это ссылка, через выбрать получить ты получаешь указатель на конкретный элемент, для перебора.
можешь просто передавать в функцию нужный тебе элемент, и ном.НайтиЭлемент(выбЭлемент) использовать
   Bigbro
 
18 - 18.12.20 - 10:12
запросы надо осиливать, тут как раз простой пример чтобы разобраться, пощупать.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.