Имя: Пароль:
1C
1С v8
Отображение остатка товара в УТ 10.3 через запрос
0 WhiteDragon93
 
08.11.12
07:11
Прошу прощения за похожую тему, которую я же создавал (Отображение остатка товара в УТ 10.3). Мне необходимо переписать эту процедуру при помощи запроса. Никак до меня не дойдет что включать в запрос, отбор и как их связать. Нигде путевого справочного материала найти не могу. И еще вопрос: как изменить цвет текста в текстовом поле на форме?

Пока только на такое мозгов хватило:

Процедура ТоварыПриАктивизацииСтроки(Элемент)
   ТекСтрока = Элемент.ТекущаяСтрока;
   Отбор=Новый Структура("Номенклатура", ТекСтрока.Номенклатура);
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    ТоварыНаСкладахОстатки.Склад,
   |    ТоварыНаСкладахОстатки.Номенклатура,
   |    ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры,
   |    ТоварыНаСкладахОстатки.СерияНоменклатуры,
   |    ТоварыНаСкладахОстатки.Качество,
   |    ТоварыНаСкладахОстатки.КоличествоОстаток
   |ИЗ
   |    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки";
   Выборка = Запрос.Выполнить().Выбрать(,,Отбор);
   Если Выборка.Следующий() Тогда
       ЭлементыФормы.НадписьОстаток.Заголовок= "Остаток:" + Выборка.КоличествоОстаток;
   КонецЕсли;
КонецПроцедуры
1 Wobland
 
08.11.12
07:13
в прошлой ветке тебе и запрос давали
2 Wobland
 
08.11.12
07:13
+(1) Запрос.УстановитьПараметр(), Выполнить().Выбрать(), Пока Следующий()
всё, работай
3 WhiteDragon93
 
08.11.12
07:17
(1) помню, но не смог я его прилепить, спасибо за помощь :)
сутки не спал, эх... буду делать
4 Wobland
 
08.11.12
07:20
(3) читай (2), где будет непонятно, спросишь
5 WhiteDragon93
 
08.11.12
07:34
эмм... так?

Запрос.УстановитьПараметр("Отбор", Отбор);
   Выборка = Запрос.Выполнить().Выбрать();
   Пока Выборка.Следующий() Цикл
   ЭлементыФормы.НадписьОстаток.Заголовок= "Остаток:" + Выборка.КоличествоОстаток;
   КонецЦикла;
КонецПроцедуры
6 Wobland
 
08.11.12
07:37
(5) то есть запрос ты не вкурил. а ещё хвастался "Да запрос-то сделать смогу, не беда"
7 Wobland
 
08.11.12
07:37
Запрос.УстановитьПараметр("Номенклатура", НужнаяНоменклатура);
...
8 perec1982
 
08.11.12
07:38
Красить ячейки с помощью свойства Таб поля при получении данных.
Для каждого … Из ОформленияСтрок Цикл
9 WhiteDragon93
 
08.11.12
07:40
(6) да вот видимо лохонулся...
10 WhiteDragon93
 
08.11.12
07:46
Вообще ничего понять не могу, не зря человеку сон дан. Вздремну пару часов и вернусь. Может во сне запрос приснится :)
11 Wobland
 
08.11.12
07:47
перекопипастить сюда запрос что ли.. или пускай уж спит..
12 WhiteDragon93
 
08.11.12
07:48
А пока у меня получается какой-то перебор значений, но потом все равно заголовок = 1
13 WhiteDragon93
 
08.11.12
07:48
(11) вот

ВЫБРАТЬ
   ТоварыНаСкладахОстатки.КоличествоОстаток
ИЗ
   РегистрНакопления.ТоварыНаСкладах.Остатки(
           &Период,
           Качество = &Качество
               И Номенклатура = &Номенклатура
               И СерияНоменклатуры = &СерияНоменклатуры
               И Склад = &Склад
               И ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры) КАК ТоварыНаСкладахОстатки
14 zak555
 
08.11.12
07:50
запрос на одну строку ?
15 perec1982
 
08.11.12
07:50
Куда выводястя остатки! В фору подбора?
16 Wobland
 
08.11.12
07:51
(14) не более чем на одну
17 Wobland
 
08.11.12
07:52
(13) вот и задай параметры запроса. поштучно. выполни и попробуй выбрать. если получится, значит, в поле КоличествоОстаток что-то будет, если нет - значит ноль
18 zak555
 
08.11.12
07:54
(16) если он тыкает на другую строку -- новый запрос идёт
19 Wobland
 
08.11.12
07:55
(18) он так и хочет. да пускай так и будет
20 zak555
 
08.11.12
07:55
(19) так это быдлокод
21 cw014
 
08.11.12
07:56
При активизации запрос фигачить - здорово. Можно с таким же успехом его в цикл поместить
22 WhiteDragon93
 
08.11.12
08:07
Объясните, пожалуйста, другими словами (не как в СП), что такое параметры запроса?
23 ДенисЧ
 
08.11.12
08:08
(22) Это те данные, которые ты явно не можешь прописать в запросе, потому что они зависят от внешней ситуации, например от того, что указал пользователь
24 cw014
 
08.11.12
08:09
(23) Данная информация вообще под контролем ФСБ, зачем ты ее рассекречиваешь? :)
25 ДенисЧ
 
08.11.12
08:11
(24) у меня есть разрешение на разглашение данной информации.
Мне за это платят.
26 cw014
 
08.11.12
08:12
(25) Понятно, отзываем людей в черном :)
27 perec1982
 
08.11.12
08:20
Процедура ТоварыПриПолученииДанных(Элемент, ОформленияСтрок)
   
   МассивНоменклатуры = Новый Массив;
   
   Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл
       //Если Не ОформлениеСтроки.ДанныеСтроки.Ссылка.ЭтоГруппа Тогда
           МассивНоменклатуры.Добавить(ОформлениеСтроки.ДанныеСтроки.Номенклатура);
       //КонецЕсли;
   КонецЦикла;
   
   ГруппаДоступностиСкладов = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ГруппаДоступностиСкладов");

   ЗапросПоСкладам = Новый Запрос;
   ЗапросПоСкладам.УстановитьПараметр("ГруппаДоступности",ГруппаДоступностиСкладов);
   ЗапросПоСкладам.Текст = "ВЫБРАТЬ
   |    СоставГруппДоступностиСкладов.Склад
   |ИЗ
   |    РегистрСведений.СоставГруппДоступностиСкладов КАК СоставГруппДоступностиСкладов
   |ГДЕ
   |    СоставГруппДоступностиСкладов.ГруппаДоступности = &ГруппаДоступности";
                           
   МассивСклады = ЗапросПоСкладам.Выполнить().Выгрузить().ВыгрузитьКолонку("Склад");                        

       
   ТаблицаОстатков = УправлениеЗапасами.ПолучитьТаблицуСвободныхОстатковПоСериям(МассивСклады, "", МассивНоменклатуры);
   
   Если Элемент.Колонки.Остаток.Видимость Тогда
       Для Каждого ОформлениеСтроки ИЗ ОформленияСтрок Цикл
           НайденнаяСтрока = ТаблицаОстатков.Найти(ОформлениеСтроки.ДанныеСтроки.Номенклатура, "Номенклатура");
           Если НайденнаяСтрока <> Неопределено Тогда
               ОформлениеСтроки.Ячейки.ОстатокОсновногоСклада.УстановитьТекст(Формат(НайденнаяСтрока.Остаток,"ЧО="));
           КонецЕсли;
       КонецЦикла;
       
   КонецЕсли;
   
КонецПроцедуры
28 WhiteDragon93
 
08.11.12
08:20
А что в (13) означает это:
(
           &Период,
           Качество = &Качество
               И Номенклатура = &Номенклатура
               И СерияНоменклатуры = &СерияНоменклатуры
               И Склад = &Склад
               И ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры) ?
29 ДенисЧ
 
08.11.12
08:22
(28) А может, для начала книжки умные почитаешь?
30 WhiteDragon93
 
08.11.12
08:27
(29) я 1С занимаюсь от силы 2 недели, по этому, уж извините, если потревожил, спрашиваю все, что не понимаю. А так, в планах очень даже есть, правда в нормальном качестве придется поискать. Сегодня пока пытался кое-что из пары прочесть, чуть глаза не сломал.
31 Wobland
 
08.11.12
08:36
(30) пары? мои опасения оказались верны? 1С уже преподают в вузах?

виртуальные таблицы тебе надо изучить
32 WhiteDragon93
 
08.11.12
08:45
(31) лучше бы 1С, чем Паскаль, которые преподают бабульки, писавшие еще под калькуляторы и тетрис и заставляющие нас заниматься "правильным кодингом".
А так не пугайтесь, я просто скачал пару книг и посмотрел в них про запросы очень бегло.
33 Wobland
 
08.11.12
08:46
(32) не трожь структурные языки. это понимание достаточно важно
34 WhiteDragon93
 
08.11.12
08:51
(33) да я не спорю, учиться в любом случае на нем. Но у нас просто если ты вместо того, чтобы описать тип (н-р: atype = array[1..n,1..m] of integer) и присвоить его переменной взял и присвоил массив переменной напрямую, все, пиши пропало...
35 WhiteDragon93
 
08.11.12
08:52
(33) а если еще и про константы забыл, все...смерть тебе обеспечена.
36 Wobland
 
08.11.12
08:53
мягкая типизация - зло ;)
37 WhiteDragon93
 
08.11.12
08:59
(36) а в моем случае обязательно использовать Пока Следующий()?
А то все это в цикле получается.
38 Wobland
 
08.11.12
09:05
(37) если уверен, что одна строка в результате, достаточно сделать Если Выборка.Следующий(). или выгружать в ТЗ и делать по аналогии с объектным подходом. там я в ТЗ как раз выгружал
39 Wobland
 
08.11.12
09:06
(38) *не более одной строки, конечно
40 WhiteDragon93
 
08.11.12
09:13
(38)Да в том-то и дело, что сказали с запросом делать, контекст не трогать
41 Wobland
 
08.11.12
09:15
(40) какой контекст? ну и делай запросом, контекст не трогай
42 WhiteDragon93
 
08.11.12
09:17
(41) Просто выгрузить запрос в ТаблицуЗначений и потом из нее выборку делать?
43 Wobland
 
08.11.12
09:18
(42) вариант 1: Просто выгрузить результат запроса в ТаблицуЗначений и потом из нее выборку сделать
вариант 2: сделать Выбрать() и попросить Следующий()
44 WhiteDragon93
 
08.11.12
09:32
Измените, пожалуйста, что не так сделал. Все, мозг полностью вырубился. Только, если можно, на моем же примитивном уровне.

Процедура ТоварыПриАктивизацииСтроки(Элемент)
   ТекСтрока = Элемент.ТекущаяСтрока;
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    ТоварыНаСкладахОстатки.КоличествоОстаток,
   |    ТоварыНаСкладахОстатки.Номенклатура.Ссылка
   |ИЗ
   |    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки";
   Запрос.УстановитьПараметр("Номенклатура", ТекСтрока.Номенклатура);
   Выборка = Запрос.Выполнить().Выбрать();
   Если Выборка.Следующий() Тогда
       Остатки = Выборка.Получить().КоличествоОстаток;
   ЭлементыФормы.НадписьОстаток.Заголовок= "Остаток:" + Остатки;
КонецЕсли;
КонецПроцедуры
45 Wobland
 
08.11.12
09:34
(44) а что ты получил этим запросом?
46 MrStomak
 
08.11.12
09:50
(43) 1. Параметр номенклатура в твоём запросе не участвует, в результате запроса столько строк, сколько в остатках номенклатур.
2. Разыменование "Номенклатура.Ссылка" ведёт к неявному соединению с таблицей номенклатуры, что замедляет запрос.
47 WhiteDragon93
 
08.11.12
16:59
Прошу прощения, уснул. Сейчас попробую разобраться.
Скажите, почему может не запускаться консоль запросов? Хотел поучиться их делать, а никак.
48 Wobland
 
08.11.12
17:05
(47) из-за ошибки в 43й строке может не запускаться
49 Wobland
 
08.11.12
17:05
(47) лучше готовую возьми
50 WhiteDragon93
 
08.11.12
17:10
Да я и так скачал. Просто не запускается. Ничего не происходит.
51 Wobland
 
08.11.12
17:11
(50) телепатирую. у твоей консоли нет формы для того режима, в котором запускаешь предприятие
52 WhiteDragon93
 
08.11.12
17:18
(50)У меня не запускается в режиме управляемого приложения. Ошибка выползает про какую-то переменную вроде, не вдавался, т.к. она не моя.
53 Wobland
 
08.11.12
17:21
(52) тогда в 58й строке ошибка
54 WhiteDragon93
 
08.11.12
17:24
Wobland, у меня к Вам личная просьба. Не могли бы Вы наваять верный запрос. Хотелось бы сделать задание и потом уже капитально садиться за изучение языка запросов, а то франч ругаться будет. И все я никак не допру, какой параметр нужно номенклатуре передать. Создать отбор и передать его?
55 Wobland
 
08.11.12
17:25
(54) запрос я тебе уже наваял
56 Wobland
 
08.11.12
17:31
Процедура ТоварыПриАктивизацииСтроки(Элемент)
   ТекСтрока=Элемент.ТекущаяСтрока;
   //Отбор=Новый Структура("Склад, Номенклатура, ХарактеристикаНоменклатуры, СерияНоменклатуры, Качество",
   //        Склад, ТекСтрока.Номенклатура, ТекСтрока.ХарактеристикаНоменклатуры, ТекСтрока.СерияНоменклатуры, ТекСтрока.Качество);
   //Остатки=РегистрыНакопления.ТоварыНаСкладах.Остатки(Дата, Отбор);
   Запрос=Новый Запрос;
   Запрос.Текст=
   "ВЫБРАТЬ
   |    ТоварыНаСкладахОстатки.КоличествоОстаток КАК Количество
   |ИЗ
   |    РегистрНакопления.ТоварыНаСкладах.Остатки(
   |            &Период,
   |            Качество = &Качество
   |                И Номенклатура = &Номенклатура
   |                И СерияНоменклатуры = &СерияНоменклатуры
   |                И Склад = &Склад
   |                И ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры) КАК ТоварыНаСкладахОстатки";
   Запрос.УстановитьПараметр("Период", Дата);
   Запрос.УстановитьПараметр("Качество", ТекСтрока.Качество);
   Запрос.УстановитьПараметр("Номенклатура", ТекСтрока.Номенклатура);
   Запрос.УстановитьПараметр("СерияНоменклатуры", ТекСтрока.СерияНоменклатуры);
   Запрос.УстановитьПараметр("Склад", Склад);
   Запрос.УстановитьПараметр("ХарактеристикаНоменклатуры", ТекСтрока.ХарактеристикаНоменклатуры);
   Остатки=Запрос.Выполнить().Выгрузить();
   ЭлементыФормы.НадписьОстатокТовара.Заголовок="на складе: "+?(Остатки.Количество(), Остатки[0].Количество, 0);
   //ЭлементыФормы.НадписьОстатокТовара.Заголовок="на складе: "+?(РегистрыНакопления.ТоварыНаСкладах.Остатки(Дата, Новый Структура("Склад, Номенклатура, ХарактеристикаНоменклатуры, СерияНоменклатуры, Качество", Склад, Элемент.ТекущаяСтрока.Номенклатура, Элемент.ТекущаяСтрока.ХарактеристикаНоменклатуры, Элемент.ТекущаяСтрока.СерияНоменклатуры, Элемент.ТекущаяСтрока.Качество)).Количество(), РегистрыНакопления.ТоварыНаСкладах.Остатки(Дата, Новый Структура("Склад, Номенклатура, ХарактеристикаНоменклатуры, СерияНоменклатуры, Качество", Склад, Элемент.ТекущаяСтрока.Номенклатура, Элемент.ТекущаяСтрока.ХарактеристикаНоменклатуры, Элемент.ТекущаяСтрока.СерияНоменклатуры, Элемент.ТекущаяСтрока.Качество))[0].Количество, 0);
КонецПроцедуры
57 Wobland
 
08.11.12
17:31
(56) чорт! какуля из одной строки всё-таки вырвалась из меня ;)
58 WhiteDragon93
 
08.11.12
17:36
Вот теперь доперло, спасибо :) у меня как-то туго с параметрами получается.
59 WhiteDragon93
 
08.11.12
17:43
И, если можно, скажите, где можно про вывод посмотреть?
ЭлементыФормы.НадписьОстатокТовара.Заголовок="на складе: "+?(Остатки.Количество(), Остатки[0].Количество, 0);
Не могу никак понять эту запись.
60 Wobland
 
08.11.12
17:43
(59) именно этого я от тебя добивался в прошлой ветке
61 Wobland
 
08.11.12
17:45
начни с этого: http://screencast.com/t/hhzshifd6mNS
62 WhiteDragon93
 
08.11.12
17:50
(61)Спасибо, теперь понял. Единственное, не очень вот это: Остатки[0].Количество, для чего [0] - обнуление?
63 Wobland
 
08.11.12
17:50
(62) первая строка
64 WhiteDragon93
 
08.11.12
17:56
(63) А, все, индекс, понял.
65 WhiteDragon93
 
08.11.12
18:09
Достал уже я. Мне нужно окрасить текст НадписьОстатокТовара в синий. Надпись находится в подвале. Все равно использовать, как Вы написали св-во ТЧ ПриПолученииДанных ?
66 Wobland
 
08.11.12
18:16
(65) покрась визуально на форме в пофигураторе
67 Wobland
 
08.11.12
18:17
(66) вот сам не мог дойти до этого, попробовать и .. сдержать себя? или каждый чих благословлять придётся?
68 WhiteDragon93
 
08.11.12
18:21
(67) не попробовав сам - не стал бы писать.
69 Wobland
 
08.11.12
18:29
(68) это радует, но это вовсе не очевидно. поздравлять?
70 WhiteDragon93
 
08.11.12
18:38
(69) Можно поздравить, допер :)

ЦветТекста = ЦветаСтиля.ТекстИнформационнойНадписи;
ЭлементыФормы.ИнфНадписьОстаток.ЦветТекста = ЦветТекста;

Просто сначала ума на первую строку не хватило.
71 Wobland
 
08.11.12
18:41
(70) не буду поздравлять, плохо допёр. без кода, в визуальном режиме проще ж
72 WhiteDragon93
 
08.11.12
18:43
(71) А где это? Я так и не нашел. В свойствах надписи нет.
73 Wobland
 
08.11.12
18:49
(72) это полное безобразие! возьми мои свойства: http://screencast.com/t/ilymtHgCWx
74 WhiteDragon93
 
08.11.12
18:53
(73) У меня только "Основные" и "События"
75 Wobland
 
08.11.12
18:57
76 WhiteDragon93
 
08.11.12
19:00
(75) Тьфу ты... Забыл я про "Показать только важные" Спасибо.