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

как в цикле получить все свойства позиции?
9 uno-group
 
16.12.20
11:48
(6) Зависит от количества товаров, количества выгружаемых полей, наличия в них строк неограниченной длинны и т.п.
от 50 у.е.
10 uno-group
 
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);
    Таб.Показать("Сформировать", "");
КонецПроцедуры
14 odinAssDbl Seven
 
18.12.20
09:47
(13) спасибо за помощь, я немного по-другому сделал: создаю объект номенклатура, перебирая элементы смотрю свойства через "использоватьВладелльца" а остатки выгружаю через через сводныйОстаток. Возник другой вопрос: как при создании объекта номенклатура ограничить его размер указав только одно наименование номенклатуры?
15 Bigbro
 
18.12.20
09:54
(14) перебирая элементы ты дрюкаешь базу обращениями, если у тебя сотня тысяч элементов - будет сто тысяч обращений так делать не стоит, лучше воспользуйся тем что Злоп написал - запросом выдергиваешь данные.
а по поводу только одного наименования - добавь на форму "выбНоменклатура" - Элемент справочника.
и
если ПустоеЗначение(выбНоменклатура)=0 тогда
ТекстЗапроса = ТекстЗапроса + "
|Условие (Владелец = ВыбНоменклатура);
|";
примерно так.
16 odinAssDbl Seven
 
18.12.20
10:05
(15) запросы пока еще не осилил. У меня нет формы, все работает в одной функции.

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


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