Имя: Пароль:
1C
1С v8
УТ 10, заполнение реквизита
0 dvrk
 
29.12.20
13:53
Привет, просят сделать: если выбран склад 1 или 2 или 3 ил 4 или 5 тогда реквизит1(элемент справочника) нужно конкретный подставить
я хочу сделать так:
в обработке перед записью
склад1 = спрачоники.склады.найтипокоду(код)
склад2 = спрачоники.склады.найтипокоду(код)
склад3 = спрачоники.склады.найтипокоду(код)
склад4 = спрачоники.склады.найтипокоду(код)
склад5 = спрачоники.склады.найтипокоду(код)
реквизит = справочники.справочник1.найтипокоду(код)
в процедуре ПередЗаписью
если этаформа.документобъект.склад = склад1 или .... тогда
этаформа.документобъект.реквизит1 = реквизит
конецесли
или что то не учел ?
1 Йохохо
 
29.12.20
13:56
если "просят" то это надо в форме
2 dvrk
 
29.12.20
13:57
(1) я имел ввиду модуль формы "ПередЗаписью"
3 del123
 
29.12.20
13:59
А если будут просить каждый месяц по складу добавлять, каждый месяц переписывать будешь код?
4 ДенисЧ
 
29.12.20
14:01
(3) А тебе жалко?
5 ДенисЧ
 
29.12.20
14:02
(0) Сделай у склада реквизит и, если он заполнен - копируй его в документ. И лучше не перед записью, а при выборе склада
6 del123
 
29.12.20
14:02
(4) да мне то нет)
7 dvrk
 
29.12.20
14:04
(5) нельзя реквизит новый добавлять
8 dvrk
 
29.12.20
14:05
(5)  делается это из-за того, что забывают Реквизит1 заполнить, заполнять его нужно только если выбраны конкретные склады
9 dvrk
 
29.12.20
14:06
(8)  + склады известны и добавляться/убавляться их кол-во не будет
10 ДенисЧ
 
29.12.20
14:07
(7) Допсвойство склада...
У ут10 вроде свойства к складу можно ...
11 mistеr
 
29.12.20
14:08
(8) Ну так сделай проверку.
Ну и при изменении склада можно заполнять.
12 dvrk
 
29.12.20
14:09
(11) а в (0) не проверка ?
13 mistеr
 
29.12.20
14:21
(12) Проверка это если Реквизит1 не заполнен, то не давать проводить.
14 dvrk
 
29.12.20
14:21
(13) его не всегда нужно заполнять..
15 dvrk
 
29.12.20
14:23
(13) Если склад = (склады из моего списка) тогда нужно заполнить реквизит1 конкретным значением, в остальных случаях не нужна проверка
16 dvrk
 
29.12.20
14:30
Я просто спрашиваю правильно ли я в (0) написал или можно как то красивее без найтипокоду тыщу раз ?
17 ДенисЧ
 
29.12.20
14:31
(16) Правильней будет как в (5) или (10)
18 dvrk
 
29.12.20
14:33
(17) лан, поищу доп свойства, спасибо
19 dvrk
 
29.12.20
14:55
Ммм, доп свойства я нашел, а как к нему обратиться програмно?
Ну т.е. я хочу что-то типа
Если склад.допсвойство = моёсвойство тогда
реквизит = нужныйэлементсправочника
конеццикла
20 dvrk
 
29.12.20
14:58
Ну т.е. не допсвойство а РС Значения свойств объектов
21 dvrk
 
29.12.20
15:10
Или это запросом склады получить надо ?
22 ДенисЧ
 
29.12.20
15:12
выбрать значение
из регистрСведений.ЗначенияСвойствОбъектов
где объект = &склад
и свойство = &НужноеСвойствоРеквизитДокументаДляСклада

И уже из запроса читай.
Или, если хочешь какашкокода - создай набор записей, задай ему отборы, прочитай...
23 dvrk
 
29.12.20
15:16
(22) спасибо!
24 hhhh
 
29.12.20
15:33
"спрачоники" - это что?
25 dvrk
 
30.12.20
06:34
(24)  справочники )
26 dvrk
 
30.12.20
08:58
Вопрос ещё, я сделал "ПередЗаписью" проверку, теперь, если склад из моего списка, то реквизит заполняется, а как сделать чтобы если склад поменяли на не из списка, то очищалось, но если сами реквизит заполнили, то не очищалось
27 ДенисЧ
 
30.12.20
08:59
(26) Проверку поставить Индира не позволяет?
28 dvrk
 
30.12.20
08:59
(27) я не совсем понимаю как
29 dvrk
 
30.12.20
09:00
(27) ну т.е. я поставлю проверку если НЕ нужный склад, то очистить реквизит, но если они выберут другой склад сами, то очистится же
30 dvrk
 
30.12.20
09:01
(29)  т.е. выбрали склад не из списка, заполнили реквизит, а он из-за проверки очистится
31 dvrk
 
30.12.20
09:03
Ааа, всё, туплю, спасибо
32 Ёпрст
 
30.12.20
09:23
(26) делай это не при записи а в ПриИзменении реквизита склад
33 ДенисЧ
 
30.12.20
09:27
(32) Я ему ещё в (5) это сказал... Но это, похоже, житель дальнего севера...
34 dvrk
 
30.12.20
09:41
(32) (33) поч?
35 ДенисЧ
 
30.12.20
09:41
(34) пот!
36 dvrk
 
30.12.20
09:49
Ну я то сделаю, просто не понимаю почему так лучше
37 dvrk
 
31.12.20
10:31
Извиняюсь, ещё вопрос, я неверно что-то делаю? Получил в запросе нужные склады
выгрузил
затем обхожу таблицу и сравниваю значение склада на форме с результатом запроса
чего то я видимо не понимаю и неверно сделал
38 dvrk
 
31.12.20
10:32
Результат = Запрос.Выполнить().Выгрузить();
    Для каждого МоиСклады из Результат цикл
        Если ЭтаФорма.ДокументОбъект.Склад = МоиСклады.Объект Тогда
            ЭтаФорма.ДокументОбъект.Реквизит1 = РеквизитНайденныйМоКоду
        КонецЕсли;
        КонецЦикла;
39 Ёпрст
 
31.12.20
10:32
(37) больше кода
40 dvrk
 
31.12.20
10:32
Как это срабатывает?
Если ЭтаФорма.ДокументОбъект.Склад = МоиСклады.Объект
как сравнивает склад, там же не 1, который выбран на форме, а список складов
41 dvrk
 
31.12.20
10:33
(39) да это весь код, до него запрос только
42 dvrk
 
31.12.20
10:34
(39) в Результат у меня 9 складов
43 Ёпрст
 
31.12.20
10:34
(38)
1.покажи запрос
2. это обычные формы или УФ ?
44 dvrk
 
31.12.20
10:34
(43) это обычные формы

"ВЫБРАТЬ
                   |    ЗначенияСвойствОбъектов.Объект КАК Объект
                   |ИЗ
                   |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
                   |ГДЕ
                   |    ЗначенияСвойствОбъектов.Свойство.Наименование = ""ТестовоеСвойство""";
45 dvrk
 
31.12.20
10:39
У меня наверное больше вопрос как он сравнивает склады в Для каждого и в Если
Ну т.е. он сравнивает пока не обойдёт всю таблицу и если в таблице условие выполняется, то заполняет мой реквизит, верно ?
46 Ёпрст
 
31.12.20
10:43
(44) На вот, занимайся


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

|ВЫБРАТЬ
|            СвойствоСклада.Значение КАК ТвойРеквизит,
|        ИЗ
|            РегистрСведений.ЗначенияСвойствОбъектов КАК СвойствоСклада
|        ГДЕ
|            СвойствоСклада.Объект = &Склад
|            И СвойствоСклада.Свойство = &ТвоёСвойство");

Запрос.УстановитьПараметр("ТвоёСвойство",ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("ТвоёНаименованиеСвойства"));
Запрос.УстановитьПараметр("Склад",Склад);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
    ТвойРеквизит = Выборка.ТвойРеквизит;
КонецЕсли;
КонецПроцедуры
47 ДенисЧ
 
31.12.20
10:43
(45) Хочешь продам тебе неэкселюзивное право использовать оператор Прервать в цикле?
Недорого, 10евро в месяц...
48 Ёпрст
 
31.12.20
10:44
Ну а твой код - в топку.
49 dvrk
 
31.12.20
10:46
Да я учусь, чо вы...
спасибо
AdBlock убивает бесплатный контент. 1Сергей