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

Как получить реквизит документа

Автор Sheriff, 27 апр 2018, 07:13

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

Norfolk

Цитата: Sheriff от 28 апр 2018, 11:21
Цитата: Norfolk от 28 апр 2018, 11:12
Цитата: Sheriff от 28 апр 2018, 11:08
Цитата: Norfolk от 28 апр 2018, 10:27
Если Не ЗначениеЗаполнено(СтрокаТаблицыТовары.ДополнительныеДанные) Тогда
        ДокСчетФактура = Ссылка.ДокументОснование; //получаем документ счет-фактура
        ДокРеализацияТМЗ = ДокСчетФактура.ДокументОснование;//получаем документ реализация ТМЗ
        ДокОтгрузкаВагонов = ДокРеализацияТМЗ.ДокументОснование;//получаем документ отгрузка вагонов, который нам нужен
        ИскомаяСтрока = ДокОтгрузкаВагонов.[ИмяВашейТабЧасти].Найти(СтрокаТаблицыТовары.Товар); //ищем строку в табличной части
        //если нашли - проставляем реквизит, если не нашли такую строку - ничего не заполнится       
        Если ИскомаяСтрока <> Неопределено Тогда
            СтрокаТаблицыТовары.ДополнительныеДанные = ИскомаяСтрока.Вагон;
        КонецЕсли;
    КонецЕсли;

Если в строке:
ДокСчетФактура = Ссылка.ДокументОснование; //получаем документ счет-фактура
Оставить Ссылка.ДокументОснование; - то, будет ошибка, что переменная "Ссылка" не определена, если поставить ВыборкаТовары.СчетФактура.ДокументОснование; - то норм, но далее спотыкается на следующей ошибке
{Обработка.ОбменЭСФ.МодульОбъекта(11898)}: Значение не является значением объектного типа (ДокументОснование)
        ДокОтгрузкаВагонов = ДокРеализацияТМЗ.ДокументОснование;//получаем документ отгрузка вагонов, который нам нужен
Ну я же вам не дословный код привел...смотрите структуру вашей конфигурации. Если вы говорите, что документ "Реализация ТМЗ" вводится на основании документа "Отгрузка вагонов", то там должна быть ссылка на документ "Отгрузка вагонов". Подставляйте свои значения и все.
То есть логика примерно такая: вам нужно получить ссылку на документ "Отгрузка вагонов" из последнего документа. Как я понимаю они вводятся друг через друга, соответственно должен быть реквизит документ основание (ну либо похожий). Получаете ссылку, далее для каждой строки последнего дока ищете соответствующую строку в первом доке.
п.с.
нахождение документа "Отгрузка вагонов" вынесите перед циклом обхода товаров.
Там в общем дело в том, что документ Реализация, не вводится на основании док.Огрузка вагонов, этот документ, просто находится в табличной части, документа Реализации. (скрин)
Ну тогда вместо ДокОтгрузкаВагонов = ДокРеализацияТМЗ.ДокументОснование; пишем ТаблицаОтгрузок = ДокРеализацияТМЗ.ОтгрузкаВагонов.Выгрузить(,"СсылкаНаДокумент");
ДокОтгрузкаВагонов = ТаблицаОтгрузок[0];

Sheriff

Цитата: Norfolk от 28 апр 2018, 11:31
Цитата: Sheriff от 28 апр 2018, 11:21
Цитата: Norfolk от 28 апр 2018, 11:12
Цитата: Sheriff от 28 апр 2018, 11:08
Цитата: Norfolk от 28 апр 2018, 10:27
Если Не ЗначениеЗаполнено(СтрокаТаблицыТовары.ДополнительныеДанные) Тогда
        ДокСчетФактура = Ссылка.ДокументОснование; //получаем документ счет-фактура
        ДокРеализацияТМЗ = ДокСчетФактура.ДокументОснование;//получаем документ реализация ТМЗ
        ДокОтгрузкаВагонов = ДокРеализацияТМЗ.ДокументОснование;//получаем документ отгрузка вагонов, который нам нужен
        ИскомаяСтрока = ДокОтгрузкаВагонов.[ИмяВашейТабЧасти].Найти(СтрокаТаблицыТовары.Товар); //ищем строку в табличной части
        //если нашли - проставляем реквизит, если не нашли такую строку - ничего не заполнится       
        Если ИскомаяСтрока <> Неопределено Тогда
            СтрокаТаблицыТовары.ДополнительныеДанные = ИскомаяСтрока.Вагон;
        КонецЕсли;
    КонецЕсли;

Если в строке:
ДокСчетФактура = Ссылка.ДокументОснование; //получаем документ счет-фактура
Оставить Ссылка.ДокументОснование; - то, будет ошибка, что переменная "Ссылка" не определена, если поставить ВыборкаТовары.СчетФактура.ДокументОснование; - то норм, но далее спотыкается на следующей ошибке
{Обработка.ОбменЭСФ.МодульОбъекта(11898)}: Значение не является значением объектного типа (ДокументОснование)
        ДокОтгрузкаВагонов = ДокРеализацияТМЗ.ДокументОснование;//получаем документ отгрузка вагонов, который нам нужен
Ну я же вам не дословный код привел...смотрите структуру вашей конфигурации. Если вы говорите, что документ "Реализация ТМЗ" вводится на основании документа "Отгрузка вагонов", то там должна быть ссылка на документ "Отгрузка вагонов". Подставляйте свои значения и все.
То есть логика примерно такая: вам нужно получить ссылку на документ "Отгрузка вагонов" из последнего документа. Как я понимаю они вводятся друг через друга, соответственно должен быть реквизит документ основание (ну либо похожий). Получаете ссылку, далее для каждой строки последнего дока ищете соответствующую строку в первом доке.
п.с.
нахождение документа "Отгрузка вагонов" вынесите перед циклом обхода товаров.
Там в общем дело в том, что документ Реализация, не вводится на основании док.Огрузка вагонов, этот документ, просто находится в табличной части, документа Реализации. (скрин)
Ну тогда вместо ДокОтгрузкаВагонов = ДокРеализацияТМЗ.ДокументОснование; пишем ТаблицаОтгрузок = ДокРеализацияТМЗ.ОтгрузкаВагонов.Выгрузить(,"СсылкаНаДокумент");
ДокОтгрузкаВагонов = ТаблицаОтгрузок[0];

{Обработка.ОбменЭСФ.МодульОбъекта(11901)}: Поле объекта не обнаружено (Вагоны)
        ИскомаяСтрока = ДокОтгрузкаВагонов.Вагоны.Найти(СтрокаТаблицыТовары.Товар); //ищем строку в табличной части

Norfolk

В принципе у вас могло не оказаться документа отгрузки вагонов в табличной части...
посмотрите в отладчике значение поля "ДокОтгрузкиВагонов"

Sheriff

Цитата: Norfolk от 28 апр 2018, 11:47
В принципе у вас могло не оказаться документа отгрузки вагонов в табличной части...
посмотрите в отладчике значение поля "ДокОтгрузкиВагонов"
Самого документа я там не нашел(но он есть по факту), только таблицазначений
Добавлено: 28 апр 2018, 12:04


Цитата: Norfolk от 28 апр 2018, 11:47
В принципе у вас могло не оказаться документа отгрузки вагонов в табличной части...
посмотрите в отладчике значение поля "ДокОтгрузкиВагонов"

Добавлено: 28 апр 2018, 12:09


Цитата: Norfolk от 28 апр 2018, 11:47
В принципе у вас могло не оказаться документа отгрузки вагонов в табличной части...
посмотрите в отладчике значение поля "ДокОтгрузкиВагонов"
Если Не ЗначениеЗаполнено(СтрокаТаблицыТовары.ДополнительныеДанные) Тогда
        ДокСчетФактура = ВыборкаТовары.СчетФактура; //получаем документ счет-фактура
        ДокРеализацияТМЗ = ВыборкаТовары.СчетФактура.ДокументОснование;//получаем документ реализация ТМЗ
       // ДокОтгрузкаВагонов = ВыборкаТовары.СчетФактура.ДокументОснование.Контрагент.БИН;//получаем документ отгрузка вагонов, который нам нужен
   ТаблицаОтгрузок = ВыборкаТовары.СчетФактура.ДокументОснование.ДокументыОтгрузкиВагонами.Выгрузить(,"СсылкаНаДокумент");
ДокОтгрузкаВагонов = ТаблицаОтгрузок[0];
        ИскомаяСтрока = ДокОтгрузкаВагонов.СсылкаНаДокумент.Вагоны.Найти(СтрокаТаблицыТовары.Товар); //ищем строку в табличной части
        //если нашли - проставляем реквизит, если не нашли такую строку - ничего не заполнится       
        Если ИскомаяСтрока <> Неопределено Тогда
            СтрокаТаблицыТовары.ДополнительныеДанные = ИскомаяСтрока.Вагон;
        КонецЕсли;
    КонецЕсли;

В таком коде работает, подставляет, НО, только первый номер вагона, а как сделать чтоб он все номера вагонов подхватывал из этого документа?
Добавлено: 28 апр 2018, 12:10


Цитата: Sheriff от 28 апр 2018, 11:57
Цитата: Norfolk от 28 апр 2018, 11:47
В принципе у вас могло не оказаться документа отгрузки вагонов в табличной части...
посмотрите в отладчике значение поля "ДокОтгрузкиВагонов"
Самого документа я там не нашел(но он есть по факту), только таблицазначений
Добавлено: 28 апр 2018, 12:04


Цитата: Norfolk от 28 апр 2018, 11:47
В принципе у вас могло не оказаться документа отгрузки вагонов в табличной части...
посмотрите в отладчике значение поля "ДокОтгрузкиВагонов"

Добавлено: 28 апр 2018, 12:09


Цитата: Norfolk от 28 апр 2018, 11:47
В принципе у вас могло не оказаться документа отгрузки вагонов в табличной части...
посмотрите в отладчике значение поля "ДокОтгрузкиВагонов"
Если Не ЗначениеЗаполнено(СтрокаТаблицыТовары.ДополнительныеДанные) Тогда
        ДокСчетФактура = ВыборкаТовары.СчетФактура; //получаем документ счет-фактура
        ДокРеализацияТМЗ = ВыборкаТовары.СчетФактура.ДокументОснование;//получаем документ реализация ТМЗ
       // ДокОтгрузкаВагонов = ВыборкаТовары.СчетФактура.ДокументОснование.Контрагент.БИН;//получаем документ отгрузка вагонов, который нам нужен
   ТаблицаОтгрузок = ВыборкаТовары.СчетФактура.ДокументОснование.ДокументыОтгрузкиВагонами.Выгрузить(,"СсылкаНаДокумент");
ДокОтгрузкаВагонов = ТаблицаОтгрузок[0];
        ИскомаяСтрока = ДокОтгрузкаВагонов.СсылкаНаДокумент.Вагоны.Найти(СтрокаТаблицыТовары.Товар); //ищем строку в табличной части
        //если нашли - проставляем реквизит, если не нашли такую строку - ничего не заполнится       
        Если ИскомаяСтрока <> Неопределено Тогда
            СтрокаТаблицыТовары.ДополнительныеДанные = ИскомаяСтрока.Вагон;
        КонецЕсли;
    КонецЕсли;

В таком коде работает, подставляет, НО, только первый номер вагона, а как сделать чтоб он все номера вагонов из табличной части документа подхватывал?
Добавлено: 28 апр 2018, 12:51


Если Не ЗначениеЗаполнено(СтрокаТаблицыТовары.ДополнительныеДанные) Тогда
        ДокСчетФактура = ВыборкаТовары.СчетФактура; //получаем документ счет-фактура
        ДокРеализацияТМЗ = ВыборкаТовары.СчетФактура.ДокументОснование;//получаем документ реализация ТМЗ
       // ДокОтгрузкаВагонов = ВыборкаТовары.СчетФактура.ДокументОснование.Контрагент.БИН;//получаем документ отгрузка вагонов, который нам нужен
   ТаблицаОтгрузок = ВыборкаТовары.СчетФактура.ДокументОснование.ДокументыОтгрузкиВагонами.Выгрузить(,"СсылкаНаДокумент");
ДокОтгрузкаВагонов = ТаблицаОтгрузок[0];
        ИскомаяСтрока = ДокОтгрузкаВагонов.СсылкаНаДокумент.Вагоны.Найти(СтрокаТаблицыТовары.Товар); //ищем строку в табличной части
        //если нашли - проставляем реквизит, если не нашли такую строку - ничего не заполнится       
        Если ИскомаяСтрока <> Неопределено Тогда
            СтрокаТаблицыТовары.ДополнительныеДанные = ИскомаяСтрока.Вагон;
        КонецЕсли;
    КонецЕсли;

Как в этом коде сделать так, чтобы он подставлял все номера вагонов с документа, а не только первый?
Т.е в документе "ОтгрузкаВагонов", в таб.части из 3-и вагона и соответственно 3-и разных номера.
А в таком коде, он мне проставляет только первый, остальные не попадают в колонку "Дополнительные Данные"

Norfolk

Я думал у вас там одна строка, ну да ладно. Посоветовал вам бы почитать синтакс-помощник хотя бы))
примерно так нужно сделать:
ТаблицаОтгрузок = ВыборкаТовары.СчетФактура.ДокументОснование.ДокументыОтгрузкиВагонами.Выгрузить(,"СсылкаНаДокумент");
        ДокОтгрузкаВагонов = ТаблицаОтгрузок[0];
        МассивСтрокДокумента = ДокОтгрузкаВагонов.СсылкаНаДокумент.Вагоны.НайтиСтроки(Новый Структура("ИмяКолонкиТовара", СтрокаТаблицыТовары.Товар)); //где "ИмяКолонкиТовара" - наименование колонки ТЧ Вагоны, где ссылка на справочник номенклатура (у вас мб это колонка называется "Номенклатура"       
        Если МассивСтрокДокумента.Количество Тогда //если нашлись какие=то строки, то к предыдущему значению доп.данных добавляем найденный номер
            Для Каждого ЭлементМассива из МассивСтрокДокумента Цикл
            СтрокаТаблицыТовары.ДополнительныеДанные = СтрокаТаблицыТовары.ДополнительныеДанные + ЭлементМассива .Вагон;
            КонецЦикла
        КонецЕсли;
       

Sheriff

Цитата: Norfolk от 28 апр 2018, 17:35
Я думал у вас там одна строка, ну да ладно. Посоветовал вам бы почитать синтакс-помощник хотя бы))
примерно так нужно сделать:
ТаблицаОтгрузок = ВыборкаТовары.СчетФактура.ДокументОснование.ДокументыОтгрузкиВагонами.Выгрузить(,"СсылкаНаДокумент");
        ДокОтгрузкаВагонов = ТаблицаОтгрузок[0];
        МассивСтрокДокумента = ДокОтгрузкаВагонов.СсылкаНаДокумент.Вагоны.НайтиСтроки(Новый Структура("ИмяКолонкиТовара", СтрокаТаблицыТовары.Товар)); //где "ИмяКолонкиТовара" - наименование колонки ТЧ Вагоны, где ссылка на справочник номенклатура (у вас мб это колонка называется "Номенклатура"       
        Если МассивСтрокДокумента.Количество Тогда //если нашлись какие=то строки, то к предыдущему значению доп.данных добавляем найденный номер
            Для Каждого ЭлементМассива из МассивСтрокДокумента Цикл
            СтрокаТаблицыТовары.ДополнительныеДанные = СтрокаТаблицыТовары.ДополнительныеДанные + ЭлементМассива .Вагон;
            КонецЦикла
        КонецЕсли;
       
Не, с таким вариантом тоже много ошибок лезет. В частности на строку
Если МассивСтрокДокумента.Количество Тогда
Пишет: Поле объекта не обнаружено

Norfolk

Цитата: Sheriff от 02 мая 2018, 06:44
Цитата: Norfolk от 28 апр 2018, 17:35
Я думал у вас там одна строка, ну да ладно. Посоветовал вам бы почитать синтакс-помощник хотя бы))
примерно так нужно сделать:
ТаблицаОтгрузок = ВыборкаТовары.СчетФактура.ДокументОснование.ДокументыОтгрузкиВагонами.Выгрузить(,"СсылкаНаДокумент");
        ДокОтгрузкаВагонов = ТаблицаОтгрузок[0];
        МассивСтрокДокумента = ДокОтгрузкаВагонов.СсылкаНаДокумент.Вагоны.НайтиСтроки(Новый Структура("ИмяКолонкиТовара", СтрокаТаблицыТовары.Товар)); //где "ИмяКолонкиТовара" - наименование колонки ТЧ Вагоны, где ссылка на справочник номенклатура (у вас мб это колонка называется "Номенклатура"       
        Если МассивСтрокДокумента.Количество Тогда //если нашлись какие=то строки, то к предыдущему значению доп.данных добавляем найденный номер
            Для Каждого ЭлементМассива из МассивСтрокДокумента Цикл
            СтрокаТаблицыТовары.ДополнительныеДанные = СтрокаТаблицыТовары.ДополнительныеДанные + ЭлементМассива .Вагон;
            КонецЦикла
        КонецЕсли;
       
Не, с таким вариантом тоже много ошибок лезет. В частности на строку
Если МассивСтрокДокумента.Количество Тогда
Пишет: Поле объекта не обнаружено
Ну вы жеж почитай синтакс-помощник в конце концов то...ошибся я когда писал.
вместо Если МассивСтрокДокумента.Количество Тогда напишите Если МассивСтрокДокумента.Количество() Тогда

Теги:

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

Рейтинг@Mail.ru

Поиск