Функции, таблицы значений
01.07.2009
11:06
#1
"Всем приветики
) Извините за беспокойство, я совсем новичок в 1с 7.7. Можно ли так делать или как то нуна по другому? Попросили собрать ОС по 01, 83, 84, 02,..... Я решила каждый счет прописать в функцию, а потом записать все в таблицу значений, а из неё уже выгрузить в отчет.
//_________________________________________________ ____________________________
Функция ПолучитьСумму(БИ,ТекСчет,Формула,ТекЭлСпр)
Рез=0;
БИ.ВыбратьСчета(,,1);
Если БИ.ПолучитьСчет(1,ТекСчет) = 1 Тогда
Если ПустоеЗначение(ТекЭлСпр)=0 Тогда
Если БИ.ПолучитьСубконто(1,1,ТекЭлСпр)=0 Тогда
Возврат Рез;
КонецЕсли;
КонецЕсли;
Если Формула="СНД" Тогда
Рез = БИ.СНД();
ИначеЕсли Формула="СНК" Тогда
Рез = БИ.СНК();
ИначеЕсли Формула="СКК" Тогда
Рез = БИ.СКК();
ИначеЕсли Формула="СКД" Тогда
Рез = БИ.СКД();
ИначеЕсли Формула="КО" Тогда
Рез = БИ.КО();
Если БИ.ПолучитьКорСчет(СчетПоКоду("01",ПланыСчетов.Основной)) = 1 Тогда
Рез=Рез-БИ.КорДО();
КонецЕсли;
Если БИ.ПолучитьКорСчет(СчетПоКоду("83",ПланыСчетов.Основной)) = 1 Тогда
Рез=Рез-БИ.КорДО();
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат Рез;
КонецФункции
//*******************************************
Процедура Сформировать()
БИ = СоздатьОбъект("БухгалтерскиеИтоги");
БИ.ИспользоватьПланСчетов(ПланыСчетов.Основной);
БИ.ВключатьСубсчета(1,1);
БИ.ИспользоватьСубконто(ВидыСубконто.ОсновныеСредства);
Таб=СоздатьОбъект("Таблица");
ТабЗнач=СоздатьОбъект("ТаблицаЗначений");
ТабЗначИтог=СоздатьОбъект("ТаблицаЗначений");
Таб.ИсходнаяТаблица("Таблица");
// Создадим структурированную таблицу
ТабЗнач = СоздатьОбъект ("ТаблицаЗначений");
ТабЗнач.НоваяКолонка("ОС","Число",19,2);
ТабЗнач.НоваяКолонка("Первонач","Число",19,2);
ТабЗнач.НоваяКолонка("Реконструкция","Число",19,2);
ТабЗнач.НаимОС = БИ.Субконто(ВидыСубконто.ОсновныеСредства).Наименование;
ТабЗнач.ПервоначСтоим = ПолучитьСумму(БИ,"83","КО",ТабЗнач);
ТабЗнач.Реконструкция = ПолучитьСумму(БИ,"01","КО",ТабЗнач);
КонецПроцедуры
"
//_________________________________________________
Функция ПолучитьСумму(БИ,ТекСчет,Формула,ТекЭлСпр)
Рез=0;
БИ.ВыбратьСчета(,,1);
Если БИ.ПолучитьСчет(1,ТекСчет) = 1 Тогда
Если ПустоеЗначение(ТекЭлСпр)=0 Тогда
Если БИ.ПолучитьСубконто(1,1,ТекЭлСпр)=0 Тогда
Возврат Рез;
КонецЕсли;
КонецЕсли;
Если Формула="СНД" Тогда
Рез = БИ.СНД();
ИначеЕсли Формула="СНК" Тогда
Рез = БИ.СНК();
ИначеЕсли Формула="СКК" Тогда
Рез = БИ.СКК();
ИначеЕсли Формула="СКД" Тогда
Рез = БИ.СКД();
ИначеЕсли Формула="КО" Тогда
Рез = БИ.КО();
Если БИ.ПолучитьКорСчет(СчетПоКоду("01",ПланыСчетов.Основной)) = 1 Тогда
Рез=Рез-БИ.КорДО();
КонецЕсли;
Если БИ.ПолучитьКорСчет(СчетПоКоду("83",ПланыСчетов.Основной)) = 1 Тогда
Рез=Рез-БИ.КорДО();
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат Рез;
КонецФункции
//*******************************************
Процедура Сформировать()
БИ = СоздатьОбъект("БухгалтерскиеИтоги");
БИ.ИспользоватьПланСчетов(ПланыСчетов.Основной);
БИ.ВключатьСубсчета(1,1);
БИ.ИспользоватьСубконто(ВидыСубконто.ОсновныеСредства);
Таб=СоздатьОбъект("Таблица");
ТабЗнач=СоздатьОбъект("ТаблицаЗначений");
ТабЗначИтог=СоздатьОбъект("ТаблицаЗначений");
Таб.ИсходнаяТаблица("Таблица");
// Создадим структурированную таблицу
ТабЗнач = СоздатьОбъект ("ТаблицаЗначений");
ТабЗнач.НоваяКолонка("ОС","Число",19,2);
ТабЗнач.НоваяКолонка("Первонач","Число",19,2);
ТабЗнач.НоваяКолонка("Реконструкция","Число",19,2);
ТабЗнач.НаимОС = БИ.Субконто(ВидыСубконто.ОсновныеСредства).Наименование;
ТабЗнач.ПервоначСтоим = ПолучитьСумму(БИ,"83","КО",ТабЗнач);
ТабЗнач.Реконструкция = ПолучитьСумму(БИ,"01","КО",ТабЗнач);
КонецПроцедуры
"
01.07.2009
13:36
#2
"Может и так будет работать, но я бы проще делал, наверное. Кстати, у вас ниака не задан период, за который вы желаете получить сведения.
Сч01_1=СчетПоКоду("01.1");
Сч02_1=СчетПоКоду("02.1");
БухИт=СоздатьОбъект("БухгелтерскиеИтоги");
БухИт.ИспользоватьСубконто(ВидыСубконто.ОсновныеСредства);
БухИт.ВыполнитьЗапрос(,НужнаяДата,"01.1,02.1");
БухИт.ВыбратьСубконто(ВидыСубконто.ОсновныеСредства);
Пока БухИт.ПолучитьСубконто(ВидыСубконто.ОсновныеСредства)=1 Цикл
БалансоваяСтоимость=0;
Износ=0;
Если БухИт.ПолучитьСчет(,Сч01_1)=1 Тогда
БалансоваяСтоимость=БухИт.СКД();
КонецЕсли;
Если БухИт.ПолучитьСчет(,Сч02_1)=1 Тогда
Износ=БухИт.СКК();
КонецЕсли;
Если (БалансоваяСтоимость<>0) ИЛИ (Износ<>0) Тогда
Таб.ВывестиСекцию("Строка"); //вывод сведений в какую нибудь таблицу
КонецЕсли;
КонецЦикла;
P.S. Как связаны основные средства и счета 83, 84? Если у вас меняный план счетов и там в самом деле что то есть по основным, то измените мой алгоритм, добавив туда их"
Сч01_1=СчетПоКоду("01.1");
Сч02_1=СчетПоКоду("02.1");
БухИт=СоздатьОбъект("БухгелтерскиеИтоги");
БухИт.ИспользоватьСубконто(ВидыСубконто.ОсновныеСредства);
БухИт.ВыполнитьЗапрос(,НужнаяДата,"01.1,02.1");
БухИт.ВыбратьСубконто(ВидыСубконто.ОсновныеСредства);
Пока БухИт.ПолучитьСубконто(ВидыСубконто.ОсновныеСредства)=1 Цикл
БалансоваяСтоимость=0;
Износ=0;
Если БухИт.ПолучитьСчет(,Сч01_1)=1 Тогда
БалансоваяСтоимость=БухИт.СКД();
КонецЕсли;
Если БухИт.ПолучитьСчет(,Сч02_1)=1 Тогда
Износ=БухИт.СКК();
КонецЕсли;
Если (БалансоваяСтоимость<>0) ИЛИ (Износ<>0) Тогда
Таб.ВывестиСекцию("Строка"); //вывод сведений в какую нибудь таблицу
КонецЕсли;
КонецЦикла;
P.S. Как связаны основные средства и счета 83, 84? Если у вас меняный план счетов и там в самом деле что то есть по основным, то измените мой алгоритм, добавив туда их"
01.07.2009
15:15
#3
"в этом месте они завязываются между собой или нет, т.е. каждый независимо выгружать в будущем можно?
БухИт.ВыполнитьЗапрос(,НужнаяДата,"01.1,02.1");
"
БухИт.ВыполнитьЗапрос(,НужнаяДата,"01.1,02.1");
"
01.07.2009
15:49
#4
"выгружать в будущем можно:
БухИт.ВыбратьСчета();
Пока БухИт.ПолучитьСчет()=1 Цикл
...
будет перебор итогов по каждому счету. если обратиться к БухИт.ХХХХ() до проведения выборки (до ВыбратьСчета())или до прямого позиционирования (ПолучитьСчет()), то получим "завязываются между собой", а конкретнее - сводный остаток или оборот. В общем и то и другое можно достать"
БухИт.ВыбратьСчета();
Пока БухИт.ПолучитьСчет()=1 Цикл
...
будет перебор итогов по каждому счету. если обратиться к БухИт.ХХХХ() до проведения выборки (до ВыбратьСчета())или до прямого позиционирования (ПолучитьСчет()), то получим "завязываются между собой", а конкретнее - сводный остаток или оборот. В общем и то и другое можно достать"
01.07.2009
16:22
#5
"Если мне нужно к примеру так:
первоначальная стоимость = ДО(01);
амортизация = КО(02)
переоценка = Д01 К83
и т.д. Если брать из твоего примера:
Сч01_1=СчетПоКоду("01.1");
Сч02_1=СчетПоКоду("02.1");
Сч83=СчетПоКоду("83");
БухИт=СоздатьОбъект("БухгелтерскиеИтоги");
БухИт.ИспользоватьСубконто(ВидыСубконто.ОсновныеСредства);
БухИт.ВыполнитьЗапрос(,НужнаяДата,"01.1,02.1"); здесь все счета описывать?? или здесь написать БухИт.ВыбратьСчета("перечислить тут все счета");
БухИт.ВыбратьСубконто(ВидыСубконто.ОсновныеСредства);
Пока БухИт.ПолучитьСубконто(ВидыСубконто.ОсновныеСредства)=1 Цикл
БалансоваяСтоимость=0;
Износ=0;
переоценка = 0;
Если БухИт.ПолучитьСчет(,Сч01_1)=1 Тогда
БалансоваяСтоимость=БухИт.СКД();
КонецЕсли;
Если БухИт.ПолучитьСчет(,Сч02_1)=1 Тогда
Износ=БухИт.СКК();
КонецЕсли;
Если БухИт.ПолучитьСчет(,Сч83)=1 Тогда
Износ=БухИт.СКК();
КонецЕсли;
Если (БалансоваяСтоимость<>0) ИЛИ (Износ<>0) Тогда
Таб.ВывестиСекцию("Строка"); //вывод сведений в какую нибудь таблицу
КонецЕсли;
КонецЦикла;
"
первоначальная стоимость = ДО(01);
амортизация = КО(02)
переоценка = Д01 К83
и т.д. Если брать из твоего примера:
Сч01_1=СчетПоКоду("01.1");
Сч02_1=СчетПоКоду("02.1");
Сч83=СчетПоКоду("83");
БухИт=СоздатьОбъект("БухгелтерскиеИтоги");
БухИт.ИспользоватьСубконто(ВидыСубконто.ОсновныеСредства);
БухИт.ВыполнитьЗапрос(,НужнаяДата,"01.1,02.1"); здесь все счета описывать?? или здесь написать БухИт.ВыбратьСчета("перечислить тут все счета");
БухИт.ВыбратьСубконто(ВидыСубконто.ОсновныеСредства);
Пока БухИт.ПолучитьСубконто(ВидыСубконто.ОсновныеСредства)=1 Цикл
БалансоваяСтоимость=0;
Износ=0;
переоценка = 0;
Если БухИт.ПолучитьСчет(,Сч01_1)=1 Тогда
БалансоваяСтоимость=БухИт.СКД();
КонецЕсли;
Если БухИт.ПолучитьСчет(,Сч02_1)=1 Тогда
Износ=БухИт.СКК();
КонецЕсли;
Если БухИт.ПолучитьСчет(,Сч83)=1 Тогда
Износ=БухИт.СКК();
КонецЕсли;
Если (БалансоваяСтоимость<>0) ИЛИ (Износ<>0) Тогда
Таб.ВывестиСекцию("Строка"); //вывод сведений в какую нибудь таблицу
КонецЕсли;
КонецЦикла;
"
01.07.2009
16:25
#6
И еще чтобы прописать проводку - Д01 К83 через БИ.ОБ или СКК(83). Как будет правильнее?
01.07.2009
18:21
#7
"> первоначальная стоимость = ДО(01);
> амортизация = КО(02)
> переоценка = Д01 К83
почему "первоначальная стоимость" = ДО()? ДО - дебетовый оборот! Это изменение балансовой стоимости за какой то период. То есть, по сути "приобретенные основные средства с НачДата по КонДата".
Читаем описания функций класса "БухгалтерскиеИтоги":
СНД() - сальдо начальное дебетовое
СНК() - сальдо начальное кредитовое
ДО() - дебетовый оборот
...
короче, надо ознакомиться с тем что такое план счетов и что означает признак у счета "Активный", "Пассивный", "Активно-Пассивный". Именно это позволит вам понять то ли брать нам дебетовый, то ли кредитовый остаток. В двух словах: для активных счетов берем дебетовый, для пассивных - кредитовый, для активно-пассивных я делаю "дебетовый минус кредитовый".
Кроме того, надо пообщаться с бухгалтером, чтобы она рассказала элементарные принципы ведения учета. На это надо 10 минут, это позволит вам понять в каких ситуациях мы должны обращаться к остаткам (к сальдо), а в каких к оборотам.
Теперь к делу:
> БухИт.ВыполнитьЗапрос(,НужнаяДата,"01.1,02.1"); здесь все счета описывать?? или здесь написать БухИт.ВыбратьСчета("перечислить тут все счета");
читаем желтую книжку, с чего вы решили, что конструкция БухИт.ВыбратьСчета("перечислить тут все счета"); имеет смысл?
ВыбратьСчета(>,,,)
Синтаксис:
ВыбратьСчета(<ФлагВсе>,<ФлагДК>,<Номер>,<РазвСальдо>)
Куда вы тут счета напишете? Надо так:
БухИт.ВыполнитьЗапрос(,НужнаяДата,"01.1,02.1");// тут пишем ВСЕ НУЖНЫЕ для нашей задачи счета, по которым нужно получить остатки. Если нам нужно получить переоценку, я так понял, что для вас это обороты вида Д01.1 - К83. Для такого нужен не такой запрос, причем он имеет смысл только для какого то диапазона
БухИт.ВыполнитьЗапрос(НачДата,КонДата,"01.1","83",,2); //читайте в ЖКК что означает 2
"
> амортизация = КО(02)
> переоценка = Д01 К83
почему "первоначальная стоимость" = ДО()? ДО - дебетовый оборот! Это изменение балансовой стоимости за какой то период. То есть, по сути "приобретенные основные средства с НачДата по КонДата".
Читаем описания функций класса "БухгалтерскиеИтоги":
СНД() - сальдо начальное дебетовое
СНК() - сальдо начальное кредитовое
ДО() - дебетовый оборот
...
короче, надо ознакомиться с тем что такое план счетов и что означает признак у счета "Активный", "Пассивный", "Активно-Пассивный". Именно это позволит вам понять то ли брать нам дебетовый, то ли кредитовый остаток. В двух словах: для активных счетов берем дебетовый, для пассивных - кредитовый, для активно-пассивных я делаю "дебетовый минус кредитовый".
Кроме того, надо пообщаться с бухгалтером, чтобы она рассказала элементарные принципы ведения учета. На это надо 10 минут, это позволит вам понять в каких ситуациях мы должны обращаться к остаткам (к сальдо), а в каких к оборотам.
Теперь к делу:
> БухИт.ВыполнитьЗапрос(,НужнаяДата,"01.1,02.1"); здесь все счета описывать?? или здесь написать БухИт.ВыбратьСчета("перечислить тут все счета");
читаем желтую книжку, с чего вы решили, что конструкция БухИт.ВыбратьСчета("перечислить тут все счета"); имеет смысл?
ВыбратьСчета(>,,,)
Синтаксис:
ВыбратьСчета(<ФлагВсе>,<ФлагДК>,<Номер>,<РазвСальдо>)
Куда вы тут счета напишете? Надо так:
БухИт.ВыполнитьЗапрос(,НужнаяДата,"01.1,02.1");// тут пишем ВСЕ НУЖНЫЕ для нашей задачи счета, по которым нужно получить остатки. Если нам нужно получить переоценку, я так понял, что для вас это обороты вида Д01.1 - К83. Для такого нужен не такой запрос, причем он имеет смысл только для какого то диапазона
БухИт.ВыполнитьЗапрос(НачДата,КонДата,"01.1","83",,2); //читайте в ЖКК что означает 2
"
01.07.2009
18:54
#8
Что за желтая книжка? и ЖКК??
тогда будет много запросов?
Мне хотелось в один запрос их все пройти, разделить не могу так как всего в отчете 30 колонок
(
тогда будет много запросов?
Мне хотелось в один запрос их все пройти, разделить не могу так как всего в отчете 30 колонок
УПП 1.2.19.1 заполнение документа "Регитстрация оплат от покупателей для НДС"Как обновить, не удаляя данные
Читают тему
(гостей: 1)