Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 мар 2024, 17:55

Создание/обновление документа на основании другого документа

Автор Римма, 27 авг 2017, 14:58

0 Пользователей и 1 гость просматривают эту тему.

Римма

Добрый день. Я только приступила к изучению программирования 1С (8.2) и не могу разобраться в одном деле.

Допустим, у нас есть документ А, в котором есть реквизит "Процент". Я хочу сделать так, чтобы после сохранения документа А при наличии значения в "Проценте" автоматически создавался или обновлялся имеющийся документ Б. Причем этот процент должен записаться и в документе Б.

На текущий момент сделано следующее: в модуле документа А в процедуре ПослеЗаписи я создаю Новый документ Б:
ДокументБ = Документы.Б.СоздатьДокумент();
ДокументБ.Дата = ТекущаяДата();
ДокументБ.Записать();

Таким образом у меня ВСЕГДА создается новый пустой документ Б, у которого заполнен только реквизит Дата.

Внимание вопросы:
1) Как проверить, заполнено ли поле Процент в документе А?
2) Как выполнить поиск имеющихся документов Б? (я так понимаю, что должен быть дополнительный реквизит, связывающий документы А и Б)
3) Как передать значение Процент из А в Б?

Просьба ответить на эти вопросы как первокласснице)

Римма

На 1 и 3 вопросы я нашла ответы. Остался нерешенным только второй вопрос.

oleg-x

В документе Б должна быть ссылка на документ А. Либо можно найти по другим реквизитам, если связь не жесткая, например у документа А может быть три документа Б, связ по сотруднику допустим.
Найти документ Б через запрос. Конструктор запросов тебе в помощь.
И вместо создать документ пишешь.
ДокументБ = Ссылка.ПолучитьОбъект(); //ссылка получается из результата запроса.
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

Римма

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

Если Параметр = Ложь тогда
НовыйДокументБ = Документы.Б.СоздатьДокумент();
КонецЕсли;

Однако у меня все равно создается новый документ, хотя во время заполнения данных в документе Б у меня написано:
НовыйДокументБ.СсылкаНаА = ЭтотОбъект;
В чем ошибка?
Добавлено: 28 авг 2017, 15:43


Всё, ошибку нашла. Вопрос закрыт.

oleg-x

Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

Vladimkir

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

      КонецЦикла;
 
      КонецЕсли;

Запрос.УстановитьПараметр("ЭтотДокумент", ЭтотОбъект.Ссылка);
--Это надо смотреть какое событие отслеживаешь. "После записи на сервере" остается Объект.Ссылка  или ТекущийОбъект.Ссылка 

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск