При переносе данных и реорганизации учета нередко возникает задача, когда данные из нескольких документов конфигурации-источника (например, несколько документов СписаниеТоваров по разным складам в «Комплексной автоматизации») требуется объединить в один итоговый документ в конфигурации-приемнике (например, документ ВводНачальныхОстатков в «Бухгалтерии предприятия 3.0»).
Разберем основные подходы к решению этой задачи в «1С:Конвертация данных 2.1» (КД 2), проанализируем частые ошибки при настройке полей поиска и рассмотрим особенности заполнения документа ввода остатков в БП 3.0.
Наиболее надежный и рекомендуемый разработчиками подход заключается в том, чтобы не выгружать каждый документ источника по отдельности, а сформировать единую структуру данных в момент выгрузки.
Дело в том, что в документах списания суммы себестоимости и НДС часто не хранятся в табличной части самого документа, а рассчитываются и записываются в регистры движений (например, регистры учета затрат или партий). Поэтому правильнее собирать не сами документы, а их движения.
Разберем по шагам алгоритм настройки правила выгрузки данных (ПВД):
ДокументСсылка.ВводНачальныхОстатков, оставляя объект источника пустым.ПередОбработкойПравила или ОбработчикВыгрузки пишем запрос к движениям документов списания или вызываем штатные функции конфигурации-источника для получения себестоимости.НоменклатураНаСкладе.ВыгрузитьПоПравилу.Посмотрим на пример формирования структуры и выгрузки единого документа:
// В обработчике ПВД формируем данные единого документа
СтруктураДокумента = Новый Структура;
СтруктураДокумента.Вставить("Дата", ДатаВыгрузкиОстатков);
СтруктураДокумента.Вставить("Организация", ОрганизацияПриемник);
СтруктураДокумента.Вставить("РазделУчета", Перечисления.РазделыУчетаДляВводаОстатков.Товары);
// ТаблицаТоваров получена запросом по регистрам списаний
СтруктураДокумента.Вставить("НоменклатураНаСкладе", ТаблицаТоваров);
// Выгружаем один итоговый документ в файл обмена
ВыгрузитьПоПравилу(СтруктураДокумента, , , , "ВводНачальныхОстатков");
Преимущество этого способа заключается в том, что в XML-файл сразу попадает ровно один готовый документ, а приемник загружает его штатно без необходимости дозаписи строк.
Если выгрузка уже построена на базе стандартного ПКО из документа СписаниеТоваров в ВводНачальныхОстатков, и требуется объединить загружаемые строки в существующий документ приемника, используют механизм поиска по ключевым полям и программное дополнение табличной части.
Проанализируем настройку сопоставления объектов:
Номер, Дата, Организация) устанавливаем флаг Поиск.ПередВыгрузкой для ПКС номера задаем точное значение:
Значение = "УА00-000001";
По умолчанию при загрузке каждого следующего документа табличная часть приемника будет перезаписываться данными из последнего загруженного файла. Чтобы объединить товары из всех списаний, необходимо в обработчике ПослеЗагрузки ПКО прочитать уже существующие строки из базы данных и добавить к ним новые.
Разберем пример обработчика ПослеЗагрузки:
// Заполняем реквизиты строк, специфичные для приемника
Для каждого СтрокаТЧ Из Объект.НоменклатураНаСкладе Цикл
СтрокаТЧ.Партия = Документы.ПередачаТоваров.НайтиПоНомеру("УА00-000006", '20150101000000');
СтрокаТЧ.СтатусыОплатыРасходовУСН = Перечисления.СтатусыРасходовУСН.НеСписано;
СтрокаТЧ.ОтражениеВУСН = Перечисления.ОтражениеВУСН.Принимаются;
СтрокаТЧ.НДСВключенВстоимость = Истина;
КонецЦикла;
Добавлено = Объект.НоменклатураНаСкладе.Количество();
// Если объект уже существовал в базе, считываем его текущие строки и объединяем
Если Не ОбъектНайден Тогда
Отказ = Истина;
ИначеЕсли Объект.Ссылка.НоменклатураНаСкладе.Количество() > 0 Тогда
Для каждого СтрокаТЧ Из Объект.Ссылка.НоменклатураНаСкладе Цикл
НоваяСтрока = Объект.НоменклатураНаСкладе.Добавить();
НоваяСтрока.СчетУчета = СтрокаТЧ.СчетУчета;
НоваяСтрока.Номенклатура = СтрокаТЧ.Номенклатура;
НоваяСтрока.Склад = СтрокаТЧ.Склад;
НоваяСтрока.Партия = СтрокаТЧ.Партия;
НоваяСтрока.Количество = СтрокаТЧ.Количество;
НоваяСтрока.Сумма = СтрокаТЧ.Сумма;
НоваяСтрока.ОтражениеВУСН = СтрокаТЧ.ОтражениеВУСН;
НоваяСтрока.СтатусыОплатыРасходовУСН = СтрокаТЧ.СтатусыОплатыРасходовУСН;
НоваяСтрока.НДС = СтрокаТЧ.НДС;
НоваяСтрока.НДСВключенВстоимость = СтрокаТЧ.НДСВключенВстоимость;
НоваяСтрока.СтавкаНДС = СтрокаТЧ.СтавкаНДС;
КонецЦикла;
КонецЕсли;
Сообщить("Документ '" + СокрЛП(Объект) + "' " + ?(ОбъектНайден, "", "не ") + "найден, добавлено: " + Добавлено + " товаров, всего: " + Объект.НоменклатураНаСкладе.Количество(), СтатусСообщения.Информация);
При переносе остатков номенклатуры в «1С:Бухгалтерию предприятия 3.0» необходимо учитывать несколько важных прикладных нюансов:
РазделУчета значением перечисления РазделыУчетаДляВводаОстатков.Товары. Если раздел не заполнен, строки табличной части НоменклатураНаСкладе не отобразятся в форме документа.Валюта, ВалютнаяСумма и ВалютныйНДС предназначены исключительно для расчетов в иностранной валюте или условных единицах. При обычном рублевом учете товаров (счет 41.01) их заполнять не нужно (оставляем пустыми), иначе это приведет к ошибкам в отчетах и движениях по регистрам.НДСВключенВстоимость устанавливается в значение Истина, реквизит ОтражениеВУСН заполняется значением Принимаются, а СтатусыОплатыРасходовУСН устанавливается в зависимости от фактической оплаты поставщику (например, НеСписано или НеСписаноНеОплачено).