![]() |
![]() |
![]() |
|
v7: Подскажите как проще определить субконто по счету в таблице значений | ☑ | ||
---|---|---|---|---|
0
zladenuw
27.07.12
✎
14:25
|
Есть вот такой код
Перем Операция; //******************************************* Процедура РазместитьКолонки() РФорма = СоздатьОбъект("РасширениеФормы"); РФорма.ПоложениеКолонкиТаблицы("ТбОперации",1,0); РФорма.ПоложениеКолонкиТаблицы("ТбОперации",2,2); РФорма.ПоложениеКолонкиТаблицы("ТбОперации",3,2); РФорма.ПоложениеКолонкиТаблицы("ТбОперации",4,0); РФорма.ПоложениеКолонкиТаблицы("ТбОперации",5,0); РФорма.ПоложениеКолонкиТаблицы("ТбОперации",6,2); РФорма.ПоложениеКолонкиТаблицы("ТбОперации",7,2); РФорма.ПоложениеКолонкиТаблицы("ТбОперации",8,0); РФорма.ПоложениеКолонкиТаблицы("ТбОперации",9,2); РФорма.ПоложениеКолонкиТаблицы("ТбОперации",10,1); РФорма.ПоложениеКолонкиТаблицы("ТбОперации",11,1); РФорма.ПоложениеКолонкиТаблицы("ТбОперации",12,1); РФорма.ПоложениеКолонкиТаблицы("ТбОперации",13,2); РФорма.ПоложениеКолонкиТаблицы("ТбОперации",14,2); ТбОперации.НоваяКолонка(); ТбОперации.УдалитьКолонку(ТбОперации.КоличествоКолонок()); КонецПроцедуры Функция пСоздатьОбъект(пОбъект,пТип) Попытка Объект = СоздатьОбъект("Справочник."+пОбъект); пТип = "Справочник"; Исключение Попытка Объект = СоздатьОбъект("Документ."+пОбъект); пТип = "Документ"; Исключение Возврат 0; КонецПопытки; КонецПопытки; Возврат Объект; КонецФункции Процедура ОткрытьО() ТекКолонка = ТбОперации.ТекущаяКолонка(); пТип = ""; Если (ТекКолонка = "ДТ") ИЛИ (ТекКолонка = "КТ") Тогда Счет = СоздатьОбъект("Счет"); Если Счет.Выбрать("","")<>1 Тогда Возврат; ИначеЕсли ТекКолонка = "ДТ" Тогда ТбОперации.ДТ = Счет.ТекущийСчет(); ИначеЕсли ТекКолонка = "КТ" Тогда ТбОперации.КТ = Счет.ТекущийСчет(); КонецЕсли; //СубконтоДТ ИначеЕсли ТекКолонка = "СубконтоДТ" Тогда ВидСубконто = ?(Строка(ТбОперации.ДТ.ВидСубконто(1))="Виды деятельности","ВидыДеятельности",ТбОперации.ДТ.ВидСубконто(1)); ВидСубконто = ?(Строка(ТбОперации.ДТ.ВидСубконто(1))="Налоги и отчисления","ШкалаСтавок",ТбОперации.ДТ.ВидСубконто(1)); пОбъектВыборка = пСоздатьОбъект(ВидСубконто,пТип); Если пОбъектВыборка=0 Тогда возврат; КонецЕсли; Если пОбъектВыборка.Выбрать("","")<>1 Тогда Возврат; Иначе ТбОперации.СубконтоДТ = ?(пТип="Документ",пОбъектВыборка.ТекущийДокумент(),пОбъектВыборка.ТекущийЭлемент()); КонецЕсли; ИначеЕсли ТекКолонка = "Субконто2Д" Тогда ВидСубконто = ?(Строка(ТбОперации.ДТ.ВидСубконто(2))="Места хранения","МестаХранения",ТбОперации.ДТ.ВидСубконто(2)); пОбъектВыборка = пСоздатьОбъект(ВидСубконто,пТип); Если пОбъектВыборка=0 Тогда возврат; КонецЕсли; Если пОбъектВыборка.Выбрать("","")<>1 Тогда Возврат; Иначе ТбОперации.Субконто2Д = ?(пТип="Документ",пОбъектВыборка.ТекущийДокумент(),пОбъектВыборка.ТекущийЭлемент()); КонецЕсли; ИначеЕсли ТекКолонка = "Субконто3Д" Тогда ВидСубконто = ?(Строка(ТбОперации.ДТ.ВидСубконто(3))="Валовые доходы/расходы","ВалДоходыРасходы",ТбОперации.ДТ.ВидСубконто(3)); пОбъектВыборка = пСоздатьОбъект(ВидСубконто,пТип); Если пОбъектВыборка=0 Тогда возврат; КонецЕсли; Если пОбъектВыборка.Выбрать("","")<>1 Тогда Возврат; Иначе ТбОперации.Субконто3Д = ?(пТип="Документ",пОбъектВыборка.ТекущийДокумент(),пОбъектВыборка.ТекущийЭлемент()); КонецЕсли; //СубконтоКТ ИначеЕсли ТекКолонка = "СубконтоКТ" Тогда ВидСубконто = ?(Строка(ТбОперации.КТ.ВидСубконто(1))="Виды деятельности","ВидыДеятельности",ТбОперации.КТ.ВидСубконто(1)); ВидСубконто = ?(Строка(ТбОперации.КТ.ВидСубконто(1))="Налоги и отчисления","ШкалаСтавок",ТбОперации.КТ.ВидСубконто(1)); пОбъектВыборка = пСоздатьОбъект(ВидСубконто,пТип); Если пОбъектВыборка=0 Тогда возврат; КонецЕсли; Если пОбъектВыборка.Выбрать("","")<>1 Тогда Возврат; Иначе ТбОперации.СубконтоКТ = ?(пТип="Документ",пОбъектВыборка.ТекущийДокумент(),пОбъектВыборка.ТекущийЭлемент()); КонецЕсли; ИначеЕсли ТекКолонка = "Субконто2К" Тогда ВидСубконто = ?(Строка(ТбОперации.КТ.ВидСубконто(2))="Места хранения","МестаХранения",ТбОперации.КТ.ВидСубконто(2)); пОбъектВыборка = пСоздатьОбъект(ВидСубконто,пТип); Если пОбъектВыборка=0 Тогда возврат; КонецЕсли; Если пОбъектВыборка.Выбрать("","")<>1 Тогда Возврат; Иначе ТбОперации.Субконто2К = ?(пТип="Документ",пОбъектВыборка.ТекущийДокумент(),пОбъектВыборка.ТекущийЭлемент()); КонецЕсли; ИначеЕсли ТекКолонка = "Субконто3К" Тогда ВидСубконто = ?(Строка(ТбОперации.КТ.ВидСубконто(3))="Валовые доходы/расходы","ВалДоходыРасходы",ТбОперации.КТ.ВидСубконто(3)); пОбъектВыборка = пСоздатьОбъект(ВидСубконто,пТип); Если пОбъектВыборка=0 Тогда возврат; КонецЕсли; Если пОбъектВыборка.Выбрать("","")<>1 Тогда Возврат; Иначе ТбОперации.Субконто3К = ?(пТип="Документ",пОбъектВыборка.ТекущийДокумент(),пОбъектВыборка.ТекущийЭлемент()); КонецЕсли; ИначеЕсли ТекКолонка = "Сумма" Тогда лЧисло = ТбОперации.Сумма; Если ВвестиЧисло(лЧисло,"Введите число",10,2,) = 1 Тогда ТбОперации.Сумма = лЧисло; Иначе Возврат; КонецЕсли; ИначеЕсли ТекКолонка = "Кво" Тогда лЧисло = ТбОперации.Кво; Если ВвестиЧисло(лЧисло,"Введите число",10,2,) = 1 Тогда ТбОперации.Кво = лЧисло; Иначе Возврат; КонецЕсли; КонецЕсли; КонецПроцедуры Процедура ВыбОперации() ТбОперации.УдалитьСтроки(); Если Операция.НайтиОперацию(БухДокумент)=1 Тогда Если Операция.ВыбратьПроводки() = 1 Тогда Пока Операция.ПолучитьПроводку() = 1 Цикл ТбОперации.НоваяСтрока(); //ДТ ТбОперации.ДТ = Операция.Дебет.Счет; ТбОперации.СубконтоДТ = Операция.Дебет.Субконто(1,Операция.Дебет.Счет.ВидСубконто(1)); ТбОперации.Субконто2Д = Операция.Дебет.Субконто(2,Операция.Дебет.Счет.ВидСубконто(2)); ТбОперации.Субконто3Д = Операция.Дебет.Субконто(3,Операция.Дебет.Счет.ВидСубконто(3)); //КТ ТбОперации.КТ = Операция.Кредит.Счет; ТбОперации.СубконтоКТ = Операция.Кредит.Субконто(1,Операция.Кредит.Счет.ВидСубконто(1)); ТбОперации.Субконто2К = Операция.Кредит.Субконто(2,Операция.Кредит.Счет.ВидСубконто(2)); ТбОперации.Субконто3К =Операция.Кредит.Субконто(3,Операция.Кредит.Счет.ВидСубконто(3)); ТбОперации.Валюта = Операция.Валюта; ТбОперации.Кво = Операция.Количество; ТбОперации.Сумма = Операция.Сумма; ТбОперации.ВалСумма = Операция.ВалСумма; ТбОперации.Фирма = Операция.НашаФирма; ТбОперации.Комментарий = Операция.Комментарий; ТбОперации.Ж = Операция.НомерЖурнала; КонецЦикла; КонецЕсли; КонецЕсли; РазместитьКолонки(); КонецПроцедуры Процедура Записать() Если Операция.НайтиОперацию(БухДокумент)=1 Тогда Пока Операция.ВыбратьПроводки() = 1 Цикл Операция.ПолучитьПроводку(); Операция.УдалитьПроводку(); КонецЦикла; ТбОперации.ВыбратьСтроки(); Пока ТбОперации.ПолучитьСтроку() = 1 Цикл Операция.НоваяПроводка(); Операция.Дебет.Счет= ТбОперации.ДТ; Операция.Дебет.Субконто(1,ТбОперации.СубконтоДТ); Операция.Дебет.Субконто(2,ТбОперации.Субконто2Д); Операция.Дебет.Субконто(3,ТбОперации.Субконто3Д); Операция.Кредит.Счет= ТбОперации.КТ; Операция.Кредит.Субконто(1,ТбОперации.СубконтоКТ); Операция.Кредит.Субконто(2,ТбОперации.Субконто2К); Операция.Кредит.Субконто(3,ТбОперации.Субконто3К); Операция.Валюта = ТбОперации.Валюта; Операция.Количество = ТбОперации.Кво; Операция.ВалСумма = ТбОперации.ВалСумма; Операция.Сумма = ТбОперации.Сумма; Операция.Комментарий = ТбОперации.Комментарий; Операция.НашаФирма = ТбОперации.Фирма; Операция.НомерЖурнала = ТбОперации.Ж; КонецЦикла; Попытка Операция.Записать(); если Операция.КоличествоПроводок() = 0 Тогда Сообщить("ОШибка_"+БухДокумент); КонецЕсли; Сообщить("Проводки для документа - "+БухДокумент+ " перезаписаны!"); Исключение Сообщить("ОШибка_"+БухДокумент); КонецПопытки; КонецЕсли; КонецПроцедуры Процедура ПриОткрытии() Если ЗагрузитьВнешнююКомпоненту("FormEx.dll") = 0 Тогда Предупреждение("Неудачная попытка загрузить FormEx.dll"); СтатусВозврата(0); Возврат; КонецЕсли; Для х=1 По Метаданные.Документ() Цикл МетДок = Метаданные.Документ(х); Если МетДок.БухгалтерскийУчет=1 Тогда Вид=МетДок.Идентификатор; СпЗнТипДок.ДобавитьЗначение(Вид) КонецЕсли; КонецЦикла; Форма.БухДокумент.НазначитьТип("Документ."+СпЗнТипДок.ПолучитьЗначение(1)); КонецПроцедуры Процедура ВыборТипаДокумента() Форма.БухДокумент.НазначитьТип("Документ."+СпЗнТипДок.ПолучитьЗначение(СпЗнТипДок.ТекущаяСтрока())); КонецПроцедуры Если ЗагрузитьВнешнююКомпоненту("FormEx.dll") = 0 Тогда Предупреждение("Неудачная попытка загрузить FormEx.dll"); КонецЕсли; Операция = СоздатьОбъект("Операция"); ТбОперации.ВставитьКолонку("ДТ",1,,,,"ДТ",10); ТбОперации.ВставитьКолонку("СубконтоДТ",2,"Субконто ДТ",,10,"Субконто ДТ"); ТбОперации.ВставитьКолонку("Субконто2Д",3,,,,"...",10); ТбОперации.ВставитьКолонку("Субконто3Д",4,,,,"...",10); ТбОперации.ВставитьКолонку("КТ",5,"КТ",,10,"КТ",10); ТбОперации.ВставитьКолонку("СубконтоКТ",6,"Субконто КТ",,10,"Субконто КТ"); ТбОперации.ВставитьКолонку("Субконто2К",7,,,,"...",10); ТбОперации.ВставитьКолонку("Субконто3К",8,,,,"...",10); ТбОперации.ВставитьКолонку("Валюта",9,,,,"Валюта",10); ТбОперации.ВставитьКолонку("Курс",10,,,,"Курс",10); ТбОперации.ВставитьКолонку("Кво",11,,,,"Кво",10); ТбОперации.ВставитьКолонку("ВалСумма",12,,,,"ВалСумма",10); ТбОперации.ВставитьКолонку("Сумма",13,,,,"Сумма",10); ТбОперации.ВставитьКолонку("Комментарий",14,,,,"Комментарий",10); ТбОперации.ВставитьКолонку("Фирма",15,,,,"Фирма",10); ТбОперации.ВставитьКолонку("Ж",16,,,,"№Ж",10); Хочу добавить возможность добавление операции вручную. но при выборе Счета нужно для Субконто выставить типы. вот тут не знаю как сделать. |
|||
1
Zmich
27.07.12
✎
14:26
|
(0). Посмотри как это делается в типовой Бухгалтерии для документа ПКО, например.
|
|||
2
zladenuw
27.07.12
✎
14:51
|
а можно узнать какие типы может принимать одно из субконт ?
|
|||
3
Zmich
27.07.12
✎
14:58
|
(2). Назначь тип Неопределенный, при выборе счета используй
НазначитьТип("Субконто1", ВыбрСчет.ВидСубконто(1)); |
|||
4
zladenuw
27.07.12
✎
15:04
|
пробую.
|
|||
5
zladenuw
27.07.12
✎
15:05
|
стоп. а как это сделать для ячейки :)
|
|||
6
zladenuw
27.07.12
✎
15:05
|
так же через fromEx ?
|
|||
7
zladenuw
27.07.12
✎
15:05
|
form*
|
|||
8
Cthulhu
27.07.12
✎
18:26
|
(5),(6): а подумать?.. решение "в лоб", например.
невидимый реквизит неопределенног типа (например, ВыбСубконто). При выборе ВыбСчет-а (например) - назначать ему нужный тип по виду субконто выбранного счета (типа НазначитьТип("ВыбСубконто",ВыбСчет.ВидСубконто(Ном)) ) и читать его ТипЗначенияСтр() и Вид(). например. |
|||
9
zak555
27.07.12
✎
21:42
|
(0) 8шник ?
|
|||
10
zladenuw
28.07.12
✎
02:16
|
да
|
|||
11
zak555
28.07.12
✎
10:09
|
(10) на 8ке тоже типа того пишешь :
ВидСубконто = ?(Строка(ТбОперации.ДТ.ВидСубконто(1))="Виды деятельности","ВидыДеятельности",ТбОперации.ДТ.ВидСубконто(1)); ??? |
|||
12
zladenuw
28.07.12
✎
12:49
|
нет. написал так. потому что вид имеет другое представление и не создавался справочник. а через НазначитьТип не хочет. пишет что нет такой процедуры. как ее вызвать для тз? так же через формЕХ ?
|
|||
13
zak555
28.07.12
✎
12:56
|
(12) см. в (8)
|
|||
14
zladenuw
28.07.12
✎
12:58
|
понял. спасибо
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |