Имя: Пароль:
1C
1C 7.7
v7: Имя переменной + Число
,
0 Масянька
 
07.10.11
15:01
День добрый!
Подскажите:
в макете есть переменные - ИмяП1, ИмяП2, ИмяП3.
Как в модуле реализовать:
Для счетчик = 1 по Какое-тоЧисло Цикл
   ИмяП + Счетчик = Какая-тоСтрока;
КонецЦикла

Спасибо.
1 DJ Anthon
 
07.10.11
15:02
Шаблон
2 DJ Anthon
 
07.10.11
15:03
Шаблон("ИмяП" + Счетчик + "=Какая-тоСТрока");
3 Wobland
 
07.10.11
15:03
Выполнить() в семёрке нету?
4 izekia
 
07.10.11
15:03
(3) выполнить вроде дороже
5 skunk
 
07.10.11
15:04
(2)не взлетит
6 Конфигуратор1с
 
07.10.11
15:05
(0) а массив?
7 filh
 
07.10.11
15:06
Функцию КомуЧто()
8 skunk
 
07.10.11
15:07
функция Присвоить(Чему, Что)
 Чему = Что;
конецфункции


...
...
Значение = "ывываываыва";
Шаблон("Присвоить(ИмяП" + Счетчик ", Значение)");
сообщить(Шаблон("ИмяП" + Счетчик));
9 dk
 
07.10.11
15:07
поищи функцию
глприсвоить
--
вот ее можно в шаблон засунуть
10 skunk
 
07.10.11
15:07
Шаблон("Присвоить(ИмяП" + Счетчик + ", Значение)");
11 vladko
 
07.10.11
15:09
в 7.7. есть понятие массива. Можно им воспользоваться.
12 izekia
 
07.10.11
15:12
(11) настоящие 1С программисты массивом не пользуются
13 DJ Anthon
 
07.10.11
15:18
(10) да-да, я просто с набегу
14 Cthulhu
 
07.10.11
15:22
(12): очень даже пользуются. когда запросы по ОЛЕ надо, например, зачастую кроме как с использованием глоб.перем.-массивов и не управиться.
15 izekia
 
07.10.11
15:23
(14) ну список значений более наглядный и кошерный
16 Cthulhu
 
07.10.11
15:30
(15): ты не понял о чем я.
переменная ОЛЕ-контекста при работе через ОЛЕ не теряет присвоенное ей значение только если это элемент глобального массива. ТОЛЬКО.
а в запросе, выполняемом в ОЛЕ-контексте, можно использовать только доступные в этом контексте переменные.
поэтому в очень многих случаях, когда необходимо выполнение запроса через ОЛЕ, спасает ТОЛЬКО глоб.массив.
17 izekia
 
07.10.11
15:32
(16) а, ясно
интересно, никогда с этим не сталкивался
18 Масянька
 
07.10.11
16:45
Сделала:
в модуле:
Для Счетчик = 1 По КоличестовПечатныхСтрок Цикл
   мПеременная = "ДанныеДоверенности" + Строка(Счетчик);
   мЗначение    = СписокДанных.ПолучитьЗначение(Счетчик);
   Шаблон("[глПрисвоить(мПеременная, мЗначение)]");
КонецЦикла;
в глобальнике: как (8)
На макете лежат - ДанныеДоверенности1, ДанныеДоверенности2, ДанныеДоверенности3 - выражение

Переменная не определена.
Чего не так?
19 filh
 
07.10.11
16:47
КоличестВОПечатныхСтрок
20 Масянька
 
07.10.11
16:48
(19) А почему ругается на переменную?
21 filh
 
07.10.11
16:49
отладчик что показывает?
22 maip1
 
07.10.11
16:54
Определи переменные в начале процедуры: Перем ДанныеДоверенности1, ДанныеДоверенности2, ДаннеДоверенности3.
23 Масянька
 
07.10.11
16:56
(22) Зачем?
24 Масянька
 
07.10.11
17:01
Люди! Я понимаю, что пятница, но еще только 17 часов....
25 Cthulhu
 
07.10.11
17:01
(20): потому что переменная "КоличестовПечатныхСтрок" - не определена. у тебя там в сообщении ещё отметка места возникновения ошибки, возле этой переменной, должна быть.
я фмгею, все же по русски сказано и пальцем показано, ну зачем такие тупые вопросы???
(22): бред.
26 Cthulhu
 
07.10.11
17:02
(24): это не "только", это - "уже".
27 filh
 
07.10.11
17:02
а ну это...
Шаблон("[глПрисвоить("+мПеременная+", мЗначение)]");
28 filh
 
07.10.11
17:03
что то сразу то не заметил...
29 Масянька
 
07.10.11
17:05
(25) Мне всю процедуру печати нужно привести? Определена "КоличестовПечатныхСтрок". Какие еще?
(27) Написала так. Эффект - такой же.

Не ругайтесь.
30 filh
 
07.10.11
17:05
(25) да, ошибка на это махает, но ошибка по коду шаблона тоже есть.
31 filh
 
07.10.11
17:06
(29) в глобальнике: как (8) перенеси с модуль
:)
32 filh
 
07.10.11
17:06
глобальник то этого не видит...
33 Конфигуратор1с
 
07.10.11
17:07
(29) процедуру давайте
34 filh
 
07.10.11
17:07
блин, уже 6 минут лишних на работе
:)
35 Масянька
 
07.10.11
17:07
Сообщить - выводит и мПеременную (как надо), и мЗначение. И тип у обоих - Строка. А не работает.
(30) говорю же, поправила, как ты сказал - все равно не определны.
36 filh
 
07.10.11
17:07
глПрисвоить в _модуль_ перенеси!!!
37 Масянька
 
07.10.11
17:09
Нате:
Процедура Печать(Докум)
   
   Перем ПарамШапки;
   
   ПечТабл = СоздатьОбъект("Таблица");
   
   // инициализация переменных для печати шапки
   ФормПарПечШапки(Докум.Фирма, Докум.Контрагент, ПарамШапки);
   
   // собственная фирма
   ПоставщикНаименование    = ПарамШапки.Получить("ПоставщикНаименование");
   ПоставщикАдрес            = ПарамШапки.Получить("ПоставщикАдрес");
   ПоставщикТелефоны        = ПарамШапки.Получить("ПоставщикТелефоны");
   ПоставщикРеквизиты        = ПарамШапки.Получить("ПоставщикРеквизиты");
   ПоставщикОКПО            = ПарамШапки.Получить("ПоставщикОКПО");
   
   ПоставщикКратко        = ПоставщикНаименование +
                       ?(ПустоеЗначение(ПоставщикАдрес) = 0, ", " + ПоставщикАдрес, "");
   ПоставщикПолностью    = ПоставщикКратко +
                       ?(ПустоеЗначение(ПоставщикТелефоны) = 0, ", " + ПоставщикТелефоны, "") +
                       ?(ПустоеЗначение(ПоставщикРеквизиты) = 0, ", " + ПоставщикРеквизиты, "");
   
   // плательщик
   ПлательщикПолностью  = Докум.Контрагент.ПлательщикТН;

   // грузополучатель
   ПолучательПолностью  = Докум.Контрагент.ГрузополучательТН;
   
   ПечДоговор             = "Лицензионный договор № " + СокрЛП(Номер) + " от " + Формат(ДатаДоговора,"Д ДДММГГГГ") + " г.";

   ПечТабл.ВывестиСекцию("Шапка");
   
   // Выводим спецификацию
   
   //Для простоты настройки печатной формы примем следующие соглашения:
   //    -    высота строк в таблице печатной формы задана жестко,
   //        тогда известно, сколько строк помещается на странице;
   СтрокНаСтранице = 22;
   //    -    высота шапки и подвала задана жестко и кратна высоте строк таблицы,
   //        тогда можно указать, сколько строк занимают шапка и подвал
   //        в пересчете на строки таблицы;
   СтрокШапки = 10;
   СтрокПодвала = 9;
   //    -    для нормальной работы алгоритма необходимо, чтобы шапка и подвал
   //        могли поместиться на одной странице + хотя бы одна строка таблицы:
   //        СтрокНаСтранице >= СтрокШапки + СтрокПодвала + 1
   //    -    если подвал не помещается на странице, он переносится на другую
   //        страницу с последней строкой; исключение составляет случай,
   //        когда в таблице всего одна строка.
   НомерСтраницы = 1;

   КолвоСтрок = Докум.КоличествоСтрок();
   Если КолвоСтрок = 1 Тогда
       ПереноситьПоследнююСтроку = 0;
   Иначе
       ЦелыхСтраницСПодвалом        = Цел((СтрокШапки + КолвоСтрок + СтрокПодвала) / СтрокНаСтранице);
       ЦелыхСтраницБезПодвала        = Цел((СтрокШапки + КолвоСтрок - 1) / СтрокНаСтранице);
       ПереноситьПоследнююСтроку    = ЦелыхСтраницСПодвалом - ЦелыхСтраницБезПодвала;
   КонецЕсли;
   
   // инициализация итогов по странице
   ИтогоКоличествоНаСтранице    = 0;
   ИтогоСуммаНаСтранице        = 0;
   ИтогоНДСНаСтранице            = 0;
   ИтогоСуммаСНДСНаСтранице    = 0;
   ИтогоНГСМНаСтранице            = 0;
   ИтогоНПНаСтранице            = 0;

   // инициализация итогов по документу
   ИтогоКоличество    = 0;
   ИтогоСумма        = 0;
   ИтогоНДС        = 0;
   ИтогоСуммаСНДС    = 0;
   ИтогоНГСМ        = 0;
   ИтогоНП            = 0;

   Ном = 0;
   КурсРублей = глКурсДляВалюты(глРубли, Докум.ДатаДок);
   
   ПечТабл.ВывестиСекцию("Заголовок");
   
   Докум.ВыбратьСтроки();
   
   Пока Докум.ПолучитьСтроку() = 1 Цикл
   
       Ном = Ном + 1;
       
       //Начинаем новую страницу, если предыдущая строка была последней на странице
       //или пора переносить последнюю строку на последнюю страницу с подвалом.
       ЦелаяСтраница = (СтрокШапки + Ном - 1) / СтрокНаСтранице;
       
       Если (ЦелаяСтраница = Цел(ЦелаяСтраница))
           или ((ПереноситьПоследнююСтроку = 1) и (Ном = КолвоСтрок)) Тогда
           ПечТабл.ВывестиСекцию("ИтогоПоСтранице");
           ИтогоКоличествоНаСтранице    = 0;
           ИтогоСуммаНаСтранице        = 0;
           ИтогоНДСНаСтранице            = 0;
           ИтогоСуммаСНДСНаСтранице    = 0;
           ИтогоНГСМНаСтранице        = 0;
           ИтогоНПНаСтранице            = 0;
           ПечТабл.НоваяСтраница();
           НомерСтраницы = НомерСтраницы + 1;
           ПечТабл.ВывестиСекцию("Заголовок");
       КонецЕсли;

       ПечТовар        = Докум.Номенклатура;
       ПечКодТовар        = Докум.Номенклатура.Код;
       ПечЕдиница        = Докум.Единица;  
       ПечЦена            = Докум.Цена;
       ПечКоличество    = Докум.Количество;
       КолВо            = ?(ПечКоличество=0, 1, ПечКоличество);
                                                                       
       СуммаПеч    = глПересчет(Докум.Сумма   , Докум.Валюта, Докум.Курс, глРубли, Докум.ДатаДок);
       СуммаНДСПеч = глПересчет(Докум.СуммаНДС, Докум.Валюта, Докум.Курс, глРубли, Докум.ДатаДок);
       СуммаНППеч  = глПересчет(Докум.СуммаНП , Докум.Валюта, Докум.Курс, глРубли, Докум.ДатаДок);
       
       Если Докум.СуммаВклНП = 1 Тогда
           СуммаБезНП = СуммаПеч - СуммаНППеч;
       Иначе
           СуммаБезНП = СуммаПеч;
       КонецЕсли;
       
       Если Докум.СуммаВклНДС = 1 Тогда
           СуммаБезНДС = СуммаБезНП - СуммаНДСПеч;
           СуммаСНДС   = СуммаБезНП;
       Иначе
           СуммаБезНДС = СуммаБезНП;
           СуммаСНДС   = СуммаБезНП + СуммаНДСПеч;
       КонецЕсли;
       
       ПечНДС            = СуммаНДСПеч;
       
       Если Докум.УчитыватьНП = 1 Тогда
           ПечНП = СуммаНППеч;
       Иначе
           ПечНП = "";
       КонецЕсли;
       
       ПечЦена = ?(Докум.Количество <> 0, СуммаБезНДС / Докум.Количество, СуммаБезНДС);
       
       // Если цена, указанная в документе в рублях,
       // без налогов и без скидки
       // то в печ. форме надо отражть ее.
       Если ((Докум.УчитыватьНДС = 0) или (Докум.СуммаВклНДС = 0)) и (Докум.СуммаВклНП = 0)
              и (Докум.Валюта = глРубли) и (Докум.Скидка.Выбран() = 0) Тогда
          ПечЦена = Докум.Цена;
       КонецЕсли;
       
       ПечТабл.ВывестиСекцию("Строка");

       ИтогоКоличествоНаСтранице    = ИтогоКоличествоНаСтранице    + Докум.Количество;
       ИтогоСуммаНаСтранице        = ИтогоСуммаНаСтранице        + СуммаБезНДС;
       ИтогоНДСНаСтранице            = ИтогоНДСНаСтранице        + ПечНДС;
       ИтогоСуммаСНДСНаСтранице    = ИтогоСуммаСНДСНаСтранице    + СуммаСНДС;
       
       Если Докум.УчитыватьНП = 1 Тогда
           ИтогоНПНаСтранице = ИтогоНПНаСтранице + ПечНП;
       КонецЕсли;

       ИтогоКоличество    = ИтогоКоличество    + Докум.Количество;
       ИтогоСумма        = ИтогоСумма        + СуммаБезНДС;
       ИтогоНДС        = ИтогоНДС            + ПечНДС;
       ИтогоСуммаСНДС    = ИтогоСуммаСНДС    + СуммаСНДС;
       
       Если Докум.УчитыватьНП = 1 Тогда
           ИтогоНП = ИтогоНП + ПечНП;
       КонецЕсли;
   КонецЦикла;

   ПечТабл.ВывестиСекцию("ИтогоПоСтранице");
   ПечТабл.ВывестиСекцию("Всего");
   
   // выводим подвал
   ВсегоОтпущено    = "Всего отпущено " + глФразаПрописью(Ном, "наименован");
   НаСумму            = "на сумму " + глСуммаПрописью(ИтогоСуммаСНДС + ИтогоНП, глРубли);

   // формируем строку для вывода количества листов накладной
   // Слово лист склоняется
   Если (НомерСтраницы > 10) И (НомерСтраницы < 20) Тогда
       Слово    = " листах";
   Иначе
       ПоследняяЦифра    = НомерСтраницы % 10;
       Если ПоследняяЦифра = 1 Тогда
           Слово    = " листе";
       Иначе
           Слово    = " листах";
       КонецЕсли;
   КонецЕсли;
   
   мНомеров = Докум.КоличествоСтрок();
   
   СтрокаКоличествоНомеров = Формат(мНомеров, "ЧП") + ?(мНомеров = 1, " порядковый номер записи", "порядковых номеров записей");
   СтрокаКоличествоЛистов    = Строка(НомерСтраницы) + Слово;

   Руководитель = Докум.Фирма.ЮрЛицо.Руководитель.Получить(Докум.ДатаДок);
   Если (ПечататьДоверенность = 1) Тогда
       Если (ПустаяСтрока(Докум.Контрагент.НомерДоверенности) = 0) И (ПустоеЗначение(Докум.Контрагент.ДатаВыдачиДоверенности) = 0) Тогда
           ПечДанныеДоверенности = СокрЛП(Докум.Контрагент.НомерДоверенности) + " от " + НРег(Формат(Докум.Контрагент.ДатаВыдачиДоверенности," Д ДДММММГГГГ"));
       КонецЕсли;
       Если (ПустоеЗначение(Докум.Контрагент.КемВыданаДоверенность) = 0) И (ПустоеЗначение(Докум.Контрагент.КомуВыданаДоверенность) = 0) Тогда
           Если ПустоеЗначение(Докум.Контрагент.ДолжностьВыданаДоверенность) = 0 Тогда
               КемКомуВыданаДоверенность = СокрЛП(Докум.Контрагент.КемВыданаДоверенность) + " " + СокрЛП(Докум.Контрагент.ДолжностьВыданаДоверенность) + " " +
                                           СокрЛП(Докум.Контрагент.КомуВыданаДоверенность);
           Иначе
               КемКомуВыданаДоверенность = СокрЛП(Докум.Контрагент.КемВыданаДоверенность) + " " + СокрЛП(Докум.Контрагент.КомуВыданаДоверенность);
           КонецЕсли;
       КонецЕсли;
   
       // данные доверенности разбиваем на строки
       СписокДанных = СоздатьОбъект("СписокЗначений");
       СписокДанных = глРазбитьТекстНаСтроки(КемКомуВыданаДоверенность,85);
       КоличествоПечатныхСтрок = СписокДанных.РазмерСписка();

       //ДанныеДоверенности1    = СписокДанных.ПолучитьЗначение(1);
       //ДанныеДоверенности2    = СписокДанных.ПолучитьЗначение(2);
       //ДанныеДоверенности3    = СписокДанных.ПолучитьЗначение(3);
       Для Счетчик = 1 По КоличествоПечатныхСтрок Цикл
           мПеременная = "ДанныеДоверенности" + Строка(Счетчик);
           мЗначение    = СписокДанных.ПолучитьЗначение(Счетчик);
Сообщить("! - " + мПеременная + " = " + мЗначение);
Сообщить("1 - " + ТипЗначенияСтр(мПеременная) + " = " + ТипЗначенияСтр(мЗначение));
           //м = глПрисвоить(мПеременная, мЗначение);
           Шаблон("[глПрисвоить(" + мПеременная + ", мЗначение)]");
           //Шаблон("[глПрисвоить(" + ("ДанныеДоверенности"+ Строка(Счетчик)) + "," + СписокДанных.ПолучитьЗначение(Счетчик) + ")]");
//            ИмяСтроки = "ДанныеДоверенности" + Строка(Счетчик);
////Сообщить("1 - " + ИмяСтроки);            
//            ИмяСтроки = СписокДанных.ПолучитьЗначение(Счетчик);
       КонецЦикла;
       //Если СчетчикВывода = 1 Тогда
       //    ДанныеДоверенности1    = СтрокаНаПечать;
       //ИначеЕсли СчетчикВывода = 2 Тогда
       //    ДанныеДоверенности2    = СтрокаНаПечать;
       //Иначе
       //    ДанныеДоверенности3    = СтрокаНаПечать;
       //КонецЕсли;

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

   ПечТабл.ВывестиСекцию("Подвал");

   // показать сформированную таблицу
   Если Устройство = 0 Тогда
       ПечТабл.Опции(0, 0, 0, 0, "ОпцииПечатиАктаПП", "ОпцииПечатиАктаПП");
       ПечТабл.ПараметрыСтраницы(2,100,,10,5,5,5,,,,,);

       Если глПолучитьПолномочие("РазрешитьРедактированиеТаблиц") = 0 Тогда
           ПечТабл.Защита(1);
       Иначе
           ПечТабл.Защита(0);
       КонецЕсли;
       ПечТабл.ТолькоПросмотр(1);

       ПечТабл.Показать(глНазваниеДокументаВжурнале(Докум) + "/Акт ПП","");  
   Иначе    
       ПечТабл.Опции(0, 0, 0, 0, "ОпцииПечатиАктаПП", "ОпцииПечатиАктаПП");
       ПечТабл.ПараметрыСтраницы(2,100,,10,5,5,5,,,,,);
       ПечТабл.КоличествоЭкземпляров(КолвоКопий);
       ПечТабл.Напечатать(0);
   КонецЕсли;
   
КонецПроцедуры // Печать()
38 Масянька
 
07.10.11
17:10
(36) Перенесла. Индейская изба - вигвам....
39 filh
 
07.10.11
17:11
чукча писатель...
все ясно.
Удачи!
40 Конфигуратор1с
 
07.10.11
17:15
(38) на какую переменную ругается?
41 filh
 
07.10.11
17:16
42 Масянька
 
07.10.11
17:20
(41) Скачала, спасибо. Ну и что не так?
43 Масянька
 
07.10.11
17:22
(40) ДанныеДоверенности1, ДанныеДоверенности2, ДанныеДоверенности3
44 Масянька
 
07.10.11
17:24
err глПрисвоить(ДанныеДоверенности1<<?>>, мЗначение)
45 Конфигуратор1с
 
07.10.11
17:25
(43) вот нужно и объявить переменные до использования
46 Конфигуратор1с
 
07.10.11
17:25
поэтому лучше все таки массив было бы использовать
и без всяких процедур
47 Масянька
 
07.10.11
17:27
(45) Полярная лисица.... Заработало. Благодарю!
48 Конфигуратор1с
 
07.10.11
17:27
Перем ДанныеДоверенности[10];
а в цикле -
вместо
Для Счетчик = 1 По КоличествоПечатныхСтрок Цикл
           мПеременная = "ДанныеДоверенности" + Строка(Счетчик);
           мЗначение    = СписокДанных.ПолучитьЗначение(Счетчик);
Сообщить("! - " + мПеременная + " = " + мЗначение);
Сообщить("1 - " + ТипЗначенияСтр(мПеременная) + " = " + ТипЗначенияСтр(мЗначение));
           //м = глПрисвоить(мПеременная, мЗначение);

           Шаблон("[глПрисвоить(" + мПеременная + ", мЗначение)]");
           //Шаблон("[глПрисвоить(" + ("ДанныеДоверенности"+ Строка(Счетчик)) + "," + СписокДанных.ПолучитьЗначение(Счетчик) + ")]");

//            ИмяСтроки = "ДанныеДоверенности" + Строка(Счетчик);

////Сообщить("1 - " + ИмяСтроки);            

//            ИмяСтроки = СписокДанных.ПолучитьЗначение(Счетчик);

       КонецЦикла;

Для Счетчик = 1 По КоличествоПечатныхСтрок Цикл
ДанныеДоверенности[Счетчик] = СписокДанных.ПолучитьЗначение(Счетчик);
Конеццикла;
49 Масянька
 
07.10.11
17:28
СПАСИБО!!!!!!
50 Конфигуратор1с
 
07.10.11
17:28
все равно массив интереснее в плане небольшого количества кода
51 Масянька
 
07.10.11
17:29
(39) Сам ты... Индеец :)))
52 Конфигуратор1с
 
07.10.11
17:30
(49) та не за что - лучше на фото откройте личико. Как там - Масянька, ну открой личико!
53 Масянька
 
07.10.11
17:31
(52) Стоп. А как на макете тогда переменные обозвать?
Еще не готова :)))
54 Масянька
 
07.10.11
17:35
(52) Сама разобралась. :)))
Как мне нравится :))))
55 Конфигуратор1с
 
07.10.11
17:37
(53) а че там готовится? )))
макет - 8шница что ли?
56 Масянька
 
07.10.11
17:49
(55) Макияж, костюм... :)))
Да, просто и 7, и 8. Мда, в программировании (не 1С) легче...
57 Конфигуратор1с
 
07.10.11
17:58
(56) та мы и так полюбуемся)))
А какие еще языки знаете?
58 Масянька
 
07.10.11
18:05
(57) Ангийский - читаю со словарем. Та обойдетесь :)))
59 Конфигуратор1с
 
07.10.11
18:06
(58) вот она женская благодарность (((
60 Масянька
 
07.10.11
18:11
(59) :)))))))))))))))))))
Как же тогда мужчины благодарят? :))))))))))))))))