8.х стандартные функции

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем rishat, 9 дек 2009.

  1. TopicStarter Overlay
    rishat
    Offline

    rishat

    Регистрация:
    9 дек 2009
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    Доброго времени суток! Столкнулся с проблемой: не работают стандартные функции записать(), загрузить(), провести, выдает ошибку: Процедура или функция с указанным именем не определена .
    может кто-нибудь знает в чем проблема?(может я неправильно пишу программу)
    Вот текст программмы:
    Код:
    Процедура кнСотрудники(Элемент)
    Ф=ПолучитьФорму("ФормаСотрудники",,);
    Ф.ТЗ=ПолучитьТЗСотрудники();
    Значение=Ф.ОткрытьМодально();
    Если Значение=Неопределено Тогда Возврат;
    КонецЕсли;
    Сотрудники.Загрузить(Значение);
    ТЗ=ПолучитьТЗСотрудники();
    Сотрудники.Загрузить(ТЗ);
    ОбновитьФорму();
    ДанныеВДокумент();
    КонецПроцедуры
    
  2. lazy
    Offline

    lazy Модераторы Команда форума Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Кхм, как определен объект "Сотрудники"? Где в приведенном примере вызов функции Записать() ?

    Не забывайте оформлять код в тег
    Код:
    
    
  3. TopicStarter Overlay
    rishat
    Offline

    rishat

    Регистрация:
    9 дек 2009
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    пременная Сотрудники была объявлена как глобальная:
    код
    Код:
     
    Сотрудники=Справочники.Сотрудники.СоздатьЭлемент();
    Сотрудники=Сотрудники.ПолучитьФорму("ФормаСписка").ТекущийЭлемент;
    
    
    Вызов функции Записать(); происходит при нажатии кнопки Записать:
    Код:
    функция кнЗаписать(кнопка)
    Записать();
    конецФункции
    
    
  4. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Посмотрите в отладчике что за тип переменной "Сотрудники" в строчке
    Сотрудники.Загрузить(Значение); а потом в синтаксис помощнике есть ли у данной переменной Метод Загрузить. Что то я сомневаюсь

    А Записать то что?
    ЭтотОбъект.Записать()
    Ссылка.Записать()

    Что?

    ЗАПИСАТЬ ЭТО Метод, если конечно нигде выще или в модулях не описанна процедура с таким же именем. А Метод он у ОБЪЕКТОВ
  5. TopicStarter Overlay
    rishat
    Offline

    rishat

    Регистрация:
    9 дек 2009
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    Разобрался с загрузкой, спасибо :)
  6. TopicStarter Overlay
    rishat
    Offline

    rishat

    Регистрация:
    9 дек 2009
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    Разобрался с загрузкой, :unsure:

    А как сохранить (Записать) поля документа, где поля берутся с разных справочников
    может у кого такой пример ест???

    Посмотреть вложение 3058

    Вложения:

  7. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Же говорю что бы записать объект надо вызвать у него метод Записать.
    В твоем случае сработает
    Код:
    функция кнЗаписать(кнопка)
    ЭтотОбъект().Записать();
    конецФункции
    
    
    
    Если документ заполняется из вне то вот так

    Код:
    Продедура ЗаполнитьИЗаписатьДокумент()
    Док= ДокументСсылка.ПолучитьОбъект();
    Док.Контрагент="";
    ДокОтвсетсвенный="";
    Док.Записать(РежимЗаписиДокумента.Проведение);
    КонецПроцедуры
    
    
    
    [/quote]
    Ну там еще у метода записать есть
  8. TopicStarter Overlay
    rishat
    Offline

    rishat

    Регистрация:
    9 дек 2009
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    Все равно не получается :unsure: :smile: :aua:
    написал код: .
    Код:
    Процедура Закрыть(Кнопка)
    попытка 
    //ЗаписатьДанные(ТЗТЗ);
    глПровести(ЭтотОбъект);
    глЗаписать(ЭтотОбъект);
    РежимЗаписиДокумента.Запись();
    ЭтотОбъект.ЗаписатьДанные();
    ЭтотОбъект.Записать();
    ЭтотОбъект.Записать(РежимЗаписиДокумента.Проведение);
    ЭтотОбъект.Записать(РежимЗаписиДокумента.Запись);
    исключение
    Сообщить("Не удалось записать и закрыть!!!");
    конецпопытки;	
    Закрыть();
    КонецПроцедуры
    
    
    выходит сообщение: Не удалось записать и закрыть!!!
  9. Абырвалг
    Offline

    Абырвалг Опытный в 1С

    Регистрация:
    8 дек 2009
    Сообщения:
    112
    Симпатии:
    1
    Баллы:
    29
    Это что-то страшное, я не пойму зачем так много всего и для чего...
    Draco
    Всё отлично написал.
    Смотри в отладчике чему равен твой
    ЭтотОбъект
    И еще я чего вообще надо... а так все функции работают, ты бы лучше убрал "Попытка" и читал то что пишет тебе 1с в ошибках и попробовал устранить ошибку, а не сводить все свои ошибки к одной с восклицательными знаками...
  10. TopicStarter Overlay
    rishat
    Offline

    rishat

    Регистрация:
    9 дек 2009
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    А как пошаговый отладчик запустить??? что-то я его не нашел
    Выдает ошибку
    Код:
    {Документ.ЗаписьНаПрием.Форма.ФормаДокумента(88)}: Ошибка при вызове метода контекста (Записать): Операция <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/не')">не выполнена!</span>
    Док.Записать(РежимЗаписиДокумента.Проведение);
    по причине:
    Операция <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/не')">не выполнена!</span>
    
    
  11. Абырвалг
    Offline

    Абырвалг Опытный в 1С

    Регистрация:
    8 дек 2009
    Сообщения:
    112
    Симпатии:
    1
    Баллы:
    29
    Отладка: запускаешь конфигуратор, жмешь F5, ставишь курсор на строку
    Код:
    Док.Записать(РежимЗаписиДокумента.Проведение);
    
    Жмешь F9. Заходишь в свой док-т и нажимаешь на кнопку Закрыть или какая там у тебя кнопка записывает документ, ждешь пока отладка дойдет до твоей строки, дальше пошагово нажимать F10 вот тебе и пошаговая отладка.
    Ну у тебя 100% Док типа Ссылка, тебе надо тип объект, попробуй так:
    Код:
    ЭтотОбъект.Записать(РежимЗаписиДокумента.Проведение);
    
    Если же Док - это не документ "ЗаписьНаПрием", а какой-то другой выбранный, тогда пробуй
    Код:
    ДокОбъект = Док.ПолучитьОбъект();
    ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
    
  12. x_under
    Offline

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    Судя по тексту вашей ошибки Док - это форма документа, а не документ-объект. Если вы расскажите в целом задачу и покажете не урывки кода с нереальным потом мысли - вам будет легче помочь.
  13. TopicStarter Overlay
    rishat
    Offline

    rishat

    Регистрация:
    9 дек 2009
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    На запись щас не ругается,
    Код:
    Процедура кнПровести(Кнопка)
    Док= ЭтаФорма.ДокументОбъект.ЭтотОбъект;  
    Док.Контрагент="";
    Док.врач="";
    Док.Ассистент="";
    Док.Время1="";
    Док.Время2="";
    Док.МестоХранения="";
    Док.ВидРекламы="";
    Док.ОтВрача="";
    Док.ТипЦен="";
    Док.ОснованиеТипаЦены="";
    Док.ЗаписатьДанные(РежимЗаписиДокумента.Запись);
    ЗаписатьДанные(ТЗТЗ);
    ЭтотОбъект.Записать();
    
    КонецПроцедуры
    
    
    Код:
    Процедура ЗаписатьДанные(ТЗТЗ) Экспорт
    КлассыДанных.Очистить();
    Реквизиты.Очистить();
    Таблицы.Очистить();		
    Для Каждого стрТЗ Из ТЗТЗ Цикл
    стрКД=КлассыДанных.Добавить();
    стрКД.КлассДанных=стрТЗ.КлассДанных;
    Если Не ПустоеЗначение(стрТЗ.ДЗ) Тогда
    ЗаписатьКлассДанныхИзДЗ(стрТЗ.ДЗ);
    КонецЕсли;
    Если Не ПустоеЗначение(стрТЗ.ТЗ) Тогда
    ЗаписатьКлассДанныхИзТЗ(стрТЗ.ТЗ,стрТЗ.КлассДанныхТаблицы);
    КонецЕсли;
    КонецЦикла;
    КлассыДанных.Свернуть("КлассДанных","");
    КонецПроцедуры
    
    
    
    но появилась новая ошибка:
    Код:
    Итератор для значения не определен
    Для Каждого стрТЗ Из ТЗТЗ Цикл
    
    
    Здесь ТЗТЗ=Новый ТаблицаЗначений;
    стрТЗ -это строки таблицы записей
  14. Абырвалг
    Offline

    Абырвалг Опытный в 1С

    Регистрация:
    8 дек 2009
    Сообщения:
    112
    Симпатии:
    1
    Баллы:
    29
    Ну значит ТЗТЗ - не таблица значений, если итератор не определен, заходи в отладчик и смотри какой у твоей переменной ТЗТЗ тип.
  15. TopicStarter Overlay
    rishat
    Offline

    rishat

    Регистрация:
    9 дек 2009
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    в модуле документа прием ТЗТЗ определен как ТаблицаЗначений
    а в модуле самого документа почему переопределяет его как РежимЗаписиДокумента, значение-запись
    Почему так его переопределяет понятия не имею
  16. Абырвалг
    Offline

    Абырвалг Опытный в 1С

    Регистрация:
    8 дек 2009
    Сообщения:
    112
    Симпатии:
    1
    Баллы:
    29
    Ну мало ли как он определен, ты же весь текст не показываешь, может ты его переопределяешь или совсем не определяешь или не там определяешь, говорю, проверь в отладчике, если 1с пишет, что не поределен итератор, значит твой ТЗТЗ не типа ТаблицаЗначений, а какого-то другого, проверяй.

    вот мне интересно как ты отличаешь два места:
    "модуле документа прием"
    и
    "модуле самого документа"
    Ты наверное в одной процедуре определяешь один тип, а в другой процедуре другой. Запускай отладчик и жми F11 вплоть до своего цикла или вплоть до понимания причины.
  17. TopicStarter Overlay
    rishat
    Offline

    rishat

    Регистрация:
    9 дек 2009
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    я понял свою ошибку... когда я его вызвывал, то я его определял как
    Код:
    Док.ЗаписатьДанные(РежимЗаписиДокумента.Запись);
    
    
    
    но у меня все равно не видит стрТЗ, пишет :Переменная не определена,
    хотя ТЗТЗ видит как таблица значений
  18. Абырвалг
    Offline

    Абырвалг Опытный в 1С

    Регистрация:
    8 дек 2009
    Сообщения:
    112
    Симпатии:
    1
    Баллы:
    29
    Ну а где переменная не определена?
    Показывай всю ошибку.
  19. TopicStarter Overlay
    rishat
    Offline

    rishat

    Регистрация:
    9 дек 2009
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    пишет что переменная не определена в документ.прием модуль объекта
    Код:
    Итератор для значения не определен
    Для Каждого стрТЗ Из ТЗТЗ Цикл
    
    
    в процедуре записатьданные(ТЗТЗ)
    Код:
    Процедура ЗаписатьДанные(ТЗТЗ) Экспорт
    КлассыДанных.Очистить();
    Реквизиты.Очистить();
    Таблицы.Очистить();
    Для Каждого стрТЗ Из ТЗТЗ Цикл  /////ошибку здесь показывает
    стрКД=КлассыДанных.Добавить();
    стрКД.КлассДанных=стрТЗ.КлассДанных;
    Если Не ПустоеЗначение(стрТЗ.ДЗ) Тогда
    ЗаписатьКлассДанныхИзДЗ(стрТЗ.ДЗ);
    КонецЕсли;
    Если Не ПустоеЗначение(стрТЗ.ТЗ) Тогда
    ЗаписатьКлассДанныхИзТЗ(стрТЗ.ТЗ,стрТЗ.КлассДанныхТаблицы);
    КонецЕсли;
    КонецЦикла;
    КлассыДанных.Свернуть("КлассДанных","");
    КонецПроцедуры
    
    
    может я все неправильно делаю???
    может у кого есть пример модуля документа, где есть табличные поля, поля ввода. и эти поля берутся из справочников, чтобы посмотреть как все записывается
  20. Абырвалг
    Offline

    Абырвалг Опытный в 1С

    Регистрация:
    8 дек 2009
    Сообщения:
    112
    Симпатии:
    1
    Баллы:
    29
    Блин ну поставь ты точку останова и посмотри какой тип у твоей переменной ТЗТЗ:
    Код:
    Процедура ЗаписатьДанные(ТЗТЗ) Экспорт
    КлассыДанных.Очистить();
    Реквизиты.Очистить();
    Таблицы.Очистить();
    Для Каждого стрТЗ Из ТЗТЗ Цикл  ///// <<-- Поставить точку останова Здесь
    стрКД=КлассыДанных.Добавить();
    стрКД.КлассДанных=стрТЗ.КлассДанных;
    Если Не ПустоеЗначение(стрТЗ.ДЗ) Тогда
    ЗаписатьКлассДанныхИзДЗ(стрТЗ.ДЗ);
    КонецЕсли;
    Если Не ПустоеЗначение(стрТЗ.ТЗ) Тогда
    ЗаписатьКлассДанныхИзТЗ(стрТЗ.ТЗ,стрТЗ.КлассДанныхТаблицы);
    КонецЕсли;
    КонецЦикла;
    КлассыДанных.Свернуть("КлассДанных","");
    КонецПроцедуры
    

    если не тип не равен ТаблицаЗначений, тогда ставь точку останова там где ты вызываешь процедуру
    Код:
    ЗаписатьДанные(ТЗТЗ) 
    
    Блин, есои ты не хочешь самостоятельно разбираться с отладчиком, то может стоит бросить это дело, с программированием-то...?

Поделиться этой страницей