|
v7: ПоложениеКолонкиТаблицы при смене состава колонок | ☑ | ||
---|---|---|---|---|
0
OnePrg
10.12.21
✎
12:14
|
Если колонки создавать ПриОткрытии, а затем при обновлении формы вызывать
РФорма = СоздатьОбъект("РасширениеФормы"); РФорма.ПоложениеКолонкиТаблицы("тбТовары", 2,2); то всё работает. При установке галочки на форме требуется поменять положение колонок. В начале процедуры Сформировать() добавить код тбТовары.УдалитьСтроки(); Пока тбТовары.КоличествоКолонок()<>0 Цикл тбТовары.УдалитьКолонку(1); КонецЦикла; Если ПолнаяВедомость = 1 Тогда тбТовары.НоваяКолонка("Цвет","Строка"); тбТовары.ВидимостьКолонки("Цвет",0); тбТовары.НоваяКолонка("Товар",,,,,50); тбТовары.НоваяКолонка("СуммаНачИнв","Число",12,2,,10); ..... Для инд = 2 по тбТовары.КоличествоКолонок() Цикл ИмяКолонки = тбТовары.ПолучитьПараметрыКолонки(инд); тбТовары.ВидимостьКолонки(ИмяКолонки,1); КонецЦикла; Иначе тбТовары.НоваяКолонка("Цвет","Строка"); тбТовары.ВидимостьКолонки("Цвет",0); тбТовары.НоваяКолонка("Товар",,,,,50); тбТовары.НоваяКолонка("КвоНач","Число",12,0,,10); ... Для инд = 2 по тбТовары.КоличествоКолонок() Цикл ИмяКолонки = тбТовары.ПолучитьПараметрыКолонки(инд); Если (Найти(ИмяКолонки,"Инв") <> 0) или (Найти(ИмяКолонки,"Приход") <> 0) или (Найти(ИмяКолонки,"Расход") <> 0) Тогда тбТовары.ВидимостьКолонки(ИмяКолонки,0); КонецЕсли; КонецЦикла; тбТовары.ВидимостьКолонки("КвоПрод",0); КонецЕсли; Процедура при обновлении формы теперь выглядит так РФорма = СоздатьОбъект("РасширениеФормы"); Если ПолнаяВедомость = 1 Тогда РФорма.ПоложениеКолонкиТаблицы("тбТовары", 2,2); ... Иначе РФорма.ПоложениеКолонкиТаблицы("тбТовары", 2,1); ... КонецЕсли; При открытии обработка заполняется при ПолнаяВедомость = 1, но при смене флажка ПолнаяВедомость = 0 1С-ка просто вылетает. Как можно всё-таки и порядок колонок поменять и оставить ПоложениеКолонкиТаблицы? |
|||
1
Ёпрст
10.12.21
✎
12:16
|
Положение колонки можно менять и без формекса
|
|||
2
OnePrg
10.12.21
✎
12:18
|
(1) Как?
|
|||
3
OnePrg
10.12.21
✎
12:20
|
(0) Вру: 1С-ка не вылетает, но таблица при этом пустая. В процедуру Сформировать не попадает
http://imagizer.imageshack.com/img922/163/eaLimz.jpg |
|||
4
Ёпрст
10.12.21
✎
12:22
|
(2) Спросить у мужика в кепке описание метода ВидимостьКолонки
|
|||
5
Ёпрст
10.12.21
✎
12:25
|
Если тебе нужно менять свойство Положение, как у ТЧ ..типа На следующей строке/в той же колонке, то только тогда нужен метод
ПоложениеКолонкиТаблицы |
|||
6
Ёпрст
10.12.21
✎
12:25
|
И больше кода
|
|||
7
АгентБезопасной Нацио
10.12.21
✎
12:28
|
(4) ну кто ж спрашивает у мужика в кепке, если можно сразу на форуме...
|
|||
8
OnePrg
10.12.21
✎
12:29
|
(5) именно это мне и нужно, а не просто видимость
|
|||
9
Ёпрст
10.12.21
✎
12:30
|
(8) тогда больше кода
|
|||
10
OnePrg
10.12.21
✎
12:36
|
(9)
Перем Инв, ПредИнв; //******************************************* Функция ТекстЗапросаПредИнв() Возврат "SELECT | $ДокС.Товар as Товар, | $ДокС.ИнвСтоимость as СуммаНачИнв, | $ДокС.ИнвКоличество as КвоНачИнв, | 0 as СуммаНач, | 0 as КвоНач, | 0 as СуммаПриход, | 0 as КвоПриход, | 0 as СуммаРасход, | 0 as КвоРасход, | 0 as СуммаПрод, | 0 as КвоПрод, | 0 as СуммаКон, | 0 as КвоКон, | 0 as СуммаИнв, | 0 as КвоИнв |FROM | $ДокументСтроки.Инвентаризация as ДокС |INNER JOIN | $Документ.Инвентаризация as Док ON Док.IDDoc = ДокС.IDDoc |WHERE | Док.IDDoc = :ПредИнв"; КонецФункции //******************************************* Функция ТекстЗапросаИнв() Возврат "SELECT | $ДокС.Товар as Товар, | 0 as СуммаНачИнв, | 0 as КвоНачИнв, | 0 as СуммаНач, | 0 as КвоНач, | 0 as СуммаПриход, | 0 as КвоПриход, | 0 as СуммаРасход, | 0 as КвоРасход, | 0 as СуммаПрод, | 0 as КвоПрод, | 0 as СуммаКон, | 0 as КвоКон, | $ДокС.ИнвСтоимость as СуммаИнв, | $ДокС.ИнвКоличество as КвоИнв |FROM | $ДокументСтроки.Инвентаризация as ДокС |INNER JOIN | $Документ.Инвентаризация as Док ON Док.IDDoc = ДокС.IDDoc |WHERE | Док.IDDoc = :Инв"; КонецФункции //******************************************* Функция ТекстЗапросаОбороты() Возврат "SELECT | Рег.Товар, | 0 as СуммаНачИнв, | 0 as КвоНачИнв, | Рег.ПродСтоимостьНачальныйОстаток as СуммаНач, | Рег.ОстатокТовараНачальныйОстаток as КвоНач, | Рег.ПродСтоимостьПриход as СуммаПриход, | Рег.ОстатокТовараПриход as КвоПриход, | 0 as СуммаРасход, | 0 as КвоРасход, | 0 as СуммаПрод, | 0 as КвоПрод, | Рег.ПродСтоимостьКонечныйОстаток as СуммаКон, | Рег.ОстатокТовараКонечныйОстаток as КвоКон, | 0 as СуммаИнв, | 0 as КвоИнв |FROM | $РегистрОстаткиОбороты.ПартииТоваров(:ДатаНач,:ДатаКон~,,,, | Склад = :ВыбСклад, | (Товар), (ОстатокТовара,ПродСтоимость)) as Рег | |UNION ALL | |SELECT | Рег2.Товар, | 0 as СуммаНачИнв, | 0 as КвоНачИнв, | 0 as СуммаНач, | 0 as КвоНач, | 0 as СуммаПриход, | 0 as КвоПриход, | Рег2.ПродСтоимостьРасход as СуммаРасход, | Рег2.ОстатокТовараРасход as КвоРасход, | 0 as СуммаПрод, | 0 as КвоПрод, | 0 as СуммаКон, | 0 as КвоКон, | 0 as СуммаИнв, | 0 as КвоИнв |FROM | $РегистрОбороты.ПартииТоваров(:ДатаНач,:ДатаКон~,Документ,, | Склад = :ВыбСклад, | (Товар), (ОстатокТовара,ПродСтоимость)) as Рег2 |WHERE | Рег2.ВидДокумента <> $ВидДокумента.КассаЧек | AND Рег2.ВидДокумента <> $ВидДокумента.РасходнаяРозничная | |UNION ALL | |SELECT | Рег2.Товар, | 0 as СуммаНачИнв, | 0 as КвоНачИнв, | 0 as СуммаНач, | 0 as КвоНач, | 0 as СуммаПриход, | 0 as КвоПриход, | 0 as СуммаРасход, | 0 as КвоРасход, | Рег2.ПродСтоимостьРасход as СуммаПрод, | Рег2.ОстатокТовараРасход as КвоПрод, | 0 as СуммаКон, | 0 as КвоКон, | 0 as СуммаИнв, | 0 as КвоИнв |FROM | $РегистрОбороты.ПартииТоваров(:ДатаНач,:ДатаКон~,Документ,, | Склад = :ВыбСклад, | (Товар), (ОстатокТовара,ПродСтоимость)) as Рег2 |WHERE | Рег2.ВидДокумента = $ВидДокумента.КассаЧек | OR Рег2.ВидДокумента = $ВидДокумента.РасходнаяРозничная"; КонецФункции //******************************************* Процедура НастроитьТбТовары() тбТовары.УдалитьСтроки(); Пока тбТовары.КоличествоКолонок()<>2 Цикл тбТовары.УдалитьКолонку(1); КонецЦикла; Если ПолнаяВедомость = 1 Тогда тбТовары.НоваяКолонка("СуммаНачИнв","Число",12,2,,10); тбТовары.НоваяКолонка("КвоНачИнв","Число",12,0,,10); тбТовары.НоваяКолонка("СуммаНач","Число",12,2,,10); тбТовары.НоваяКолонка("КвоНач","Число",12,0,,10); тбТовары.НоваяКолонка("СуммаПриход","Число",12,2,,10); тбТовары.НоваяКолонка("КвоПриход","Число",12,0,,10); тбТовары.НоваяКолонка("СуммаРасход","Число",12,2,,10); тбТовары.НоваяКолонка("КвоРасход","Число",12,0,,10); тбТовары.НоваяКолонка("СуммаПрод","Число",12,2,,10); тбТовары.НоваяКолонка("КвоПрод","Число",12,0,,10); тбТовары.НоваяКолонка("СуммаКон","Число",12,2,,10); тбТовары.НоваяКолонка("КвоКон","Число",12,0,,10); тбТовары.НоваяКолонка("СуммаИнв","Число",12,2,,10); тбТовары.НоваяКолонка("КвоИнв","Число",12,0,,10); тбТовары.НоваяКолонка("Ошибки"); Для инд = 2 по тбТовары.КоличествоКолонок() Цикл ИмяКолонки = тбТовары.ПолучитьПараметрыКолонки(инд); тбТовары.ВидимостьКолонки(ИмяКолонки,1); КонецЦикла; Иначе тбТовары.НоваяКолонка("КвоНач","Число",12,0,,10); тбТовары.НоваяКолонка("КвоКон","Число",12,0,,10); тбТовары.НоваяКолонка("СуммаНач","Число",12,2,,10); тбТовары.НоваяКолонка("СуммаКон","Число",12,2,,10); тбТовары.НоваяКолонка("СуммаПрод","Число",12,2,,10); тбТовары.НоваяКолонка("СуммаНачИнв","Число",12,2,,10); тбТовары.НоваяКолонка("КвоНачИнв","Число",12,0,,10); тбТовары.НоваяКолонка("СуммаПриход","Число",12,2,,10); тбТовары.НоваяКолонка("КвоПриход","Число",12,0,,10); тбТовары.НоваяКолонка("СуммаРасход","Число",12,2,,10); тбТовары.НоваяКолонка("КвоРасход","Число",12,0,,10); тбТовары.НоваяКолонка("КвоПрод","Число",12,0,,10); тбТовары.НоваяКолонка("СуммаИнв","Число",12,2,,10); тбТовары.НоваяКолонка("КвоИнв","Число",12,0,,10); тбТовары.НоваяКолонка("Ошибки"); Для инд = 2 по тбТовары.КоличествоКолонок() Цикл ИмяКолонки = тбТовары.ПолучитьПараметрыКолонки(инд); Если (Найти(ИмяКолонки,"Инв") <> 0) или (Найти(ИмяКолонки,"Приход") <> 0) или (Найти(ИмяКолонки,"Расход") <> 0) Тогда тбТовары.ВидимостьКолонки(ИмяКолонки,0); КонецЕсли; КонецЦикла; тбТовары.ВидимостьКолонки("КвоПрод",0); КонецЕсли; тбТовары.Фиксировать(0,0); КонецПроцедуры //******************************************* Процедура Сформировать(ТолькоОшибки = 0) НастроитьТбТовары(); RS = СоздатьОбъект("ODBCRecordset"); ТекстЗапроса = " |SELECT | Д.Товар as [Товар $Справочник.Номенклатура], | SUM(Д.СуммаНачИнв) as СуммаНачИнв, | SUM(Д.КвоНачИнв) as КвоНачИнв, | SUM(Д.СуммаНач) as СуммаНач, | SUM(Д.КвоНач) as КвоНач, | SUM(Д.СуммаПриход) as СуммаПриход, | SUM(Д.КвоПриход) as КвоПриход, | SUM(Д.СуммаРасход) as СуммаРасход, | SUM(Д.КвоРасход) as КвоРасход, | SUM(Д.СуммаПрод) as СуммаПрод, | SUM(Д.КвоПрод) as КвоПрод, | SUM(Д.СуммаКон) as СуммаКон, | SUM(Д.КвоКон) as КвоКон, | SUM(Д.СуммаИнв) as СуммаИнв, | SUM(Д.КвоИнв) as КвоИнв |FROM ("+ ТекстЗапросаПредИнв()+" | |UNION ALL |"+ ТекстЗапросаОбороты()+" | |UNION ALL |"+ ТекстЗапросаИнв()+") as Д |GROUP BY | Товар"+?(ТолькоОшибки=1," |HAVING | (SUM(Д.СуммаНачИнв)<>SUM(Д.СуммаНач) OR SUM(Д.КвоНачИнв)<>SUM(Д.КвоНач)) | OR (SUM(Д.СуммаИнв)<>SUM(Д.СуммаКон) OR SUM(Д.КвоИнв)<>SUM(Д.КвоКон))","") ; RS.УстановитьТекстовыйПараметр("ПредИнв", ПредИнв); RS.УстановитьТекстовыйПараметр("Инв", Инв.ТекущийДокумент()); RS.УстановитьТекстовыйПараметр("ДатаНач", ПредИнв.ДатаДок+1); RS.УстановитьТекстовыйПараметр("ДатаКон", Инв.ДатаДок); RS.УстановитьТекстовыйПараметр("ВыбСклад",Инв.Склад); //RS.Отладка(1); //Сообщить("*********************************************"); //Сообщить(ТекстЗапроса); //Сообщить("*********************************************"); тб = RS.ВыполнитьИнструкцию(ТекстЗапроса); тб.Свернуть("Товар","СуммаНачИнв,КвоНачИнв,СуммаНач,КвоНач,СуммаПриход,КвоПриход,СуммаРасход,КвоРасход,СуммаПрод,КвоПрод,СуммаКон,КвоКон,СуммаИнв,КвоИнв"); тб.Сортировать("Товар"); тб.НоваяКолонка("Ошибки"); тб.ВыбратьСтроки(); Пока тб.ПолучитьСтроку()=1 Цикл Ошибки = ""; Если (тб.СуммаНачИнв <> тб.СуммаНач) или (тб.КвоНачИнв <> тб.КвоНач) Тогда Ошибки = "начальный остаток не сходится с пред. инвентаризацией"; КонецЕсли; Если (тб.СуммаИнв <> тб.СуммаКон) или (тб.КвоИнв <> тб.КвоКон) Тогда Если Ошибки = "" Тогда Ошибки = "конечный остаток не сходится с инвентаризацией"; Иначе Ошибки = Ошибки + " |конечный остаток не сходится с инвентаризацией"; КонецЕсли; КонецЕсли; тб.Ошибки = Ошибки; КонецЕсли; Если ТолькоОшибки=1 Тогда КонецЕсли; тбТовары.НоваяСтрока(); тбТовары.Товар = "ВСЕГО:"; Для инд = 3 по тбТовары.КоличествоКолонок()-1 Цикл ИмяКолонки = тбТовары.ПолучитьПараметрыКолонки(инд); тбТовары.УстановитьЗначение(тбТовары.НомерСтроки,ИмяКолонки,тб.Итог(ИмяКолонки)); КонецЦикла; тб.ВыбратьСтроки(); Пока тб.ПолучитьСтроку()=1 Цикл тбТовары.НоваяСтрока(); Для инд = 2 по тбТовары.КоличествоКолонок()-1 Цикл ИмяКолонки = тбТовары.ПолучитьПараметрыКолонки(инд); Зн = тб.ПолучитьЗначение(тб.НомерСтроки,ИмяКолонки); тбТовары.УстановитьЗначение(тбТовары.НомерСтроки,ИмяКолонки,Зн); КонецЦикла; Если тбТовары.Ошибки <> "" Тогда тбТовары.Цвет = "BRUSH[0xECB5FF]"; КонецЕсли; КонецЦикла; тбТовары.Фиксировать(1,0); КонецПроцедуры //******************************************* Функция ПриОбновленииФормы() РФорма = СоздатьОбъект("РасширениеФормы"); Если ПолнаяВедомость = 1 Тогда // РФорма.ПоложениеКолонкиТаблицы("тбТовары", 2,2); // РФорма.ПоложениеКолонкиТаблицы("тбТовары", 4,2); // РФорма.ПоложениеКолонкиТаблицы("тбТовары", 6,2); // РФорма.ПоложениеКолонкиТаблицы("тбТовары", 8,2); // РФорма.ПоложениеКолонкиТаблицы("тбТовары",10,2); // РФорма.ПоложениеКолонкиТаблицы("тбТовары",12,2); // РФорма.ПоложениеКолонкиТаблицы("тбТовары",14,2); // РФорма.ПоложениеКолонкиТаблицы("тбТовары",16,2); //Иначе // РФорма.ПоложениеКолонкиТаблицы("тбТовары", 2,1); // РФорма.ПоложениеКолонкиТаблицы("тбТовары", 4,1); // РФорма.ПоложениеКолонкиТаблицы("тбТовары", 6,1); // РФорма.ПоложениеКолонкиТаблицы("тбТовары", 8,1); // РФорма.ПоложениеКолонкиТаблицы("тбТовары",10,1); // РФорма.ПоложениеКолонкиТаблицы("тбТовары",12,1); // РФорма.ПоложениеКолонкиТаблицы("тбТовары",14,1); // РФорма.ПоложениеКолонкиТаблицы("тбТовары",16,1); КонецЕсли; КонецФункции //******************************************* Процедура ПриОткрытии() тбТовары.НоваяКолонка("Цвет","Строка"); тбТовары.ВидимостьКолонки("Цвет",0); тбТовары.НоваяКолонка("Товар",,,,,50); Инв = Форма.Параметр; ДокИнв = СоздатьОбъект("Документ.Инвентаризация"); ДокИнв.УстановитьФильтр(); ДокИнв.ОбратныйПорядок(1); ДокИнв.ВыбратьДокументы(,Инв.ДатаДок-1); Пока ДокИнв.ПолучитьДокумент() = 1 Цикл Если ДокИнв.Склад = Инв.Склад Тогда ПредИнв = ДокИнв.ТекущийДокумент(); Прервать; КонецЕсли; КонецЦикла; Если ПустоеЗначение(ПредИнв) = 1 Тогда Сообщить("Не найдена предыдущая инвентаризация","!!!"); Форма.Закрыть(); КонецЕсли; Сформировать(); КонецПроцедуры |
|||
11
Ёпрст
10.12.21
✎
12:57
|
(10) да уж..
1.Текст запроса нужно переписать Или достать всё сразу c ВТ ОстанкиИОбороты с периодичностью Документ, или хотя бы использовать одну ВТ Остатки + одну ВТ Обороты с периодичностью Документ + открыть для себя Case 2. Открыть для себя методы работы с ТЗ, такие как Заполнить и Очистить. 3.ПоложениеКолонки нужно задавать в ПослеОткрытияФормы, а не в ПриОткрытии, обычно, все методы формекса связанные с формой, нужно делать , когда форма уже открыта |
|||
12
Ёпрст
10.12.21
✎
12:59
|
вот это условие, нужно переписать, так форма не закроется, а оператор сформировать будет выполнен
Если ПустоеЗначение(ПредИнв) = 1 Тогда // Сообщить("Не найдена предыдущая инвентаризация","!!!"); // Форма.Закрыть(); СтатусВозврата=0; Возврат; КонецЕсли; |
|||
13
Ёпрст
10.12.21
✎
13:00
|
ДокИнв.УстановитьФильтр();//тут нет фильтра, нафига написал ?
|
|||
14
Злопчинский
10.12.21
✎
13:01
|
(0) тбТовары.УдалитьСтроки();
Пока тбТовары.КоличествоКолонок()<>0 Цикл тбТовары.УдалитьКолонку(1); КонецЦикла; . тбТовары.Очистить(); |
|||
15
Злопчинский
10.12.21
✎
13:01
|
хотя Епрст уже все сказал...
|
|||
16
Ёпрст
10.12.21
✎
13:02
|
И
4.Если колонки задаются в запросе, то достаточно Выгрузить ТЗ полученную из запроса в ТЗ на форму и добавить колонку расскраски. |
|||
17
Kigo_Kigo
10.12.21
✎
13:07
|
Удалить строки и колонки
есть же тупо Очистить() |
|||
18
Kigo_Kigo
10.12.21
✎
13:07
|
А Злоп опередил
|
|||
19
OnePrg
10.12.21
✎
13:17
|
(12) спасибо
|
|||
20
Kigo_Kigo
10.12.21
✎
13:20
|
(12)
А не // СтатусВозврата=0; СтатусВозврата(0); Возврат; ? )))) |
|||
21
OnePrg
10.12.21
✎
13:25
|
(11)
ПоложениеКолонкиТаблицы сейчас находится при обновлении формы, при открытии всё работает. Затем на форме меняется флажок ПолнаяВедомость = 1 и таблица пустая http://imagizer.imageshack.com/img922/163/eaLimz.jpg |
|||
22
OnePrg
10.12.21
✎
13:26
|
Все спасибо.
Всё заработало. Видать дело было не в ПоложениеКолонкиТаблицы. |
|||
23
OnePrg
10.12.21
✎
13:32
|
(16) в этом случает ругается, что недоступно для записи
|
|||
24
Arbuz
10.12.21
✎
16:41
|
(12) и, ещё, зачем ты джоинишь таблицы, поля которых не используешь в запросе?
|
|||
25
Злопчинский
10.12.21
✎
17:38
|
(22) дело в прокладке было!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |