|
v7: ПриАктивизацииСтроки() или что-то подобное | ☑ | ||
---|---|---|---|---|
0
Artificial
15.03.16
✎
15:05
|
Доброго времени суток. Задача такая: создать форму подбора справочника "Номенклатура", в которой внизу есть текстовое поле, в котором отображается остаток текуего элемента. В 8.х понятно, как делать, а как в 7.7? Спасибо.
|
|||
1
ДенисЧ
15.03.16
✎
15:07
|
взять типовую тис и посмотреть...
или заплатить 10 000 рублей |
|||
2
Ёпрст
15.03.16
✎
15:07
|
Делать аналогично и по-возможности, лучше
|
|||
3
Artificial
15.03.16
✎
15:07
|
(1) Доступа к ТиС нет.
(2) По теме есть что сказать? |
|||
4
Ёпрст
15.03.16
✎
15:08
|
более того, останки лучше отображать не в отдельном поле, я в самой форме списка, в отдельной колонке.
Так проще для понимания |
|||
5
Злопчинский
15.03.16
✎
15:08
|
Открыть типовую ТИС и посмотреть как работает функция ИнформацияОНоменклатуре()
|
|||
6
Злопчинский
15.03.16
✎
15:09
|
(3) а к банкомату?
|
|||
7
Ёпрст
15.03.16
✎
15:09
|
(3) Открыть любую типовую и посмотреть там форму подбора.
Потом переделать её на более правильный вариант, либо кешированием значений, либо на прямой запрос. |
|||
8
Ёпрст
15.03.16
✎
15:09
|
либо и то и другое одновременно
|
|||
9
Масянька
15.03.16
✎
15:09
|
(4) У меня табличка с остатками по каждому складу по каждой номенклатуре(хвастаюсь).
|
|||
10
Artificial
15.03.16
✎
15:11
|
(9) Мне хотя бы по одному.
|
|||
11
Масянька
15.03.16
✎
15:12
|
(10) Полоску под ником видишь? Вот когда догонишь - будет по всем :)
|
|||
12
Artificial
15.03.16
✎
15:12
|
(11) Никто и не отрицает, что я нуб. А в 7.7 - тем более.
|
|||
13
Злопчинский
15.03.16
✎
15:14
|
(9) на экран влазит?
|
|||
14
Масянька
15.03.16
✎
15:14
|
(12) На:
Процедура глПолучитьОстаткиНоменклатуры(ФирмаДляОстатковТМЦ, Номенклатура, Единица, ОстаткиТМЦ, ОстатокНаСкладе, ОстатокПоФирме, Склад, РезервыТМЦ = 0, УчитыватьРезерв = 0, Договор = 0, Заявка = 0) Экспорт Если (Номенклатура.ВидНоменклатуры <> Перечисление.ВидыНоменклатуры.Услуга) и (Номенклатура.ВидНоменклатуры <> Перечисление.ВидыНоменклатуры.Работа) Тогда // Получим остаток. Если ПустоеЗначение(Склад) = 0 Тогда Если ТипЗначенияСтр(ФирмаДляОстатковТМЦ) = "Справочник" Тогда // нужны сводные остатки только по одной фирме ОстатокНаСкладе = ОстаткиТМЦ.СводныйОстаток(ФирмаДляОстатковТМЦ,Номенклатура,Склад,,"Количество"); ОстатокПоФирме = ОстаткиТМЦ.СводныйОстаток(ФирмаДляОстатковТМЦ,Номенклатура,,,"Количество"); ИначеЕсли ТипЗначенияСтр(ФирмаДляОстатковТМЦ) = "СписокЗначений" Тогда ОстатокНаСкладе = 0; ОстатокПоФирме = 0; СчетчикЦикла = 0; Для СчетчикЦикла = 1 По ФирмаДляОстатковТМЦ.РазмерСписка() Цикл ТекФирма = ФирмаДляОстатковТМЦ.ПолучитьЗначение(СчетчикЦикла); ОстатокНаСкладе = ОстатокНаСкладе + ОстаткиТМЦ.СводныйОстаток(ТекФирма,Номенклатура,Склад,,"Количество"); ОстатокПоФирме = ОстатокПоФирме + ОстаткиТМЦ.СводныйОстаток(ТекФирма,Номенклатура,,,"Количество"); КонецЦикла; КонецЕсли; Иначе Если ТипЗначенияСтр(ФирмаДляОстатковТМЦ) = "Справочник" Тогда // нужны сводные остатки только по одной фирме ОстатокНаСкладе = ОстаткиТМЦ.СводныйОстаток(ФирмаДляОстатковТМЦ,Номенклатура,,,"Количество"); ИначеЕсли ТипЗначенияСтр(ФирмаДляОстатковТМЦ) = "СписокЗначений" Тогда ОстатокНаСкладе = 0; СчетчикЦикла = 0; Для СчетчикЦикла = 1 По ФирмаДляОстатковТМЦ.РазмерСписка() Цикл ТекФирма = ФирмаДляОстатковТМЦ.ПолучитьЗначение(СчетчикЦикла); ОстатокНаСкладе = ОстатокНаСкладе + ОстаткиТМЦ.СводныйОстаток(ТекФирма,Номенклатура,,,"Количество"); КонецЦикла; КонецЕсли; ОстатокПоФирме = ОстатокНаСкладе; КонецЕсли; РезервНаСкладе = 0; РезервПоФирме = 0; Если (ПустоеЗначение(РезервыТМЦ) = 0) и (УчитыватьРезерв <> 0) Тогда // Получим резерв. Если ПустоеЗначение(Склад) = 0 Тогда Если ТипЗначенияСтр(ФирмаДляОстатковТМЦ) = "Справочник" Тогда // нужны сводные остатки только по одной фирме РезервНаСкладе = РезервыТМЦ.СводныйОстаток(ФирмаДляОстатковТМЦ,Номенклатура,Склад,,,"Количество"); РезервПоФирме = РезервыТМЦ.СводныйОстаток(ФирмаДляОстатковТМЦ,Номенклатура,,,,"Количество"); Если ПустоеЗначение(Договор) = 0 Тогда // Надо умеьшить резерв на резерв по этому договору РезервНаСкладе = РезервНаСкладе - РезервыТМЦ.СводныйОстаток(ФирмаДляОстатковТМЦ,Номенклатура,Склад,Договор,,"Количество"); РезервПоФирме = РезервПоФирме - РезервыТМЦ.СводныйОстаток(ФирмаДляОстатковТМЦ,Номенклатура,,Договор,,"Количество"); ИначеЕсли ПустоеЗначение(Заявка) = 0 Тогда // Надо умеьшить резерв на резерв по этой заявке РезервНаСкладе = РезервНаСкладе - РезервыТМЦ.СводныйОстаток(ФирмаДляОстатковТМЦ,Номенклатура,Склад,,Заявка,"Количество"); РезервПоФирме = РезервПоФирме - РезервыТМЦ.СводныйОстаток(ФирмаДляОстатковТМЦ,Номенклатура,,,Заявка,"Количество"); КонецЕсли; ИначеЕсли ТипЗначенияСтр(ФирмаДляОстатковТМЦ) = "СписокЗначений" Тогда СчетчикЦикла = 0; Для СчетчикЦикла = 1 По ФирмаДляОстатковТМЦ.РазмерСписка() Цикл ТекФирма = ФирмаДляОстатковТМЦ.ПолучитьЗначение(СчетчикЦикла); РезервНаСкладе = РезервНаСкладе + РезервыТМЦ.СводныйОстаток(ТекФирма,Номенклатура,Склад,,,"Количество"); РезервПоФирме = РезервПоФирме + РезервыТМЦ.СводныйОстаток(ТекФирма,Номенклатура,,,,"Количество"); Если ПустоеЗначение(Договор) = 0 Тогда // Надо умеьшить резерв на резерв по этому договору РезервНаСкладе = РезервНаСкладе - РезервыТМЦ.СводныйОстаток(ТекФирма,Номенклатура,Склад,Договор,,"Количество"); РезервПоФирме = РезервПоФирме - РезервыТМЦ.СводныйОстаток(ТекФирма,Номенклатура,,Договор,,"Количество"); ИначеЕсли ПустоеЗначение(Заявка) = 0 Тогда // Надо умеьшить резерв на резерв по этой заявке РезервНаСкладе = РезервНаСкладе - РезервыТМЦ.СводныйОстаток(ТекФирма,Номенклатура,Склад,,Заявка,"Количество"); РезервПоФирме = РезервПоФирме - РезервыТМЦ.СводныйОстаток(ТекФирма,Номенклатура,,,Заявка,"Количество"); КонецЕсли; КонецЦикла; КонецЕсли; Иначе Если ТипЗначенияСтр(ФирмаДляОстатковТМЦ) = "Справочник" Тогда // нужны сводные остатки только по одной фирме РезервПоФирме = РезервыТМЦ.СводныйОстаток(ФирмаДляОстатковТМЦ,Номенклатура,,,,"Количество"); Если ПустоеЗначение(Договор) = 0 Тогда // Надо умеьшить резерв на резерв по этому договору РезервПоФирме = РезервПоФирме - РезервыТМЦ.СводныйОстаток(ФирмаДляОстатковТМЦ,Номенклатура,,Договор,,"Количество"); ИначеЕсли ПустоеЗначение(Заявка) = 0 Тогда // Надо умеьшить резерв на резерв по этой заявке РезервПоФирме = РезервПоФирме - РезервыТМЦ.СводныйОстаток(ФирмаДляОстатковТМЦ,Номенклатура,,,Заявка,"Количество"); КонецЕсли; ИначеЕсли ТипЗначенияСтр(ФирмаДляОстатковТМЦ) = "СписокЗначений" Тогда СчетчикЦикла = 0; Для СчетчикЦикла = 1 По ФирмаДляОстатковТМЦ.РазмерСписка() Цикл ТекФирма = ФирмаДляОстатковТМЦ.ПолучитьЗначение(СчетчикЦикла); РезервПоФирме = РезервПоФирме + РезервыТМЦ.СводныйОстаток(ТекФирма,Номенклатура,,,,"Количество"); Если ПустоеЗначение(Договор) = 0 Тогда // Надо умеьшить резерв на резерв по этому договору РезервПоФирме = РезервПоФирме - РезервыТМЦ.СводныйОстаток(ТекФирма,Номенклатура,,Договор,,"Количество"); ИначеЕсли ПустоеЗначение(Заявка) = 0 Тогда // Надо умеьшить резерв на резерв по этой заявке РезервПоФирме = РезервПоФирме - РезервыТМЦ.СводныйОстаток(ТекФирма,Номенклатура,,,Заявка,"Количество"); КонецЕсли; КонецЦикла; КонецЕсли; РезервНаСкладе = РезервПоФирме; КонецЕсли; КонецЕсли; ОстатокНаСкладе = ОстатокНаСкладе - РезервНаСкладе; ОстатокПоФирме = ОстатокПоФирме - РезервПоФирме; Если Единица.Коэффициент > 0 Тогда ОстатокНаСкладе = ОстатокНаСкладе / Единица.Коэффициент; ОстатокПоФирме = ОстатокПоФирме / Единица.Коэффициент; КонецЕсли; КонецЕсли; КонецПроцедуры // глПолучитьОстаткиНоменклатуры() |
|||
15
Масянька
15.03.16
✎
15:15
|
(13) Шикарно.
|
|||
16
Artificial
15.03.16
✎
15:16
|
(14) Хм. То есть, нужно ПриОткрытии() или ПриОбновленииОтображения() вызывать заполнение для каждой номенклатуры текущего списка? Ох...
|
|||
17
Масянька
15.03.16
✎
15:19
|
(16) Нет. В таб. часть добавляешь колонку и на нее вешаешь эту процедуру.
|
|||
18
Artificial
15.03.16
✎
15:20
|
(17) Добавил. А процедуру некуда вешать. Вот на таблицу значений вешалась.
|
|||
19
Масянька
15.03.16
✎
15:22
|
(18) Во дурак :))))
Колонку выдели в конфигураторе, правую кнопку мыши - Дополнительно - Формула. |
|||
20
ДенисЧ
15.03.16
✎
15:23
|
Дожили... Масянька людей уму учит.... ((
|
|||
21
Масянька
15.03.16
✎
15:24
|
(20) Что? Завидно?
Бухать меньше надо. И думать больше. |
|||
22
Artificial
15.03.16
✎
15:25
|
(19) Можно было и не грубить.
И в этой процедурке получать БухИтоги и т. д.? |
|||
23
Масянька
15.03.16
✎
15:27
|
(22) Я ж (практически) любя :)
И ни разу не грубила... |
|||
24
Злопчинский
15.03.16
✎
15:29
|
(14) типовой код с типовыми граблями из ТИСа
|
|||
25
Artificial
15.03.16
✎
15:29
|
(23) Проехали, ладно. Вот такой огрызок. Я в правильном направлении двигаюсь?
Процедура ПриИзмененииОстаток() БухИтоги = СоздатьОбъект("БухгалтерскиеИтоги"); Сч41_3 = СчетПоКоду("41.3"); Остаток = БухИтоги.СКД(Сч41_3, "К",, ТекущийЭлемент()); КонецПроцедуры |
|||
26
Mikeware
15.03.16
✎
15:31
|
(25) бухитоги - создание робъекта - вынеси за процедуру куданить
|
|||
27
Artificial
15.03.16
✎
15:33
|
(26) Не совсем понятно, как и зачем.
|
|||
28
Mikeware
15.03.16
✎
15:36
|
(27) как - создать переменную модуля, а объект создать в Приоткрыиии или в тексте модуля
зачем - чтоб не тратить время каждый раз на создание объекта |
|||
29
Artificial
15.03.16
✎
15:39
|
(28) Послушал совета, теперь так.
Перем БухИтоги; Перем Сч41_3; Процедура ПриОткрытии() БухИтоги = СоздатьОбъект("БухгалтерскиеИтоги"); Сч41_3 = СчетПоКоду("41.3"); КонецПроцедуры Процедура ПриИзмененииОстаток() Остаток = БухИтоги.СКД(Сч41_3, "К",, ТекущийЭлемент()); КонецПроцедуры |
|||
30
Ёпрст
15.03.16
✎
15:41
|
проще, в приОткрытии получить все останки, кинуть их в ИТЗ или ТЗ, на форму кинуть текстовую колонку с функцией, в функции поиск в ИТЗ или ТЗ и показ остатка.
|
|||
31
HawkEye
15.03.16
✎
15:41
|
подписываюсь )))
|
|||
32
Artificial
15.03.16
✎
15:44
|
(30) Начнем с 1-го пункта. Как получить все элементы в списке?
|
|||
33
Ёпрст
15.03.16
✎
15:55
|
(32) зачем ?
|
|||
34
Ёпрст
15.03.16
✎
15:56
|
просто получаешь воооообще все останки.
При желании, можно штатно получать элементы именно из формысписка, только занафига ? |
|||
35
Artificial
15.03.16
✎
16:11
|
(34) Не слишком ли долго будет?
|
|||
36
Ёпрст
15.03.16
✎
16:18
|
(35) будет быстрее, чем получение остатка каждый раз для каждой строки как в (29)
|
|||
37
Ёпрст
15.03.16
✎
16:19
|
ты же получишь один раз остатки , и потом просто будешь их искать в кеше - тз/итз.
|
|||
38
Artificial
15.03.16
✎
16:28
|
(37) Ладно, вечером попробую. Спасибо.
|
|||
39
Mikeware
15.03.16
✎
16:30
|
(37) дык кэширование - это хорошо. но как с конкурентной работой быть тогда?
|
|||
40
Злопчинский
15.03.16
✎
16:45
|
(39) остатки "для посмотреть" - имхо не сильно чувствительны к конкурентной работе. Иначе как только открыл на просмотр список - всё, надо блокировать, чтобы никто не забрал то что ты смотришь...
а если при просмотре - условно - объявил клиенту количество (или принял другое РЕШЕНИЕ по количеству) - либо БЛОКИРУЙ это количество (например горячее резервирование), либо ну и фиг с ним. побозарил 10 мин, выбранные колва запусил на проведение - ну ругнулось на 5 строк из 10 что не хваетет - а и правильно ибо нефиг по телефону время отнимать.. |
|||
41
Ёпрст
15.03.16
✎
17:57
|
(39) забить :)
Как правило, редко где это надо |
|||
42
Карупян
15.03.16
✎
18:09
|
(41) А если 100 тыщ позиций номенклатуры.
Не будет ли открытие формы секунд 30? |
|||
43
Карупян
15.03.16
✎
18:09
|
Опять же в 77 тз не индексированная поиск по ней те такой и быстрый
|
|||
44
Mikeware
16.03.16
✎
08:13
|
(43) ну, у некоторых людей в 7.7 есть и индексированные таблицы :-)
|
|||
45
Ёпрст
16.03.16
✎
08:43
|
(42) это вообще ни о чем
|
|||
46
Artificial
16.03.16
✎
10:17
|
Создал колонку "Остаток", в модуле следующий текст:
Перем БухИтоги; Перем Сч41_1; Процедура ПриОткрытии() БухИтоги = СоздатьОбъект("БухгалтерскиеИтоги"); БухИтоги.ПериодМ(ТекущаяДата()); Сч41_1 = СчетПоКоду("41.1"); КонецПроцедуры Функция ПриИзмененииОстаток() Остаток = БухИтоги.СКД(Сч41_1, "К",, ТекущийЭлемент()); КонецФункции Вопрос: почему не выводит? |
|||
47
Масянька
16.03.16
✎
10:19
|
(46) На колонку "Остаток" повесил функцию ПриИзмененииОстаток?
|
|||
48
HawkEye
16.03.16
✎
10:21
|
(46) ну как бы, по идеологии программирования, функция должна что-то возвращать, не?
|
|||
49
Artificial
16.03.16
✎
10:22
|
(47) Да.
(48) Действительно. |
|||
50
Mikeware
16.03.16
✎
10:23
|
(48) у него void :-)
|
|||
51
HawkEye
16.03.16
✎
10:23
|
(49) и хде этот возврат?
|
|||
52
Artificial
16.03.16
✎
10:24
|
(51) Хм, когда писал Возврат Остаток = БухИтоги.СКД(Сч41_1, "К",, ТекущийЭлемент());, не работало. Оказывается, надо писать
Остаток = БухИтоги.СКД(Сч41_1, "К",, ТекущийЭлемент()); Возврат Остаток; |
|||
53
HawkEye
16.03.16
✎
10:25
|
(52) я тебе больше скажу...
можно писать Возврат БухИтоги.СКД(Сч41_1, "К",, ТекущийЭлемент()); |
|||
54
HawkEye
16.03.16
✎
10:27
|
(50) тебе хорошо, ты умный... а автор теперь зависнет )))
|
|||
55
Artificial
16.03.16
✎
10:29
|
(54) Это не С++, войды не катят.
|
|||
56
Масянька
16.03.16
✎
10:39
|
(55) Ты не поверишь - http://www.1cpp.ru/index.php/Main
|
|||
57
Artificial
16.03.16
✎
11:22
|
Следующий вопрос: передаю параметр в форму. Почему он не подхватывается?
Передаю: ОткрытьПодбор("Справочник.Номенклатура", "ДляОбработки", Склад); Получаю: Процедура ПриОткрытии() ПолучПараметр = Форма.Параметр; КонецПроцедуры |
|||
58
Artificial
16.03.16
✎
11:23
|
(56) Даром не нужен.
|
|||
59
Масянька
16.03.16
✎
11:29
|
(58) Зря.
(57) Для подбора есть стандартные обработки и свою форма справочника (по крайней мере, в ТиС). Может стоит посмотреть в своей конфигурации? |
|||
60
Artificial
16.03.16
✎
11:30
|
(59) Я перетянул стандартную и переделал.
|
|||
61
Ёпрст
16.03.16
✎
11:30
|
(57)
Процедура ПриОткрытии() Сообщить(Форма.Параметр);//должна сообщить твой Склад, если че |
|||
62
Остап Сулейманович
16.03.16
✎
11:33
|
(59) Че там в типовых смотреть. В (57) все правильно написано.
Вопрос может быть только "где это написано". 1. Вот это вот Процедура ПриОткрытии() ПолучПараметр = Форма.Параметр; КонецПроцедуры должно быть прописанов в форме "Справочник.Номенклатура.ДляОбработки" 2. Нужно убедиться, что когда вызывается вот это : ОткрытьПодбор("Справочник.Номенклатура", "ДляОбработки", Склад); Склад уже определен. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |