Форум программистов, компьютерный форум, киберфорум
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
1 / 1 / 0
Регистрация: 13.06.2011
Сообщений: 26
1
1C 8.x

Запрос с заполнением данных( с двойным условием выборки)

13.03.2014, 11:40. Показов 3070. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Есть задача следующего плана:
Составляется документ "Разность Номенклатур"(название придумал сам),который будет заполнятся на Основании документа "Поступление Товаров и Услуг".Делается все из-за того, что главный бухгалтер сказал, что у нас своя номенклатура, а у поставщика своя и этот документ будет прикрепляется к документу для уточнения различий номенклатур.
В общем, в конфигураторе все необходимые поля я подготовил. Уже конструктором запросов - создал следующего типа запрос:


1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
    //{{__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ПоступлениеТоваровУслуг") Тогда
        // Заполнение шапки
        Отправитель = ДанныеЗаполнения.Грузоотправитель;
        Получатель = ДанныеЗаполнения.Грузополучатель;
        От = ДанныеЗаполнения.ДатаВходящегоДокумента;
        Поставщик = ДанныеЗаполнения.Контрагент;
        Ном = ДанныеЗаполнения.НомерВходящегоДокумента;
        Организация = ДанныеЗаполнения.Организация;
        Для Каждого ТекСтрокаТовары Из ДанныеЗаполнения.Товары Цикл
            НоваяСтрока = РазностьНоменклатуры.Добавить();
            НоваяСтрока.Наименованиешт1 = ТекСтрокаТовары.ЕдиницаИзмерения;
            НоваяСтрока.Количество1 = ТекСтрокаТовары.Количество;
            НоваяСтрока.Наименование1 = ТекСтрокаТовары.Номенклатура;
        КонецЦикла;
    КонецЕсли;
    //}}__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
КонецПроцедуры
Т.е нашу номенклатуру этот документ уже забирает из "ПоступлениеТоваровУслуг". Теперь нужно сделать то, что мне как раз непонятно:

Требуется, чтобы документ при в воде на основании делал запрос в РегистрСведений "НоменклатураКонтрагентов"
1.Делал выборку сначала по Поставщику. ("Поставщик = ДанныеЗаполнения.Контрагент;") обращаясь к Измерению "Контрагент"

2.Потом уже отсеивал по нашей номенклатуре.("НоваяСтрока.Наименование1 = ТекСтрокаТовары.Номенклатура;") обращаясь к измерению "Номенклатура"

И соответственно забирал бы ресурсы,а именно:
НаименованиеНоменклатурыКонтрагента
Артикул номенклатуры контрагента
ЕдиницаНоменклатурыКонтрагента

И вставлял бы их в поля
НоваяСтрока.Наименованиешт2 = ЕдиницаНоменклатурыКонтрагента

НоваяСтрока.Наименование2 = НаименованиеНоменклатурыКонтрагента

Сам по себе сис. админ, но вот по тихоньку пытаюсь поднять свой скилл на новый уровень, к сожалению,базового курса, что я прошёл мне не хватает для составления такого обращения к базе.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.03.2014, 11:40
Ответы с готовыми решениями:

При нажатии двойным щелчком на ячейку открывался запрос с условием выборки этой ячейки
Всем, добрый вечер! У меня есть форма в которой находится таблица. И есть запрос при открывании...

Запрос с двойным условием
Товарищи, помогите, пожалуйста. Не могу разобраться. Есть три таблицы и связь многие ко многим....

Запрос с двойным условием
День добрый! Столкнулся с проблемой. Суть программы такова: есть результаты эксперимента,...

DataTable с условием выборки как источник данных для Combobox
Коллеги, приветствую! Есть TestDataTable с данными. Необходимо заполнить Combobox1 из...

9
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
13.03.2014, 13:00 2
Конфа типовая?
Синхронизация номенклатуры только по наименованию?
Можно без документа обойтись.
1. Создать справочник "НомКонтров" - это фактически наименование, но в виде ссылки. Пополнять его автоматом с синхронизацией по наименованию из текстов контров.
2. Создать одноимённый регистр сведений с измерениями Контрагент, НомКонтров и ресурсом Номенклатура.
3. внешняя обработка с таб.полем типа РегСвСписок.НомКонтров.
Синхронизация при вводе первички: как в п.1, далее срез регитра по Контру+НомКонтра=Номенклатура.
1
1 / 1 / 0
Регистрация: 13.06.2011
Сообщений: 26
13.03.2014, 13:28  [ТС] 3
Конфа типовая?
Синхронизация номенклатуры только по наименованию?
Можно без документа обойтись.
1. Создать справочник "НомКонтров" - это фактически наименование, но в виде ссылки. Пополнять его автоматом с синхронизацией по наименованию из текстов контров.
2. Создать одноимённый регистр сведений с измерениями Контрагент, НомКонтров и ресурсом Номенклатура.
3. внешняя обработка с таб.полем типа РегСвСписок.НомКонтров.
Синхронизация при вводе первички: как в п.1, далее срез регитра по Контру+НомКонтра=Номенклатура.
Версия программы 8.2
Конфигурация - Комплексная Автоматизация 1.1.43.2
Вообще, хотелось именно документом,и именно вводом на основании. Пообщался с бухгалтером её такое решение полностью устраивает.(по сути ей только две кнопки надо будет нажимать - ввод на основании и печать, все остальные данные будут браться из документа "ПоступлениеТоваровУслуг" и регистра сведений "НоменклатураКонтрагентов".
+ надо будет сделать ещё печатную печатную форму. Это же все-таки для отчетности делается. Потом если что прикрутить к Журналу документов для внутренней отчетности, но это уже второстепенно.Да и честно говоря, ваше решение для меня кажется гораздо более сложным с точки моих текущих знаний.
А вот составить вот такой вот хоть и мудрёный,но не думаю, что очень большой запрос мне кажется более простой задачей.
Сразу хотел спросить -стандартным конструктором сделать это можно или все же придётся ручками писать?А то на вид у него достаточно богатый функционал.

Или же я вообще неправильно думаю и реализовать теми методами что я хочу - это не возможно?

Добавлено через 14 минут
Для наглядности:

Единички я сделал, но нужно дописать запрос, чтобы он забирал и Регистра необходимые мне данные.
0
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
13.03.2014, 14:26 4
Я пока не понял, в какой момент происходит синхронизация текста от поставщика со ссылкой на Номенклатуру. И как. Руками? Открыл регистр-список - ну пусть в документе, если нужен лишний гемор, синхронизировал, распечатал поступление, заменив номенклатуру. Это нужно? И что за регистр? Если типовой - он вам не подходит. Создайте свой.

Добавлено через 1 минуту
Наименование текстом в регистре не стоит держать, поскольку это, вероятно, Измерение. Нужна ссылка на справочник, в котором Наименование.

Добавлено через 2 минуты
НоменклатураКонтрагентов - это по сути группировка Номенклатуры, собирание в кучки. А Вам надо, насколько я понимаю, по тексту находить элемент справочника. Т.е. Контрагенту принадлежит не Номенклатура, а некий текст. Так?

Добавлено через 1 минуту
Или ваш бух хочет всё пихать в справочник Номенклатура? Валенки отКоли, валенки от Васи? Это не правильно.
0
1 / 1 / 0
Регистрация: 13.06.2011
Сообщений: 26
13.03.2014, 14:58  [ТС] 5
duk337, а почему не подходит типовой? Я его особо трогать не собираюсь, я всего лишь хочу запросом забирать с него данные,которые в него вбиваются.Справочник "Номенклатура" я не трогаю, все взаимодействие происходит через Регистр сведений "Номенклатура Контрагентов"
(Или мы не понимаем друг друга, или мне не хватает знаний понять Вас. )
Вот так это все выглядит в конфигураторе:


1.Мы выбираем уже существующую номенклатуру из справочника.
2.Выбираем существующего контрагента.
3.Заполняем текстовое поле "Номенклатура Контрагента" необходимым текстовым значением.



А забирать я эти данные хочу, тогда когда выполняется процедура "Заполнить на основании"
Т.е надо чтобы запрос проверял поле Номенклатуры,сравнивая с тем полем, что он получил из документа "ПоступлениеТоваровУслуг"
После сравнивал Поставщика все по тому же документу и в итоге бы оставалась бы одна запись из которой бы забиралось бы текстовое значением "Номенклатура Контрагента"
Миниатюры
Запрос с заполнением данных( с двойным условием выборки)   Запрос с заполнением данных( с двойным условием выборки)  
0
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
13.03.2014, 19:38 6
Да, я тут психанул. Можно им пользоваться, если задача просто взять наименование по ключам Ном,Харка,Контр. Чтоб их получить вместе с ТЧ поступления, запрос имеет примерно такой вид (конструктором). Если только для печати - можно прямо из этой таблички брать данные, не создавая лишний документ.
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ПоступлениеТоваровУслугТовары.ЕдиницаИзмерения,
        |   ПоступлениеТоваровУслугТовары.КоличествоМест,
        |   ПоступлениеТоваровУслугТовары.Количество,
        |   ПоступлениеТоваровУслугТовары.ЕдиницаИзмеренияМест,
        |   ПоступлениеТоваровУслугТовары.Коэффициент,
        |   ПоступлениеТоваровУслугТовары.Номенклатура,
        |   ПоступлениеТоваровУслугТовары.СтавкаНДС,
        |   ПоступлениеТоваровУслугТовары.Сумма,
        |   ПоступлениеТоваровУслугТовары.СуммаНДС,
        |   ПоступлениеТоваровУслугТовары.Цена,
        |   ПоступлениеТоваровУслугТовары.СчетУчетаБУ,
        |   ПоступлениеТоваровУслугТовары.СерияНоменклатуры,
        |   ПоступлениеТоваровУслугТовары.ХарактеристикаНоменклатуры,
        |   ПоступлениеТоваровУслугТовары.Заказ,
        |   ПоступлениеТоваровУслугТовары.СчетУчетаНДС,
        |   ПоступлениеТоваровУслугТовары.СчетУчетаНУ,
        |   ПоступлениеТоваровУслугТовары.ОтражениеВУСН,
        |   ПоступлениеТоваровУслугТовары.Склад,
        |   ПоступлениеТоваровУслугТовары.ПриходныйОрдер,
        |   ПоступлениеТоваровУслугТовары.ЗаказПоставщику,
        |   ПоступлениеТоваровУслугТовары.КлючСвязи,
        |   НоменклатураКонтрагентов.КодНоменклатурыКонтрагента,
        |   НоменклатураКонтрагентов.АртикулНоменклатурыКонтрагента,
        |   НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента,
        |   НоменклатураКонтрагентов.ШтрихКодНоменклатурыКонтрагента,
        |   НоменклатураКонтрагентов.ЕдиницаНоменклатурыКонтрагента,
        |   НоменклатураКонтрагентов.Идентификатор
        |ИЗ
        |   Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
        |       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
        |       ПО ПоступлениеТоваровУслугТовары.Номенклатура = НоменклатураКонтрагентов.Номенклатура
        |           И ПоступлениеТоваровУслугТовары.ХарактеристикаНоменклатуры = НоменклатураКонтрагентов.ХарактеристикаНоменклатуры
        |           И ПоступлениеТоваровУслугТовары.Ссылка.Контрагент = НоменклатураКонтрагентов.Контрагент
        |ГДЕ
        |   ПоступлениеТоваровУслугТовары.Ссылка = &Ссылка";
 
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
 
    т = Запрос.Выполнить().Выгрузить();
1
1 / 1 / 0
Регистрация: 13.06.2011
Сообщений: 26
13.03.2014, 23:55  [ТС] 7
В таком виде запрос именно под мою задачу,вроде, не совсем подходит,НО,думаю, смогу адаптировать завтра выложу свою версию,если работать не будет подправишь немного меня
0
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
14.03.2014, 01:27 8
Цитата Сообщение от Xelgo Посмотреть сообщение
подправишь немного меня
с удовольствием, только я больной на алгоритмизации, и чувствую тут какой-то бухгалтерский косячок. Запрос я двинул по максимуму - поскольку в конструкторе это проще, он олицетворяет принцип. Фича в чём. Если однозначна привязка Номенклатура - Наименование из регистра номконтра, зачем париться со вводом на основании? При печати подменять наименование из запроса по регистру, присоединив его к запросу по ТЧ Поступления типовой печати.

Не по теме:

Ну, мне любопытно

0
1 / 1 / 0
Регистрация: 13.06.2011
Сообщений: 26
17.03.2014, 00:50  [ТС] 9
Да,определенно,мне пока опыта не хватает решить подобного рода задачу.



1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
    //{{__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ПоступлениеТоваровУслуг") Тогда
        // Заполнение шапки
        Отправитель = ДанныеЗаполнения.Грузоотправитель;
        Получатель = ДанныеЗаполнения.Грузополучатель;
        От = ДанныеЗаполнения.ДатаВходящегоДокумента;
        Поставщик = ДанныеЗаполнения.Контрагент;
        Ном = ДанныеЗаполнения.НомерВходящегоДокумента;
        Организация = ДанныеЗаполнения.Организация;
        Для Каждого ТекСтрокаТовары Из ДанныеЗаполнения.Товары Цикл
            НоваяСтрока = РазностьНоменклатуры.Добавить();
            НоваяСтрока.Наименованиешт1 = ТекСтрокаТовары.ЕдиницаИзмерения;
            НоваяСтрока.Количество1 = ТекСтрокаТовары.Количество;
            НоваяСтрока.Наименование1 = ТекСтрокаТовары.Номенклатура;
            
            Запрос = Новый Запрос;
        
        Запрос.Текст = 
        "ВЫБРАТЬ
        |   ПоступлениеТоваровУслугТовары.ЕдиницаИзмерения,
        |   ПоступлениеТоваровУслугТовары.КоличествоМест,
        |   ПоступлениеТоваровУслугТовары.Количество,
        |   ПоступлениеТоваровУслугТовары.ЕдиницаИзмеренияМест,
        |   ПоступлениеТоваровУслугТовары.Коэффициент,
        |   ПоступлениеТоваровУслугТовары.Номенклатура,
        |   ПоступлениеТоваровУслугТовары.СтавкаНДС,
        |   ПоступлениеТоваровУслугТовары.Сумма,
        |   ПоступлениеТоваровУслугТовары.СуммаНДС,
        |   ПоступлениеТоваровУслугТовары.Цена,
        |   ПоступлениеТоваровУслугТовары.СчетУчетаБУ,
        |   ПоступлениеТоваровУслугТовары.СерияНоменклатуры,
        |   ПоступлениеТоваровУслугТовары.ХарактеристикаНоменклатуры,
        |   ПоступлениеТоваровУслугТовары.Заказ,
        |   ПоступлениеТоваровУслугТовары.СчетУчетаНДС,
        |   ПоступлениеТоваровУслугТовары.СчетУчетаНУ,
        |   ПоступлениеТоваровУслугТовары.ОтражениеВУСН,
        |   ПоступлениеТоваровУслугТовары.Склад,
        |   ПоступлениеТоваровУслугТовары.ПриходныйОрдер,
        |   ПоступлениеТоваровУслугТовары.ЗаказПоставщику,
        |   ПоступлениеТоваровУслугТовары.КлючСвязи,
        |   НоменклатураКонтрагентов.КодНоменклатурыКонтрагента,
        |   НоменклатураКонтрагентов.АртикулНоменклатурыКонтрагента,
        |   НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента,
        |   НоменклатураКонтрагентов.ШтрихКодНоменклатурыКонтрагента,
        |   НоменклатураКонтрагентов.ЕдиницаНоменклатурыКонтрагента,
        |   НоменклатураКонтрагентов.Идентификатор
        |ИЗ
        |   Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
        |       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
        |       ПО ПоступлениеТоваровУслугТовары.Номенклатура = НоменклатураКонтрагентов.Номенклатура
        |           И ПоступлениеТоваровУслугТовары.ХарактеристикаНоменклатуры = НоменклатураКонтрагентов.ХарактеристикаНоменклатуры
        |           И ПоступлениеТоваровУслугТовары.Ссылка.Контрагент = НоменклатураКонтрагентов.Контрагент
        |ГДЕ
        |   ПоступлениеТоваровУслугТовары.Ссылка = &Ссылка";   
            КонецЦикла;
            
        КонецЦикла;
        
 
  
 
    КонецЕсли;
    //}}__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
КонецПроцедуры
Duk337, Посмотри,пожалуйста. Что вообще с этим можно придумать, потому что в твоей части у меня даже с чтением проблемы.
Есть у нас определенный цикл заполнения строчек таблицы РазностьНоменклатуры.
Происходит это здесь:
1C
1
2
3
4
5
Для Каждого ТекСтрокаТовары Из ДанныеЗаполнения.Товары Цикл
НоваяСтрока = РазностьНоменклатуры.Добавить();
            НоваяСтрока.Наименованиешт1 = ТекСтрокаТовары.ЕдиницаИзмерения;
            НоваяСтрока.Количество1 = ТекСтрокаТовары.Количество;
            НоваяСтрока.Наименование1 = ТекСтрокаТовары.Номенклатура;
Упрощу пока для себя задачу, я хочу чтобы у меня

1C
1
 НоваяСтрока.Наименование2 = НаименованиеНоменклатурыКонтрагента
C двумя фильтрами:
1C
1
2
3
 
НоваяСтрока.Наименование1 = ТекСтрокаТовары.Номенклатура;
 Поставщик = ДанныеЗаполнения.Контрагент;

Я не совсем понимаю запрос,который был составлен тобой - сравнивает ли он вообще значение вовремя запроса или нет.
Для удобства я думаю это все поставить в один цикл и для каждого цикла собственно делать запрос, но так всё же как грамотно прописать условия для запроса?
Что-то чем дальше,тем лес темнее
0
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
17.03.2014, 02:09 10
Я с самого начала осветил проблему: где синхронизация? Регистр служит для визуальной синхронизации: вместого прямого выбора элемента предлагается список наименований из регистра, привязанных к конкретному элементу Номенклатура.
Запрос вывалит все наименования, относящиеся к списку номенклатуры тч. Если есть возможность сравнить - флаг в руки и в условии добавляется фильтр по
1C
1
НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента=ПоступлениеТоваровУслугТовары.Номенклатура.Наименование
но где гарантии? Вернее, гарантия стремится к нулю. Если Вы однозначно синхронизируете текст от контрагента с записью в регистре - Вы получите номенклатуру. Если вы предоставите все записи с заполнением колонки Наименование2 - Вы получите список вариантов по каждой номенклатурине. Типа бух выкидывает ненужные из побочного документа.
Цитата Сообщение от Xelgo Посмотреть сообщение
Поставщик = ДанныеЗаполнения.Контрагент;
само собой
0
17.03.2014, 02:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.03.2014, 02:09
Помогаю со студенческими работами здесь

Проверка с двойным условием
Здравствуйте! Возникла проблема с реализацией этого алгоритма. clear; clc; L=2; % лямбда...

Исправить макрос с двойным условием
Форумчане, здравствуйте! Задача: проверяем, совпадает ли код из столбца B Листа ЗРА с 12 первыми...

Excel функция =Если с двойным условием
Помогите, пожалуйста, разобраться, как написать функцию =Если с двойным условием (По заданию из...

Таблица с двойным условием в двумерном массивом
Здравствуйте. Подскажите пожалуйста, как сделать двумерный массив с выполнением условий. Есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru