Имя: Пароль:
1C
1C 7.7
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
понял. спасибо
Независимо от того, куда вы едете — это в гору и против ветра!