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

С какой радости не является значением объектного типа???

Автор Nail2010, 09 мар 2011, 06:03

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

Nail2010

Нет, я просто думаю что может метод Добавить() - это не совсем то, что мне нужно. Мне нужно просто в табличной части заполнить колонку "СчетДоходовБУ" предопределенными значениями из плана счетов. Если табличная часть не заполнена - пустая- то не ставить ничего.
На форме на разных вкладках размещены табличные части ТОВАРЫ и УСЛУГИ. Бывает в документе табЧасть Услуги пустые, а в Товарах есть 2-3 позиции. Бывает наоборот - Товары пустые, а Услуги- 1 или 2 позиции заполнено.
Просто заполнить колонку, только и всего :)

Klyacksa

Тоже не очень поняла задачу, но смею предположить, что если нужно
ЦитироватьМне нужно просто в табличной части заполнить колонку "СчетДоходовБУ" предопределенными значениями из плана счетов.

То можно либо пройтись циклом по таб.частям и проставить в строках нужные значения, либо пройтись циклом по результату запроса, подбирать по нему нужные строки в таб.части и проставлять в них значения.

А что вообще получается запросом? Строки, в которых надо менять значение, или данные, на которые надо менять?
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Nail2010

Еще раз выкладываю код

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


Где тут может быть ошибка??

Nail2010

не могу понять, почему этот код на самом деле ничего не записывает....

Klyacksa

Если ОбъектПоиск.Комментарий="Приходный кассовый ордер" Тогда
        ТабЧасть=ОбъектПоиск.Товары.Добавить();
        ТабЧасть2=ОбъектПоиск.Услуги.Добавить();
        Если НЕ ТабЧасть.СчетДоходовБУ.Пустая() ИЛИ НЕ ТабЧасть2.СчетДоходовБУ.Пустая() Тогда
           ТабЧасть.СчетДоходовБУ=ПланыСчетов.Хозрасчетный.ПрибылиИУбыткиЕНВД;
           ОбъектПоиск.Записать();
           ТабЧасть2.СчетДоходовБУ=ПланыСчетов.Хозрасчетный.ПрибылиИУбыткиЕНВД;
           ОбъектПоиск.Записать();
        КонецЕсли;
 

Конечно всегда проверка на Пустая() дает Истина, ведь строки ТабЧасть и ТабЧасть2 мы только что сами и добавили и они пустые!

Ну хорошо, вот мы добрались до документа ОбъектПоиск. Нам нужно теперь по всем его строкам таб.частей проверить на заполненность колонку СчетДоходовБУ и дозаполнить? Правильно я поняла?

p.s. используйте оформление кода, не удобно же читать!
p.s.s. замечание по мелочи: достаточно один раз записывать, а не два в приведенном выше куске кода.
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Nail2010

Вернее, Клякса, так: если в Таб. части нет ни одной позиции, пропустить; в остальных случаях для каждой позиции проставить в колонке "СчетДоходовБУ" соотв. значение из условия.

Klyacksa

"Нам нужно теперь по всем его строкам таб.частей" и подразумевает, что если строк нет, то и делать ничего не надо :)

Я бы написала так:

Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
| РеализацияТоваровУслугТовары.Ссылка КАК Ссылка,
| РеализацияТоваровУслугТовары.НомерСтроки,
| РеализацияТоваровУслугТовары.СчетДоходовБУ,
|      1 КАК ТабЧасть
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|ГДЕ
| РеализацияТоваровУслугТовары.СчетДоходовБУ= Значение(ПланСчетов.Хозрасчетный.ПустаяСсылка)
| И РеализацияТоваровУслугТовары.Ссылка.Комментарий ПОДОБНО &Комментарий
| И РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &НачПериода И &КонПериода
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| РеализацияТоваровУслугУслуги.Ссылка,
| РеализацияТоваровУслугУслуги.НомерСтроки,
| РеализацияТоваровУслугУслуги.СчетДоходовБУ,
|      2
|ИЗ
| Документ.РеализацияТоваровУслуг.Услуги КАК РеализацияТоваровУслугУслуги
|ГДЕ
| РеализацияТоваровУслугУслуги.Ссылка.Комментарий ПОДОБНО &Комментарий
| И РеализацияТоваровУслугУслуги.СчетДоходовБУ= Значение(ПланСчетов.Хозрасчетный.ПустаяСсылка)
| И РеализацияТоваровУслугУслуги.Ссылка.Дата МЕЖДУ &НачПериода И &КонПериода
|ИТОГИ ПО
| Ссылка"

Запрос.УстановитьПараметр("НачПериода",НачПериода);
Запрос.УстановитьПараметр("КонПериода",КонПериода);
Запрос.УстановитьПараметр("Комментарий","Приходный кассовый ордер");

Выборка=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

ДописываемыйПланСчетов=ПланыСчетов.Хозрасчетный.ПрибылиИУбыткиЕНВД;

Пока Выборка.Следующий() цикл
     Объект=Выбока.Ссылка.ПолучитьОбъект();
     ВыборкаПоДоку=Выборка.Выбрать();
     Пока ВыборкаПоДоку.Следующий() цикл
           Если ВыборкаПоДоку.ТабЧасть=1 тогда
           Строка=?(ВыборкаПоДоку.ТабЧасть=1,Объект.Товары[ВыборкаПоДоку.НомерСтроки],Объект.Услуги[ВыборкаПоДоку.НомерСтроки]);
           Строка.СчетДоходовБУ=ДописываемыйПланСчетов;
     КонецЦикла;
     Объект.Записать();
КонецЦикла;
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Klyacksa

Возможно, есть вариант более красивого определения текущей табличной части, нет сейчас времени изобретать красивость :)
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Nail2010

Что, спасибо за подсказку!
Возможно, у меня уже мозг кипит, но... есть условие - Если в комментарии Реализации записано "приходный кассовый ордер", тогда значение подставляется из реквизита Плана счетов Хозрасчетный (ПрибылиИУбыткиЕНВД), в противном случае- реквизит плана счетов Хозрасчетный (ПрибылиИУбыткиНеЕНВД). Как реализовать его в приведенном тобой коде?

Nail2010


Теги:

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

Рейтинг@Mail.ru

Поиск