1С Предприятие 7.7, программирование |
Здравствуйте Гость [ Вход | Регистрация ] | Форум в сети 6827-й день
Шановні користувачі! Запрошуємо вас до офіційного телеграм-канала 0day Community. Тут ви зможете поспілкуватися одне з одним та дізнатися про останні новини щодо роботи ресурса, поставити запитання до адміністрації, тощо. Перейти до телеграм-канала можна відсканувавши QR-код або натиснувши на посилання: @zeroday_ua |
1С Предприятие 7.7, программирование |
selesta |
Mar 28 2007, 16:12
Пост
#1
|
Благодарности: 45811 Репутация: 811 Honey bear Группа: Пользователи Сообщений: 1 352 С нами с: 17-March 06 |
1С Предприятие 7.7 Обсуждаем вопросы по программированию в 1С 7.7. Буду рад помочь Вам ответами на вопросы. 1С Предприятие 7.7, программирование (помощь по 1С 7.7) - http://forum.0day.kiev.ua/index.php?showtopic=28749 1С Предприятие 8.х, Программирование и другие вопросы (помощь по 1С 8.х) - http://forum.0day.kiev.ua/index.php?showtopic=95141 Текущие релизы украинских конфигураций и форм отчетности - http://1c.abbyy.ua/content/view/634/163/ Техническая поддержка на сайте 1С.RU (последние обновления) - http://www.1c.ru/ukraina/support/release.jsp Софт ищем только здесь |
maxell |
Dec 22 2009, 14:24
Пост
#161
|
Репутация: 60 Дух Группа: Пользователи Сообщений: 185 С нами с: 22-August 09 |
Привет всем, в 1с не силен подскажите как из одной базы в другую затащить справочник товаров.
7.7 бух-торговля-склад-кадры-зп |
.::EclipsE::. |
Dec 28 2009, 15:37
Пост
#162
|
Репутация: 7 Дух Группа: Пользователи Сообщений: 62 С нами с: 29-June 09 |
подскажите как из одной базы в другую затащить справочник товаров. Поищи в нете обработку Универсал (universal.ert), думаю она тебе поможет |
maxell |
Dec 28 2009, 17:24
Пост
#163
|
Репутация: 60 Дух Группа: Пользователи Сообщений: 185 С нами с: 22-August 09 |
Спасибо!!!! уже перетащил
|
fli |
Jan 1 2010, 12:52
Пост
#164
|
Репутация: 125 Постоялец Группа: Пользователи Сообщений: 1 640 С нами с: 12-November 07 |
Хелп. В модуле формы документа выдает ошибку на строке
УстановитьЗначение(1, Дисципліна,"Всього"); УстановитьЗначение<<?>>(1, Дисципліна,"Всього"); {Документ.рнп.Форма.Модуль(14)}: Процедура не обнаружена (УстановитьЗначение) При проверке модуля обнаружены синтаксические ошибки! Сообщение отредактировал fli - Jan 1 2010, 12:53 |
fli |
Jan 4 2010, 11:08
Пост
#165
|
Репутация: 125 Постоялец Группа: Пользователи Сообщений: 1 640 С нами с: 12-November 07 |
И еще вопрос, как в таблицу(форма для печати документа) вывести значения табличной части документа? у меня выводиться только выделенная строка.
подскажите плз. UPD разобрался: j=0; пока i<>j цикл j=j+1; ПолучитьСтрокуПоНомеру(j); Таб.ВывестиСекцию("Дисципліни"); конеццикла ; Сообщение отредактировал fli - Jan 4 2010, 22:02 |
fli |
Jan 6 2010, 10:46
Пост
#166
|
Репутация: 125 Постоялец Группа: Пользователи Сообщений: 1 640 С нами с: 12-November 07 |
Хелп. В модуле формы документа выдает ошибку на строке УстановитьЗначение(1, Дисципліна,"Всього"); УстановитьЗначение<<?>>(1, Дисципліна,"Всього"); {Документ.рнп.Форма.Модуль(14)}: Процедура не обнаружена (УстановитьЗначение) При проверке модуля обнаружены синтаксические ошибки! блин, роздуплился, что надо было задать переменную: перем ТабЗнач; процедура приоткрытии(); ТабЗнач = СоздатьОбъект("ТаблицаЗначений"); конецпроцедуры процедура уст(); ТабЗнач.УстановитьЗначение(2,2,"123"); конецпроцедуры но фак, теперь пишет Номер за пределами значения хотя хз, откуда оно знает что табличная часть документа это переменная Таб !? подскажите как правильно, не могу роздуплиться Сообщение отредактировал fli - Jan 6 2010, 11:48 |
mhts |
Jan 6 2010, 14:42
Пост
#167
|
Репутация: 2 Дух Группа: Пользователи Сообщений: 20 С нами с: 2-November 09 |
блин, роздуплился, что надо было задать переменную: перем ТабЗнач; процедура приоткрытии(); ТабЗнач = СоздатьОбъект("ТаблицаЗначений"); конецпроцедуры процедура уст(); ТабЗнач.УстановитьЗначение(2,2,"123"); конецпроцедуры но фак, теперь пишет Номер за пределами значения хотя хз, откуда оно знает что табличная часть документа это переменная Таб !? подскажите как правильно, не могу роздуплиться А никто и не знает, что табличная часть документа это переменная ТабЗнач! Создан пустой объект типа ТаблицаЗначений, без колонок и строк. Потом пытаешься установить в эту таблицу какое-то значение в строку 2 колонки 2, А пределы значений: строк - 0, колонок - тоже 0 |
fli |
Jan 6 2010, 15:38
Пост
#168
|
Репутация: 125 Постоялец Группа: Пользователи Сообщений: 1 640 С нами с: 12-November 07 |
А никто и не знает, что табличная часть документа это переменная ТабЗнач! Создан пустой объект типа ТаблицаЗначений, без колонок и строк. Потом пытаешься установить в эту таблицу какое-то значение в строку 2 колонки 2, А пределы значений: строк - 0, колонок - тоже 0 тада... а какая переменная отвечает за табл.часть документа? в синтаксис-помощнике так:УстановитьЗначение(<Строка>,<Колонка>,<Знач>) но так не робе |
mhts |
Jan 6 2010, 16:12
Пост
#169
|
Репутация: 2 Дух Группа: Пользователи Сообщений: 20 С нами с: 2-November 09 |
|
fli |
Jan 6 2010, 16:42
Пост
#170
|
Репутация: 125 Постоялец Группа: Пользователи Сообщений: 1 640 С нами с: 12-November 07 |
|
mhts |
Jan 6 2010, 16:53
Пост
#171
|
Репутация: 2 Дух Группа: Пользователи Сообщений: 20 С нами с: 2-November 09 |
Так, к слову... Может, кому пригодится...
Обнаружил каку-бяку в 7.7 при работе со списком значений. Тривиально проверяю дубли строк в документе: //============================ Процедура УбратьДублиТоваров(Док) табл1 = СоздатьОбъект("ТаблицаЗначений"); спЕстьВДоке = СоздатьОбъект("СписокЗначений"); Док.ВыгрузитьТабличнуюЧасть(табл1); Док.УдалитьСтроки(); Поз = 1; Пока Поз<=табл1.КоличествоСтрок() Цикл табл1.ПолучитьСтрокуПономеру(Поз); Если спЕстьВДоке.Принадлежит(табл1.ТМЦ)=1 Тогда табл1.УдалитьСтроку(); Иначе спЕстьВДоке.ДобавитьЗначение(табл1.ТМЦ); Поз = Поз + 1; КонецЕсли; КонецЦикла; Док.ЗагрузитьТабличнуюЧасть(табл1); КонецПроцедуры При количестве строк в документе порядка 1000 обрабатывает около 1 минуты! Заменяем .Принадлежит() на .НайтиЗначение() : //============================ Процедура УбратьДублиТоваров(Док) табл1 = СоздатьОбъект("ТаблицаЗначений"); спЕстьВДоке = СоздатьОбъект("СписокЗначений"); Док.ВыгрузитьТабличнуюЧасть(табл1); Док.УдалитьСтроки(); Поз = 1; Пока Поз<=табл1.КоличествоСтрок() Цикл табл1.ПолучитьСтрокуПономеру(Поз); Если спЕстьВДоке.НайтиЗначение(табл1.ТМЦ)>0 Тогда табл1.УдалитьСтроку(); Иначе спЕстьВДоке.ДобавитьЗначение(табл1.ТМЦ); Поз = Поз + 1; КонецЕсли; КонецЦикла; Док.ЗагрузитьТабличнуюЧасть(табл1); КонецПроцедуры Теперь все отрабатывает за 1 - 2 секунды!!! Вывод: Проверку на вхождение в большой список значений желательно делать методом "НайтиЗначение()". Проверку методом "Принадлежит()" надо использовать, если в списке присутствуют группы справочника. Тогда "НайтиЗначение()" может не найти анализируемый элемент справочника, входящий в группу из списка... |
mhts |
Jan 6 2010, 17:11
Пост
#172
|
Репутация: 2 Дух Группа: Пользователи Сообщений: 20 С нами с: 2-November 09 |
Хочу установить определенное значение конкретным ячейкам в таблице документа)))) В модуле формы документа? "Конкретные ячейки в таблице документа" называются реквизитами табличной части. Например, такие: Товар, Кво, Сумма. Можно так: Если ПолучитьСтрокуПоНомеру(КакойТоНомер)=1 Тогда Товар = КакойТоТовар; Кво = 5; Сумма = 10; КонецЕсли; Это если в документе уже есть строка с номером КакойТоНомер... |
fli |
Jan 6 2010, 17:34
Пост
#173
|
Репутация: 125 Постоялец Группа: Пользователи Сообщений: 1 640 С нами с: 12-November 07 |
В модуле формы документа? .... Это если в документе уже есть строка с номером КакойТоНомер... да, в модуле формы Э неее,документ то пуст! ))) У меня эта процедура установкизначения должна выполняться при создании/редактировании документа! Сообщение отредактировал fli - Jan 6 2010, 17:37 |
mhts |
Jan 6 2010, 17:56
Пост
#174
|
Репутация: 2 Дух Группа: Пользователи Сообщений: 20 С нами с: 2-November 09 |
да, в модуле формы Э неее,документ то пуст! ))) У меня эта процедура установкизначения должна выполняться при создании/редактировании документа! Ну, тада надо строки вводить в процедуре... Можно перескочить на таблицу значений, если прямо так это необходимо: ТЗ = СоздатьОбъект("ТаблицаЗначений"); ВыгрузитьТабличнуюЧасть(ТЗ); УдалитьСтроки(); // Теперь документ у нас точно пустой, а все, что в нем было - в таблице значений // дальше делаем с этой таблицей все, что можно делать с таблицами значений: // добавляем - удаляем строки, сортируем, устанавливаем значения в ячейках и т.д. // в конце - запихиваем все это в документ: ЗагрузитьТабличнуюЧасть(ТЗ); |
fli |
Jan 6 2010, 18:02
Пост
#175
|
Репутация: 125 Постоялец Группа: Пользователи Сообщений: 1 640 С нами с: 12-November 07 |
Ну, тада надо строки вводить в процедуре... Можно перескочить на таблицу значений, если прямо так это необходимо: ТЗ = СоздатьОбъект("ТаблицаЗначений"); ВыгрузитьТабличнуюЧасть(ТЗ); УдалитьСтроки(); // Теперь документ у нас точно пустой, а все, что в нем было - в таблице значений // дальше делаем с этой таблицей все, что можно делать с таблицами значений: // добавляем - удаляем строки, сортируем, устанавливаем значения в ячейках и т.д. // в конце - запихиваем все это в документ: ЗагрузитьТабличнуюЧасть(ТЗ); спасибо,попробую но как же тогда использовать процедуру УстановитьЗначение? знаю, что из-за какой-то мелочи она не хочет работать |
mhts |
Jan 8 2010, 10:15
Пост
#176
|
Репутация: 2 Дух Группа: Пользователи Сообщений: 20 С нами с: 2-November 09 |
спасибо,попробую но как же тогда использовать процедуру УстановитьЗначение? знаю, что из-за какой-то мелочи она не хочет работать Из-за такой мелочи: метод УстановитьЗначение(<НомСтр>,<Колонка>,<Знач>) позволяет установить значение в уже существующую ячейку, если строки с номером НомСтр у ТЗ еще нет, тогда и будет что-то типа "Номер за пределами значений"... Не знаю, чего ты хочешь добиться таким нестандартным способом заполнения табличной части, но принципиально вот так для предыдущего примера: // Изначально документ пустой ТЗ = СоздатьОбъект("ТаблицаЗначений"); ВыгрузитьТабличнуюЧасть(ТЗ); УдалитьСтроки(); // Вводим 10 новых строк в ТЗ Для сч = 1 по 10 Цикл ТЗ.НоваяСтрока(); КонецЦикла; //Устанавливаем значения ячеек, учитывая ячейку "НомерСтрокиДокумента" Для сч = 1 по 10 Цикл ТЗ.УстановитьЗначение(сч, "НомерСтрокиДокумента", сч); ТЗ.УстановитьЗначение(сч, "Товар", КакойТоТовар); ТЗ.УстановитьЗначение(сч, "Кво", сч); ТЗ.УстановитьЗначение(сч, "Сумма", сч * 10); КонецЦикла; // Заполняем документ ЗагрузитьТабличнуюЧасть(ТЗ); В итоге получаем в табличной части 10 строчек, заполненных одним и тем же товаром с разными количествами и суммами. Пример просто для примера, прикладного смысла не имеет. Если поподробнее опишешь свою задачу - можно ближе к теме нарисовать... |
fli |
Jan 8 2010, 11:21
Пост
#177
|
Репутация: 125 Постоялец Группа: Пользователи Сообщений: 1 640 С нами с: 12-November 07 |
Задание примерно такое(это весь модуль формы)
процедура тест(); если НайтиЗначение("555",i,j) тогда УстановитьЗначение(i+1,j+1,"666") конецесли конецпроцедуры Прикол в том что НайтиЗначение тоже не работает -Процедура не обнаружена (НайтиЗначение) И это, у меня не получаеться привязать переменную ТЗ к табличной части, вернее не знаю как. Я потом удалил ее нафик, вставил в форму новую таблицу значений, в свойствах указал идентификатор ТЗ - нефига, она не поддаеться редактированию ни програмно, ни в режиме ввода данных - пустая и все)) да и вообще, не могу понять, зачем создавать програмно новую табличную часть, если уже есть готовая, тем более у меня там почти почти 20 реквизитов(а это геммор все прописывать вручную))). короче,хз, я полный нюб_))) |
mhts |
Jan 8 2010, 13:16
Пост
#178
|
Репутация: 2 Дух Группа: Пользователи Сообщений: 20 С нами с: 2-November 09 |
Задание примерно такое(это весь модуль формы) процедура тест(); если НайтиЗначение("555",i,j) тогда УстановитьЗначение(i+1,j+1,"666") конецесли конецпроцедуры Прикол в том что НайтиЗначение тоже не работает -Процедура не обнаружена (НайтиЗначение) И это, у меня не получаеться привязать переменную ТЗ к табличной части, вернее не знаю как. Я потом удалил ее нафик, вставил в форму новую таблицу значений, в свойствах указал идентификатор ТЗ - нефига, она не поддаеться редактированию ни програмно, ни в режиме ввода данных - пустая и все)) да и вообще, не могу понять, зачем создавать програмно новую табличную часть, если уже есть готовая, тем более у меня там почти почти 20 реквизитов(а это геммор все прописывать вручную))). короче,хз, я полный нюб_))) Понял, наконец, в чем твое заблуждение! Ты пытаешься работать с табличной частью документа как с объектом ТаблицаЗначений. Табличная часть документа ЭТО НЕ ТАБЛИЦА ЗНАЧЕНИЙ!!! Методы Таблицы значений тут не работают и поиска такого удобного тут нет! Поэтому надо так: процедура тест() ТЗ = СоздатьОбъект("ТаблицаЗначений"); ВыгрузитьТабличнуюЧасть(ТЗ); i = 0; j = 0; если ТЗ.НайтиЗначение("555",i,j) тогда ТЗ.УстановитьЗначение(i+1,j+1,"666"); УдалитьСтроки(); ЗагрузитьТабличнуюЧасть(ТЗ); конецесли конецпроцедуры И то в таком виде если получится так, что i - это последняя строка документа или j - это последняя колонка - опять тебе будет та же ошибка при попытке чего-то установить в i+1,j+1 Какие-то еще проверки надо впихнуть, типа так: **************** если ТЗ.НайтиЗначение("555",i,j) тогда Если ((i<ТЗ.КоличествоСтрок()) и (j<ТЗ.КоличествоКолонок())) Тогда ТЗ.УстановитьЗначение(i+1,j+1,"666"); УдалитьСтроки(); ЗагрузитьТабличнуюЧасть(ТЗ); конецесли конецесли |
fli |
Jan 8 2010, 17:53
Пост
#179
|
Репутация: 125 Постоялец Группа: Пользователи Сообщений: 1 640 С нами с: 12-November 07 |
Респект и уважуха! терь все ясно
а еще вопрос, как правильно обращаться к атрибуту табл.части типа ПЕРЕЧИСЛЕНИЕ? например если нужно получить его текущее значение? вот например: abc=ТипКонтроля; в поле abc мне выводиться какое то число,наверное код этого перечисления, а как получить именно его значение? ПС: ТипКонтроля - атрибут типа перечисление, имеет два занчения- "Зачет" и "Экзамен", так нужно посчитать количевство значений "Экзамен" в таблице. Посчитать это я запросто, а прочитать значение хз как))) Сообщение отредактировал fli - Jan 8 2010, 18:01 |
mhts |
Jan 11 2010, 17:14
Пост
#180
|
Репутация: 2 Дух Группа: Пользователи Сообщений: 20 С нами с: 2-November 09 |
как правильно обращаться к атрибуту табл.части типа ПЕРЕЧИСЛЕНИЕ? например если нужно получить его текущее значение? вот например: abc=ТипКонтроля; в поле abc мне выводиться какое то число,наверное код этого перечисления, а как получить именно его значение? ПС: ТипКонтроля - атрибут типа перечисление, имеет два занчения- "Зачет" и "Экзамен", так нужно посчитать количевство значений "Экзамен" в таблице. Посчитать это я запросто, а прочитать значение хз как))) Попробуй запусти в модуле формы: Процедура Тест() Перем ТК; ВыбратьСтроки(); Пока ПолучитьСтроку()=1 Цикл ТК = ТипКонтроля; Сообщить("Строка № "+СокрЛП(НомерСтроки)+" => Тип контроля = "+ТК); КонецЦикла; КонецПроцедуры Сообщит оно тебе по каждой заполненной строке твои зачеты и экзамены. Ты не полностью проблему описываешь, догадываться приходится, что у тебя скорее всего "поле abc" - это или реквизит шапки документа или реквизит диалога на форме документа. Посмотри, какой тип у этого реквизита назначен. Если строка или число - так и будет ерунда какая-нибудь выводится. При выполнении abc=ТипКонтроля происходит неявное преобразование типа перечисление к типу поля abc. Как умеет так и преобразовывает. Если назначишь этому полю тип Перечисление.ТипыКонтроля (или как оно у тебя там в конфигураторе называется?), тогда abc=ТипКонтроля сработает нормально. Если назначишь ему тип "Строка", тогда надо писать что-то такое: abc=СокрЛП(ТипКонтроля), какую-нибудь функцию явного преобразования к строке. Можно так: abc=Строка(ТипКонтроля) |
Упрощённая версия | Сейчас: 23rd November 2024 - 10:38 |
Сайт не розміщує електронні версії творів, а займається лише колекціонуванням та каталогізацією посилань, що публікуються нашими користувачами. Якщо Ви є правовласником якоїсь частини опублікованого матеріалу та не бажаєте, щоб посилання на нього знаходилось в нашому каталозі, зв’яжіться з нами і ми видалимо його. Файли для обміну надані користувачами сайту і адміністрація не несе відповідальності за їх вміст. |