при работе с табличным полем (ПоставщикДанных) иногда вылетает 1С (раза 3-4 за день). В просмотре событий можно увидеть:
"Ошибка приложения 1cv7s.exe, версия 7.70.0.27, модуль blang.dll, версия 7.70.0.27, адрес 0x0000323f."
не так давно в форму элемента справочника Номенклатура добавил табличное поле с подчиненным справочником сертификаты.
Вылет 1С происходит записи нового элемента номенклатуры (повторюсь не всегда, за день записывают 50-100 новых товаров, а вылетает в среднем 3 раза в день)
Вроде бы ненадолго помогает чистка реетра 1С
привожу фрагмент кода из процедуры ПриЗаписи
ФлагЗаписи=1;
Записать();
Если Новый=1 Тогда
СоздатьТаблицуСертификатов();
ИнициализацияМногострочнойЧасти();
КонецЕсли;
ПроверкаСертификата(ТекущийЭлемент());
Если ПроверкаЗаполненияСертификата(ТекущийЭлемент())=0 Тогда
Сообщить("Необходимо заполнить данные по сертификату!");
КонецЕсли;
ПоставщикДанных.Обновить();
где
Процедура СоздатьТаблицуСертификатов()
Спр2 = СоздатьОбъект("Справочник.СертификатыТоваров");
Для й =1 По 4 Цикл
Спр2.Новый();
Спр2.Владелец = ТекущийЭлемент();
Спр2.УстановитьНовыйКод();
Спр2.ВидСертификата = ЭлементПоКоду("ВидыСертификатов",й);
Спр2.Наименование = Спр2.ВидСертификата.Наименование;
Спр2.НеобходимостьНаличия = Перечисление.Булево.Нет;
Спр2.Записать();
КонецЦикла;
КонецПроцедуры
Процедура ИнициализацияМногострочнойЧасти()
ПоставщикДанных = СоздатьОбъект("ПоставщикДанных");
ВидыСравнения = СоздатьОбъект("ПоставщикДанных.ВидыСравнения");
ПоставщикДанных.ТипЗначений = "Справочник.СертификатыТоваров";
ПоставщикДанных.КонтейнерТабличногоПоля = "СертификатыТП";
ТабличноеПоле = ПоставщикДанных.ТабличноеПоле;
ТабличноеПоле.ИзменятьНастройкуКолонок = 0;
ТабличноеПоле.ИзменятьСоставСтрок = 1;
ТабличноеПоле.ИзменятьПорядокСтрок = 1;
ТабличноеПоле.СтильЗаголовков = 1;
ТабличноеПоле.СтильРамки = 1;
ТабличноеПоле.АвтоКонтекстноеМеню = 0;
Данные = ПоставщикДанных.Данные;
Данные.Владелец = ТекущийЭлемент();
Данные.НоваяКолонка("Код");
Данные.НоваяКолонка("ВидСертификата");
Данные.НоваяКолонка("НеобходимостьНаличия");
Данные.НоваяКолонка("Номер");
Данные.ДобавитьСоединениеДанных("СоединениеДатаВыдачи","left join Справочник.СертификатыНовые as СертификатыНовые $nolock on $ТекущийОбъект.Номер = $СертификатыНовые.ТекущийЭлемент");
Данные.ДобавитьКолонкуДанных("ДатаВыдачи","Дата выдачи","$СертификатыНовые.ДатаВыдачи","Дата",1);
Данные.НоваяКолонка("ДатаВыдачи");
Данные.ДобавитьКолонкуДанных("СрокДействия","Дата выдачи","$СертификатыНовые.СрокДействия","Дата",1);
Данные.НоваяКолонка("СрокДействия");
1);
Данные.НоваяКолонка("Орган");
Данные.ДобавитьКолонкуДанных("КодСертификата","Код серт-та","$СертификатыНовые.Код","число",0);
Данные.НоваяКолонка("КодСертификата");
Колонки = ТабличноеПоле.Колонки;
Колонка = Колонки.Код;
Колонка.Видимость = 0;
Колонка = Колонки.ВидСертификата;
Колонка.Ширина = 20;
Колонка = Колонки.НеобходимостьНаличия;
Колонка.Ширина = 4;
Колонка = Колонки.Номер;
Колонка.Заголовок = "Номер сертификата";
Колонка.Ширина = 30;
Колонка = Колонки.ДатаВыдачи;
Колонка.Ширина = 8;
Колонка = Колонки.СрокДействия;
Колонка.Ширина = 8;
Колонка = Колонки.Орган;
Колонка.Ширина = 5;
Колонка = Колонки.КодСертификата;
Колонка.Ширина = 4;
Данные.ИзменятьИерархическийПросмотр = 0;
Данные.ИерархическийПросмотр = 1;
Данные.СпособРедактирования = 0; //в Списке
Данные.ИзменятьСпособРедактирования = 0;
Данные.ПросмотрПоВладельцу = 1;
Данные.ИзменятьПросмотрПоВладельцу = 0;
Данные.РеквизитСортировки = "Код";
ПоставщикДанных.Обновить();
КонецПроцедуры
думаю, что грабли в процедуре ИнициализацияМногострочнойЧасти
может, что подправить в ней
Процедуры
ПроверкаСертификата(ТекущийЭлемент())
И ПроверкаЗаполненияСертификата(ТекущийЭлемент))
я думаю не причем, так как они же используются в ряде других мест и там все нормально
1С++ 3.0.1.25
FormEx 2.0.5.99