Как связать документы в 1с
Создаю базу с 0. Хотел бы узнать принцип работы связанных документов. (Для начала хотелось бы реализовать, чтобы при наличии документа, созданного на основании, нельзя было внести изменения в документ-основания). Мб есть какие-то стандарты и где можно про это почитать?
(0) Вы путаете ввод на основании и подчиненность документов.
Первое — это просто возможность заполнить документ данными другого документа
Второе — это наличие связи между документами через реквизит.
ВВеденный на основании документ, может и не иметь реквизит-ссылку, а подчиненный, не обязательно был сделан с использованием ввода на основании
(1) Мне как раз таки нужно второе, про ввод на основании я для примера сказал.
https://www.youtube.com/watch?v=gIGdVyvHSYc
(самая ценное что есть в это видео это с 0:26 по 0:32) Но, Вам надо посмотреть видео целиком.
(0) Нет стандарта. Как и такого механизма платформы. Это просто часто востребованная практика. Поэтому никаких чудес там нет. Хочешь, чтобы между документами была связь — значит в одном должна быть ссылка на другой. Хочешь быстро анализировать эти связи — естественным образом всплывают критерии отбора.
А не. Я отстал от жизни. Это теперь подсистемой в БСП. Так что можно сказать, что стандарт есть. Кажись когда-то его в БСП не было и в нетленку я его из типовой выдирал.
Как связать документы в 1с
Здравствуйте!
Подскажите пожалуйста, как тут лучше сделать:
У меня 2 документа Предписание об устранении нарушений(в документе указываются нарушения и крайний срок до которого их нужно устранить) и Извещение об устранении нарушений(документ извещающий об устранении нарушений).
Я используя «ввод на основании», из формы предписания формирую извещение об устранении все данные заполняются автоматически туда..
В идеале на каждое предписание приходится по одному извещению устранения т.е в нем указывается устранение всех нарушений предписания.
У меня данные о предписании используются в извещении.Да и в отчете нужно выводить колонки в такой форме «предписание от сроком до » — «извещение устранения номер,дата».
Как сделать тут?:(
Программно проверять при вводе на основании имеется ли у «извещение устранения» у данного предписания и предлагать заменить?
Или добавить реквизит ссылку в предписании на определенное извещение но правильно ли это?
Или просто тупо в предписании создать пару реквизитов с номером и датой, но получается пользователь сам будет указывать вручную все..
вот рисунок примерный документов http://img12.imageshost.ru/img/2011/06/16/image_4df9765c691de.jpg на типы данных не обращайте внимание.
Если ввод на основании, то у подчиненного документа должен быть реквизит ДокументОснование. По нему и связь будет.
Если нужен только один подчиненный документ, то при вводе на основании простым запросом проверчяешь наличие уже введенных на основании документов
Как сделать чтобы при вводе на основании не открывалось окно с новым документом(а только нужный мне по запросу). Я из формы приказа на основании создаю уведомление, в процедуре ввода на основании проверяю есть ли уведомления связанные с этим приказом. Он находит и открывает мне найденное уведомление и еще новое создает вводить на основании. я отключил стандартную обработку но все равно=(
Процедура ОбработкаЗаполнения(Основание)
СтандартнаяОбработка = Ложь;
// // Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны.
Если ТипЗнч(Основание) = Тип(«ДокументСсылка.Приказ») Тогда
Ув = Ложь;
Запрос = Новый Запрос(«ВЫБРАТЬ
| Уведомление.Номер,
| Уведомление.Дата,
| Уведомление.Ссылка
|ИЗ
| Документ.Уведомление КАК Уведомление
|ГДЕ
| Уведомление.ПриказОснование = &Пр»);
Запрос.УстановитьПараметр(«Пр», Основание.Ссылка);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.Количество() <> 0 Тогда Ув = Истина; КонецЕсли; КонецЦикла;
Если Ув = Истина Тогда
Режим = РежимДиалогаВопрос.ОК;
СтрНом = Строка(Выборка.Номер);
ЕстьЕсть = «Уведомление есть: » + СтрНом;
Ответ = Вопрос(ЕстьЕсть, Режим, 0,,»Внимание!»);
ФормаУведомления = Документы.Уведомление.НайтиПоНомеру(Выборка.Номер,ТекущаяДата());
ФормаУведомления.ПолучитьФорму(«ФормаДокумента»).Открыть();
Иначе
СтандартнаяОбработка = ИСТИНА;
// Заполнение шапки
Номер = Основание.Номер;
Объект = Основание.Объект;
Предмет = Основание.Предмет;
Специалист = Основание.Специалист;
ПриказОснование = Основание.Ссылка;
ЮридЛицо = Основание.ЮридЛицо;
КонецЕсли;
КонецЕсли;
//>>__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
КонецПроцедуры
Параметра СтандартнаяОбработка нет в обработке заполнения. вот и создает новый.
Подозреваю, что так может сработать:
Если Выборка.Следующий() Тогда
Режим = РежимДиалогаВопрос.ОК;
СтрНом = Строка(Выборка.Номер);
ЕстьЕсть = «Уведомление есть: » + СтрНом;
Ответ = Вопрос(ЕстьЕсть, Режим, 0,,»Внимание!»); Выборка.Ссылка.ПолучитьФорму(«ФормаДокумента»).Открыть();
Иначе
СтандартнаяОбработка = ИСТИНА;
// Заполнение шапки
Номер = Основание.Номер;
Объект = Основание.Объект;
Предмет = Основание.Предмет;
Специалист = Основание.Специалист;
ПриказОснование = Основание.Ссылка;
ЮридЛицо = Основание.ЮридЛицо;
КонецЕсли;
КонецЕсли;
Это тему уже проходили
хмм сработало,спс=).
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
Если ПриказОснование.Пустая() Тогда
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
мб кому пригодица, а еще лучше так:
Если ЭтоНовый() Тогда
Если ПриказОснование.Пустая() Тогда
Отказ = Истина;
КонецЕсли;
КонецЕсли;
т.к в первом примере. не откроются уведомления которые не содержат оснований
Смотря для чего тебе нужна такая связь :))))
(8) Как на форум вставлять код в таком виде?)
(10) тоже хочу знать
да ну нафиг
Функция глПроверкаПроводок(Операция = 0, Сообщать = 1) Экспорт //Версия 2.2 (632 от 27.05.2009)
Если Константа.Альфа_ПроверкаПроводок = 0 Тогда
Возврат 1;
КонецЕсли;
Если Операция = 0 Тогда
Если Сообщать = 1 Тогда
Сообщить(«Неправильный вызов процедуры! Срочно обратитесь к разработчику Вашей конфигурации!», «. «);
КонецЕсли;
Возврат 0;
КонецЕсли;
Если ПустоеЗначение(Операция) = 1 Тогда
Если Сообщать = 1 Тогда
Сообщить(«Операция не выбрана!», «!»);
КонецЕсли;
Возврат 0;
КонецЕсли;
Если Операция.ВыбратьПроводки() = 0 Тогда
Если Сообщать = 1 Тогда
Если Операция.Документ.Выбран() = 1 Тогда
Если Операция.Документ.Вид() = «АвансовыйОтчет» Тогда
Иначе
Сообщить(«Операция не содержит проводок!», «!»);
КонецЕсли;
Иначе
Сообщить(«Операция не содержит проводок!», «!»);
КонецЕсли;
КонецЕсли;
Возврат 0;
КонецЕсли;
Док = Операция;
Если Операция.Документ.Выбран() = 1 Тогда
Док = Операция.Документ;
КонецЕсли;
ТаблицаС = СоздатьОбъект(«ТаблицаЗначений»);
ТаблицаС.НоваяКолонка(«Код»); ТаблицаС.НоваяКолонка(«КОСГУ»);
ТаблицаС.НоваяСтрока(); ТаблицаС.Код = «01»; ТаблицаС.КОСГУ = «211»;
ТаблицаС.НоваяСтрока(); ТаблицаС.Код = «02»; ТаблицаС.КОСГУ = «212»;
ТаблицаС.НоваяСтрока(); ТаблицаС.Код = «03»; ТаблицаС.КОСГУ = «213»;
ТаблицаС.НоваяСтрока(); ТаблицаС.Код = «04»; ТаблицаС.КОСГУ = «221»;
ТаблицаС.НоваяСтрока(); ТаблицаС.Код = «05»; ТаблицаС.КОСГУ = «222»;
ТаблицаС.НоваяСтрока(); ТаблицаС.Код = «06»; ТаблицаС.КОСГУ = «223»;
ТаблицаС.НоваяСтрока(); ТаблицаС.Код = «07»; ТаблицаС.КОСГУ = «224»;
ТаблицаС.НоваяСтрока(); ТаблицаС.Код = «08»; ТаблицаС.КОСГУ = «225»;
ТаблицаС.НоваяСтрока(); ТаблицаС.Код = «09»; ТаблицаС.КОСГУ = «226»;
ТаблицаС.НоваяСтрока(); ТаблицаС.Код = «10»; ТаблицаС.КОСГУ = «241»;
ТаблицаС.НоваяСтрока(); ТаблицаС.Код = «11»; ТаблицаС.КОСГУ = «242»;
ТаблицаС.НоваяСтрока(); ТаблицаС.Код = «12»; ТаблицаС.КОСГУ = «251»;
ТаблицаС.НоваяСтрока(); ТаблицаС.Код = «13»; ТаблицаС.КОСГУ = «252»;
ТаблицаС.НоваяСтрока(); ТаблицаС.Код = «14»; ТаблицаС.КОСГУ = «253»;
ТаблицаС.НоваяСтрока(); ТаблицаС.Код = «15»; ТаблицаС.КОСГУ = «261»;
ТаблицаС.НоваяСтрока(); ТаблицаС.Код = «16»; ТаблицаС.КОСГУ = «262»;
ТаблицаС.НоваяСтрока(); ТаблицаС.Код = «17»; ТаблицаС.КОСГУ = «263»;
ТаблицаС.НоваяСтрока(); ТаблицаС.Код = «18»; ТаблицаС.КОСГУ = «290»;
ТаблицаС.НоваяСтрока(); ТаблицаС.Код = «19»; ТаблицаС.КОСГУ = «310»;
ТаблицаС.НоваяСтрока(); ТаблицаС.Код = «20»; ТаблицаС.КОСГУ = «320»;
ТаблицаС.НоваяСтрока(); ТаблицаС.Код = «21»; ТаблицаС.КОСГУ = «330»;
ТаблицаС.НоваяСтрока(); ТаблицаС.Код = «22»; ТаблицаС.КОСГУ = «340»;
ТаблицаС.НоваяСтрока(); ТаблицаС.Код = «23»; ТаблицаС.КОСГУ = «520»;
ТаблицаС.НоваяСтрока(); ТаблицаС.Код = «24»; ТаблицаС.КОСГУ = «530»;
Стр = 0;
БезОшибок = 1;
Пока Операция.ПолучитьПроводку() = 1 Цикл
//Дебет
Если ((Операция.Дебет.Счет.Забалансовый = 1) или (Операция.Кредит.Счет.Забалансовый = 1)) Тогда
ИначеЕсли ((Операция.Дебет.Счет.Код = «00») или (Операция.Кредит.Счет.Код = «00»)) Тогда
ИначеЕсли (Операция.Дебет.Счет.ИсточникФинансирования <> Операция.Кредит.Счет.ИсточникФинансирования) и
(Операция.Сумма <> 0) Тогда
Если Сообщать = 1 Тогда
Сообщить(«Документ » + Док + «, строка » + Операция.НомерПроводки() + «. Не совпадают источники финансирования! Срочно исправьте документ, иначе порвется баланс!», «. «);
КонецЕсли;
БезОшибок = 0;
Продолжить;
Иначе
СДК = Лев(Операция.Дебет.Счет, 3);
СКК = Лев(Операция.Кредит.Счет, 6);
КонецЕсли;
Если СКК = «401.01» Тогда
КОСГУ = СокрЛП(Операция.Кредит.Субконто(ВидыСубконто.ОГС));
Если ((Лев(КОСГУ, 1) <> «1») и (Лев(КОСГУ, 1) <> «2»)) Тогда
Если Сообщать = 1 Тогда
Сообщить(«Документ » + Док + «, строка » + Операция.НомерПроводки() + «, КОСГУ кредита: » + КОСГУ + «. Счет » +
Операция.Кредит.Счет.Код + » требует КОСГУ из группы 100 или 200! Срочно исправьте документ, иначе порвется 121-я форма!», «. «);
КонецЕсли;
БезОшибок = 0;
Продолжить;
КонецЕсли;
КонецЕсли;
Если ((СДК = «206») или (СДК = «208») или (СДК = «302»)) и ((СКК = «304.05») или (СКК = «401.01») или (СКК = «201.01») или (СКК = «201.04»)) Тогда
Код = Операция.Дебет.Счет.Код;
Если Лев(СКК, 1) = «2» Тогда
Операция.ПолучитьПроводку();
КонецЕсли;
КОСГУ = СокрЛП(Операция.Кредит.Субконто(ВидыСубконто.ОГС));
Стр = 0;
Если ТаблицаС.НайтиЗначение(Сред(Код, 5, 2), Стр, «Код») = 1 Тогда
Если ТаблицаС.ПолучитьЗначение(Стр, «КОСГУ») <> КОСГУ Тогда
Если Сообщать = 1 Тогда
Сообщить(«Документ » + Док + «, строка » + Операция.НомерПроводки() + «, КОСГУ кредита: » + КОСГУ + «. Счет » +
Код + » требует корр. КОСГУ » + ТаблицаС.ПолучитьЗначение(Стр, «КОСГУ») + «. Срочно исправьте документ, иначе порвется 121-я форма!», «. «);
КонецЕсли;
БезОшибок = 0;
Продолжить;
КонецЕсли;
КонецЕсли;
Продолжить;
КонецЕсли;
//Кредит
Если ((Операция.Дебет.Счет.Забалансовый = 1) или (Операция.Кредит.Счет.Забалансовый = 1)) Тогда
ИначеЕсли ((Операция.Дебет.Счет.Код = «00») или (Операция.Кредит.Счет.Код = «00»)) Тогда
ИначеЕсли (Операция.Дебет.Счет.ИсточникФинансирования <> Операция.Кредит.Счет.ИсточникФинансирования) и
(Операция.Сумма <> 0) Тогда
Если Сообщать = 1 Тогда
Сообщить(«Документ » + Док + «, строка » + Операция.НомерПроводки() + «. Не совпадают источники финансирования! Срочно исправьте документ, иначе порвется баланс!», «. «);
КонецЕсли;
БезОшибок = 0;
Продолжить;
Иначе
СКК = Лев(Операция.Дебет.Счет, 6);
СДК = Лев(Операция.Кредит.Счет, 3);
КонецЕсли;
Если СДК = «401.01» Тогда
КОСГУ = СокрЛП(Операция.Дебет.Субконто(ВидыСубконто.ОГС));
Если ((Лев(КОСГУ, 1) <> «1») и (Лев(КОСГУ, 1) <> «2»)) Тогда
Если Сообщать = 1 Тогда
Сообщить(«Документ » + Док + «, строка » + Операция.НомерПроводки() + «, КОСГУ кредита: » + КОСГУ + «. Счет » +
Операция.Дебет.Счет.Код + » требует КОСГУ из группы 100 или 200! Срочно исправьте документ, иначе порвется 121-я форма!», «. «);
КонецЕсли;
БезОшибок = 0;
Продолжить;
КонецЕсли;
КонецЕсли;
Если ((СДК = «206») или (СДК = «208») или (СДК = «302»)) и ((СКК = «304.05») или (СКК = «401.01») или (СКК = «201.01») или (СКК = «201.04»)) Тогда
Код = Операция.Кредит.Счет.Код;
Если Лев(СКК, 1) = «2» Тогда
Операция.ПолучитьПроводку();
КонецЕсли;
КОСГУ = СокрЛП(Операция.Дебет.Субконто(ВидыСубконто.ОГС));
Стр = 0;
Если ТаблицаС.НайтиЗначение(Сред(Код, 5, 2), Стр, «Код») = 1 Тогда
Если ТаблицаС.ПолучитьЗначение(Стр, «КОСГУ») <> КОСГУ Тогда
Если Сообщать = 1 Тогда
Сообщить(«Документ » + Док + «, строка » + Операция.НомерПроводки() + «, КОСГУ дебета: » + КОСГУ + «. Счет » +
Код + » требует корр. КОСГУ » + ТаблицаС.ПолучитьЗначение(Стр, «КОСГУ») + «. Срочно исправьте документ, иначе порвется 121-я форма!», «. «);
КонецЕсли;
БезОшибок = 0;
Продолжить;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если Константа.Альфа_ПроверкаПроводок * (1 — БезОшибок) = 2 Тогда
Документ_Не_Проведен = 1 / 0;
Возврат 0;
КонецЕсли;
Возврат БезОшибок;
КонецФункции
Отражение электронных документов в учёте
В типовых решениях поддерживается автоматический способ обработки входящих электронных документов. Если номенклатура контрагента сопоставлена или в электронном документе содержатся услуги, система по умолчанию самостоятельно создаёт документы учётной системы на основании данных входящего электронного документа.

Для изменения способа обработки входящих электронных документов, пользователю необходимо открыть действующую настройку ЭДО со своим контрагентом.
В версиях программных продуктов, использующих Библиотеку электронных документов 1.6, это можно сделать, перейдя в раздел Справочники — Контрагенты. В открывшемся списке необходимо выбрать контрагента, с которым требуется установить определенный способ обработки входящих электронных документов, нажать ЭДО – Настройки отражения в учёте.

Затем двойным щелчком левой кнопки мыши открыть настройку с контрагентом, по которой необходимо изменить способ обработки входящего электронного документа.
Стандартными настройками предусмотрен автоматический способ отражения в учётной системе с указанием вида документа.


Способ обработки документов учёта задаётся в разрезе видов входящих электронных документов. Если пользователю не требуется автоматически создавать документ учётной системы, то в настройках отражения в учёте, напротив соответствующего вида документа, нужно установить одно из подходящих значений:
- «Вручную в форме электронного документа» — позволяет связать входящий электронный документ с уже созданным документом информационной базы.
- «Не отражать» — позволяет не отражать входящий электронный документ в учёте.
При нажатии «Заполнить по шаблону», пользователю доступен выбор рекомендуемого способа обработки электронных документов.
Если все документы учетной системы обрабатываются вручную, то следует использовать соответствующий шаблон «Все вручную».
Ручной способ обработки позволяет связать входящий электронный документ с уже созданным документом информационной базы. Для этого в разделе «Входящие» рабочего места Текущие дела ЭДО необходимо нажать на ссылку «Создать документы».
В открывшемся окне имеется возможность создать документ учётной системы на основании данных входящего электронного документа, а также подобрать ранее созданный.
Если документ учёта был сформирован вручную, необходимо нажать «Подобрать» и в открывшемся списке выбрать соответствующий документ.
При нажатии кнопки «Перезаполнить текущий», документ учётной системы будет перезаполнен данными входящего электронного документа.
Создать или подобрать документ учётной системы также можно из формы просмотра электронного документа, используя соответствующие ссылки.
На основании входящего неформализованного документа (например: pdf, word, excel, jpg и др.) создать документ учёта можно только в ручном режиме, а затем выполнить его подбор.

***
В версиях программных продуктов, использующих Библиотеку электронных документов 1.1, для изменения способа обработки входящего электронного документа необходимо перейти в раздел Сервис – Обмен электронными документами – Настройки ЭДО.

Затем открыть настройку, по которой необходимо изменить способ отражения в учёте и перейти на вкладку «Входящие электронные документы».
Ваша проблема решена?
Ваше сообщение отправлено.
Как связать документы между собой.

Не устроил ответ?
Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.
Реклама
Новые вакансии
- Вакансия аналитика 1с УТ от 200K, гибрид от Татьяна Астахова
25 января 2024 г. - Вакансия Программист 1С (Москва, гибрид) 250-300т.р. от paulaja03@gmail.com
23 января 2024 г. - Вакансия программиста 1с от Татьяна Астахова
19 января 2024 г.