Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
17 Дек 2017, 22:22
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Вопрос по построению языка  (Прочитано 4492 раз)

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

Оффлайн Pinok Pod Zad

  • *
  • Сообщений: 5
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-07-06
  • Сайт: 
  • Профессия: Программист 8.1
Оговорюсь, Программист я новый , скажем так учусь...скажем так самоучка...и знания в некоторых местах хромают...поэтому надеюсь на ваше понимание...


Суть вопроса. Стоит предо мной задача следующего характера -


Есть документ, у него есть макет документа , в документе есть куча всяких строк,но меня (нас) интересуют только две - называются они "ПлановаяРабота" имеет тип СправочникСсылка   и  "ПлановаяРаботаН" тип строка
в данный момент они имеют практически одну смысловую нагрузку , лишь с той разницой что в первой строке можно брать информацию из справочника , а во второй писать что хочется ... так вот сейчас программа написана так что  - если первая строка не заполнена тогда выводится (в макет и соответственно потом на печать) вторая строка , но если же первая строка заполнена то выводится только первая...


моя задача сделать так что бы -
Если заполнены обе строки тогда выводятся обе строки
Если заполнена только одна,тогда та которая заполнена и выводится...


вот что я навоял но не работает , подскажите что  править


Если (СтрРаб.ПлановаяРабота = Неопределено)
и (СтрРаб.ПлановаяРаботаН = Неопределено)
Тогда
 ОбластьСтрока.Параметры.РемОперация = ""+СтрРаб.ПлановаяРабота+" "+ СтрРаб.ПлановаяРаботаН+"";
 КонецЕсли;

      
       //
      Если СтрРаб.ПлановаяРабота.Пустая() = Истина Тогда                       
         ОбластьСтрока.Параметры.РемОперация = СтрРаб.ПлановаяРаботаН;
      Иначе   
         ОбластьСтрока.Параметры.РемОперация = СтрРаб.ПлановаяРабота;
      КонецЕсли;   



до этого эксперементировал разными вариациями по типу
Если СтрРаб.ПлановаяРабота.Пустая() = Ложь
         и СтрРаб.ПлановаяРаботаН.Пустая() = Ложь
      Тогда



но все не то...
надеюсь на позновательный разговор.за ранее спасибо


Оффлайн Санчес

  • *
  • Сообщений: 42
  • РЕПУТАЦИЯ: 1
  • КПД: 2%
  • Регистрация: 2013-03-11
  • Сайт: 
  • Профессия: Разработчик 1С
А почему не просто так:
    ОбластьСтрока.Параметры.РемОперация = "" + СтрРаб.ПлановаяРабота + ПлановаяРаботаН;

Оффлайн Pinok Pod Zad

  • *
  • Сообщений: 5
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-07-06
  • Сайт: 
  • Профессия: Программист 8.1
когда я пишу

ОбластьСтрока.Параметры.РемОперация = СтрРаб.ПлановаяРабота + СтрРаб.ПлановаяРаботаН ;

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

а написал так как привел в начале потому что мне сделал замечание знакомый 1Сник :" ОбластьСтрока.Параметры.РемОперация = ""+СтрРаб.ПлановаяРабота+" "+ СтрРаб.ПлановаяРаботаН+"";
Так напиши, иначе у тебя она пытается проссумировать значение строк
"
а до этого замечания у меня было написано так как вы посоветовали.


Добавлено: 15 Мар 2013, 12:56

Вообщем то разобрался!

во превых

Если (СтрРаб.ПлановаяРабота = Неопределено)
и (СтрРаб.ПлановаяРаботаН = Неопределено)
Тогда
 ОбластьСтрока.Параметры.РемОперация = ""+СтрРаб.ПлановаяРабота+" "+ СтрРаб.ПлановаяРаботаН+"";
 КонецЕсли;

     
       //
      Если СтрРаб.ПлановаяРабота.Пустая() = Истина Тогда                       
         ОбластьСтрока.Параметры.РемОперация = СтрРаб.ПлановаяРаботаН;
      Иначе   
         ОбластьСтрока.Параметры.РемОперация = СтрРаб.ПлановаяРабота;
      КонецЕсли;

первое если и второе поменять местами, потому что отработав первое если начинается второе и соответственно результат первого Если пределывается под второе Если,

а во вторых не много сменил формулировку первого если и получилось что то подобное -

Если СтрРаб.ПлановаяРабота.Пустая() = Истина Тогда                       
ОбластьСтрока.Параметры.РемОперация = СтрРаб.ПлановаяРаботаН;
КонецЕсли;
   Если СтрРаб.ПлановаяРабота.Пустая() = Ложь Тогда
ОбластьСтрока.Параметры.РемОперация = СтрРаб.ПлановаяРабота;
КонецЕсли;
 

Если НЕ ЗначениеЗаполнено(СтрРаб.ПлановаяРабота)= Ложь
И

НЕ ЗначениеЗаполнено(СтрРаб.ПлановаяРаботаН)= Ложь

Тогда
ОбластьСтрока.Параметры.РемОперация = ""+СтрРаб.ПлановаяРабота+" "+ СтрРаб.ПлановаяРаботаН+"";
        КонецЕсли;


как правильнее?
 
Если (СтрРаб.ПлановаяРабота = Неопределено)
и (СтрРаб.ПлановаяРаботаН = Неопределено)

или

Если НЕ ЗначениеЗаполнено(СтрРаб.ПлановаяРабота)= Ложь
И

НЕ ЗначениеЗаполнено(СтрРаб.ПлановаяРаботаН)= Ложь

???



Добавлено: 15 Мар 2013, 13:10

Написал первую часть кода более лаконично


Если СтрРаб.ПлановаяРабота.Пустая() = Истина Тогда                       
ОбластьСтрока.Параметры.РемОперация = СтрРаб.ПлановаяРаботаН;
Иначе
ОбластьСтрока.Параметры.РемОперация = СтрРаб.ПлановаяРабота;
КонецЕсли;

Если НЕ ЗначениеЗаполнено(СтрРаб.ПлановаяРабота)= Ложь
И

НЕ ЗначениеЗаполнено(СтрРаб.ПлановаяРаботаН)= Ложь

Тогда
ОбластьСтрока.Параметры.РемОперация = ""+СтрРаб.ПлановаяРабота+" "+ СтрРаб.ПлановаяРаботаН+"";
КонецЕсли;

Последний раз редактировалось: Pinok Pod Zad; 15 Мар 2013, 13:10. Причина: Объединение сообщений

Оффлайн Msoul

  • **
  • Сообщений: 74
  • РЕПУТАЦИЯ: 6
  • КПД: 8%
  • Регистрация: 2010-04-19
  • Сайт: 
Попробуете так:
Текст = "";
Если ЗначениеЗаполнено(СтрРаб.ПлановаяРабота) Тогда
    Текст = Текст + СтрРаб.ПлановаяРабота;
КонецЕсли
ОбластьСтрока.Параметры.РемОперация = Текст + " " + СтрРаб.ПлановаяРаботаН;

Оффлайн SlazZy

  • ***
  • Сообщений: 149
  • РЕПУТАЦИЯ: 15
  • КПД: 10%
  • Регистрация: 2012-04-28
  • Сайт: 
  • Профессия: Программист 1С
как правильнее?
У вас беда с пониманием типов данных :)
Если тип данных ПлановаяРабота ТОЛЬКО один справочник, то надо сравнивать его с пустой ссылкой этого типа справочника. Справочники["ПлановаяРабота"].ПустаяСсылка()
Если тип данных составной, то пустое значение - Неопределено, поэтому и сравнивать надо с Неопределено.
Если Тип данных "строка", то можно использовать сравнение с пустой строкой "", использовать функцию "ПустаяСтрока()".

Ну, в вашем случае всё таки лучше применить ЗначениеЗаполнено() :) эта функция проверяет на заполненность почти любой тип данных

Ну и на мой взгляд красивее применять более интеллектуальные проверки :) Что-то вроде:
 ОбластьСтрока.Параметры.РемОперация = ?(ЗначениеЗаполнено(СтрРаб.ПлановаяРабота),СтрРаб.ПлановаяРабота+" ","") +?(ЗначениеЗаполнено(СтрРаб.ПлановаяРаботаН),СтрРаб.ПлановаяРаботаН,"");
Вместо всей вашей проверки :)

Оффлайн Pinok Pod Zad

  • *
  • Сообщений: 5
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-07-06
  • Сайт: 
  • Профессия: Программист 8.1
не не не , мне текст и прочее совсем не нужно , эти данные идут в макет печатной формы и никакой текст кроме того который вписан (если вписан) в СтрРаб.ПлановаяРабота и в СтрРаб.ПлановаяРаботаН  мне не нужно передовать в печатную форму... с кодом что привел выше все работает ...только мне не нравиться часть кода которая

Если НЕ ЗначениеЗаполнено(СтрРаб.ПлановаяРабота)= Ложь
             И
           
             НЕ ЗначениеЗаполнено(СтрРаб.ПлановаяРаботаН)= Ложь

хочу лаконичнее её соченить на подобии

Если СтрРаб.ПлановаяРабота.Пустая = Ложь
и
СтрРаб.ПлановаяРаботаН.Пустая = Ложь

вот только конфликт типов выходит (вернее не конфликт типов а прога ругается - "Значение не является значением объектного типа (Пустая)
      Если СтрРаб.ПлановаяРабота.Пустая()= Ложь
")

ДЛя справки -

ПлановаяРабота = тип - СправочникСсылка
ПлановаяРабота = тип - Строка

мне сказали что к первому не подойдет оператор Пустая() , а нужен Неопределено ... но мне нужен противовес оператору Неопределено для коректной работы (что то на подобии Определено - но конкретно такого нету) , что использовать в таком случае? конкретно в моем коде смущает формулировка

Если Не ...(...) = Ложь
и
Не ...(...) = Ложь

если это правильно с точки зрения стандартизации 1С то я успокоюсь, ежели нет...то нужно как то красивее сформулировать...
Добавлено: 15 Мар 2013, 13:42

З.Ы.это я Msoul отвечал...щас анализирую следующий пост , но с первых строк вы SlazZy повторили слова моего знакомого 1Сника который попутно изредка инструктирует в аське...

Оффлайн SlazZy

  • ***
  • Сообщений: 149
  • РЕПУТАЦИЯ: 15
  • КПД: 10%
  • Регистрация: 2012-04-28
  • Сайт: 
  • Профессия: Программист 1С
З.Ы.это я Msoul отвечал...щас анализирую следующий пост , но с первых строк вы SlazZy повторили слова моего знакомого 1Сника который попутно изредка инструктирует в аське...

На мой взгля инструктирует он вас плохо, ибо в восьмерке нету функции Пустая(), если вы конечно её сами не создадите. А есть функция ПустаяСсылка().
Сравнивать с Неопределено - НЕ ВЕРНО, точнее верно в очень конкретных случаях. Неопределено это Тип данных и появляется он далеко не всегда. В частности только в случае пустого значения для составного типа данных или его возвращают некоторые встроенные функции.


Если Не ...(...) = Ложь
и
Не ...(...) = Ложь
Тоже не совсем каноническая запись, оно конечно будет работать, но для стандартизации рекомендуется писать это как
Если НЕ Значение И НЕ Значение Тогда

Цитировать
ПлановаяРабота = тип - СправочникСсылка
ПлановаяРабота = тип - Строка

мне сказали что к первому не подойдет оператор Пустая() , а нужен Неопределено
Вас жестоко обманули, тут всё как раз наоборот. Надо сравнивать со значением пустой ссылки и нельзя сравнивать с неопределено.
Добавлено: 15 Мар 2013, 14:11

в общем, вот это
Если СтрРаб.ПлановаяРабота.Пустая() = Истина Тогда                       
            ОбластьСтрока.Параметры.РемОперация = СтрРаб.ПлановаяРаботаН;
        Иначе   
            ОбластьСтрока.Параметры.РемОперация = СтрРаб.ПлановаяРабота;
        КонецЕсли;
       
        Если НЕ ЗначениеЗаполнено(СтрРаб.ПлановаяРабота)= Ложь
             И
           
             НЕ ЗначениеЗаполнено(СтрРаб.ПлановаяРаботаН)= Ложь
           
             Тогда
             ОбластьСтрока.Параметры.РемОперация = ""+СтрРаб.ПлановаяРабота+" "+ СтрРаб.ПлановаяРаботаН+"";
        КонецЕсли;

Надо писать как-то так
 ОбластьСтрока.Параметры.РемОперация = ?(ЗначениеЗаполнено(СтрРаб.ПлановаяРабота),СтрРаб.ПлановаяРабота+" ","") +?(ЗначениеЗаполнено(СтрРаб.ПлановаяРаботаН),СтрРаб.ПлановаяРаботаН,"");
или так
Если НЕ СтрРаб.ПлановаяРабота.ПустаяСсылка() Тогда
Текст = Строка(СтрРаб.ПлановаяРабота)+" ";
Иначе
Текст = "";
КонецЕсли;

ОбластьСтрока.Параметры.РемОперация = Текст + СтрРаб.ПлановаяРаботаН;

Последний раз редактировалось: SlazZy; 15 Мар 2013, 14:11. Причина: Объединение сообщений

Оффлайн Pinok Pod Zad

  • *
  • Сообщений: 5
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-07-06
  • Сайт: 
  • Профессия: Программист 8.1
SlazZy, может и не он виноват - может я ему просто плохо обьясняю ... но по поводу понимания типов данных вы сказали его слова один в один...

про Пустая() - эта процедура уже была  и фигурировала в первоначальном коде и я начал с ней "играться" , а вот ПустаяСсылка() - ругается на нее и после того как точку ставлю после

СтрРаб.ПлановаяРабота.

предлагает мне только
Пустая()
   и нету никакой
ПустаяСсылка()
в всплывающем окне (хотя может это и не важно)

уточню , работаю с 1С 8.1

Оффлайн SlazZy

  • ***
  • Сообщений: 149
  • РЕПУТАЦИЯ: 15
  • КПД: 10%
  • Регистрация: 2012-04-28
  • Сайт: 
  • Профессия: Программист 1С
оу, фак )) пора в отпуск идти :lol: конечно же надо так
Если НЕ СтрРаб.ПлановаяРабота.Пустая() Тогда
    Текст = Строка(СтрРаб.ПлановаяРабота)+" ";
Иначе
    Текст = "";
КонецЕсли;

ОбластьСтрока.Параметры.РемОперация = Текст + СтрРаб.ПлановаяРаботаН;
   
Добавлено: 15 Мар 2013, 14:15

Цитировать
про Пустая() - эта процедура уже была  и фигурировала в первоначальном коде и я начал с ней "играться" , а вот ПустаяСсылка() - ругается на нее и после того как точку ставлю после

Извиняюсь )) это я упоролся окончательно.

Если у вас тип данных ссылка, то проверка на пустоту выглядит так Значение.Пустая() или так Значение = Справочники["ИмяСправочника"].ПустаяСсылка()

Но вы видимо несколько не так поняли её принцип. Если значение пустое, то она возвращает Истину, если заполнено - ложь.

Оффлайн Pinok Pod Zad

  • *
  • Сообщений: 5
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-07-06
  • Сайт: 
  • Профессия: Программист 8.1
SlazZy, Огромное вам спасибо! скопировал ваш код все работает! плюсую Вам!

Msoul, Извиняюсь, Вы тоже были где то рядом!это просто я чет тупанул и испугался оператра Текст ... выскочила асоциация с оператором Сообщить  )))

вообщем всем плюсы.Всем спасибо!!!


Теги:
 

Возможно ли получение эталонного файла конфигурации *.cf из измененной стандартной, например (УТ 11.1, БП 3.0) или вопрос о том как убрать лишние доработки и привести конфигурацию базы максимально к стандартной после варварских "доработок"?

Автор kostyaomskРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 9
Просмотров: 9235
Последний ответ 30 Дек 2015, 22:14
от 1Cnastroika
Вопрос по РИБ "ПоОрганизации"

Автор andi_xРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 5
Просмотров: 5856
Последний ответ 15 Мар 2013, 21:38
от Besart
Вопрос по "Отчеты о Розничных продажах".

Автор GerCerberРаздел Пользователям "1С - Предприятие 8"

Ответов: 1
Просмотров: 3294
Последний ответ 26 Июл 2010, 16:06
от crow1983
Вопрос о действии кнопки "Записать"

Автор jenya1111Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 6
Просмотров: 3454
Последний ответ 06 Окт 2014, 15:23
от jenya1111
Вопрос по отчету "Материалы в эксплуатации".

Автор mitauskasРаздел Пользователям "1С - Предприятие 8"

Ответов: 3
Просмотров: 2372
Последний ответ 04 Мар 2015, 11:07
от Дмитрий@

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
145 Сообщений
AIFrame
64 Сообщений
ilyay ilyay
63 Сообщений
alex0402
50 Сообщений
andron81_81
44 Сообщений
oleg-x
42 Сообщений
BuhRust
32 Сообщений
MuI_I_Ika MuI_I_Ika
31 Сообщений
Golickoff Golickoff
28 Сообщений
Dima Dddd Dima Dddd
24 Сообщений

* Кто онлайн

  • Точка Гостей: 271
  • Точка Скрытых: 0
  • Точка Пользователей: 7
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal