Первые четыре предложенные для скачивания обработки это обработки заполнения табличной части "Материалы" документа "Ввода начальных остатков материалов в эксплуатации", документ предназначен для организации ведения учета малоценного имущества (материалов и оборудования, не подпадающего под определение основных средств) на счете бухгалтерского учета 10.11. Обработки позволяют перенести материалы в эксплуатацию с другой организации данной информационной базы и затем дозаполнить отдельные поля этого документа по данным текущей информационной базы УПП.
Рассмотрим пример заполнения документа путем загрузки данных внешних систем через табличный документ.
В загрузках размещена обработка "ЗагрузкаДанныхИзТабличногоДокумента" с диска ИТС, которая при помощи опубликованных кодов обработчика события "После добавления строки" в табличную часть "Материалы" документа "Ввод начальных остатков материалов в эксплуатации" позволяет его заполнить внешними данными, помещенными в поле табличного документа.
На закладке "Табличный документ" этой обработки при выборе табличной части "Материалы" появятся заголовки колонок, мы не будем обращать на них внимание потому что заполнение у нас будет полностью программное из обработчика события. Вставляем наш табличный документ, в данном случае по порядку представлены наименование номенклатуры, свойство номенклатуры (код внешней учетной системы для синхронизации мы тоже заполним в регистре сведений свойства объектов), количество номенклатуры и код материально-ответственного лица из внешней системы, по которому мы будем осуществлять отбор строк для загрузки каждого конкретного из нескольких нужных документов.
Вариант загрузки в табличную часть позволит нам просмотреть в одном списке все загруженные данные, что позволит проще оценить их корректность. Вот пример обработчика события "При добавлении строки".
Пример загрузки табличной части ввода остатков материалов в эксплуатации из табличного документа
//заполнение ввода начальных материалов из основных средств забалансового счета 113
Если СокрЛП(ТекстыЯчеек[4])="720" Тогда //720 это код МОЛ, по которому мы
//определяем, загружать ли данную строку. Строки, в которых написаны другие коды МОЛ
//кроме 720 загружены в этот документ не будут.
ЗначениеСвойства = СокрЛП(ТекстыЯчеек[2]);
Сообщить("Загружаем "+ТекстыЯчеек[1]);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗначенияСвойствОбъектов.Объект,
| ЗначенияСвойствОбъектов.Свойство,
| ЗначенияСвойствОбъектов.Значение
|ИЗ
| РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|ГДЕ
| ЗначенияСвойствОбъектов.Значение ПОДОБНО """+СокрЛП(ЗначениеСвойства)+"""";
РТ = Запрос.Выполнить().Выгрузить();
Если РТ.Количество()>0 Тогда
Сообщить("Найден "+РТ[0].Объект);
Иначе
НовТовар = Справочники.Номенклатура.НайтиПоНаименованию("Оприходование остатков 011 = "+СокрЛП(ЗначениеСвойства));
Если НовТовар.Пустая() Тогда
НовТовар = Справочники.Номенклатура.СоздатьЭлемент();
Иначе
НовТовар = НовТовар.ПолучитьОбъект();
КонецЕсли;
НовТовар.Наименование = ТекстыЯчеек[1];
НовТовар.Комментарий = ТекстыЯчеек[2];
НовТовар.Родитель = Справочники.Номенклатура.НайтиПоКоду("00000001266");
НовТовар.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
НовТовар.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("796");
НовТовар.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоКоду("000000002");
НовТовар.Записать();
ВыборкаЕдиниц = Справочники.ЕдиницыИзмерения.Выбрать(, НовТовар.Ссылка);
Если ВыборкаЕдиниц.Следующий() Тогда
НайденнаяЕдиница = ВыборкаЕдиниц.Ссылка;
Иначе
НайденнаяЕдиницаОбъект = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
НайденнаяЕдиницаОбъект.Наименование = НовТовар.БазоваяЕдиницаИзмерения.Наименование;
НайденнаяЕдиницаОбъект.ЕдиницаПоКлассификатору = НовТовар.БазоваяЕдиницаИзмерения;
НайденнаяЕдиницаОбъект.Коэффициент = 1;
НайденнаяЕдиницаОбъект.Владелец = НовТовар.Ссылка;
Попытка
НайденнаяЕдиницаОбъект.Записать();
Исключение
Сообщить("Не удалось записать единицу хранения остатков: " + ОписаниеОшибки(), СтатусСообщения.Важное);
КонецПопытки;
НайденнаяЕдиница = НайденнаяЕдиницаОбъект.Ссылка;
КонецЕсли;
НовТовар.ЕдиницаХраненияОстатков = НайденнаяЕдиница;
НовТовар.ЕдиницаДляОтчетов = НайденнаяЕдиница;
НовТовар.Записать();
Сообщить("Загружен "+НовТовар);
СвойствоНоменклатурыКлючПоиска = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("КодХК");
НаборЗаписей = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Объект.Установить(НовТовар.Ссылка);
НаборЗаписей.Отбор.Свойство.Установить(СвойствоНоменклатурыКлючПоиска);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Объект = НовТовар.Ссылка;
НоваяЗапись.Свойство = СвойствоНоменклатурыКлючПоиска;
НоваяЗапись.Значение = НовТовар.Комментарий;
НаборЗаписей.Записать(Истина);
КонецЕсли;
ТекущиеДанные.Номенклатура = НовТовар.Ссылка;
ТекущиеДанные.Количество = Число(ТекстыЯчеек[3]);
Иначе
Отказ = Истина;
КонецЕсли;
Данные табличного документа (внешней системы) загружаются в табличную часть программно этим кодом. Затем с помощью обработки "универсальный подбор и обработка значений" (Universal Selection) можно дозаполнить нужные колонки ввода остатков материалов в эксплуатации.
Пример дозаполнение колонок табличной части Материалы
Для Каждого Стр Из Объект.Материалы Цикл
Стр.ФизЛицо = Справочники.ФизическиеЛица.НайтиПоКоду("0000000703");
Если СокрЛП(Стр.Номенклатура.НазначениеИспользования)="" Тогда
НазначениеИспользования = Справочники.НазначенияИспользования.СоздатьЭлемент();
НазначениеИспользования.Наименование = СокрЛП(Стр.Номенклатура.Наименование);
НазначениеИспользования.Владелец = Стр.Номенклатура;
НазначениеИспользования.СпособПогашенияСтоимости = Перечисления.СпособыПогашенияСтоимости.ПогашатьСтоимостьПриПередачеВЭксплуатацию;
НазначениеИспользования.СрокПолезногоИспользования = 24;
НазначениеИспользования.Количество = 1;
НазначениеИспользования.ЕдиницаИзмерения = Стр.ЕдиницаИзмерения;
НазначениеИспользования.СпособОтраженияРасходов = Справочники.СпособыОтраженияРасходовПоАмортизации.НайтиПоКоду("000000527");//Энергетик
НазначениеИспользования.Записать();
Стр.НазначениеИспользования = НазначениеИспользования.Ссылка;
Иначе
КонецЕсли;
Если СокрЛП(Стр.ЕдиницаИзмерения)="" Тогда
НовТовар = Стр.Номенклатура.ПолучитьОбъект();
НовТовар.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("796");
ВыборкаЕдиниц = Справочники.ЕдиницыИзмерения.Выбрать(, НовТовар.Ссылка);
Если ВыборкаЕдиниц.Следующий() Тогда
НайденнаяЕдиница = ВыборкаЕдиниц.Ссылка;
Иначе
НайденнаяЕдиницаОбъект = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
НайденнаяЕдиницаОбъект.Наименование = НовТовар.БазоваяЕдиницаИзмерения.Наименование;
НайденнаяЕдиницаОбъект.ЕдиницаПоКлассификатору = НовТовар.БазоваяЕдиницаИзмерения;
НайденнаяЕдиницаОбъект.Коэффициент = 1;
НайденнаяЕдиницаОбъект.Владелец = НовТовар.Ссылка;
Попытка
НайденнаяЕдиницаОбъект.Записать();
Исключение
Сообщить("Не удалось записать единицу хранения остатков: " + ОписаниеОшибки(), СтатусСообщения.Важное);
КонецПопытки;
НайденнаяЕдиница = НайденнаяЕдиницаОбъект.Ссылка;
КонецЕсли;
НовТовар.ЕдиницаДляОтчетов = НайденнаяЕдиница;
НовТовар.ЕдиницаХраненияОстатков = НайденнаяЕдиница;
НовТовар.Записать();
Стр.ЕдиницаИзмерения = НайденнаяЕдиница;
КонецЕсли;
Стр.ДокументПартии = Документы.ПередачаМатериаловВЭксплуатацию.НайтиПоНомеру("ПА-00000013",ТекущаяДата());
Стр.ДатаПередачиВЭксплуатацию = Дата(2023,10,03);
Стр.ЕдиницаИзмерения = Стр.ЕдиницаИзмерения;
Стр.Количество = 1;
Стр.Коэффициент = 1;
КонецЦикла;
Объект.Записать();
Таким образом документ полностью заполнен.
Протестировано на релизе Управление производственным предприятием, редакция 1.3 (1.3.203.1).