INFOSTART EVENT 2018 EDUCATION

Второй тур голосования за доклады.
Окончание 5 сентября.

Еникеев Марат | Руководитель проектов 1С | ГК «Комплексная автоматизация»

«Структурно-независимые базы данных в 1С»

В докладе расскажу об идеях построения гибких (содержащих в БД структуру данных) систем на платформе 1С. Рассмотрим: - варианты развития функциональности известных подсистем БСП "Дополнительные реквизиты/сведения"; - как они соотносятся с конфигурациями "Конвертация данных (2 и 3)" и "Система проектирования прикладных решений"; - причем здесь паттерн программирования Модель-Представление-Контроллер (MVC) и расширение “Характеристики” языка запросов СКД; - по-новому посмотрим на периодические независимые регистры сведений и возможности их использования. Коснемся вопросов интеграции такого рода систем с внешними, в частности использование пакетов\фабрик XDTO, проведём аналогии с пакетом EnterpriseData (универсальный формат обмена данными). Обозначим области применения таких систем и их ограничения, в частности возможные подходы к решению проблем версионирования, производительности, обеспечения целостности данных и специфику формирования отчетов. Рассмотрим практический опыт разработки/внедрения/сопровождения подобной структурно-независимой формации на примере запатентованного продукта учета ресурсов системы здравоохранения и его механизмов интеграции с федеральным сервисом Единой Государственной Информационной Системы Здравоохранения в разрезе Федерального Регистра Медицинских Работников и других регистров. Поговорим об использовании этих идей в целях: - прототипирования информационных систем на этапе сбора/анализа требований, - построения экспертных систем поддержки принятия решений (ЭСППР) на базе описанной архитектуры.

1. slava9119 16.05.18 19:58 Сейчас в теме

ЗУП 3.1 загрузка реквизита документа из шапки документа в табличную часть

Здравствуйте, помогите пожалуйста решить вопрос, конфигурация ЗУП КОРП 3.1, в документе Назначение планового начисления, нужно дату из реквизита Дата Окончания, при нажатии на кнопку выгрузить в табличную часть. Сделал это как внешнюю обработку через кнопку на форме :

&НаКлиенте
Процедура Заполнить(Команда)
    ЗаполнитьНаСервере();
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьНаСервере()
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    НазначениеПлановогоНачисления.Ссылка КАК Ссылка,
    |    НазначениеПлановогоНачисления.ДатаОкончания КАК ДатаОкончания
    |ИЗ
    |    Документ.НазначениеПлановогоНачисления КАК НазначениеПлановогоНачисления
    |ГДЕ
    |    НазначениеПлановогоНачисления.Ссылка = &Ссылка";
    Запрос.УстановитьПараметр("ссылка", ВыборДок ) ;
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        
        ДатаОкон =(ВыборкаДетальныеЗаписи.ДатаОкончания) ;
        ОБ = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
        
        Для каждого стр из ОБ.сотрудники цикл
            Стр.ДатаОкончания = ДатаОкон;
            
        КонецЦикла ;
    КонецЦикла;
    
    ОБ.Записать(РежимЗаписиДокумента.Проведение);
    
КонецПроцедуры
Показать


Код работает, но мне нужно сделать как внешнюю обработку через "ЗаполнениеОбъекта", чтобы кнопка появилась на форме в самом документе. Тут возникли сложности, при нажатии на кнопку выдаёт ошибку :

{ВнешняяОбработка.ЗаполнениеТабличнойЧасти.Форма.Форма.Форма(37)}: Значение не является значением объектного типа (Записать)
ОБ.Записать(РежимЗаписиДокумента.Запись);

Спасибо
Ответы
Сортировка: Древо
2. user705522_constantin_h 7 16.05.18 22:38 Сейчас в теме
(1)У вас
ОБ = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();

создаётся внутри цикла, а
ОБ.Записать(РежимЗаписиДокумента.Проведение);

за пределами цикла. Если выборка пустая, записывать нечего.
3. slava9119 16.05.18 23:31 Сейчас в теме
Перенес, ошибка пропала, но код всё равно не отрабатывает, посмотрите пожалуйста, может увидите ошибку

&НаКлиенте
Процедура Заполнить(Команда)
	ЗаполнитьНаСервере(ВыборДок);
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьНаСервере(ссылка)
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	НазначениеПлановогоНачисления.Ссылка КАК Ссылка,
	|	НазначениеПлановогоНачисления.ДатаОкончания КАК ДатаОкончания
	|ИЗ
	|	Документ.НазначениеПлановогоНачисления КАК НазначениеПлановогоНачисления
	|ГДЕ
	|	НазначениеПлановогоНачисления.Ссылка = &Ссылка";
	
	Запрос.УстановитьПараметр("Ссылка", ВыборДок ) ;
	
	РезультатЗапроса = Запрос.Выполнить();
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		
		ДатаОкон =(ВыборкаДетальныеЗаписи.ДатаОкончания) ;
		ОБ = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
		
		Для каждого стр из ОБ.сотрудники цикл
			
			ОБ.ДатаОкончания = ДатаОкон;
			ОБ.Записать(РежимЗаписиДокумента.Запись);

		КонецЦикла ;
	КонецЦикла;	
КонецПроцедуры


&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
	
	ЗаполнитьНаСервере(ОбъектыНазначенияМассив[0]);
	ФормаВладелец = ЭтаФорма.ВладелецФормы;	
	ФормаВладелец.Прочитать();
КонецПроцедуры
Показать
4. maip1 17.05.18 00:59 Сейчас в теме
(3) какую-нибудь ошибку выдает или просто не происходит ожидаемого?
5. slava9119 17.05.18 01:11 Сейчас в теме
(4) По нажатию на кнопку ничего не происходит
Прикрепленные файлы:
ЗаполнениеТЧ INF.epf
6. Mihasya 16 17.05.18 01:27 Сейчас в теме
а если вместо:
 Для каждого стр из ОБ.сотрудники цикл
            
            ОБ.ДатаОкончания = ДатаОкон;
            ОБ.Записать(РежимЗаписиДокумента.Запись);

        КонецЦикла ;


это:
Для каждого стр из ОБ.сотрудники цикл
            
            ОБ.ДатаОкончания = ДатаОкон;

        КонецЦикла ;
        ОБ.Записать(РежимЗаписиДокумента.Запись);
7. slava9119 17.05.18 01:36 Сейчас в теме
8. slava9119 17.05.18 15:16 Сейчас в теме
вроде понял, в чём проблема
&НаКлиенте
Процедура Заполнить(Команда)
	ЗаполнитьНаСервере(ВыборДок);
КонецПроцедуры


&НаСервере
Процедура ЗаполнитьНаСервере(Ссылка)
	
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	НазначениеПлановогоНачисления.Ссылка КАК Ссылка,
	|	НазначениеПлановогоНачисления.ДатаОкончания КАК ДатаОкончания
	|ИЗ
	|	Документ.НазначениеПлановогоНачисления КАК НазначениеПлановогоНачисления
	|ГДЕ
	|	НазначениеПлановогоНачисления.Ссылка = &Ссылка";
	Запрос.УстановитьПараметр("ссылка", ВыборДок ) ;
	
	РезультатЗапроса = Запрос.Выполнить();
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		
		ДатаОкон =(ВыборкаДетальныеЗаписи.ДатаОкончания) ;
		ОБ = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
		
		Для каждого стр из ОБ.сотрудники цикл
			
			Стр.ДатаОкончания = ДатаОкон;
			ОБ.Записать(РежимЗаписиДокумента.Запись);
			
			
		КонецЦикла ;
	КонецЦикла;
	
	
КонецПроцедуры


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

Вакансии


Программист 1С
Москва
зарплата от 100 000 руб. до 200 000 руб.
Полный день

Преподаватель 1С
Санкт-Петербург
Полный день

Удаленный ИТ-журналист
Санкт-Петербург
По совместительству

Удаленный бизнес-аналитик 1С
Санкт-Петербург
Временный (на проект)