Версия для печати темы (https://pro1c.org.ua/index.php?s=06ca6cc2e9666af94568144837e2835f&showtopic=67142)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Периодические проблемы при заполении реквизитов док. по умолчанию.

Автор: george_smith 13.12.22, 13:41

Конфигурация: Управление небольшой фирмой для Украины, редакция 1.6 (1.6.7.1)
Платформа: 8.3 (8.3.17.1091)

Здравствуйте, в конфигурации, указанной выше создал документ "Форма 100". Данный документ заполняется
данными, прописаными по умолчанию, процедуре ПриСозданииНаСервере:

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


С работой этой процедуры проблем нету. Проблемы переодичеси происходят когда при выборе поставщика нужно подтянуть договор по - умолчанию.

НаКлиенте
Процедура ПоставщикПриИзменении(Элемент)
            Если ЗначениеЗаполнено(Объект.Поставщик)
            И ЗначениеЗаполнено(Объект.Поставщик.ДоговорПоУмолчанию) Тогда
            Объект.Договор = Объект.Поставщик.ДоговорПоУмолчанию;
        КонецЕсли;
КонецПроцедуры


Периодически возникает сообщение "Поле объекта не обнаружено" (ДоговорПоУмолчанию), хотя данный договор существует. Такое получается
1 из 30 раз, приблизительно, когда данный код не срабатывает. То, что договор есть для выбраного поставщика это 100%.

Такое же периодически происходит с процедурой:

СтрокаТабличнойЧасти.ЕдиницаИзмерения = ПолучитьЕденицуИзмерения(СтрокаТабличнойЧасти.Номенклатура.ЕдиницаИзмерения.Код);


&НаСервереБезКонтекста 
Функция ПолучитьЕденицуИзмерения(КодЕдененицыИзмерения)
     ЕдИзм = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду(КодЕдененицыИзмерения);
    Возврат ЕдИзм;    
КонецФункции


Появляется ошибка "Поле объекта не обнаружено "ЕдиницаИзмерения".

Еще заметил, что данные ошибки появляются при первом входе, потом когда перезайти в 1С все снова работает нормально, но потом снова периодически
возникают данные ошибки.

Заранее спасибо!






Автор: Vofka 13.12.22, 14:03

НаКлиенте так обращаться нельзя:

Объект.Поставщик.ДоговорПоУмолчанию

Это надо делать НаСервере (или НаСервереБезКонтекста).

Цитата
Появляется ошибка "Поле объекта не обнаружено "ЕдиницаИзмерения".

Наверное, у вас что-то не то в переменной СтрокаТабличнойЧасти. Телепатирую, что там элемент формы находится, а не строка табличной части.

Автор: george_smith 13.12.22, 14:12

Цитата(Vofka @ 13.12.22, 14:03) *
Наверное, у вас что-то не то в переменной СтрокаТабличнойЧасти. Телепатирую, что там элемент формы находится, а не строка табличной части.


СтрокаТабличнойЧасти это ТД "ДанныеФормыЭлементКоллекции", разве не правильно?

СтрокаТабличнойЧасти = Элементы.ВПроизводстве.ТекущиеДанные;


Как лучше сделать?

Автор: Vofka 13.12.22, 14:23

Цитата(george_smith @ 13.12.22, 14:12) *
Как лучше сделать?

Точно сейчас не помню, но может так:
СтрокаТабличнойЧасти = Элементы.ВПроизводстве.ТекущаяСтрока;

Автор: george_smith 13.12.22, 14:32

Vofka @ Сегодня, 14:23 * ,

Нет, ТекущаяСтрока - это индекс строки в Таблице Формы.

Автор: Vofka 13.12.22, 14:51

Мне сейчас негде глянуть, посмотрите какой-то стандартный документ с табличной частью. Гляньте, например, как при изменении количества пересчитывается сумма. Там должно быть понятно, как обратиться к текущей строке.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua