×
×
+ Ответить в теме
Показано с 1 по 10 из 10
  1. #1
    Клерк
    Регистрация
    10.09.2007
    Сообщений
    24

    Невозможно присвоить полю родительского документа значение, являющееся документом

    Добрый день. Проблема с написанием небольшого отчета в 1С. Сам я не 1С программист, поэтому мне совершенно не понятны странности внутреннего языка. Проблема в следующем - я никак не могу полю ДокументНаОсновании (создан мною, тип - документ) документа ОперацияПоРасчСчету присвоить вновь созданный и проинициализированный экземпляр документа СписокСчетов (создан мною).
    Контекст, в котором выполняется код - Документ.ОперацияПоРасчСчету. Ошибки, которые выдает 1С (введенны в качестве комментария после кода):
    - Неверное присвоение значения. Используйте: .ТекущийДокумент()
    - Не выбран документ!

    Сразу оговорюсь - предлагал использовать в соответствии с текстом ошибки метод .ТекущийДокумент() - но после сохранения ОперацияПоСчету - поле вновь пустое. Спасибо за любую помощь! Код ниже.

    Процедура ДобавитьСчет()
    ДобавляемыйСчет = СоздатьОбъект("Документ.Счет");
    Если ДобавляемыйСчет.Выбрать("Выберете счет") > 0 Тогда

    Если ПустоеЗначение(ДокументНаОсновании) = 1 Тогда
    //Поле ДокументНаОсновании ещё не проинициализированно
    СписокСчетов = СоздатьОбъект("Документ.СписокСчетов");
    СписокСчетов.Новый();
    СписокСчетов.НоваяСтрока();
    //СписокСчетов.Счет - табличная часть документа СписокСчетов
    СписокСчетов.Счет = ДобавляемыйСчет.ТекущийДокумент();
    СписокСчетов.Записать();
    ДокументНаОсновании = СписокСчетов; //Неверное присвоение значения. Используйте: .ТекущийДокумент()
    Иначе
    //Поле ДокументНаОсновании проинициализированно, необходимо добавить счет в список счетов
    СписокСчетов = ДокументНаОсновании;

    СписокСчетов.ВыбратьСтроки();
    СписокСчетов.ПолучитьСтроку();
    СписокСчетов.НоваяСтрока(); //Не выбран документ!
    СписокСчетов.Счет = ДобавляемыйСчет;
    СписокСчетов.Записать();
    КонецЕсли;

    Записать();
    ДобавитьВСписокСчет(ДобавляемыйСчет);
    КонецЕсли
    КонецПроцедуры
    Поделиться с друзьями

  2. #2
    Умный Клерк!
    Регистрация
    07.01.2004
    Адрес
    Владимир
    Сообщений
    13,623
    ну так и используйте ТекущийДокумент(), т.е.
    ДокументНаОсновании = СписокСчетов.ТекущийДокумент();
    Иначе ты пытаешся ссылочному типу присвоить Объект.
    1.Открыта новая радиостанция для юзеров под названием RТ FМ. По ней будут транслироваться чтения различных мануалов и ответы на часто задаваемые вопросы.
    2. "Помогая ленивым людям, ты помогаешь им сесть на свою шею" Сян-Цзы

  3. #3
    Клерк
    Регистрация
    10.09.2007
    Сообщений
    24
    Я использовал, вот только после этой строки ДокументНаОсновании - пустое, при не пустом СписокСчетов! Проверял в отладчике.

  4. #4
    Умный Клерк!
    Регистрация
    07.01.2004
    Адрес
    Владимир
    Сообщений
    13,623
    у вас нетипизированный реквизит ДокументНаОсновании надо сначало использовать НазначитьВиД(<>)
    1.Открыта новая радиостанция для юзеров под названием RТ FМ. По ней будут транслироваться чтения различных мануалов и ответы на часто задаваемые вопросы.
    2. "Помогая ленивым людям, ты помогаешь им сесть на свою шею" Сян-Цзы

  5. #5
    Клерк
    Регистрация
    10.09.2007
    Сообщений
    24
    Вы правы, спасибо! Что-то я не досмотрел, при
    ДокументНаОсновании = СписокСчетов.ТекущийДокумент();
    отлично всё работает. Спасибо! Вот только я не совсем понимаю откуда берется вторая ошибка:

    СписокСчетов = ДокументНаОсновании;
    СписокСчетов.ВыбратьСтроки();
    СписокСчетов.ПолучитьСтроку();
    СписокСчетов.НоваяСтрока(); //Не выбран документ!
    СписокСчетов.Счет = ДобавляемыйСчет;
    СписокСчетов.Записать();

    В отладчике на строке:
    СписокСчетов.НоваяСтрока();
    В табло показывается
    СписокСчетов.Выбран() = 1
    но, тем неменее, 1С выдает ошибку "Не выбран документ!"

  6. #6
    Умный Клерк!
    Регистрация
    07.01.2004
    Адрес
    Владимир
    Сообщений
    13,623
    НоваяСтрока(); применяется к объектному типу, а не к выборке.
    1.Открыта новая радиостанция для юзеров под названием RТ FМ. По ней будут транслироваться чтения различных мануалов и ответы на часто задаваемые вопросы.
    2. "Помогая ленивым людям, ты помогаешь им сесть на свою шею" Сян-Цзы

  7. #7
    Клерк
    Регистрация
    10.09.2007
    Сообщений
    24
    Извените, я что-то не совсем понял...
    Я использую следующий код:

    1. СписокСчетов = ДокументНаОсновании;
    2. СписокСчетов.ВыбратьСтроки();
    3. СписокСчетов.ПолучитьСтроку();
    4. СписокСчетов.НоваяСтрока(); //Не выбран документ!
    5. СписокСчетов.Счет = ДобавляемыйСчет;
    6. СписокСчетов.Записать();

    После выполнения первой строки переменная "СписокСчетов" содержит ссылку на документ, с которой я и работаю в последующих строках. Разве не так? А именно, добавляю новую табличную часть. Табличная часть содержит только одно поле - "Счет".
    Хотя у меня конечно есть подозрение что такой набор строк 2,3 явно излишен...

  8. #8
    Умный Клерк!
    Регистрация
    07.01.2004
    Адрес
    Владимир
    Сообщений
    13,623
    в 1С так нельзя.
    вообще не понятно за чем сперва получить строку, а потом НоваяСтрока()
    Нужно:
    1. СписокСчетов = СоздатьОбъект("Документ");
    СписокСчетов.НайтиДокумент(ДокументНаОсновании);
    4. СписокСчетов.НоваяСтрока(); //Не выбран документ!
    5. СписокСчетов.Счет = ДобавляемыйСчет;
    6. СписокСчетов.Записать();

    что-то типа этого
    1.Открыта новая радиостанция для юзеров под названием RТ FМ. По ней будут транслироваться чтения различных мануалов и ответы на часто задаваемые вопросы.
    2. "Помогая ленивым людям, ты помогаешь им сесть на свою шею" Сян-Цзы

  9. #9
    Клерк
    Регистрация
    10.09.2007
    Сообщений
    24
    Да, точно - работает! (СписокСчетов.Счет = ДобавляемыйСчет + .ТекущийДокумент() Спасибо!
    Вот уж и не думал что так все сложно - можно было бы гораздо прощее сделать. Вот не хватит терпения и сам возьмусь за создание нормальной платформы...

  10. #10
    Умный Клерк!
    Регистрация
    07.01.2004
    Адрес
    Владимир
    Сообщений
    13,623
    Сколько таких героев было...
    на самом деле все в общем-то логично, да и в СинтаксПомошнике все нормально написано.
    1.Открыта новая радиостанция для юзеров под названием RТ FМ. По ней будут транслироваться чтения различных мануалов и ответы на часто задаваемые вопросы.
    2. "Помогая ленивым людям, ты помогаешь им сесть на свою шею" Сян-Цзы

+ Ответить в теме

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы можете создавать новые темы
  • Вы можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •