Вдруг кому пригодится. Написал обработку с нуля для себя.
Данная обработка дополняет типовую выгрузку из УТ 10.3.
Рекомендую выполнять после загрузки справочной информации.
Поделена на 12 команд, ниже опишу, что делает каждая команда.
В первую очередь необходимо ввести данные для подключения к базе (у меня серверный вариант)
и нажать Проверить подключение.
1. Загрузить штрихкоды
ЗапросУТ10 = Base1С.NewObject("Запрос");
ЗапросУТ10.Текст = "
|ВЫБРАТЬ ПЕРВЫЕ 10
| Штрихкоды.Штрихкод,
| Штрихкоды.Владелец Как Номенклатура,
| Штрихкоды.Владелец.Код Как КодНоменклатуры,
| Штрихкоды.ТипШтрихкода
|ИЗ
| РегистрСведений.Штрихкоды КАК Штрихкоды
|";
Дозагружает ШК. Создает номенклатуру в УТ 11, если типовая выгрузка не загрузила данную номенклатуру. Номенклатура создается с ИД базы источника.
2. Загрузить места хранения
3. Загрузить остатки мест хранения
Эти команды загружают места хранения и информацию по их остаткам
В УТ 11 создаются ячейки и загружается инфомация в РегистрыСведений - РазмещениеНоменклатурыПоСкладскимЯчейкам. у склада должны быть включена настройка.
Команды 4,7,9
Необходимы для загрузки нетиповых справочников и реквизитов. Оставил, может, кому пригодится для примера, переделать под свой справочник.
5. Заполнить ставку НДС 22%
Делалось для заполнения ставки НДС в карточках номенклатуры
6. Загрузить цены номенклатуры
Создает документы Установка цен номенклатуры. Один документ на каждый тип цены Номенклатуры.
Создает номенклатуру в УТ 11, если типовая выгрузка не загрузила данную номенклатуру.
Номенклатура создается с ИД базы источника.
8. Загрузить Контактные лица контрагентов
10. Загрузить остатки номенклатуры
ЗапросУТ10 = Base1С.NewObject("Запрос");
ЗапросУТ10.Текст = "
|ВЫБРАТЬ
| ПартииТоваровНаСкладахОстатки.Номенклатура,
| ПартииТоваровНаСкладахОстатки.КоличествоОстаток,
| ПартииТоваровНаСкладахОстатки.СтоимостьОстаток,
| ПартииТоваровНаСкладахОстатки.СтоимостьОстаток / ПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК Цена
|ПОМЕСТИТЬ ВТ_Цены
|ИЗ
| РегистрНакопления.ПартииТоваровНаСкладах.Остатки(, НЕ Склад.ПометкаУдаления) КАК ПартииТоваровНаСкладахОстатки
|ГДЕ
| ПартииТоваровНаСкладахОстатки.КоличествоОстаток > 0
| И ПартииТоваровНаСкладахОстатки.СтоимостьОстаток > 0
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ ПЕРВЫЕ 10
| ТоварыВРезервеНаСкладахОстатки.Склад,
| ТоварыВРезервеНаСкладахОстатки.Номенклатура,
| ТоварыВРезервеНаСкладахОстатки.Номенклатура.Код Как КодНоменклатуры,
| ТоварыВРезервеНаСкладахОстатки.СерияНоменклатуры,
| ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток Как КоличествоОстаток,
| ТоварыВРезервеНаСкладахОстатки.СерияНоменклатуры.НомерГТД КАК НомерГТД,
| ТоварыВРезервеНаСкладахОстатки.СерияНоменклатуры.СтранаПроисхождения.Код КАК КодСтраны,
| естьNULL(ВТ_Цены.Цена, 1) Как Цена
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(, НЕ Склад.ПометкаУдаления) КАК ТоварыВРезервеНаСкладахОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Цены КАК ВТ_Цены
| ПО ТоварыВРезервеНаСкладахОстатки.Номенклатура = ВТ_Цены.Номенклатура
|
|УПОРЯДОЧИТЬ ПО
| ТоварыВРезервеНаСкладахОстатки.Склад.Наименование,
| ТоварыВРезервеНаСкладахОстатки.Номенклатура.Наименование,
| ТоварыВРезервеНаСкладахОстатки.СерияНоменклатуры.Наименование
|ИТОГИ ПО
| Склад";
Загружает остатки в разрезе складов и ГТД. Создает отдельный документ на каждый склад. Создает номенклатуру и ГТД (если они не найдены).
&НаСервере
Функция ПолучитьГТДНоменклатуры(Номенклатура, КодСтраны, НомерГТД)
ТекГТД = Справочники.НомераГТД.ПустаяСсылка();
Если Не ЗначениеЗаполнено(Номенклатура) Или Не ЗначениеЗаполнено(НомерГТД) ИЛИ НомерГТД = "---" Тогда
Возврат ТекГТД;
КонецЕсли;
Если Не Номенклатура.ВестиУчетПоГТД Тогда
НоменклатураОбъект = Номенклатура.ПолучитьОбъект();
НоменклатураОбъект.ВестиУчетПоГТД = Истина;
ЗаписатьСправочник(НоменклатураОбъект, "номенклатуры", Истина);
КонецЕсли;
СсылкаНомерГТД = Справочники.НомераГТД.НайтиПоКоду(НомерГТД);
Если Не ЗначениеЗаполнено(СсылкаНомерГТД) Тогда
НовыйГТД = Справочники.НомераГТД.СоздатьЭлемент();
Иначе
НовыйГТД = СсылкаНомерГТД.ПОлучитьОбъект();
КонецЕсли;
НовыйГТД.Код = НомерГТД;
МассивПодстрокГТД = СтрРазделить(НомерГТД, "/", Ложь);
Если МассивПодстрокГТД.Количество() = 4 Тогда
ПорядковыйНомер = МассивПодстрокГТД[3];
ДлинаПорядковогоНомера = СтрДлина(ПорядковыйНомер) + 1;
РегистрационныйНомер = Лев(НомерГТД, СтрДлина(НомерГТД) - ДлинаПорядковогоНомера);
Иначе
ПорядковыйНомер = "";
РегистрационныйНомер = НомерГТД;
КонецЕсли;
НовыйГТД.РегистрационныйНомер = РегистрационныйНомер;
НовыйГТД.ПорядковыйНомерТовара = ПорядковыйНомер;
НовыйГТД.ТипНомераГТД = Перечисления.ТипыНомеровГТД.НомерГТД;
СсылкаСтрана = Справочники.СтраныМира.НайтиПоКоду(Строка(КодСтраны));
НовыйГТД.СтранаПроисхождения = СсылкаСтрана;
НовыйГТД.Записать();
СсылкаНомерГТД = НовыйГТД.Ссылка;
Возврат СсылкаНомерГТД;
КонецФункции
11. Удалить лишние документы остатков
Удаляет помеченные на удаление документы остатков (которые создались типовой выгрузкой) непосредственно.
12. Дозаполнить регистр распределение запасов
Сравниваются остатки по регистру накопления ТоварыНаСкладах и Р.С. РаспределениеЗапасов (по состоянию = ОстатокНаСкладе). Если остатки различаются тогда запись корректируется:
если такой записи не было в Р.С. РаспределениеЗапасов, она создается, если была то обновляются колонки Запас, Свободно, Излишек, ВНаличии.
Тестировалось на релизе Управление торговлей, редакция 11 (11.5.22.129) с включенным ценообразованием 11.5
Вступайте в нашу телеграмм-группу Инфостарт