Обработка заполнения табличной части в 1С 8.3
20.05.2017

Обработка заполнения табличной части в 1С 8.3

Автор: Белозерских Евгений

Вступление

    Предлагаем разобраться с процессом разработки внешней обработки заполнения табличной части, на примере конфигурации "1С:ERP Управление предприятием 2 (2.2.3.205)", документ "Производство без заказа", табличная часть "Материалы и работы".
    В указанном релизе конфигурации, штатное заполнение рассчитывает материал криво некорректно.

    Готовый вариант обработки можно скачать здесь

Подготовка шаблона внешней обработки

    Внешняя обработка заполнения (так же как внешний отчет и обработка) должна содержать необходимые процедуры и функции в модуле объекта:
  • Функция СведенияОВнешнейОбработке() Экспорт
  • Функция ПолучитьТаблицуКоманд
  • Процедура ДобавитьКоманду
    Для нашей обработки модуль объекта будет выглядеть следующим образом:
Функция СведенияОВнешнейОбработке() Экспорт
	Назначения = Новый Массив ;
	Назначения.Добавить("Документ.ПроизводствоБезЗаказа") ;
	
	ПараметрыРегистрации = Новый Структура ;
	ПараметрыРегистрации.Вставить("Вид","ЗаполнениеОбъекта");
	ПараметрыРегистрации.Вставить("Назначение",Назначения);
	ПараметрыРегистрации.Вставить("Наименование","Заполнить сырье по спецификациям");
	ПараметрыРегистрации.Вставить("Версия","1.0");
	ПараметрыРегистрации.Вставить("Информация","Дополнительная обработка табличной части");
	ПараметрыРегистрации.Вставить("БезопасныйРежим",Истина);
	
	Команды = ПолучитьТаблицуКоманд() ;
	ДобавитьКоманду(Команды, "Заполнить сырье по спецификациям",
			"ЗаполнитьСырьеПоСпецификациям","ВызовКлиентскогоМетода",Ложь,) ;
	
	ПараметрыРегистрации.Вставить("Команды",Команды) ;
	
	Возврат ПараметрыРегистрации;
	
КонецФункции

Функция ПолучитьТаблицуКоманд()
	Команды = Новый ТаблицаЗначений ;
	Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")) ;
	Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")) ;
	Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")) ;
	Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")) ;
	Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка")) ;
	Возврат Команды;
КонецФункции	

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор,
				Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
	НоваяКоманда = ТаблицаКоманд.Добавить() ;
	НоваяКоманда.Представление = Представление ;
	НоваяКоманда.Идентификатор = Идентификатор ;
	НоваяКоманда.Использование = Использование ;
	НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение ;
	НоваяКоманда.Модификатор = Модификатор ;
КонецПроцедуры	

Команда заполнения табличной части

    После того как модуль обработки оформлен должным образом, нам необходимо создать форму обработки (управляемую форму конечно же) в которой будет присутствовать команда "ВыполнитьКоманду"

Команда формы обработки заполнения табличной части

Код заполнения табличной части в модуле формы

    Теперь осталось расположить в модуле формы необходимый алгоритм по заполнению. Вот как он выглядит в нашем случае:
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
	ОбъектДляЗаполнения = ВладелецФормы.Объект;
	ОбъектДляЗаполнения = ВыполнитьЗаполнениеНаСервере(ОбъектДляЗаполнения);
	КопироватьДанныеФормы(ОбъектДляЗаполнения, ВладелецФормы.Объект);
КонецПроцедуры	

&НаСервере
Функция ВыполнитьЗаполнениеНаСервере(ОбъектЗаполнения)
	ЗапросДанных	= Новый Запрос(
		"ВЫБРАТЬ
	       |	РесурсныеСпецификацииМатериалыИУслуги.Номенклатура,
	       |	РесурсныеСпецификацииМатериалыИУслуги.Характеристика,
	       |	&СтатьяКалькуляции КАК СтатьяКалькуляции,
	       |	&Отправитель КАК Отправитель,
	       |	СУММА(РесурсныеСпецификацииМатериалыИУслуги.Количество /
		   |		РесурсныеСпецификацииВыходныеИзделия.Количество *
		   |		ПроизводствоБезЗаказаВыходныеИзделия.Количество) КАК Количество,
	       |	СУММА(РесурсныеСпецификацииМатериалыИУслуги.Количество /
		   |		РесурсныеСпецификацииВыходныеИзделия.Количество *
		   |		ПроизводствоБезЗаказаВыходныеИзделия.Количество) КАК КоличествоУпаковок
	       |ИЗ
	       |	Документ.ПроизводствоБезЗаказа.ВыходныеИзделия КАК ПроизводствоБезЗаказаВыходныеИзделия
	       |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.РесурсныеСпецификации.МатериалыИУслуги
		   |			КАК РесурсныеСпецификацииМатериалыИУслуги
	       |		ПО ПроизводствоБезЗаказаВыходныеИзделия.Спецификация = РесурсныеСпецификацииМатериалыИУслуги.Ссылка
	       |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.РесурсныеСпецификации.ВыходныеИзделия
		   |			КАК РесурсныеСпецификацииВыходныеИзделия
	       |		ПО ПроизводствоБезЗаказаВыходныеИзделия.Спецификация = РесурсныеСпецификацииВыходныеИзделия.Ссылка
	       |ГДЕ
	       |	ПроизводствоБезЗаказаВыходныеИзделия.Ссылка = &Ссылка
	       |
	       |СГРУППИРОВАТЬ ПО
	       |	РесурсныеСпецификацииМатериалыИУслуги.Номенклатура,
	       |	РесурсныеСпецификацииМатериалыИУслуги.Характеристика
	       |
	       |УПОРЯДОЧИТЬ ПО
	       |	РесурсныеСпецификацииМатериалыИУслуги.Номенклатура.Наименование");

	ЗапросДанных.УстановитьПараметр("Ссылка",			ОбъектЗаполнения.Ссылка);
	ЗапросДанных.УстановитьПараметр("СтатьяКалькуляции",Справочники.СтатьиКалькуляции.НайтиПоНаименованию("Сырье для выпуска"));
	ЗапросДанных.УстановитьПараметр("Отправитель",		Справочники.Склады.НайтиПоНаименованию("Кладовая производственного цеха"));

	ОбъектЗаполнения.МатериалыИРаботы.Загрузить(ЗапросДанных.Выполнить().Выгрузить());
	
	Возврат ОбъектЗаполнения;
КонецФункции
    Серверный вызов происходит из клиентской процедуры "ВыполнитьКоманду", таким образом мы на сервере выполняем необходимые действия с объектом (в нашем примере заполняем табличную часть), обработанный объект возвращаем на сторону клиента и копируем его в данные формы.

    Надеемся данный пример оказался полезным для Вас! Спасибо!

Другие статьи

Функция вычисления контрольной цифры для штрихкода EAN-13 (EAN-8)

    Рабочая функция для вычисления контрольной цифры в штрихкоде формата EAN-13 или EAN-8

Чтение текстового файла в 1С

    Пример чтения данных текстового файла (на клиенте и сервере) при разработке в режиме управляемого приложения 1С

Чтение (Загрузка) данных из MXL в 1С 8.3

    Рабочий пример обработки чтения (загрузки) данных из MXL файла, с учетом отказа от использования модальных вызовов

Открыть форму выбора 1С 8.3

    Пример кода для открытия окна выбора элемента справочника, без использования модальных вызовов

Чтение и загрузка DBF в 1С 8.3

    Пример программного кода для чтения и/или записи файлов в формате DBF

Выгрузка объекта «1С» в XML и загрузка объекта из XML файла

    Пример выгрузки объекта информационной базы (СправочникОбъект, ДокументОбъект) «1С» в XML файл, и пример обратной загрузки объекта из XML файла

Выгрузка и загрузка XML через DOM

    Полезный пример того, как можно выгрузить в XML данные и загрузить обратно через DOM. Обработка осуществляется при помощи таких объектов как: ЗаписьXML, ЧтениеXML, ЗаписьDOM, ДокументDOM, ПостроительDOM.

HTTP запрос в 1С средствами «WinHttpRequest»

    Пример реализации HTTP запроса в 1С, средствами «WinHttpRequest» 

Программное изменение расписания фонового задания 1С 8.3

   Пример программного кода, для редактирования расписания выполнения фонового задания в 1С 8.3 в режиме отказа использования модальных вызовов

Оформление строк табличной части 1С 8.3

    Пример условного оформления элементов формы, в частности строк табличной части в 1С 8.3 (управляемые формы)

Запрос к таблице значений 1С 8.3

    В статье описан простой пример того, как можно сформировать запрос 1С к данным таблицы значений, т.е. как передать таблицу значений в параметр запроса
 

Динамическое создание колонок в таблице на форме 1С (Обычное приложение)

     Практический пример того, каким образом в таблице на форме (в режиме обычного приложения 1С), можно динамически создавать необходимое количество колонок, с возможностью установки обработки событий (например "ПриИзменении" в ячейке таблицы)

Динамическое создание колонок в таблице на форме 1С 8.3

      Практический пример того, каким образом в управляемом интерфейсе можно создавать и удалять колонки в таблице значений на форме

Чтение (загрузка) данных в 1С 8.3 из Excel

     Для передачи различной информации очень часто применяются табличные документы Excel. Переносить руками информацию из такого файла можно, но не удобно. Поэтому давайте рассмотрим, как можно программно в 1С обработать такой документ

Сохранение и восстановление настроек 1С 8.3

    Пример работы с хранилищем настроек 1C, для программного сохранения и получения сохраненных настроек

Внешняя печатная форма 1С 8.3

      Изменения в печатных формах, как и разработка новых, одна из самых распространенных задач. И для этих целей предназначен механизм внешних печатных форм, используемый в конфигурациях 1С.

Определение даты создания ссылки в 1С

Определяем дату создания ссылки по уникальному идентификатору объекта 1С

Программное создание команды и кнопки на форме 1С 8.3

Небольшой пример того, как программно создавать команды и элементы управления на управляемых формах 1С

Открыть форму созданного объекта (Справочник, документ в 1С 8.2, 8.3)

Создаем новый объект, НЕ записываем его в базу, и открываем форму