Имя: Пароль:
1C
1С v8
1С Конвертация 2.1 Номенклатура только Товары в Опр.Группе
0 crisalis
 
18.01.16
10:28
Доброе время суток уважаемые, как выгрузить только номенклатуру с видом товары и в определенной иерархии групп ? Контрагентов выгрузил произвольным запросом в ПВД.  По номенклатуре слишком много записей получается если выгружать запросом (хоть в консоли запросов все нормально) и некоторые контрагенты после загрузки дублируются. Посоветуйте как быть.
1 GreatOne
 
18.01.16
10:29
- "По номенклатуре слишком много записей получается если выгружать запросом"

Выгрузи 20%
2 GreatOne
 
18.01.16
10:29
скажи заказчику "там слишком много, вот вам 20%"
3 crisalis
 
18.01.16
10:31
(2) =) , ну тоже вариант
4 crisalis
 
18.01.16
10:32
Вот запрос который использовал в ПВД перед обработкой

Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
|    Номенклатура.Артикул,
|    Номенклатура.Код,
|    Номенклатура.Наименование КАК Наименование,
|    ВЫРАЗИТЬ(Номенклатура.НаименованиеПолное КАК СТРОКА(150))КАК НаименованиеПолное,
|    Номенклатура.ПометкаУдаления,
|    Номенклатура.Родитель,
|    Номенклатура.ЭтоГруппа
|ИЗ
|    Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|    НЕ Номенклатура.ПометкаУдаления
|    И Номенклатура.ВидНоменклатуры = &ВидНоменклатуры
|    И Номенклатура.Ссылка В ИЕРАРХИИ(&Группа1)";
Запрос.УстановитьПараметр("ВидНоменклатуры",    Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар", Истина));     //Виды номенклатуры
Запрос.УстановитьПараметр("Группа1",    Справочники.Номенклатура.НайтиПоНаименованию("Бассейны", Истина));     //Номенклатура

ВыборкаДанных = Запрос.Выполнить().Выбрать();
5 crisalis
 
18.01.16
10:36
(4) пытался уст. параметры запроса и через НайтиПоКоду() все равно не выгружает как надо.
6 _Batoo
 
18.01.16
10:45
(5) А как надо?)
7 Pro-tone
 
18.01.16
10:45
(0) а в чем проблема падает при выгрузке? Памяти мало?
8 crisalis
 
18.01.16
10:50
(7) выгружает слишком много строк как будто не срабатывает условия на параметры в запросе
9 _Batoo
 
18.01.16
10:55
(8) Посмотри в отладчике что не так.
10 crisalis
 
18.01.16
11:02
(9) не знаю как (краснею) не отлаживал код в КД никогда.
11 crisalis
 
18.01.16
11:05
(9) просит отключить режим совместимости ... (((
12 MadJhey
 
18.01.16
11:06
По номенклатуре слишком много записей получается если выгружать запросом (хоть в консоли запросов все нормально) и некоторые контрагенты после загрузки дублируются.

1. Возможно идет вызов из других ПКО в неявном виде. .
2. У контрагентов косяк в полях поиска.
13 MadJhey
 
18.01.16
11:07
14 crisalis
 
18.01.16
11:09
(13) Спасибо
15 Pro-tone
 
18.01.16
11:31
(13) в большинстве случаев достаточно конструкции "Сообщить" чтобы не создавать внешней обработки отладки

(0) неясно между какими конфами делается обмен, в любом случае я бы не доверял типовым правилам, так как их отладка сложна и они очень объемные из-за огромного количества ПКО и ПКС
16 crisalis
 
18.01.16
12:00
(15) у меня конфигурации не типовые , я пытаюсь написать все с 0. А Сообщить() покажет текущую строку которая выгружается а если их 2500 ...

2. Подскажите пожалуйста а что лучше использовать при выгрузке запрос в ПВД или в ПКО (перед выгрузкой) написать все что требуется отобрать ?
17 crisalis
 
18.01.16
12:59
Ребятки ну помогите кто сталкивался в КД с ПВД произвольный алгоритм - запрос. В консоли запросов все нормально а вот ПВД перед обработкой вытягивает х..ню полную. Пробовал отладить но не попадаю в эту процедуру:
18 crisalis
 
18.01.16
12:59
(17)
Процедура ПВД_ПередОбработкой_Номенклатура(Отказ, ИмяПКО, Правило, ИсходящиеДанные, ВыборкаДанных) Экспорт

    Запрос = Новый Запрос;
    Запрос.Текст = "
    |ВЫБРАТЬ
    |    Номенклатура.Артикул,
    |    Номенклатура.Код,
    |    Номенклатура.Наименование КАК Наименование,
    |    ВЫРАЗИТЬ(Номенклатура.НаименованиеПолное КАК СТРОКА(150)) КАК НаименованиеПолное,
    |    Номенклатура.ПометкаУдаления,
    |    Номенклатура.Родитель,
    |    Номенклатура.ЭтоГруппа
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |    НЕ Номенклатура.ПометкаУдаления
    |    И Номенклатура.ВидНоменклатуры = &ВидНоменклатуры
    |    И (Номенклатура.Ссылка В ИЕРАРХИИ(&Группа1)
    |    ИЛИ Номенклатура.Ссылка В ИЕРАРХИИ(&Группа2)
    |    ИЛИ Номенклатура.Ссылка В ИЕРАРХИИ(&Группа3)
    |    ИЛИ Номенклатура.Ссылка В ИЕРАРХИИ(&Группа4))";
    
    Запрос.УстановитьПараметр("ВидНоменклатуры", Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар", Истина));     //Виды номенклатуры
    Запрос.УстановитьПараметр("Группа1",    Справочники.Номенклатура.НайтиПоНаименованию("Бассейны", Истина));     //Номенклатура
    Запрос.УстановитьПараметр("Группа2",    Справочники.Номенклатура.НайтиПоНаименованию("Облицовочная плитка", Истина));     //Номенклатура
    Запрос.УстановитьПараметр("Группа3",    Справочники.Номенклатура.НайтиПоНаименованию("Сантехника", Истина));     //Номенклатура
    Запрос.УстановитьПараметр("Группа4",    Справочники.Номенклатура.НайтиПоНаименованию("Сауны", Истина));     //Номенклатура
    ВыборкаДанных = Запрос.Выполнить().Выбрать();

КонецПроцедуры
19 crisalis
 
18.01.16
13:02
(18) Или же это ПВД еще как то требуется подключить ? Запутался по самые гланды ... (((
20 Pro-tone
 
18.01.16
13:45
(16) а тебе не надо выбирать все 2500, ограничивай выборку одним нужным и по нему делай отладку через сообщить
21 GreatOne
 
18.01.16
14:00
как себя проверить:

Процедура ПВД_ПередОбработкой_Номенклатура(Отказ, ИмяПКО, Правило, ИсходящиеДанные, ВыборкаДанных) Экспорт

    Запрос = Новый Запрос;
    Запрос.Текст = "
    |ВЫБРАТЬ первые 5
    |    Номенклатура.Артикул,
    |    Номенклатура.Код,
    |    Номенклатура.Наименование КАК Наименование,
    |    ВЫРАЗИТЬ(Номенклатура.НаименованиеПолное КАК СТРОКА(150)) КАК НаименованиеПолное,
    |    Номенклатура.ПометкаУдаления,
    |    Номенклатура.Родитель,
    |    Номенклатура.ЭтоГруппа
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |    НЕ Номенклатура.ПометкаУдаления
    |    И Номенклатура.ВидНоменклатуры = &ВидНоменклатуры
    |    И (Номенклатура.Ссылка В ИЕРАРХИИ(&Группа1)
    |    ИЛИ Номенклатура.Ссылка В ИЕРАРХИИ(&Группа2)
    |    ИЛИ Номенклатура.Ссылка В ИЕРАРХИИ(&Группа3)
    |    ИЛИ Номенклатура.Ссылка В ИЕРАРХИИ(&Группа4))";
    
    Запрос.УстановитьПараметр("ВидНоменклатуры", Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар", Истина));    //Виды номенклатуры

    Запрос.УстановитьПараметр("Группа1",    Справочники.Номенклатура.НайтиПоНаименованию("Бассейны", Истина));    //Номенклатура
сообщить("Установлен параметр = " + Справочники.Номенклатура.НайтиПоНаименованию("Бассейны", Истина));
    Запрос.УстановитьПараметр("Группа2",    Справочники.Номенклатура.НайтиПоНаименованию("Облицовочная плитка", Истина));    //Номенклатура
// тут тоже самое и далее также.
    Запрос.УстановитьПараметр("Группа3",    Справочники.Номенклатура.НайтиПоНаименованию("Сантехника", Истина));    //Номенклатура

    Запрос.УстановитьПараметр("Группа4",    Справочники.Номенклатура.НайтиПоНаименованию("Сауны", Истина));    //Номенклатура

    ТЗ = Запрос.Выполнить().Выбрать().Выгрузить();
Сообщить("Проверим что выгрузилось");
Для каждого строка из ТЗ цикл
сообщить(строка.наименование);
// и т.д.
КонецЦикла;

КонецПроцедуры

22 GreatOne
 
18.01.16
14:00
ой  ТЗ = Запрос.Выполнить().Выгрузить();
23 GreatOne
 
18.01.16
14:02
Подожди-ка. А это что вообще? Процедура ПВД_ПередОбработкой_Номенклатура(Отказ, ИмяПКО, Правило, ИсходящиеДанные, ВыборкаДанных) Экспорт
24 crisalis
 
18.01.16
14:07
(23) Это процедура из обработки отладки я пробовал как в видео (13)
25 crisalis
 
18.01.16
14:08
(24) хотел остановится в этой процедуре и проверить параметры запроса , но к сожалению точка останова не сработала
26 GreatOne
 
18.01.16
14:12
пхахахах))
ой ржака)))
27 GreatOne
 
18.01.16
14:13
не не, все ок. Все првильно, просто поржал)
28 GreatOne
 
18.01.16
14:13
смешной у меня голос год назад был)
29 crisalis
 
18.01.16
14:14
(26) это вы видео делали ?
30 GreatOne
 
18.01.16
14:15
да у тебя случай простой, делай через сообщить(); как в (21). Просто надо понять, почему запрос неправильно отрабатывает.
31 GreatOne
 
18.01.16
14:15
(29) а что, не похож?)
32 crisalis
 
18.01.16
14:16
(30) а концептуально запрос правильный ?
33 GreatOne
 
18.01.16
14:17
(32) если в консоли отрабатывает, то откуда сомнения?
34 crisalis
 
18.01.16
14:18
(31) да похож )))
35 Darky
 
18.01.16
14:18
Попробуй в ПКО справочника Номенклатуры в обработчике Перед выгрузкой написать

Если НЕ Источник.ПринадлежитЭлементу(Параметры.ТвояГруппа)  Тогда
Отказ = Истина;
КонецЕсли;

Если не знаешь, что такое Параметры.ТвояГруппа, тогда пиши НайтиПоКоду или Наименованию вместо этого.
36 crisalis
 
18.01.16
14:19
(33) ну да ... только ничего (чтоб не сказать по другому) не работает.
37 crisalis
 
18.01.16
14:21
(35) оххх блин ПринадлежитЭлементу -- есть и такой метод ,вот я незрячий )
38 crisalis
 
18.01.16
14:23
(35) а как еще и ВидНоменклатуры туда запихать тоже через параметр?
39 Darky
 
18.01.16
14:28
(38) Можно через два Если...КонецЕсли. Можно через И/ИЛИ в одно Если...КонецЕсли.
В общем от твоей фантазии зависит.
40 crisalis
 
18.01.16
14:48
(21) С параметрами запроса всё ОК , вот только

Начало выгрузки:   18.01.2016 13:41:32
Установлен параметр = Товар
Установлен параметр = Бассейны
Установлен параметр = Облицовочная плитка
Установлен параметр = Сантехника
Установлен параметр = Сауны

Окончание выгрузки: 18.01.2016 13:43:14

Выгружено объектов: 13 271 ( в консоли запросов 2733 )
41 GreatOne
 
18.01.16
14:49
в запросе вставь первые 1 или больше. Посмотри что в файле выгрузки лежит. Может он там тянет РС контактная инфа или еще чего
42 crisalis
 
18.01.16
14:51
(41) ничего он не тянет вот скреен :

https://yadi.sk/i/OnS4ZNg8nF8bc
43 GreatOne
 
18.01.16
14:58
Добавь в запрос ПЕРВЫЕ *вставить число* и выгрузи.
Если поставил первые 5, а выгрузилось 25, то смотри файл, что там за объекты лежат.
44 crisalis
 
18.01.16
15:24
(43) сделал как предложил Darky в (35) получилось вот так:

Если Источник.ПометкаУдаления Тогда
    Отказ = Истина;
КонецЕсли;

Если НЕ Источник.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар", Истина) Тогда
    Отказ = Истина;
КонецЕсли;

Если НЕ Источник.ПринадлежитЭлементу(Справочники.Номенклатура.НайтиПоНаименованию("Бассейны", Истина))  
    И НЕ Источник.ПринадлежитЭлементу(Справочники.Номенклатура.НайтиПоНаименованию("Облицовочная плитка", Истина))
    И НЕ Источник.ПринадлежитЭлементу(Справочники.Номенклатура.НайтиПоНаименованию("Сантехника", Истина))
    И НЕ Источник.ПринадлежитЭлементу(Справочники.Номенклатура.НайтиПоНаименованию("Сауны", Истина)) Тогда
    
    Отказ = Истина;
    
КонецЕсли;


Уже другая проблема, не входят группы которые задаются в проверках (Бассейны,Сантехника,Сауны и Облицовочная плитка)
45 crisalis
 
18.01.16
15:28
(43) Уже сил нет бороться с запросом, упростил себе жизнь хоть и не до конца
46 GreatOne
 
18.01.16
15:41
Ты бы коды сравнил. Может там несколько групп с бассейнами.
47 crisalis
 
18.01.16
15:48
(46) идея хорошая всё таки коды уникальные
48 crisalis
 
18.01.16
16:07
(47) Не попадают эти 4 головные группы я сделал Сообщить() в коде :

Если Источник.ПометкаУдаления Тогда
    Отказ = Истина;
КонецЕсли;

Если НЕ Источник.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар", Истина) Тогда
    Отказ = Истина;
КонецЕсли;


//Если      НЕ Источник = Справочники.Номенклатура.НайтиПоНаименованию("Бассейны", Истина)  
//    ИЛИ НЕ Источник = Справочники.Номенклатура.НайтиПоНаименованию("Облицовочная плитка", Истина)
//    ИЛИ НЕ Источник = Справочники.Номенклатура.НайтиПоНаименованию("Сантехника", Истина)
//    ИЛИ НЕ Источник = Справочники.Номенклатура.НайтиПоНаименованию("Сауны", Истина) Тогда
    
    //Если НЕ Источник.ПринадлежитЭлементу(Справочники.Номенклатура.НайтиПоНаименованию("Бассейны", Истина))  
    //    И НЕ Источник.ПринадлежитЭлементу(Справочники.Номенклатура.НайтиПоНаименованию("Облицовочная плитка", Истина))
    //    И НЕ Источник.ПринадлежитЭлементу(Справочники.Номенклатура.НайтиПоНаименованию("Сантехника", Истина))
    //    И НЕ Источник.ПринадлежитЭлементу(Справочники.Номенклатура.НайтиПоНаименованию("Сауны", Истина)) Тогда
    
        Если НЕ Источник.ПринадлежитЭлементу(Справочники.Номенклатура.НайтиПоКоду("00010"))  
        И НЕ Источник.ПринадлежитЭлементу(Справочники.Номенклатура.НайтиПоКоду("03502", Истина))
        И НЕ Источник.ПринадлежитЭлементу(Справочники.Номенклатура.НайтиПоКоду("00027", Истина))
        И НЕ Источник.ПринадлежитЭлементу(Справочники.Номенклатура.НайтиПоКоду("00002", Истина)) Тогда
        Отказ = Истина;
    Иначе
        Сообщить(Источник.Наименование);
КонецЕсли;
    
    
//КонецЕсли;



В ИЕРАРХИИ(&Группа3) в запросе все было хорошо
49 crisalis
 
18.01.16
16:08
(48) Блин если не одно то второе. Классная штука КД. )
50 crisalis
 
18.01.16
16:51
(49) А если создать руками в приёмнике эти 4 головные группы которые не попадают в выгрузку - ВЗЛЕТИТ ?
51 Save_Vol
 
18.01.16
16:56
У контрагентов сделай поиск по ИНН или ИНН и КПП
52 crisalis
 
18.01.16
16:57
(51) Я номенклатуру выгружаю причем тут Контры ?
53 crisalis
 
18.01.16
17:01
(51) Ну ... правда изначально были. Решил убрать напрочь чтобы думать только о номенклатуре )
54 Pro-tone
 
18.01.16
17:49
(49) насколько она классная настолько и убогая, но только не она сама, а обработки, которые с ней работают.

В каждом релизе каждой конфы как правило своя версия обработки, самих обработок как правило 3: универсальный обмен, обмен данных хмл и конвертация объектов ИБ. Универсальный обмен может без проблем все выгрузить-загрузить, а ОД может и нет и т.п. Единого стандарта 1С, увы, не сделали.
55 Darky
 
18.01.16
18:27
Я думал ты уже все перенес давно)

Чтобы твои ключевые группы попали в выгрузку, стало быть, нужно их исключить из условия. Примерно так:

ГруппаБассейны = Справочники.Номенклатура.НайтиПоНаименованию("Бассейны", Истина);
Если (НЕ Источник.ПринадлежитЭлементу(ГруппаБассейны)) И (Источник <> ГруппаБассейны) Тогда
    Отказ = Истина;
КонецЕсли;
56 crisalis
 
18.01.16
18:58
(55) спасибо Darky я до кукал сам )
57 crisalis
 
18.01.16
19:03
(54) А мне кажется что КД просто сложная в освоении и есть очень много нюансов. Получается что мозги надо перестроить под это да и практики бы по больше... А представь что её нет все равно труднее с нуля что то разработать...
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший