Консультация № 171430
17.08.2009, 18:46
0.00 руб.
0 8 4
Здравствуйте уважаемые эксперты!
Имеется база 1с77 Бухгалтерия с 2000 года, нужно все остатки по бух. счетам номенклатура (41) и материалы (10), перенести в новую базу. Подскажите как это лучше сделать и возможно ли перенести остатки без нулевого, т.е. вспомогательного счета?

Обсуждение

Неизвестный
17.08.2009, 21:25
общий
это ответ
Здравствуйте, Imperator. Счета 41 и 10 являются балансовыми т.е. обязательно наличие второго корреспондирующего БАЛАНСОВОГО счета. А что вы поставите вместо нулевого счета ? Т.е. корреспондирующий счет указывает откуда вы взяли эти товары и материалы. Ну например если в качестве корреспондирующего счета поставить 80-ый счет то получится , что эти товары и материалы взнос в уставной капиталл учредителей предприятия и т.п. Поговорите с бухгалтером что она предложит. По поводу переноса в другую базу то у 1С готовые обработоки отсутствуют(что то подобное обработка свертки счетов WRAP.ERT на диске ИТС. Сделать копию базы , свернуть все счета и лишнее потом можно удалить). Задайте здесь платное задание или попробуте поискать например на www.infostart.ru. Удачи !!!
5
Спасибо за ответ! Вот про это я и говорю бухгалтеру. Попробую предложенную вами обработку.
Неизвестный
17.08.2009, 22:07
общий
Вот я и задал вопрос, бухгалтер говорит что для налоговой проверки это не правильно, вспомогательный счет, а других путей я тоже не вижу
Неизвестный
17.08.2009, 23:36
общий
Imperator:
Воспользуйтесь советом Астафьева Александра Николаевича - используйте обработку по свертке базы.

Обычно в типовых конфигурациях она есть:
  • Сервис - Дополнительные возможности - Свертка бух. итогов
  • Указать корреспондирующий счет, обычно это 00 (опять - посоветуйтесь с бухгалтером).
  • Указать, на какую дату должны быть свернуты остатки и что делать с исходными документами.
    Если у Вас типовая конфигурация, прочтите описание в обработке или в руководстве.


Золотое правило: Обязательно пробуйте на копии!

Перенести данные между базами можно с помощью обработок, взять их можно на infostart.ru (форма поиска)

Если возникнут затруднения со скачиванием с инфостарта - помогу.
Неизвестный
18.08.2009, 10:10
общий
10.09.2009, 16:32
это ответ
Здравствуйте, Imperator.

Вот фрагмент моей обработки переноса. Для Вас, скорее всего, потребуются изменения в зависимости от аналитики по счетам. Но принцип Вы поймете. Если не поймете - НИ В КОЕМ СЛУЧАЕ НЕ ДЕЛАЙТЕ ЭТО САМИ!!!!!

Общее пояснение - к объектам подключенной базы можно обращаться так же, как и обычно - СпрМатСтар=Стар.CreateObject("Справочник.Материалы");
Где Стар=СоздатьОбъект("V77.Application");. Только надо учитывать, что по OLE передаются только объекты простых типов - ссылки на значения не смогут передаться т.к. они в области объектов подключаемой базы - к ним надо обращаться в ее области.

Приложение:
//Подключение второй базы через механизм OLE
Стар=СоздатьОбъект("V77.Application");
Если Стар.Initialize(Стар.RMTrade, "", "NO_SPLASH_SHOW") = -1 Тогда
Состояние("База успешно подключена!");
Иначе
Сообщить("База не подключена!");
Возврат;
КонецЕсли;

//Собственно перенос материалов - сч10

СпрСотрНов=СоздатьОбъект("Справочник.Сотрудники");
СпрМат=СоздатьОбъект("Справочник.Материалы");
СпрМат1=СоздатьОбъект("Справочник.Материалы");
СпрМатСтар=Стар.CreateObject("Справочник.Материалы");
СпрЕД=СоздатьОбъект("Справочник.ЕдиницыИзмерений");
СпрЕДСтар=Стар.CreateObject("Справочник.ЕдиницыИзмерений");
Счет=СоздатьОбъект("Счет");
СпрСКЛстар=Стар.CreateObject("Справочник.МестаХранения");
СпрСК=СоздатьОбъект("Справочник.МестаХранения");
НачатьТранзакцию();
СпрСКЛстар.ВыбратьЭлементы(0);
Пока СпрСКЛстар.ПолучитьЭлемент() = 1 Цикл
СпрСК.Новый();
СпрСК.Код = Число(СпрСКЛстар.Код);
СпрСК.Наименование = СокрЛП(СпрСКЛстар.Наименование);
СпрСотрНов.НайтиПоКоду(Число(СпрСКЛстар.МОЛ.Код));
СпрСК.МОЛ=СпрСотрНов.ТекущийЭлемент();
СпрСК.Записать();
КонецЦикла;

СпрЕД.ВыбратьЭлементы();
Пока СпрЕД.ПолучитьЭлемент() = 1 Цикл
СпрЕД.Удалить(1);
КонецЦикла;
СпрЕДСтар.ВыбратьЭлементы();
Пока СпрЕДСтар.ПолучитьЭлемент() = 1 Цикл
Если СпрЕД.НайтиПоНаименованию(СокрЛП(СпрЕДСтар.Наименование))=0 Тогда
СпрЕД.Новый();
СпрЕД.Код = Число(СпрЕДСтар.Код);
СпрЕД.Наименование = СокрЛП(СпрЕДСтар.Наименование);
СпрЕД.НаименованиеПолное = СокрЛП(СпрЕДСтар.ПолнНаименование);
СпрЕД.КоличествоВЕдинице = 1;
СпрЕД.Записать();
КонецЕсли;
КонецЦикла;
СпрМат.ИспользоватьДату(ДатаОст);
СпрМатСтар.ВыбратьЭлементы(0);
Пока СпрМатСтар.ПолучитьЭлемент() = 1 Цикл
Если СпрМатСтар.ЭтоГруппа()=1 Тогда
СпрМат.НоваяГруппа();
СпрМат.Код = Число(СпрМатСтар.Код);
СпрМат.Наименование = СокрЛП(СпрМатСтар.Наименование);
СпрМат.Записать();
Иначе
СпрМат.Новый();
СпрМат.Код = Число(СпрМатСтар.Код);
СпрМат.Наименование = СокрЛП(СпрМатСтар.Наименование);
СпрЕД.НайтиПоКоду(Число(СпрМатСтар.ЕдиницаИзмерения));
СпрМат.ЕдиницаИзмерения = СпрЕД.ТекущийЭлемент();
СпрМат.ЦенаУчетная = СпрМатСтар.Цена;
Если Счет.НайтиПоКоду(СпрМатСтар.СубСчет10.Код)=1 Тогда
СпрМат.Счет = Счет.ТекущийСчет();
КонецЕсли;

//СпрМат.Ед = ;
СпрМат.ЦенаОптовая = СпрМатСтар.Цена;
//СпрМат.СтавкаТаможеннойПошлины = ;
//СпрМат.МассаБрутто = ;
//СпрМат.Упаковка = ;
//СпрМат.Документ = ;
//СпрМат.Артикул = ;
//СпрМат.ДрагМеталлыПоПаспорту = ;
//СпрМат.ВидТоплива = ;
//СпрМат.ФлагТСМ = ;
//СпрМат.УчетнаяЦенаТоплива = ;
СпрМат.Записать();
Сообщить("Создан "+СпрМат.Наименование);
КонецЕсли;
КонецЦикла;

СпрМатСтар.ВыбратьЭлементы(0);
Пока СпрМатСтар.ПолучитьЭлемент() = 1 Цикл
Если СпрМатСтар.Родитель.Выбран()=1 Тогда
СпрМат.НайтиПоКоду(Число(СпрМатСтар.Код));
Если СпрМат1.НайтиПоКоду(Число(СпрМатСтар.Родитель.Код))=1 Тогда
СпрМат.Родитель=СпрМат1.ТекущийЭлемент();
СпрМат.Записать();
Сообщить(СпрМат.Наименование+" перенесен в группу "+СпрМат1.Наименование);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию();
// Перенос 10
Опер=СоздатьОбъект("Операция");
Опер.Новая();
Опер.ДатаОперации=ДатаОст;
Опер.Содержание="Ввод остатков материалов";
БИстар=Стар.CreateObject("БухгалтерскиеИтоги");
БИстар.ИспользоватьСубконто("Материалы");
БИстар.ИспользоватьСубконто("МестаХранения");
БИстар.ВключатьСубсчета();
БИстар.ВыполнитьЗапрос(,ДатаОст,"10");
БИстар.ВыбратьСчета(1);
Пока БИстар.ПолучитьСчет()=1 Цикл
Если (Лев(БИстар.Счет.Код,5)="10.12") ИЛИ (БИстар.Счет.Код="10.3.3") Тогда
Продолжить;
КонецЕсли;
БИстар.ВыбратьСубконто(1);
Пока БИстар.ПолучитьСубконто(1)=1 Цикл
СпрМат.НайтиПоКоду(Число(БИстар.Субконто(1).Код));
БИстар.ВыбратьСубконто(2);
Пока БИстар.ПолучитьСубконто(2)=1 Цикл
СпрСК.НайтиПоКоду(Число(БИстар.Субконто(2).Код));
Если БИстар.СКД()>0 Тогда
Опер.НоваяПроводка();
Опер.Дебет.Счет = СчетПоКоду(БИстар.Счет.Код);
Опер.Дебет.Субконто(1, СпрСК.ТекущийЭлемент());
Опер.Дебет.Субконто(2, СпрМат.ТекущийЭлемент());
Опер.Кредит.Счет = СчетПоКоду("00");
Опер.Сумма = БИстар.СКД("С");
Опер.Количество = БИстар.СКД("К");;
Опер.СодержаниеПроводки = "ввод остатков";
ИначеЕсли БИстар.СКК()>0 Тогда
Опер.НоваяПроводка();
Опер.Кредит.Счет = СчетПоКоду(БИстар.Счет.Код);
Опер.Кредит.Субконто(1, СпрСК.ТекущийЭлемент());
Опер.Кредит.Субконто(2, СпрМат.ТекущийЭлемент());
Опер.Дебет.Счет = СчетПоКоду("00");
Опер.Сумма = БИстар.СКК("С");
Опер.Количество = БИстар.СКК("К");;
Опер.СодержаниеПроводки = "ввод остатков";
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Опер.Записать();
5
Спасибо за ответ! Идеальное решение, сам пользуюсь ОЛЕ обработкой по переносу документов, буду изучать ваш код по переносу остатков.
Неизвестный
18.08.2009, 19:09
общий
Imperator:
Этот пример создавался для переноса остатков из конфигурации для Белоруссии типовой в нашу разработку.
Есть еще модули для переноса счетов оплат и и всяких справочников. Но я думаю, сами напишите. Все просто - из одного берем, в другой соответственно пишем.
Только не забываем про ТИПЫ данных. Всегда передаются только простые типы.
Неизвестный
19.08.2009, 08:20
общий
21.08.2009, 12:16
это ответ
Здравствуйте, Imperator.
Существует такая конфигурация конвертация данных, в нее загружаете описание конфигураций источники и приемника и создаете правила переноса данных. Очень проста в работе, есть все справки и описания.
Неизвестный
20.08.2009, 13:40
общий
Я по OLE кроме простых типов еще и перечисления читаю - у меня ТиС и периодически режу базу.
Неизвестный
21.08.2009, 02:50
общий
это ответ
Здравствуйте, Imperator!

В дополнение к прошлым ответам:
Обычно 0 счет всегда присутствует при вводе остатков, при чем остатки должны быть введены последней датой раньше, чем вводимый период (например, 31.12.2009, для работы с 2010). Поэтому это никак не влияет на баланс периода. Когда по все остатки введены, по 0 счету проверяют правильно ли введены остатки, а точнее 0 счет должен быть закрыт на 1 число, то есть его просто не должно быть. Если он не закрыт, значит что-то введено не верно.

С уважением, maska!

Форма ответа