Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Произвольный отбор в справочниках          
Vidocq05 Подменю пользователя
сообщение 06.06.17, 8:19
Сообщение #1

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 214
Из: Сумы
Спасибо сказали: 38 раз
Рейтинг: 0

С конфигурацией КД только знаком.
Подскажите, как сделать произвольный отбор в справочнике, в данном случае "Номенклатура"?
Мне нужно, чтобы в выгрузку попала номенклатура которая есть на остатке и "живая" номенклатура (по которой были движения за последние полгода). Запрос я могу написать, и в результат запроса попадут ссылки на требуемую номенклатуру, только куда этот запрос тулить? Какой должен быть синтаксис?

Bernet Подменю пользователя
сообщение 06.06.17, 8:40
Сообщение #2

Ветеран
Иконка группы
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 317 раз
Рейтинг: 0

Vidocq05 @ Сегодня, 9:19 * ,
Смотрите на события "Перед выгрузкой", "При выгрузке" и советую читать "Информацию по обработчикам" - полезная штука, расписывает все предопределенные параметры которые есть в событии. Например параметр:
Цитата
Источник - Произвольный - выгружаемый объект источник (ссылка или произвольные данные)

Т.е. грубо говоря можно проверить есть ли Источник в вашем отобранном списке, если нету уйти в Отказ = Истина
как-то так


Signature
Дописываю конфигурации на платформе 8.х.
- Управление торговым предприятием для Украины
- Управление производственным предприятием для Украины
- Управление небольшой фирмой для Украины
- Бухгалтерия для Украины;
- Общепит для Украины
- Ресторан (Рарус)
- Розница

Vidocq05 Подменю пользователя
сообщение 06.06.17, 9:19
Сообщение #3

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 214
Из: Сумы
Спасибо сказали: 38 раз
Рейтинг: 0

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

Как то вроде не оптимально. У меня стоит задача единоразово перенести данные с одной базы в другую. В справочнике "Номенклатура" тысячи элементов. Т.е. в выгрузку будет пытаться попасть каждый элемент и каждый раз будет производится запрос и проверятся подходит он или нет? Или я что то неправильно понял? Я думаю должен быть способ сразу получить нужные элементы.

sava1 Подменю пользователя
сообщение 06.06.17, 9:35
Сообщение #4

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

В ПВД меняем стандартаяВыборка на произвольная, пишем запрос

Сообщение отредактировал sava1 - 06.06.17, 9:47

Vidocq05 Подменю пользователя
сообщение 06.06.17, 9:58
Сообщение #5

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 214
Из: Сумы
Спасибо сказали: 38 раз
Рейтинг: 0

sava1 @ Сегодня, 10:35 * ,
А более подробно? Куда писать? В событие "Перед выгрузкой"? Какой синтаксис? Можно простой примерчик? Текст запроса не имеет значения.

sava1 Подменю пользователя
сообщение 06.06.17, 10:02
Сообщение #6

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

Цитирую и ЖК:
Цитата
Перед обработкой
Условия возникновения события
Событие выполняется перед обработкой каждого правила выгрузки один раз. Используется для установки дополнительных параметров перед выгрузкой данных, для переопределения выборки объектов, подлежащей выгрузке, либо для выгрузки дополнительной информации

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

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

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

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

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

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

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


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

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

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


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



Спасибо сказали: Vidocq05,

Vidocq05 Подменю пользователя
сообщение 06.06.17, 15:52
Сообщение #7

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 214
Из: Сумы
Спасибо сказали: 38 раз
Рейтинг: 0

sava1 @ Сегодня, 11:02 *

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

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

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

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


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

sava1 Подменю пользователя
сообщение 06.06.17, 17:04
Сообщение #8

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

Да. По ним идет сопоставление

В консоли сделайте запрос и скопируйте

Спасибо сказали: Vidocq05,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 20:19
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!