Открыть форму на клиенте 1с 8.3. УФ: программное создание и копирование документов с использованием конструкций ДанныеФормыВЗначение, ЗначениеВДанныеФормы. Как открыть форму и задать на ней отбор

От оперативного получения информации о количестве имеющихся товарно-материальных ценностей у компании зависит планирование и результативность работы не только отделов закупок и продаж, но и производства в целом. Ведение складского учета в 1С позволит получать актуальные данные, используя необходимые фильтры.

Если у компании несколько складов, настройку складского учета необходимо начинать с введения двух и более мест учета. Для этого нужно в меню «Справочники» - «Товары и услуги» найти раздел «Склады».

Рис.1



Рис.2



Рис.3

Последовательно заполняем поля группы, наименования, ответственного лица. Аналогично создаем Склад №2 с указанием наименования как «Розничный».



Рис.4

Таким образом, мы сформировали два склада: №1 и №2.

Для корректного учета необходимо ввести остатки на начало года. Для этого в меню «Главное» находим вкладку «Помощник ввода остатков».



Рис.5

Открывается окно помощника ввода остатков, в котором мы выбираем остатки, по какому счету мы хотим ввести. В нашем случае это счет 41 «Товары».



Рис.6

Дата документа 31.12.2017 года устанавливается автоматически, так как у нас в настройках задано, что остатки были видны на 01.01.2018 года (если дата документа будет 01 января, сумма остатков попадает в обороты текущего года).



Рис.7

Остатки товаров можно проверить в меню «Склад» - «Отчеты» - «Остатки товаров».



Рис.8

В открывшемся окне устанавливаем дату, на которую хотим проверить остаток, и нажимаем на кнопку «Сформировать».



Рис.9

Поступление товара в организацию оформляется в разделе «Покупки» документом «Поступления (акты, накладные)», при регистрации которого имеется строка «Склад».



Рис.10

Наведение курсора на строку «Склад» приводит к возможности выбора, на какой именно склад оприходовать поступающий по накладной товар.



Рис.11

Мы выбираем Склад №1 «Оптовый». Для примера заполним наименование и количество поставленного товара – «Компьютер в комплекте» в количестве 80 штук.

Наиболее распространенный вид перемещения товаров – это перемещение с Оптового склада на Розничный (передача со склада в магазин, например). Для этого перейдем в разделе «Склад» в подраздел «Перемещение товаров». Открывается журнал регистрации перемещенных товаров, в котором необходимо сформировать электронный документ «Перемещение товаров».



Рис.12

После заполнения даты перемещения товара заполняем графу «Отправитель», выбирая Оптовый склад, а затем графу «Получатель» – это в нашем случае Розничный склад. В строке «Номенклатура», пользуясь кнопками «Добавить» или «Подбор», переведем 50 штук «Компьютеров в комплекте» со склада «Оптовый» на «Розничный».

После проведения данного документа снова формируем отчет «Остатки товаров».



Рис.13

Программа 1С для складского учета максимально упрощает процедуру выбытия материалов и товара со склада. Далее рассмотрим пример списания в производство материалов. Списание материала в производство оформляется документов «Требование-накладная».

Для его оформления необходимо перейти в раздел «Склад», затем подраздел «Склад», далее найти строку «Требования накладные».



Рис.14

В открывающемся окне можно сразу выбрать склад, откуда собираемся списать на производство материалы. Эта функция активна до нажатия кнопки «Создать».



Рис.15



Рис.16

При заполнении необходимых реквизитов справа имеется строка «Склад», позволяющая выбрать, с какого именно склада совершается списание в производство материалов. В нашем примере Склад №1 – Оптовый.



Рис.17



Рис.18

Обратите внимание! Мы специально проставили количество материалов, превышающее фактическое наличие на складе. Система позволяет списать материалы с превышением, так как нами в меню «Администрирование» - «Проведение документов» (Рис.19) установлена галочка в строке «Разрешить списание запасов при отсутствии остатков по данным учета».



Рис.19



Рис.20

Если убрать данную галочку, программа установит запрет на проведение документа на списание материалов. Ниже мы расскажем, как в системе осуществляется контроль отрицательных остатков.

Инвентаризация товаров

Автоматизация складского учета подразумевает также электронное оформление результатов инвентаризации. Для этого предусмотрены следующие документы в разделе «Инвентаризация»:

  • Инвентаризация товаров;

Рассмотрим подробнее все три документа.

Проведем инвентаризацию товаров по Складу №1. Для этого выберем документ «Инвентаризация товаров».



Рис.21

Нажатием кнопки «Заполнить» в документе отражаются сведения по остаткам на основании данных бухгалтерского учета. Напомним, что после перемещения товаров у нас на складе оставалось 40 «Компьютеров в комплекте». Предположим, что фактически на складе оказалось 39 компьютеров. Для этого редактируем графу «Количество фактическое». Программа автоматически рассчитывает сумму отклонения со знаком минус и выделением красным цветом.





Рис.23

Для дальнейшего отражения в учете результатов инвентаризации нужно провести документ «Списание товаров».



Рис.24

В строке «Инвентаризация» программа позволяет выбрать документ, послуживший основанием для списания недостающего товара. После выбора данного документа нажимаем кнопку «Заполнить», 1С Предприятие предусматривает автоматическое перенесение данных из выбранного документа без повторного ввода.



Рис.25

Тут стоит обратить внимание на графу «Расходы (НУ)». В соответствии с учетной политикой, при проведении данного документа ущерб должен списываться напрямую в расходы или не приниматься в налоговом учете.



Рис.26

Отчет показывает наличие на складе 39 штук компьютеров.

Предположим, что по результатам инвентаризации у нас наоборот возник излишек в 2 компьютера.



Рис.27

Как и при списании товаров, в «Оприходование товаров» нужно выбрать документ-основание «Инвентаризацию товаров», сведения из которой также автоматически подтягиваются в новый документ.



Рис.28



Рис.29

На представленных выше картинках обратим внимание, что по номенклатуре товара ДТ (Дизельное топливо) имеется отрицательное сальдо в размере 2000 л, то есть мы отгрузили товар, которого у нас фактически на складе не было. Из этого делаем вывод, что в программе не нашло отражение поступление дизельного топлива от наших поставщиков. Для исключения таких моментов автоматизированный складской учет дополнен документом «Контроль отрицательных остатков», который можно найти в меню «Склад»- «Отчеты».





Рис.31

Когда контроль отрицательных остатков отключен, этот отчет позволяет эффективно и своевременно отследить поступление и отражение в бухгалтерском учете материальных отчетов ответственных лиц, а также исключает пересортицу в номенклатуре товаров. В противном случае программа не дает провести соответствующий документ.

От организации складского учета зависит работа логистов, бухгалтеров и работников отдела продаж. Своевременное проведение первичных данных помогает рационально использовать складские площади, не допуская залежей или дефицита товара. Складской учет 1С 8 в конфигурации «1С: Управление торговлей редакция 11.0» – это оперативное отражение товарных ценностей, исключается человеческий фактор ручной обработки операций, формирование аналитической отчетности.

Первичная настройка складского учета

Перед началом работы необходимо ввести полную информацию о складах. Для этого необходимо войти на рабочее место администратора, в закладке «НСИ и администрирование» ввести данные.

Кнопкой «Создать» необходимо выбрать склад:

  • Оптовый;
  • Розничный.

При выборе розничного магазина программой предусмотрено ведение количественного или суммового учета. Для оптового склада – только по учетной стоимости.

Для розничного можно настроить формат магазина, в котором предусмотреть возможность контроля для поддержания определенного ассортимента. Для этого необходимо установить флаг в соответствующей ячейке.

Если ведение склада в 1С предполагает и розничные, и оптовые цены, следует отметить только «Розничный магазин». Выбор вида цен следует делать исходя из учетной политики компании. Обязательно нужно указать ответственное лицо и адрес склада.

В меню «Группа складов» предусмотрена возможность ведения поступления или отгрузки в целом по группировке, так как на одной складской площади может находиться номенклатура сторонних компаний.

Ордерная схема документооборота

Чтобы выбрать ордерную схему документооборота, необходимо галочками отметить ячейки «При поступлении» и «При отгрузке». Это дает возможность детально отслеживать изменение статуса при движении товарных позиций и на каждом этапе контролировать работу материально-ответственного лица.

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

При выборе данного учета есть возможность установить контроль над адресным складом. На территории можно установить рабочие параметры хранения для быстрого поиска. Площади могут быть разделены на зоны хранения:

  • Секции;
  • Стеллажи;
  • Ячейки.

Есть возможность отслеживать остатки в каждой ячейке.

Для каждой группировки товарных позиций можно установить свою зону хранения. Это удобно для выделения скоропортящихся товаров (в холодильниках) или крупногабаритных грузов (в секциях с высокими потолками).

Настройка розничного склада

При выборе поля «Розничные цены» можно выполнить настройку параметров учета:

  • Возможность формирования цен для определенных групп;
  • Уточнить округление розничной цены.

Вкладка «Пороги срабатывания» позволяет формировать новую цену на товарную группу при получении новой партии, если заданный минимум по отношению к цене предыдущей превышен.

При заполнении карточки «Розничные цены» есть возможность формирования цен для разных вариантов реализации.

При выборе «При продаже клиентам» устанавливаются цены, зарегистрированные в прайс-листе компании. Поле «При вводе на основании документов поставки» можно зарегистрировать розничную цену. Если выбрать «При передаче между организациями» — формируется цена, которая закреплена при перемещении товарных групп между компаниями.

Настройка цены

Настройку цены можно выполнить из меню «НСИ и администрирование» в закладке «Настройка GRM» поле «Маркетинг». Данное поле позволяет выполнять ценообразование для разных товарных групп, клиентов, в зависимости от сроков оплаты. Кроме того, есть возможность предоставления скидок.

Оприходование на склад

Документы по оприходованию товарных групп на склад выполняют из меню «Склад и доставка» в закладке «Приемка».

В поле следует выбрать склад. Для этого в дереве «Торговая деятельность» следует нажать на крестик для того, чтобы раскрыть общую группировку и выбрать торговую точку либо оптовый склад по конкретному адресу.

После чего, можно оприходовать номенклатуру на склад. Для этого следует перейти в поле «Создать ордер».

Приходный документ на поступление товара содержит две вкладки. В основном поле нужно заполнить сведения общего характера:

  • Дату, номер приходного документа (накладной);
  • Сведения о поставщике;
  • Статус документа позволяет разделить шаги приемки товара: к поступлению, в работе, требуется обработка или принят;
  • Ответственное лицо.

После заполнения всех полей переходят в закладку «Товары».

Ввод информации о товаре

Складской учет в 1С позволяет максимально подробно отразить все сведения о товаре. Для этого в поле «Товары» вкладкой «Добавить» следует выбрать товарную позицию либо создать новую карточку товарной позиции

В карточке необходимо внести характеристики товара:

  • Наименование;
  • Единицу измерения;
  • Артикул;
  • Принадлежность к складской группе;
  • Размещение в конкретной ячейке;
  • Описание товарной позиции;
  • Выбрать ставку НДС для формирования цены;
  • Распечатать ценник (если товар приходуется на розничный склад).

Корректное заполнение карточки товара исключит возникновение пересортицы при реализации и перемещении аналогичных позиций.

В поле «Товары» предусмотрена возможность распаковать партию и сформировать цену для каждой единицы, заполнить серии. Если ранее было создано распоряжение на приемку товара, сверку данных можно выполнить при нажатии на вкладку «Проверить». Также при помощи кнопки «Заполнить» можно выполнить заполнение ордера из ранее созданного распоряжения.

Панель «Дополнительной информации» позволяет проанализировать заполнение карточки товара, ввести штрихкоды или индивидуальные типоразмеры товара.

В случае введения некорректной информации внизу поля будет сообщение с подсказкой о возможных ошибках.

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

Отгрузка товара

Создать документ об отгрузке можно из меню «Склад и доставка» в поле «Отгрузка».

Выбор склада выполняется аналогично документу прихода. После чего, нужно выбрать распоряжение из закладки «Создать ордера», на основании которого отгрузка будет произведена.

Затем нужно заполнить поле расходного ордера. Оно содержит 3 вкладки. В основном меню необходимо ввести номер и дату расходного ордера, выбрать контрагента, ответственное лицо, в подотчете которого номенклатура находится. В случае перемещения товаров между складами – выбрать склад.

Управлять товарными позициями можно из вкладки «Товары по распоряжениям». Ордер автоматически будет сформирован из распоряжения. Можно индивидуально сделать подборку во вкладке «Отгружаемые товары»:

  • «Добавить» — выбор товарной позиции;
  • «Серии» — можно подобрать серию, если в первичном учете товарная позиция была оприходована с указанием серий;
  • «Заполнить» — подбор товаров кратно упаковкам (когда распаковывать нет возможности);
  • «Перенести в другой ордер» — возможность перенести товар в новый расходный ордер.

При необходимости, можно разбить товар на несколько строк в определенном количестве или заполнить отгрузку по штрихкоду.

После заполнения всех полей документ можно вывести на печать.

Отчетность

В основном меню можно поле выбрать формирование отчета по выбранному складу. Отчет «Пересчеты товаров» выполняет контроль остатков на конкретную дату по выбранному складу и материально-ответственному лицу. В случае выявления отклонений, они будут зафиксированы после сохранения отчета.

Создание инвентаризационной описи можно сформировать из меню «Складские акты». Во вкладке «Создать» можно выбрать документ для отражения результатов инвентаризации.

Вручную отражение результатов инвентаризации выполняют в отчете «Ордер на отражение излишков».

Заключение

Ведение складского учета в 1С в конфигурации «1С: Управление торговлей редакция 11.0» позволяет оперативно формировать ордера поступления с одновременным формированием цены. Есть возможность отражения движения документов, размещения на складах с многоуровневым режимом хранения. Отчетность позволяет оперативно проводить инвентаризацию и отражать результаты.

Вопрос: Получить форму "На Сервере"


Есть следующая проблема нужно передать форму на сервер. Так понимаю нужно получить на клиенте структуру и передавать ее на сервер. Помогите подредактировать следующий код
Код 1C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 СоздатьДокумент Уведомление(МассивВыделенныхСтрок) ; КонецПроцедуры & НаСервере Процедура СоздатьДокумент Уведомление(ПациентыМассивИдентификаторов, НеУведомлять = Ложь ) Новый Документ = Документы . ст_Уведомление. СоздатьДокумент () ; ФормаДокумента = Новый Документ. ПолучитьФорму( "Не уведомлять никогда" ; Иначе Новый Документ. Текст = "Уведомлен (ы)" ; КонецЕсли ; Новый Документ. Дата = НачалоДня (ТекущаяДата () ) ; Для Каждого ИдентификаторСтроки Из

Ответ: Сделал так и заработало:

Код 1C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 & НаКлиенте Процедура Уведомить(Команда) МассивВыделенныхСтрок = Элементы. Уведомления. ВыделенныеСтроки; СоздатьДокумент Уведомление(МассивВыделенныхСтрок) ; КонецПроцедуры & НаКлиенте Процедура СоздатьДокумент Уведомление(ПациентыМассивИдентификаторов, НеУведомлять = Ложь ) ФормаДокумента = ПолучитьФорму("Документ.ст_Уведомление.ФормаОбъекта" ) ; Новый Документ = ФормаДокумента. Объект; Новый Документ. НеУведомлять = НеУведомлять; Если НеУведомлять Тогда Новый Документ. Текст = "Ніколи не здійснювати нагадування" ; Иначе Новый Документ. Текст = "Повідомлений (а)" ; КонецЕсли ; Новый Документ. Дата = НачалоДня (ТекущаяДата () ) ; Для Каждого ИдентификаторСтроки Из ПациентыМассивИдентификаторов Цикл НоваяСтрока = Новый Документ. Пациенты. Добавить() ; НоваяСтрока . Пациент = Уведомления. Найти ПоИдентификатору(ИдентификаторСтроки) . Пациент; КонецЦикла ; ФормаДокумента. Открыть() ; КонецПроцедуры

Вопрос: v7: Открыть форму("не работает!")!


пишу, ОткрытьФорму("Документ.Бронь_Подрезки",Контекст);
но не открывает этот документ, если кто знает, помогите пожалуйста!
пробовал разные варианты и этот документ существует.

Ответ: () Так-так.. значит в 0 ты соврал? Ввёл сообщество в заблуждение? Отвлёк от важных дел? Заставил кого-то поставить давно забытую 1С 7.7, а кого-то даже поднять SQL-сервер для проверки работы в разных вариантах работы базы? И всё это только потому что ты не смог корректно нажать Ctrl+C / Ctrl+V?!

Вопрос: Внешняя печатная форма "Платежное поручение" для документа "Поступление на расчетный счет"(БП 3.0)


Добрый день, Люди добрые!!!
Помогите чайнику!
В 1С 8.3 Бухгалтерии понадобилось распечатывать платежные поручения для документов "Поступление на расчетный счёт" через внешнюю печатную форму, так как в самой 1с она отсутствует

Невозможно подключить дополнительную обработку из файла.
Возможно, она не подходит для этой версии программы.

{ВнешняяОбработка.ПоступлениеНаСчет.МодульОбъекта(74,28)}: Переменная не определена (УправлениеНебольшойФирмойСервер)

Как это можно исправить?

Ответ:

artsh сказал(а):

Добрый день, Люди добрые!!!
В наличии есть форма только для 8.2, при подключении в 8.3 выдает:
Как это можно исправить?

Нажмите, чтобы раскрыть...

Дело не в том, 8.2 или 8.3! Важна информация о конфигурации.
Вы пытаетесь открыть в БП (2.0 или 3.0 ???) обработку, предназначенную для УНФ!
Естественно в БП нет такой процедуры как "УправлениеНебольшойФирмойСервер".

Найдите, создайте сами, или закажите обработку для Бухгалтерии .
В любом случае четко нужно указать конфигурацию программы - БП 2.0 или 3.0.

Вопрос: Регламентное задание "Загрузить файлы на сервере"


Добрый день!
Может, кто сталкивался с подобной задачкой и подскажет, как ее решить (ну или пошлет... в нужном направлении)?
Исходные данные:
1. Имеются торговые точки которые формируют файлы трех типов: CSV, XLS, DB.
2. Файлы поступают на три ПК (разные каналы получения файлов и разные системы декодирования).
3. Имеется обработка, которая из полученных файлов получает необходимые данные и загружает их в файловую ИБ.
4. Обработка запускается через штатный планировщик по расписанию.
Задача:
1. Перенести весь этот процесс на серверную платформу.
2. Организовать загрузку файлов через регламентное задание.
Проблема(ы):
1. Регламентные задания выполняются серверными процедурами, а загрузка и обработка файлов это в основном клиентские процедуры.
2. ...?
Вопрос:
Как из регламентного задания просканировать каталог на другом ПК и загрузить найденные файлы?

Ответ:

Вам уже написали ответ.

Вопрос: Серверная "База не найдена"


Сегодня случилось что-то странное. Одна из баз перестала открываться. Выдается ошибка, что "база не найдена". На сервере 1С она есть, в sql - тоже. А не открывается.
Я на sql-сервере сделала ее копию, потом подключила в 1с-сервере - и все заработало нормально. Но что случилось-то со "старой" базой?? Как можно уточнить откуда ноги растут у такой ошибки?

Ответ:

Draco сказал(а):

Ну провериь какой сервер и порты были прописаны как пкть к базе и на том же кластере посмотреть естть там или нет и те же порты у клатера или нет

Нажмите, чтобы раскрыть...

пойду попрошу гугла расшифровать

Вопрос: УПП 1.3 В Расчете при увольнении "Заработок" меньше чем в Расчетном листке. HELP


УПП 1.3 В документе "Расчет при увольнении" в печатной форме Т-61 в графе "Заработок" сумма меньше чем "Начислено" в печатной форме "Расчетного листка" в документе "Начисление зарплаты сотрудникам Организации".

Еще. Суммы по документам "Оплата праздничных и выходных" в Расчетный листок попадают, в Т-61 при увольнении - нет.

Подскажите набор правильных шаманских действий, чтоб встало на место.

Ответ: () ничего при обновлениях не будет... ошибки по этой форме одни из самых застарелых и никто их не собирается исправлять


Ответ:

Сообщение от rung15

Кому я это писала?

Сообщение от GreenkA

Кнопка списка и дает эти "три точки", которые у вас пропали. Автоматом у вас это отображаться не будет, потому что тип реквизита "id_Экземпляр" - Строка. Был бы справочник - ничего в свойствах изменять не пришлось бы, и пометки "Авто" хватило бы.

Сообщение от rung15

Начинать сначала можно много раз, но итог будет один и тот же, если не понять, в чем проблема. Может стоит что-то перечитать? Эту тему, книгу, погуглить...

Ответы на вопросы из файла

Почитайте
Справочник.Книги.Экземпляры <ИмяТаблицы>.<ИмяПоля>, отсюда




.

Если НайдСтрока.Количество() >

Директивы компиляции

&НаКлиенте (&AtClient)
&НаСервере (&AtServer)

Модуль формы

Модуль команды

Общий модуль
&НаКлиенте, &НаСервере.

Вопрос: Создание дипломного проекта "Электронная библиотека"


Здравствуйте. Пишу диполом на 1с. Электронная Библиотека. Итак суть проблемы: Я хотел бы чтобы в табличной части справочника "Студенты"-1, после выбора в реквизите "Название_Книги"-2 определённой книги, в реквизите "id_Экземпляр"-3 появлялся на выбор список доступных экземпляров. Цифрами возле ковычек я отметил обозначения на картинки. Ещё бы конечно было неплохо чтобы при попадании экземпляра к студенту чтобы статус менялся, но это зада второстепенная. Помогите пожалуйста. Ещё вопрос: Почему после ссылания на какое-то поле я могу в текущее поле добавлять только стандартный реквезит "Наименование"? Спасибо за уделённое внимание. (Ещё посоветуйте пожалуйста книжек для чайника которые могли бы помочь в моей теме плиз.)

Ответ:

Сообщение от rung15

не знаю почему, но список выпадает только при нажатии кнопки ф4, а когда нажимаешь на стрелочку ничего не происходит, и троеточие пропало куда-то

Кому я это писала?

Сообщение от GreenkA

Не забудьте в свойствах элемента формы "id_Экземпляр" включить "Кнопку списка".

Кнопка списка и дает эти "три точки", которые у вас пропали. Автоматом у вас это отображаться не будет, потому что тип реквизита "id_Экземпляр" - Строка. Был бы справочник - ничего в свойствах изменять не пришлось бы, и пометки "Авто" хватило бы.

Сообщение от rung15

Вот чего я достиг за 6 часов и более 8 пересозданных конфигураций

Начинать сначала можно много раз, но итог будет один и тот же, если не понять, в чем проблема. Может стоит что-то перечитать? Эту тему, книгу, погуглить...

Ответы на вопросы из файла


СтандартнаяОбработка = Ложь; - (Для чего это, как я понял если книга не заполнена чтобы не выполнялась обработка выводящая список экземпляров.)
Отключение стандартной обработки события элемента формы, чтобы сработало наше описание события.
Пример для вашей конфигурации: есть элемент формы, связанный с реквизитом Название_Книги (тип СправочникСсылка.Книги). Стандартная обработка события НачалоВыбора() этого элемента приведет к открытию ФормыВыбора справочника Книги. Если мы хотим передать туда дополнительные параметры, выставить например отбор, открыть другую форму - отключаем стандартную обработку и пишем то, что хотим сделать по этому событию.

&НаСервереБезКонтекста (Чем отличаеться сервер с контекстом и без, и почему именно такой выбран)
Почитайте про директивы в 1С. Много, но полезно.

Почитайте
Конкретно по вашим вопросам: это текст запроса, в котором идет обращение к таблице Справочник.Книги.Экземпляры (табличной части Экземпляры), имя таблицы в запросе можно менять, здесь оно определено как КнигиЭкземпляры. Поэтому все получаемые поля мы определяем как <ИмяТаблицы>.<ИмяПоля>, отсюда
КнигиЭкземпляры.id_Экземпляр. "КнигиЭкземпляры.Ссылка = &Ссылка" - отбор записей в запросе по конкретному элементу справочнику Книги, который мы позже выставляем как параметр - "Запрос.УстановитьПараметр("Ссылка", Книга);".

Книги_Студентаid_ЭкземплярПриИзмененииНаСервере(ТекущаяСтрока.Название_Книги, ТекущаяСтрока.id_Экземпляр); (Это типа пересылка на процедуру ниже)
Это вопрос или утверждение? Типа да)

НайдСтрока = ТекущаяКнига.Экземпляры.НайтиСтроки(Новый Структура("id_Экземпляр", id_Экземпляр)); (Тут вообще не понимаю ничего, и для чего нам нужна структура особенно)
Умеете пользоваться синтакс-помощником? Вызов ctrl+f1, если выставите в это время курсор на чем-то непонятном - он еще сразу и попытается найти информацию об этом, с описанием и примерами.
Описание метода НайтиСтроки(): осуществляет поиск строк табличной части, соответствующих заданному условию поиска.
Условия поиска заданы в скобках в виде структуры, где в начале "id_Экземпляр" - ключ структуры, имя колонки поиска, дальше - значение структуры - id_Экземпляр(без кавычек). Это значение мы передали при вызове процедуры Книги_Студентаid_ЭкземплярПриИзмененииНаСервере(Книга, id_Экземпляр) .

Если НайдСтрока.Количество() > 0 Тогда () (Если мы выбираем какую-то строку из экземпляров то делаем её ложной?)
Ложной - это как? В этой строке мы проверяем, нашлись ли строки в табличной части по заданным параметрам поиска, чтобы не было ошибок при попытке получения значения по индексу.

Директивы компиляции


Каждая процедура и функция модуля формы, модуля команды и общего модуля управляемого приложения предваряется директивой компиляции, определяющей среду исполнения данной процедуры. Директива предваряется символом "&". Допустимые директивы:

&НаКлиенте (&AtClient) - определяет клиентскую процедуру (функцию);
&НаСервере (&AtServer) - определяет серверную процедуру (функцию);
&НаСервереБезКонтекста (&AtServerNoContext) - определяет серверную процедуру (функцию), исполняемую на сервере вне контекста формы. Переменные не могут быть внеконтекстными. В таких методах недоступен контекст формы (включая данные формы). Допустимыми являются вызовы только других внеконтекстных методов. При вызове этих методов не выполняется передача данных формы на сервер и обратно. Применение внеконтекстных методов позволяет существенно уменьшить объем передаваемых данных при вызове серверной процедуры из среды клиентского приложения;
&НаКлиентеНаСервереБезКонтекста (&AtClientAtServerNoContext) - определяет процедуру (функцию), исполняемую в модуле формы на клиенте и на сервере, не имеющую доступа к контексту формы, данным формы, переменным, но имеющую доступ к процедурам и функциям общих модулей – серверных, не глобальных и серверных и клиентских одновременно. Сама процедура (функция) доступна для клиентский, серверных контекстных и неконтекстных процедур и функций модуля формы. Из серверных внеконтекстных методов формы допускается вызов серверных методов общих модулей;
&НаКлиентеНаСервере (&AtClientAtServer) - определяет процедуру (функцию), исполняемую в модуле команды, выполняемую на клиенте и на сервере, имеющую доступ к процедурам и функциям общих модулей – серверных, не глобальных и серверных и клиентских одновременно, не имеющую доступ к переменным. Сама процедура (функция) доступна для клиентских серверных процедур и функций модуля команды.
Клиентская процедура (функция) исполняется в среде клиентского приложения. В такой процедуре доступен клиентский контекст формы и вызовы любых процедур модуля.

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

Серверная процедура (функция), исполняемая вне контекста формы, (внеконтекстная) исполняется в среде серверного приложения. В такой процедуре (функции) недоступен контекст формы (включая данные формы). Допустимыми являются вызовы только других внеконтекстных процедур (функций). При вызове этих процедур (функций) не выполняется передача данных формы на сервер и обратно. Применение внеконтекстных процедур (функций) позволяет существенно уменьшить объем передаваемых данных при вызове серверной процедуры (функции) из среды клиентского приложения.

Отсутствие директивы компиляции перед процедурой (функцией) означает использование директивы по умолчанию. Директивой по умолчанию является &НаСервере. Не допускается использование нескольких директив компиляции перед одной процедурой (функцией). Не допускается наличие одноименных процедур (функций), отличающихся только директивами компиляции.

В модуле управляемой формы допускается использование инструкций препроцессору. Рекомендуется использовать инструкции препроцессора только внутри процедур (функций). Для понимания результата при "пересечении" инструкциями препроцессора границ процедур (функций) следует учитывать, что обработка инструкций препроцессора выполняется до обработки директив компиляции.

В модуле команды предопределенная процедура-обработчик ОбработатьКоманду должна предваряться директивой &НаКлиенте, так как выполнение команды происходит в клиентском приложении.

Модуль формы
В модуле формы доступны директивы компиляции – &НаКлиенте, &НаСервере, &НаСервереБезКонтекста, &НаКлиентеНаСервереБезКонтекста.
Модуль команды
В модуле команды доступны директивы компиляции – &НаКлиенте, &НаСервере, &НаКлиентеНаСервере.
Общий модуль
В общем модуле доступны директивы компиляции – &НаКлиенте, &НаСервере.

Вопрос: Работа внешней компоненты с сервером 1С...


Добрый день,

Имеется внешняя компонента, написанная на С++, задача которой получение информации из внешней базы данных и возврат результата запроса в виде Таблицы значений в 1С.
Для формирования таблицы значений на текуший момент используется интерфейс IDispatch* pBackConnection, получаемый в качестве параметра в функции Init(). Далее я просто, используя функции 1С формирую таблицу значений, заполняю ее и возвращаю ее во второй параметр в CallAsFunc(...).
Проблемы начались с переходом на тонких клиентов 1С. На стороне сервера внешняя компонента толком не запускается. Можно запустить на стороне клиента, но это все выглядит как костыли и выпадает из общей логики "клиент-сервер" в 1С. Например клиент не понимает, что такое таблица значений, проблемы с "глобальными" переменными, сеансами и т.п.
NativeAPI еще более урезан в этом плане.
Танцы с бубном привели к тому, что я смог запустить внешнюю компоненту под сервером 1С, НО работа происходит до того момента, пока не производится попытка вызвать Invoke у pBackConnection. 64-битная версия сервера 8.2 что-то пытается делать, пока не отваливается по таймауту, 32-битная (ВК естественно тоже 32 битная) просто сразу отваливается.
Предполагаю, что сервер 1С не обслуживает этот режим работы.
Соответственно возникают вопросы, это временно или логика 1С сводится к отмене этой схемы работы? Если создать внутренние структуры 1С (таблицу значений) таким способом нельзя, есть ли в принципе описание, что из себя представляет таблица значений на системном уровне, чтобы попытаться создать ее на С++ , заполнить, а затем просто подсунуть 1С в качестве возвратного параметра? Хотелось бы хотя бы получить направление, в какую сторону копать.

Спасибо.

Ответ:

Вы пишите одно, и имеете в виду другое.
В среде 1С, объявление переменных, которые будут видны в разных сеансах не невозможна сейчас, и не было такой возможности ранее. Другой сеанс, это физически другой процесс.
Сеанс, это сеанс подключения к базе данных, т.е. сеанс работы пользователя. Или вы что-то своё вкладываете а это понятие?

В рамках одного сеанса можно было, и можно сейчас, объявить переменные в модуле сеанса, которые будут жить и будут видны в рамках сеанса из разных мест... вообще-то, их 4-ре штуки.
- Модуль сеанса;
- Модуль обычного приложения;
- Модуль управляемого приложения;
- Модуль внешнего соединения.

Ну и естественно, нужно помнить про контекст. Серверный контекст напрямую не доступен на стороне клиента и наоборот.

Вообще то, архитектурой 1С предусмотрено, что обмен данными будет идти:
- по средствам параметров/возвратов процедур/функций;
- по средствам так называемых параметров сеансов (не могут быть объектами, ну собственно видно в палитре).

Таблица на форме... а она связана с какой-либо таблицей объекта (обработки, например) ? или нет. Если да, то она доступна и на сервере (&НаСервере) там и редактируйте....

И таки да, ТаблицаЗначений не доступна в УФ на стороне клиента. Ну уж так решила 1С.

Да ладно! Вот с Excel работает, с FSO работает и кучей всего остального, а тут тут не работает. Отлавливайте ошибку и анализируйте....

Попытка
...
ваши действия
...
Исключение
стр = ОписаниеОшибки();
КонецПопытки;

При современных аппаратных возможностях, это вообще не аргумент.

Сугубо Ваше лично мнение. Ничего общего с реальностью не имеет. Ни в каком виде. Повторю ещё раз, 1С прекрасно работает с COM. Как с in-proc, так и с out-proc.

Приведите, код, которым вы загружаете и обращаетесь в ВК.

Кстати, ВК... в Вашем случае, это COM или Native API ?
Если COM, то вы регистрируете её как... через regsvr32... как тогда "разруливаете" вопрос разрядности?

Вопрос: COMОбъект("Excel.Application"). На клиенте и на сервере


Приветствую.

Столкнулся с проблемой:
Создал обработку, которая запускает Excel, читает файл, заполняет его и записывает.
На клиенте все великолепно выполняется.
Создал регламентное задание, которое запускает в определенное время это на сервере.
При выполнении на сервере вылезает ошибка про то, что типа MS Excel не удалось получить доступ к файлу. При этом доподлинно известно, что ком. объект Excel даже не создался (нет его в процессах диспетчера задач).
Примечательно, что если запустить обработку клиентом с машины, где установлен сервер 1С, то все выполняется.

Excel = Новый COMОбъект("Excel.Application"); Книга = Excel.WorkBooks.Open("D:\Dst\Order.xls");

Чувствую, что дело тут в том, что при работе с клиента Excel запускается из-под пользователя в реальном сеансе, а в случае сервера - под пользователем хоть и с полными правами, но без запущенного сеанса.

Сервер Windows Server 2008 R2 Standart. Service Pack 1
Как это обойти?

Ответ:

Вдруг кому понадобится
Выполняем команду "mmc comexp.msc /32", которая делает то же что и DCOMCONFIG, но позволяет видеть 32 битные компоненты.

Т.к. часто возникают вопросы по программному созданию/копированию/обработке объектов 1С:Предприятие в режиме "Управляемые формы", то решил скомпоновать в данной публикации примеры решения таких задач, с комментариями по каждому действию. Поначалу кажется все достаточно запутанно, но если по шагам все разложить и немного вникнуть, то всё должно встать на свои места.

При переходе с "обычных форм" на "управляемые формы" нужно понимать, что теперь имеем клиент-серверной вариант работы программы.

А это означает что то что мы могли ранее программно напрямую изменять объекты в "обычных формах" и видеть на экране результат наших действий, то в "управляемых формах" объект на сервере и объект на клиенте (видимый пользователю) разделены. Так же частично разделены функции и процедуры которые можно выполнять на сервере и на клиенте. Так например на сервере выполняются в основном сложные вычисления и функции связанные с изменениями в базе данных, а на клиенте выполняются не сложные расчеты и функции юзабилити.

ПРИМЕРЫ:

Ниже я приведу пример как создавать/копировать/изменять документы. Данный пример досконально разобран и позволит понять клиент-серверную архитектуру работы и распространить эти знания на другие объекты 1С (справочники, отчеты...).

Задача была такая: есть справочник номенклатуры, в которые заведены блюда (общепит). Каждое блюдо имеет свою калькуляцию (состав продуктов). Калькуляции хранятся в периодическом регистре сведений. В форме элемента размещен динамический список с калькуляциями, принадлежащими открытому блюду (это могла быть любая другая таблица данных). Необходимо было добавить две кнопки "Создать калькуляцию" (новую) и "Скопировать калькуляцию" (активную из списка).

Для этого я создал соответствующие команды и разместил их на форме.

1. "Создать калькуляцию".

&НаКлиенте Процедура СоздатьКалькуляцию(Команда) // Создаем форму объекта/документа на клиенте мФорма = ПолучитьФорму("Документ.Калькуляция.ФормаОбъекта"); // В переменную передаем объект(данные) открытой формы ДанныеФормы = мФорма.Объект; // выполняем простейшие операции ДанныеФормы.Блюдо = Объект.Ссылка; ДанныеФормы.Дата = ТекущаяДата(); // Открываем заполненную форму объекта (показываем для пользователя) мФорма.Открыть(); КонецПроцедуры

В данном варианте все просто: мы создаем на клиенте процедуру и все действия выполняем прямо на клиенте, т.к. ничего требующего вызова сервера не делаем. Создаем/получаем форму объекта, передаем в переменную ДанныеФормы Объект формы, выполняем элементарные действия с ДанныеФормы и открываем уже заполненную форму.

2. "Скопировать калькуляцию" .

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

&НаКлиенте Процедура СкопироватьКалькуляцию() // Создаем и открываем форму объекта/документа на клиенте Форма = ОткрытьФорму("Документ.Калькуляция.Форма.ФормаДокумента",); // В переменную передаем объект(данные) открытой формы ДанныеФормы = Форма.Объект; // Получаем ссылку на существующий документ (который хотим скопировать) - активную строку динамического списка в рабочем окне Калькуляция = Элементы.Калькуляции.ТекущиеДанные.Калькуляция; // Т.к. прямую ссылку на сервер не передать, закидываем в структуру (иначе выдаст ошибку) СтруктураДанных = Новый Структура("Калькуляция", Калькуляция); // Передаем необходимые параметры и проводим манипуляции с переменной ДанныеФормы на сервере СкопироватьОбъектДокументаНаСервере(ДанныеФормы, СтруктураДанных); // Теперь необходимо передать изменения из переменной ДанныеФормы в ранее открытую нами форму - для обновления данных в самой форме КопироватьДанныеФормы(ДанныеФормы, Форма.Объект); КонецПроцедуры

Порядок действий таков: Мы на клиенте создаем форму нужного нам объекта и сразу открываем её (ОткрытьФорму...). Далее как и ранее мы передаем в переменную ДанныеФормы Объект открытой формы.

Т.к. задача состоит в том чтобы скопировать уже существующий в базе документ (старую калькуляцию, которую выбрал пользователь в динамическом списке), то действия с данными ДБ можно производить только на сервере. Таким образом, мы получаем необходимые параметры из формы номенклатуры (в моем случае старую калькуляцию) и передаем через Структуру эти параметры в серверную процедуру без контекста вместе с переменной ДанныеФормы: СкопироватьОбъектДокументаНаСервере(ДанныеФормы, СтруктураДанных).

&НаСервереБезКонтекста Процедура СкопироватьОбъектДокументаНаСервере(ДанныеФормы, СтруктураДанных) // Получаем обычный объект на сервере по данным формы // используется с указанием типа в случае изменения документа (&НаСервереБезКонтекста) //Док = ДанныеФормыВЗначение(ДанныеФормы, Тип("ДокументОбъект.Калькуляция")); // Выше строка не используется, т.к. мы копируем существующий объект Док = СтруктураДанных.Калькуляция.Скопировать(); // Работаем с объектом (разные манипуляции) // вызываем экспортные процедуры из модуля объекта Док.ПересчитатьЦены(); // заполняем его реквизиты Док.Дата = ТекущаяДата(); // Передаем обратно в переменную ДанныеФормы уже измененный объект (документ) ЗначениеВДанныеФормы(Док, ДанныеФормы); КонецПроцедуры

Уже на сервере мы с помощью функции ДанныеФормыВЗначение() преобразуем ДанныеФормы в привычный нам из "обычных форм" объект документа и работаем с ним с использованием серверных процедур. Копируем данные из другого документа, запускаем экспортные процедуры из модуля объекта, дозаполняем прочие реквизиты.

Функция ДанныеФормыВЗначение() требует указания соответствия (типа получаемого объекта): Тип("ДокументОбъект.Калькуляция").

При этом измененные на сервере ДанныеФормы сами не попадут в нашу созданную и открыую в самом начале форму, поэтому мы выполняем процедуру КопироватьДанныеФормы(ДанныеФормы, Форма.Объект) - тем самым запихаем изменения в видимую для пользователя форму документа Калькуляция (обновим в ней данные) .

Выше приведённые примеры решения задач, не являются единственными и в каждом индивидуальном случае могут быть оптимизированы или решены иным способом.

Думаю, начинающим познавать клиент-серверную архитектуру 1С пригодится данная статья)

Программное открытие форм в управляемом приложении 1С значительно отличается от их открытия в обычном приложении. Рассмотрим для начала старый метод. Он заключается в получении формы и ее последующем открытии в обычном или модальном режиме (при открытии в модальном режиме форма блокирует работу программы).

ПолучитьФорму() . Открыть()

Это самый медленный метод открытия форм. Тем не менее, он позволяет программно обработать форму перед открытием. Для обработки код нужно немного изменить:

Форма= ПолучитьФорму("Документ.ПоступлениеТоваровУслуг.ФормаДокумента" ) ;
//Тут выполняем действия с формой
Форма. Открыть() ;

Надо учитывать, что при получении формы будет выполняться еще процедура события ПриСозданииНаСервере.

Рассмотрим другие методы, которые позволяют открывать формы в управляемом приложении 1С быстрее и удобнее. В зависимости от конкретной ситуации могут использоваться разные методы.

1. Как открыть форму объекта в управляемом приложении, если есть ссылка на него.

В этом случае все предельно просто.

СпрСсылка= Справочники. Номенклатура. НайтиПоКоду("000000001" ) ;
ОткрытьЗначение(СпрСсылка) ;

2. Как открыть форму выбора и получить потом выбранное значение.

Для этого существует функция ВвестиЗначение(). У функции 3 параметра:

  • Переменная, в которую будет записано выбранное значение;
  • Подсказка, которая будет отображена в окне выбора;
  • Описание типов выбираемых значений. Может быть несколько типов, тогда перед выбором конкретного значения будет предложено выбрать тип.

В результате выполнения функции откроется форма выбора по умолчанию для объекта указанного типа.

Перем Значение;
Массив= новый массив;
Массив. Добавить(Тип("СправочникСсылка.Номенклатура" ) ) ;
Массив. Добавить(Тип("СправочникСсылка.Контрагенты" ) ) ;

ОписаниеТипов= новый ОписаниеТипов(Массив) ;

Рез= ВвестиЗначение(Значение, "Подсказка" , ОписаниеТипов) ;

Предыдущие способы позволяли открывать только формы, установленные для объектов по умолчанию (форму объекта или форму выбора). Если нужно открыть произвольную форму, то можно воспользоваться функцией ОткрытьФорму().

Эта функция имеет довольно много параметров. Рассмотрим некоторые из них:

  • Имя формы — тут можно выбрать либо одну из стандартных форм объекта, например, ФормаВыбора или ФормаСписка . Или конкретную, созданную разработчиками форму.
  • Параметры — позволяет передать в форму в виде структуры некоторые параметры перед ее открытием, тем самым определив выводимые данные. Параметры могут представлять собой любые данные, которые можно передавать с клиента на сервер. Переданные при открытии формы параметры можно обработать в процедуре ПриСозданииНаСервере() у открываемой формы.
  • Режим открытия формы — имеет 3 варианта: независимый, блокировать весь интерфейс, блокировать форму владельца.

Рассмотрим, как применяется функция ОткрытьФорму() в различных ситуациях.

3. Как открыть форму существующего объекта

У каждой формы есть один ключевой реквизит. Он выделен жирным в списке реквизитов формы и обычно называется Объект у форм элементов справочников, документов. У других объектов название может быть другим. Для открытия формы существующего объекта нужно передать в открываемую форму параметр Ключ со значением в виде ссылки на объект.

&НаКлиенте
Процедура Команда1 (Команда)
Параметр= новый структура;
Параметр. Вставить("Ключ" , НайтиС() ) ;
ОткрытьФорму(, Параметр) ;
КонецПроцедуры

&НаСервере
Функция НайтиС() ;
Возврат Справочники. Контрагенты. НайтиПоРеквизиту ("ИНН" , "745107734623" )
КонецФункции

4. Как открыть форму нового объекта

Тут подойдет просто функция ОткрытьФорму() без всяких параметров.

&НаКлиенте
Процедура Команда1 (Команда)
ОткрытьФорму("Справочник.Контрагенты.ФормаОбъекта" ) ;
КонецПроцедуры

5. Как открыть форму нового объекта и заполнить ее на основании чего-либо

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

&НаКлиенте
Процедура Команда1 (Команда)
Параметр= новый структура;
Параметр. Вставить("Основание" , СсылкаНаСчетПокупателю) ;
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта" , Параметр) ;
КонецПроцедуры

В этом примере будет создан документ Реализация товаров и услуг и заполнен на основании счета на оплату покупателю, ссылка на который была передана.

6. Как открыть форму и задать на ней отбор

Отбор на формах 1С может быть простым и сложным. Простой отбор предусматривает выражения типа Организация = ООО «Рога и копыта». Сложный отбор предполагает и другие типы сравнения, например, В списке . В данной статье рассмотрим организацию простого отбора, а сложному будет посвящена отдельная статья.

Чтобы организовать простой отбор, нужно передать в открываемую форму параметр с ключом Отбор , значением будет являться структура, в которой ключ — имя поля динамического списка, а значение — искомые данные.

Например, откроем форму списка справочника НомераГТД и сделаем там отбор по владельцу — элементу справочника Номенклатура .

&НаКлиенте
Процедура Команда1 (Команда)
Параметр= новый структура;

Отбор= новый Структура;
Отбор. Вставить("Владелец" , СсылкаНаНоменклатуру) ;

Параметр. Вставить("Отбор" , Отбор) ;

ОткрытьФорму("Справочник.НомераГТД.ФормаСписка" , Параметр) ;
КонецПроцедуры

7. Как открыть форму записи регистра сведений

Для этого понадобится ключ записи регистра сведений.

Ключ записи — это значения всех измерений и период (если регистр периодический). То есть ключ записи — это параметры, по которым можно однозначно идентифицировать запись.

Алгоритм открытия следующий:

  1. Заносим в структуру данные ключа записи с необходимыми значениями.
  2. Помещаем полученную структуру в массив.
  3. Из массива создаем ключ записи.
  4. Передаем в открываемую форму параметр Ключ с ключом записи из п.3 в качестве значения.

&НаКлиенте
Процедура Команда1 (Команда)
Параметр= новый структура;

ПараметрыКлюча= новый Структура;
ПараметрыКлюча. Вставить("Номенклатура" , СсылкаНаНоменклатуру) ;
ПараметрыКлюча. Вставить("ТипЦены" , СсылкаНаТипЦен) ;
ПараметрыКлюча. Вставить("Период" , Дата) ;

МассивКлюча = Новый Массив;
МассивКлюча. Добавить(ПараметрыКлюча) ;

КлючЗаписи = Новый("РегистрСведенийКлючЗаписи.ЦеныНоменклатуры" , МассивКлюча) ;

Параметр. Вставить("Ключ" , КлючЗаписи) ;

ОткрытьФорму("РегистрСведений.ЦеныНоменклатуры.ФормаЗаписи" , Параметр) ;
КонецПроцедуры