Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Произвольный отбор в справочниках
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Конфигурация "1С:Конвертация данных"
Vidocq05
С конфигурацией КД только знаком.
Подскажите, как сделать произвольный отбор в справочнике, в данном случае "Номенклатура"?
Мне нужно, чтобы в выгрузку попала номенклатура которая есть на остатке и "живая" номенклатура (по которой были движения за последние полгода). Запрос я могу написать, и в результат запроса попадут ссылки на требуемую номенклатуру, только куда этот запрос тулить? Какой должен быть синтаксис?
Bernet
Vidocq05 @ Сегодня, 9:19 необходимо зарегистрироваться для просмотра ссылки ,
Смотрите на события "Перед выгрузкой", "При выгрузке" и советую читать "Информацию по обработчикам" - полезная штука, расписывает все предопределенные параметры которые есть в событии. Например параметр:
Цитата
Источник - Произвольный - выгружаемый объект источник (ссылка или произвольные данные)

Т.е. грубо говоря можно проверить есть ли Источник в вашем отобранном списке, если нету уйти в Отказ = Истина
как-то так
Vidocq05
Цитата(Bernet @ 06.06.17, 9:40) необходимо зарегистрироваться для просмотра ссылки
Т.е. грубо говоря можно проверить есть ли Источник в вашем отобранном списке, если нету уйти в Отказ = Истина
как-то так

Как то вроде не оптимально. У меня стоит задача единоразово перенести данные с одной базы в другую. В справочнике "Номенклатура" тысячи элементов. Т.е. в выгрузку будет пытаться попасть каждый элемент и каждый раз будет производится запрос и проверятся подходит он или нет? Или я что то неправильно понял? Я думаю должен быть способ сразу получить нужные элементы.
sava1
В ПВД меняем стандартаяВыборка на произвольная, пишем запрос
Vidocq05
sava1 @ Сегодня, 10:35 необходимо зарегистрироваться для просмотра ссылки ,
А более подробно? Куда писать? В событие "Перед выгрузкой"? Какой синтаксис? Можно простой примерчик? Текст запроса не имеет значения.
sava1
Цитирую и ЖК:
Цитата
Перед обработкой
Условия возникновения события
Событие выполняется перед обработкой каждого правила выгрузки один раз. Используется для установки дополнительных параметров перед выгрузкой данных, для переопределения выборки объектов, подлежащей выгрузке, либо для выгрузки дополнительной информации

Параметры:
Отказ - Булево. Если установить значение Истина, то выгрузка данных по данному правилу не производится

Параметры - Структура, в которой хранятся переменные доступные во всех обработчиках

ИмяПКО - Строка. Имя правила конвертации объектов, указанное по умолчанию в правиле выгрузки данных. При выгрузке конкретных объектов может быть изменено

Правило - ссылка на данное правило выгрузки данных

ИсходящиеДанные - Произвольный. Произвольные вспомогательные данные, доступные при выгрузке объектов выборки

ВыборкаДанных - Запрос, Результат запроса, Выборка из результата запроса или произвольная коллекция выгружаемых объектов. Используется, когда способ выгрузки данных - Произвольный алгоритм. Если определить данную переменную, то обход коллекции и выгрузка объектов будет осуществляться автоматически

Важно:
Если для выборки данных ПВД используется произвольный алгоритм и в обработчике ПВД "Перед обработкой" инициируется параметр ВыборкаДанных, то для ПКО следует установить признак "Не запоминать выгруженные объекты".


Пример:
ДатаИзмененияОбъекта = ДатаНачала;
Сообщить("Контрагенты");

Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = "
|ТекущийЭлемент = Справочник.Партнеры.ТекущийЭлемент;
|ДатаИзменения = Справочник.Партнеры.ДатаИзменения;
|Группировка ТекущийЭлемент;
|Условие(ДатаИзменения >= ДатаИзмененияОбъекта);";

Запрос.Выполнить(ТекстЗапроса);
Пока Запрос.Группировка(1) = 1 Цикл
ВыгрузитьПоПравилу(Запрос.ТекущийЭлемент, , , , "Контрагенты");
КонецЦикла;


Результат запроса (или сам запрос ) назовите ВыборкаДанных
Обязательно ! - выбирайте в запросе Ссылка /+ правильная синхронизация/
в ПКО можно не сопоставлять, если наименования совпадают


Vidocq05
sava1 @ Сегодня, 11:02 необходимо зарегистрироваться для просмотра ссылки

На событие "Перед обработкой" повесил код:

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
        |    СпрНоменклатура.Ссылка
        |ИЗ
        |    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
        |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(&НачалоПериода, , , ) КАК ПродажиОбороты
        |            ПО (ПродажиОбороты.Номенклатура = СпрНоменклатура.Ссылка)
        |        ПО ТоварыНаСкладахОстатки.Номенклатура = СпрНоменклатура.Ссылка
        |ГДЕ
        |    ТоварыНаСкладахОстатки.КоличествоОстаток <> 0
        |
        |СГРУППИРОВАТЬ ПО
        |    СпрНоменклатура.Ссылка";
        
Запрос.УстановитьПараметр("НачалоПериода", ДобавитьМесяц(ТекущаяДата(),-6));

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДанных = РезультатЗапроса.Выбрать();


Но выдает ошибку, что поле "Код" не обнаружено. Добавил "Код" в текст запроса, стало ругатся на "ЭтоГруппа". Это получается нужно выбирать в запросе все поля номенклатуры что присутствуют в ПКС?
sava1
Да. По ним идет сопоставление

В консоли сделайте запрос и скопируйте
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.