gifts2017

Перегрузка документов из ЗиК 7.7 в ЗУП 8.2 через текстовый файл (без конвертации данных)

Опубликовал program program (prodines) в раздел Обмен - Перенос данных из 1С7.7 в 1C8.X

Перегрузка наиболее распространённых документов из ЗиК 7.7 в ЗУП 8.2. Работает через текстовый файл и не использует конвертацию данных. Предназначена для оперативного переброса документов из 7-ки в 8-ку - в случае, когда учёт ведётся параллельно в 2 программах (в 7-ке и в 8-ке) - в первый месяц после перехода. В отличие от конвертации данных, не переносит отсутствующие реквизиты документов (но это малокритично). Рассчитана на программиста 1С, т.к. может требовать программного корректирования обработчиков загрузки (но это на порядок проще, чем работать с конвертацией данных).

Мы перешли с 1С:Зарплата и Кадры 7.7 на 1С:Зарплата и Управление Персоналом 8.2 в середине года. Перенос осуществлялся штатной обработкой.

После перехода было принято решение о том, что в первый месяц после перехода (июль 2013) учёт зарплаты будет вестись параллельно в старой и в новой программе.

Но возникла проблема - документов, оформляемых каждый день в 7-ке было настолько много, что перенабивать их в 8-ке вручную было просто нереально. Возникла задача - как-то оперативно перебрасывать вновь создаваемые документы из 7-ки в 8-ку. Как это сделать?

Я не умею пользоваться конвертацией данных, и вообще не люблю это крайне неудачное и бестолковое творение от компании 1С. Поэтому я создал упрощённую самодельную перегрузку наиболее ходовых документов из 7-ки в 8-ку. Упрощённую - потому, что она (в отличие от конвертации данных) не перегружает отсутствующие реквизиты документов, а рассчитывает на то, что они и так имеются в обеих программах. Так оно, собственно, и есть - сразу после переноса данных из 7-ки в 8-ку типовой обработкой.

Здесь на Инфостарте есть аналогичные разработки - работающие через COМ-подключение. Мне это не нравится - потому что COМ-подключение - это лишняя проблема, к примеру, портабельная 7-ка вообще не способна организовать приём COМ-подключения. Поэтому моя обработка работает просто через обычный текстовый файл. Вернее, у меня в пакете 2 обработки - одна выгружает данные из 7-ки в текстовый файл, а вторая - загружает данные из текстового файла в 8-ку.

Вот таблица соответствий перегрузки документов 7.7 - 8.2:

Документы 1С 7.7 Документы 1С 8.2
Выплата заработной платы Зарплата к выплате организаций
Приказ по отпуску Отпуска организаций
Начисление заработной платы Начисление зарплаты сотрудникам организаций
Приказ об увольнении Увольнение из организаций
Индивидуальный наряд Сдельный наряд на выполненные работы
Невыходы Невыходы в организациях
Начисление отпуска Начисление отпуска сотрудникам организаций
   Расчет при увольнении сотрудника организаций
Невыходы в организациях (если отпуск за свой счет)
Ввод расчета сотруднику Регистрация разовых начислений сотрудников организаций
   Регистрация разовых удержаний сотрудников организаций
Премии сотрудников организаций
Ввод расчета списку сотрудников Регистрация разовых начислений сотрудников организаций
  Премии сотрудников организаций
Приказ на оплату по среднему заработку Оплата по среднему заработку
Больничный лист Начисление по больничному листу
Кадровое перемещение Кадровое перемещение организаций

Как видно из таблицы, обработка перегружает наиболее популярные виды документов. Некоторые виды семёрочных документов перегружаются не в один, а в несколько восьмёрочных документов. Обработка сама автоматически опеределяет вид восьмёрочного документа в таком случае.

Если Вам понадобится перегрузить ещё какие-то виды документов - то потребуется добавить программный код обработчиков выгрузки-загрузки. Это относительно несложно сделать (особенно прост код выгрузки).

Описание использования

Открываем в ЗиК обработку "ВыгрузкаДокументов77.ert". Выставляем диапазон дат выгружаемых документов. Указываем каталог, куда будут выгружаться файлы переноса. Далее можно выгрузить весь справочник "Должности" - он нам потребуется потом в 8-ке - хотя бы для кадровых перемещений. Кнопка "2. Выгрузить новых сотрудников" означает, что мы выгружаем всех тех сотрудников, кто присутствует в документах "Приём на работу", попавших в диапазон дат выгрузки. Кнопка "3. Выгрузить расценки" нужна не всем - а только тем, кто использует сдельные наряды - тут выгружается справочик "Нормы".

Кнопка "4. Выгрузить документы" - основная, она выгружает все документы (из таблицы выше), попавшие в заданный диапазон дат. Каждый вид документа выгружается в отдельный одноимённый текстовый файл.

Загрузка в 8-ке.

Открываем в ЗУП обработку "ЗагрузкаДокументов82.epf". Указываем организацию и каталог импорта. Загружаем справочник "Должности организаций" кнопкой. Загружаем новых физлиц (только если есть приказы и приёме на работу). Загружаем расценки (только если есть сдельные наряды).

Загрузка документов происходит отдельно по каждому виду документа (в отличие от 7-ки, где выгружались все виды документов одновременно). Пользователь выбирает в выпадающем списке, какой вид документа он хочет загрузить, и нажимает кнопку "4. Загрузить документы".

Технические подробности

Чтобы добавить в 7-ку выгрузку своего вида документа, нужно в модуле формы в самом внизу описать выгрузку Вашего документа вызовами всего лишь нескольких функций. Это просто - смотрите на пример уже готовых выгрузок.

В 8-ке проблем больше. При загрузке документов в 8-ку могут выводиться сообщения вида "не опознан вид начисления" или т.п. - и загрузка будет прерываться. В этом случае Вам понадобиться дописать в обработчик загрузки нужный вид начисления или т.п. Все такие "дописываемые" пользователем функции-обработчики собраны в самом верху модуля обработки - в разделе "Раздел настраиваемых функций". По тексту выдаваемой ошибки Вы легко определите, какую именно фунцию из настраиваемого раздела нужно подкоректировать. Вот пример такой функции:

Функция ПолучитьСтатьюУвольнения(КодОКИН) Экспорт
	
Если КодОКИН = "08" Тогда
		
Возврат Справочники.ОснованияУвольненияИзОрганизации.НайтиПоНаименованию("п. 3 ст. 77 ТК");
		
ИначеЕсли КодОКИН = "13" Тогда
		
Возврат Справочники.ОснованияУвольненияИзОрганизации.НайтиПоНаименованию("Расторжение срочного трудового договора Ст. 79 ТК РФ");
	
Иначе
		
Сообщить("Не опознана причина увольнения с кодом """ + КодОКИН + """.");
		
Возврат Неопределено;
	
КонецЕсли;	

КонецФункции // ПолучитьСтатьюУвольнения()

Как видите, ничего запредельного.  Всё, что Вам может потребоваться - добавить туда ещё одну ветку "Если...". Документы из 7-ки выгружаются построчно, все реквизиты шапки выгружаются в одну строку, и такая строка всегда начинается с символа "#". Каждая строка многострочной части семёрочного документа выгружается в одну строку текстового файла.

В 8-ке ядром обработки загрузки служит процедура "ЗагрузитьДок(ДокВид77, ДокВид82)", которая читает построчно текстовый файл переноса, и для каждой строки с описанием шапки документа вызывает процедуру "ЗаполнитьШапку", а для каждой строки с описанием строки многострочной части вызывает процедуру "ЗаполнитьСтроку".

Каждая из процедур "ЗаполнитьШапку" и "ЗаполнитьСтроку" делится, в свою очередь, на десяток-другой вызовов ЗаполнитьШапку1, ЗаполнитьШапку2, ЗаполнитьШапку3, ЗаполнитьШапку4, ... (ЗаполнитьСтроку1, ЗаполнитьСтроку2, ЗаполнитьСтроку3, ЗаполнитьСтроку4, ...), где ЗаполнитьШапку1 и ЗаполнитьСтроку1 - это специализированные обработчики заполнения конкретного вида восьмёрочного документа. Можете добавить аналогичный обработчик - для своего вида документа.

Разумеется, в процессе перегрузки могут возникать и иные непредвиденные ошибки - в силу сложности самого процесса. Надеюсь, что Вы сможете самостоятельно разобраться в них - во всяком случае, это будет гораздо проще сделать, чем разобраться в ошибках конвертации данных.

Этими обработками я оперативно перегрузил сотни документов - за один переходный месяц. Всё получилось нормально, и никаких неприятных последствий потом не возникло.

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

Наименование Файл Версия Размер
ПерегрузкаЗарплатныхДокументов.zip 81
.zip 39,26Kb
12.11.13
81
.zip 39,26Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Макас (makas) 12.11.13 23:20
Плюс за самоотверженную борьбу с ЗиКом!
2. Артем Артеменко (dock) 13.11.13 05:07
Еще жива на наших просторах 7-ка!
3. Имя Фамилия (Hla) 13.11.13 06:47
Плюсую. Забираю в копилку. Работаем пока в 7-ке.
4. Татьяна (tana1257) 13.11.13 07:41
Плюсанула, тоже пока выбираю варианты для перехода на 8.
5. LeXX R (LeXXik) 13.11.13 08:57
Хоспади, когда же этот монстр (ЗиК) упадёт-то, а? Как вспомню док НачалоМесяца, с охренитительными положительными и отрицательными сальдо по одному сотруднику... БР-Р-Р!
bsturtle; +1 Ответить
6. юрий гулидов (gull22) 13.11.13 08:58
Плюсую за еще одно решение существующей проблемы
7. Fomix (fomix) 13.11.13 11:08
Мой тебе совет - подружись с конвертацией данных и будет тебе счастье! Не придется изобретать велосипед с квадратными колесами.
А твое утверждение, что КД "крайне неудачное и бестолковое творение от компании 1С" сам же и объясняешь тем, что не умеешь пользоваться этим полезным инструментом... Пора бы уже и научиться. Потому как КД сама все за тебя сделает. Причем проще и без напряга. Тем более, что есть готовые правила переноса здесь же на Инфостарте.
wunderland; cleaner_it; CratosX; +3 Ответить 1
8. program program (prodines) 13.11.13 11:40
(7) fomix,
Тем более, что есть готовые правила переноса здесь же на Инфостарте.

Ссылку в студию, пожалуйста.
А твое утверждение, что КД "крайне неудачное и бестолковое творение от компании 1С" сам же и объясняешь тем, что не умеешь пользоваться этим полезным инструментом... Пора бы уже и научиться.

Я неоднократно предпринимал попытки освоить конвертацию данных - и всегда неизменно с нулевым результатом. Поскольку я умею программировать не только на 1С, то мне, как программисту, очевидна вся убогая тупость этого программного продукта (который невозможно освоить по штатному учебнику). Разумеется, освоить конвертацию данных необходимо - но пока эта цель представляется слишком труднодостижимой. Поручили бы мне - я бы сделал средство переноса данных гораздо проще и прозрачней, чем конвертация данных. "Неудачное и бестолковое" - в первую очередь именно потому, что его невозможно освоить (без экстраординарных усилий). Конвертация данных мне не нравится также и тем, что пытается формализовать неформализуемое - вместо десятка визуальных окошек настройки лучше бы применить просто кусок произвольно создаваемого пользователем программного кода (по заданным критериям) - ибо невозможно втиснуть все случаи жизни в предопределённый набор визуальных окошек.

Не верю я в то, что сложность освоения и использования конвертации данных действительно адекватна сложности перегрузки данных из одной конфигурации в другую. Считаю, что эта сложность явно неоправданно завышена - потому и считаю КД убогой и тупой. То же самое относится и к построителю отчёта, и тем более, к СКД.
9. Маратик Гайнутдинов (Черный Плащ) 13.11.13 11:55
10. Fomix (fomix) 13.11.13 12:17
(НЕ РЕКЛАМА!)
По СКД есть классный бесплатный видеокурс от Гилева Е. Очень рекомендую: http://курсы-по-1с.рф/free/. Гилев все объясняет очень доходчиво и с примерами.
Ссылка на бесплатные курсы по КД от него же, тут: http://www.spec8.ru/free-materials.
Будет полезно почитать: http://infostart.ru/public/169528/.

Сайт, полностью посвященный КД, живет тут: http://sysadmins.ru/topic240431.html (Конвертация данных 2. Вопросы и ответы).

Ссылку на правила переноса ЗиК-ЗУП поищу и тоже скину чуть позже.
Светлый ум; +1 Ответить 2
11. Александр Хоменко (scape) 13.11.13 12:21
(8) prodines,
Абсолютно...
Это "творение" пользователь осваивать вряд ли захочет и будет, а программисту легче ручками программу написать.
12. program program (prodines) 13.11.13 12:41
(10) fomix,
Будет полезно почитать: http://infostart.ru/public/169528/.

Я как-то раньше натыкался на эту публикацию. А чем она принципиально отличается от моей обработки? Точно так же пишем полностью вручную программный код выгрузки. Только там посложнее, чем у меня, будет: там надо ещё и правила конвертации (объектов, свойств, значений) прописывать - в многочисленных визуальных окошках. У меня вместо всей этой чуши 2 функции: ЗаполнитьШапкуN и ЗаполнитьСтрокуN, каждая из которых принимает на входе строку из текстового файла, строки такого примерно вида:

Пример - семерочный документ "НачисленияУдержанияСписком":

#000939@20130726@Компенсация за питание@
0000001670@20130701@20130731@1058@
0000001669@20130701@20130731@1058@
0000001668@20130701@20130731@1058@
0000001667@20130701@20130731@1012@
0000001685@20130701@20130731@598@
#000940@20130726@Компенсация за питание@
0000001672@20130701@20130731@276@
0000001666@20130701@20130731@345@
0000001673@20130701@20130731@207@


Строка, описывающая шапку, всегда начинается с "#". Остальные строки - это строки, описывающие строки многострочной части. Символ-разделитель - "@". В каждой строке простые типы выводятся "как есть", а сложные типы - по коду или наименованию. А в какой позиции строки какой реквизит и какой у него тип данных - это нужно в семёрочной выгрузке подсмотреть, а потом уже в 8-ке программист сам решает, в какой реквизит и как именно ему записать полученный (из строки текста) семёрочный реквизит.

Вот пример его функций-обработчиков:

Параметр "М" - это массив с разобранной строкой из текстового файла.

Функция ЗаполнитьШапку12(Док, М, ДокВид77)

//РегистрацияРазовыхНачисленийРаботниковОрганизаций (из НачисленияУдержанияСписком)

Док.Организация = Организация;

Док.ПериодРегистрации = НачалоМесяца(Дата(М[1]));

Док.Комментарий = "из " + ДокВид77 + " 7.7";

ЗаполнениеДокументовПереопределяемый.ЗаполнитьШапкуДокумента(Док, глЗначениеПеременной("глТекущийПользователь"));
Если Док.СпособРегистрацииВремени.Пустая() Тогда
Док.СпособРегистрацииВремени = Перечисления.СпособыРегистрацииВремени.РегистрацияДляЦелойСмены;
КонецЕсли;
Если ЗначениеЗаполнено(Док.Организация) Тогда
Док.ДатаВыплатыДохода = ЗаполнениеДокументовЗК.ДатаВыплатыДохода(Док.Дата, Док.Организация);
КонецЕсли;

Для каждого ТЧ Из Док.Метаданные().ТабличныеЧасти Цикл

Док[ТЧ.Имя].Очистить();

КонецЦикла;

Возврат Истина;

КонецФункции

////////////////////////////////////////////////////////////­////////////////////////////////////////////////////////////­//////////////////////////////////////////

Функция ЗаполнитьСтроку12(Док, М, ИмяТЧ, ВидРасчета)

//РегистрацияРазовыхНачисленийРаботниковОрганизаций (из НачисленияУдержанияСписком)

Если СокрЛП(ТипЗнч(ВидРасчета)) = "Основные начисления организаций" Тогда

ИмяТЧ = "ОсновныеНачисления";

ИначеЕсли СокрЛП(ТипЗнч(ВидРасчета)) = "Дополнительные начисления организаций" Тогда

ИмяТЧ = "ДополнительныеНачисления";

КонецЕсли;

НоваяСтрока = Док[ИмяТЧ].Добавить();

Сотрудник = СотрудникПоКоду(М[0]);

Если НЕ СуществуетЭлемСправочника(Сотрудник) Тогда

Возврат Ложь;

КонецЕсли;

НоваяСтрока.Сотрудник = Сотрудник;

НоваяСтрока.Физлицо = Сотрудник.Физлицо;

НоваяСтрока.ПодразделениеОрганизации = ПодразделениеСотрудника(Сотрудник);

НоваяСтрока.ВидРасчета = ВидРасчета;

НоваяСтрока.ДатаНачала = НачалоМесяца(Дата(М[1]));

Если ИмяТЧ = "ОсновныеНачисления" Тогда

НоваяСтрока.ДатаНачалаСобытия = НачалоМесяца(Дата(М[1]));

КонецЕсли;

НоваяСтрока.ДатаОкончания = КонецМесяца(Дата(М[2]));

НоваяСтрока.Показатель1 = Число(М[3]);

НоваяСтрока.Авторасчет = Истина;

Возврат Истина;

КонецФункции
13. Fomix (fomix) 13.11.13 13:04
Это был просто пример с ручной настройкой.
Не считаю себя корифеем по КД, но скажу, что частенько пользуюсь правилами переноса - потому, что сделать перенос с ее помошью получается быстрей, не надо думать о потере части данных и используются типовые механизмы и обработки.
Хотя и в КД есть свои издержки. Если выгружаемых данных слишком много - процесс выгрузки может прерваться на самом интересном месте из-за банальной нехватки памяти, т.к. файл сначала формируется полностью в оперативке и только потом записывается на диск. + сам по себе XML-файл избыточен. Приходится выгружать порционно либо оптимизировать выгружаемые сведения.
Обмен данными через текстовый файл от этого избавлен.
14. Ловыгин Антон (wunderland) 15.11.13 15:01
Переводил 2 крупных предприятия, 2500 и 4000 чел., но делал без переноса документов - только справочники и остатки, ну и данные для расчетов средне конечно. И считаю что это правильно. Оба проекта завершились успешно.
15. alex Perepel (asdPerepel) 10.07.16 20:02
Как бэ афтар халявщик. Отпуск переносится без расчета среднего. Зря потратил мани.
16. alex Perepel (asdPerepel) 13.07.16 16:27
Хотя поставил плюс. Всё таки не с нуля набивать.
17. alex Perepel (asdPerepel) 13.07.16 18:44
Строки с 1283 исправьте пожалуйста. Должно быть так:
	Явка = Справочники.КлассификаторИспользованияРабочегоВремени.Работа;	//Справочники.КлассификаторИспользованияРабочегоВремени.НайтиПоНаименованию("Явка");
	
	НочныеЧасы = Справочники.КлассификаторИспользованияРабочегоВремени.РаботаНочныеЧасы;	//Справочники.КлассификаторИспользованияРабочегоВремени.НайтиПоНаименованию("Ночные часы");
	
	Выходной = Справочники.КлассификаторИспользованияРабочегоВремени.ВыходныеДни;	//Справочники.КлассификаторИспользованияРабочегоВремени.НайтиПоНаименованию("Выходные дни");
...Показать Скрыть
18. Константин Куликов (Светлый ум) 07.10.16 11:20
(10) fomix, впервый раз про этот сайт слышу
http://sysadmins.ru/topic240431.html