gifts2017

Загрузка документов "Операция" по счетам из Excel за период

Опубликовал Vit IVA (1vasia1) в раздел Обработки - Обработка документов

Внешняя обработка для 1С 8.2 УПП
Должна работать и БП (не проверял)

Стояла задача слить две базы только по движениям БУ за период по всем счетам бух. учета. База-источник - Бухгалтерия 7.7, база-приемник УПП 8.2. Остатки из 7.7 были выгружены через XML-обмен по правилам конвертации с сайта http://users.v8.1c.ru/. А вот с оборотами там конфуз получился )). Как оказалось, их там просто нет.

Парсить XML времени и желания особого не было т.к требовали обороты "вчера". Было принято решение выгрузить все движения из 7.7 в Excel и загрузить в УПП 8.2 документ ОперацияБух (бухгалтеров данный факт устраивал).

Была написана обработка загрузки из Excel по различным счетам учета, т.е обработка по счету получает субконто и определяет СправочникМенеджер или ПеречислениеМенеджер. Далее ищет ссылку в нужном справочнике или перечислении на субконто по наименованию для занесения в документ ОперацияБух и регистр бухгалтерии.

Скачать файлы

Наименование Файл Версия Размер
Загрузка ОперацияБух по счетам из Excel за период 122
.zip 17,77Kb
06.10.11
122
.zip 17,77Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Igоr Sаulеviсh (gutentag) 07.10.11 10:51
Нет, в Бухгалтерии-2.0 не работает, а жаль очень нужная и полезная вещь в жизни простого бухгалтера!
Буду очень признателен, если доработете обработку для бух-2.0
Спасибо!
---
..Обработка открывается, но выдает ошибку:
{Форма.Форма.Форма(112)}: Получение элемента по индексу для значения не определено
Перечисление = Перечисления[Соответствие1.Получить(ТекСубконто.ВидСубконто.ТипЗначения.Типы()[0])];
2. Vit IVA (1vasia1) 08.10.11 08:13
Я попробую доделать ее и для бухгалтерии
Обработка будет скорее такойже но с флагом выбора (УПП vs БП) :)
Как скоро вам это нужно?
Сейчас просто голова другим заболела :)
3. Igоr Sаulеviсh (gutentag) 10.10.11 00:09
(2) После 20-ого числа потребуется, но в любом случае, готов и далее потерпеть :) :)
Я в экселе делаю расчеты для производственного учета и по их данным, я операциями закрываю 25-счет(а ранее и 26-счет), распределяя его по заказам в дебет 20-счета.
---
спасибо!
4. Vit IVA (1vasia1) 11.10.11 14:24
Я проверил обработку на своем релизе (Бухгалтерия предприятия, редакция 2.0 (2.0.24.10)).
Все работает без доработки. :):)
5. Vit IVA (1vasia1) 11.10.11 14:32
1. Наверняка у вас с субконто проблема. Поверьте соответствие ваших столбцов в xls и шаблона который я выкладывал!
2. Проверьте, что субконто в excel совпадает по Наименованию(НЕ КОДУ) с субконто в (Справочнике или Перечислении).
Должно работать.
Напишите как тест прошел :).
Или пришлите мне пример своего файла.
6. Vit IVA (1vasia1) 01.11.11 16:23
Да забыл сказать обработина грузит по субконто(справочники и перечисления)
но не субконто-документы.
7. Serg Sokoloff (Sykoky) 10.02.12 16:24
Ага, грузит, аж 2 раза.

Ляп №1 - сбита нумерация колонок создаваемого DBF-файла и Excel'я начиная с Дебета.
Ляп №2 - при отсутствии выборки корректного счета смысл пытаться дальше что-то делать.
Ляп №3 - 1С 7.7 выгружает счет в виде (хх.уу.яя). А в 8-ке точки где-то есть в плане счетов?
Ляп №4 - при отсутствии найденного элемента Субконто торжественно пишем пустоту.

Полдня потратил, пока нашел/исправил.

Замечания к логике.
1. Искать субконто лучше по коду/полному коду. Наименования, особенно в Товаре, могут и повторяться.

Рекомендации.
1.Лучше выгрузку делать не одним гигантским фалом, а разбить по счетам/операциям - проще контролировать суммы и обороты, когда ищешь сбой.
2. Если делать выгрузку кода, а не наименования, то размер поля придется увеличить. Да и поиск по более короткой строке, а тем более по числу, выполняется намного шустрее...
8. Serg Sokoloff (Sykoky) 10.02.12 16:26
P.S.

Для конфы УТП еще необходимо заменить вызов
БухгалтерскийУчет.УстановитьСубконто
на
ОбщегоНазначения.УстановитьСубконто
9. Serg Sokoloff (Sykoky) 11.02.12 21:42
Ляп №5 - В 8-ке 4-ре Субконто, а в 7-ке три. А счетчик субконто проверяется на "1", "2", а вот на "3" кто-то забыл, т.е. в следующем цикле Субконто_3 = "", т.к. из файла его не загрузить.

Кстати, проверка субконто идет только на справочники и перечисления. А если это партия?
10. Serg Sokoloff (Sykoky) 12.02.12 15:20
Надоело исправлять ошибки, переписал на скорую руку.
Следующий код необходимо вставить ВМЕСТО процедуры КнопкаВыполнитьНажатие




Перем ЛистExcel;

Процедура ЗаписьДанных(СтрокаExcel, СубТип, СубКод, Счет, Субконто, Сообщать=Ложь, Д_К = "Д")
СчЦикла = 0;

Для каждого ТекСубконто Из Счет.ВидыСубконто Цикл

СубкДт = ЛистExcel.Cells(СтрокаExcel,СубТип+СчЦикла).Value;
КодДт = ЛистExcel.Cells(СтрокаExcel,СубКод+СчЦикла).Value;
СчЦикла = СчЦикла + 1;

Если (СокрЛП(КодДт) = Неопределено) Тогда
Если Сообщать Тогда
сообщить("Параметр №"+СчЦикла+" пуст");
КонецЕсли;
Продолжить;
КонецЕсли;
Попытка
СДт = Справочники[Соответствие.Получить(ТекСубконто.ВидСубконто.ТипЗначения.Типы()[0])].НайтиПоКоду(КодДт, Истина);
Если СДт = Неопределено Тогда
Сообщить("Не найдено " + Д_К + СчЦикла + " субконто "+ КодДт);
Иначе
// Сообщить("Найдено Д" + СчЦикла + " субконто " + КодДт + " " + СДт);
КонецЕсли;
Исключение
Попытка
Перечисление = Перечисления[Соответствие1.Получить(ТекСубконто.ВидСубконто.ТипЗначения.Типы()[0])];
СДт = ПолучитьЗначениеПеречисления(СубкДт, Перечисление);
Исключение
Попытка
СДт = Документы.Партия.НайтиПоНомеру(КодДт);
// Если НЕ СДт.Пустая() Тогда
// КонецЕсли;
Исключение
Сообщить("Ошибка субконто " + Д_К + СчЦикла + КодДт);
КонецПопытки;
КонецПопытки;
КонецПопытки;

Попытка
ОбщегоНазначения.УстановитьСубконто(Счет, Субконто, СчЦикла, СДт, Сообщать);
Исключение
Сообщить("Не установлен " + Д_К + СчЦикла);
КонецПопытки;

Если СчЦикла=3 Тогда
Прервать; // В 7-ке из всего 3
КонецЕсли;

КонецЦикла;

КонецПроцедуры

Процедура КнопкаВыполнитьНажатие(Кнопка)

СоздатьТипы();

Попытка
Файл = ПолучитьCOMОбъект(ПутьКФайлу);
Исключение
Предупреждение("На компе не установлен Excel.");
Возврат
КонецПопытки;

xlCellTypeLastCell = 11;
ЛистExcel = Файл.Sheets(1);
ПоследняяСтрокаExcel = ЛистExcel.Cells.SpecialCells(xlCellTypeLastCell).Row;

Если ПоследняяСтрокаExcel < НомерПервойСтроки Тогда
Предупреждение("НЕ ВЕРНО указана первая строка или в файле Excel первая закладка пуста.");
Возврат;
КонецЕсли;


СтарДатаВремя = "20111231000001"; //********* времянка на 1-й цикл.

НачатьТранзакцию();
СчетчикЦикла = 0;

Для СтрокаExcel = НомерПервойСтроки По ПоследняяСтрокаExcel Цикл
СчетчикЦикла = СчетчикЦикла +1;
Состояние("Строка "+СчетчикЦикла+" из "+ПоследняяСтрокаExcel);

ОбработкаПрерыванияПользователя();


// ***************** Определение строк Excel
ДатаИзXLS = ЛистExcel.Cells(СтрокаExcel,1).Value; // Тут у меня дата такого формата 01.01.2010 и далее нужно ее перевести в формат 1С
СчДт = ЛистExcel.Cells(СтрокаExcel,4).Value;
СчДт = СтрЗаменить(СчДт,".","");
СчКт = ЛистExcel.Cells(СтрокаExcel,5).Value;
СуммаОперации = ЛистExcel.Cells(СтрокаExcel,6).Value;
Количество = ЛистExcel.Cells(СтрокаExcel,26).Value;
Содержание = ЛистExcel.Cells(СтрокаExcel,27).Value;
// ******************


РазделительСтрок = Символы.ПС; // Получим нужный формат даты (20100101230000) из (01.01.2010)
Результат = СтрЗаменить(ДатаИзXLS, ".", РазделительСтрок);
День = СокрЛП(СтрПолучитьСтроку(Результат, 1));
Месяц = СокрЛП(СтрПолучитьСтроку(Результат, 2));
Год = Лев(СокрЛП(СтрПолучитьСтроку(Результат, 3)), 4);
Время = "000001";

ДатаВремя = Год+Месяц+День+Время;

Если СтарДатаВремя <> ДатаВремя
Тогда
Док = Документы.ОперацияБух.СоздатьДокумент();
Док.Дата = ДатаВремя;
Док.Организация = Организация;
Док.Содержание = Содержание;
Док.Ответственный = Ответственный;
Док.Записать();

НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Значение = Док.Ссылка;
НаборЗаписей.Отбор.Регистратор.Использование = Истина;

Сообщить("Создан документ ОперацияБух № " + Док.Ссылка);
КонецЕсли;

Движения = НаборЗаписей.Добавить();
Движения.Регистратор = Док.Ссылка;
Движения.Период = Док.Дата;
Движения.Организация = Док.Организация;

Движения.СчетДт = ПланыСчетов.Хозрасчетный.НайтиПоКоду(СчДт);
Движения.СчетКт = ПланыСчетов.Хозрасчетный.НайтиПоКоду(СчКт);
Движения.КоличествоДт = Количество;
Движения.КоличествоКт = Количество;
Движения.Сумма = СуммаОперации;


// ******************************

ЗаписьДанных(СтрокаExcel, 7, 20, Движения.СчетДт, Движения.СубконтоДт, Истина, "Д");

ЗаписьДанных(СтрокаExcel, 10, 23, Движения.СчетКт, Движения.СубконтоКт, Истина, "К");

//*********************************
Попытка
НаборЗаписей.Записать();
Исключение
Сообщить("Ошибка создания набора записей Регистра Бухгалтерии для документа" + Док.Ссылка +" Дт " +Строка(Движения.СчетДт) + " - Кт " + Строка(Движения.СчетКт));
КонецПопытки;

СтарДатаВремя = ДатаВремя;

КонецЦикла;
ЗафиксироватьТранзакцию();

Файл.Close();

Сообщить("Удачно");

Документы.ОперацияБух.ПолучитьФорму("ФормаСписка").Открыть();

КонецПроцедуры
11. Serg Sokoloff (Sykoky) 12.02.12 15:23
П.С.

У меня документы - Партии. Кому необходимо изменить - не забываем исправить.